pax_global_header00006660000000000000000000000064151505011610014505gustar00rootroot0000000000000052 comment=8a1b10faf994c5566e6f08242af360e017ba2f52 apjanke-octave-tablicious-8a1b10f/000077500000000000000000000000001515050116100171355ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/.editorconfig000066400000000000000000000006621515050116100216160ustar00rootroot00000000000000# EditorConfig for Tablicious # # This is set up to conform to standard GNU Octave code style, to the extent that # EditorConfig supports that. # # See: https://wiki.octave.org/Octave_style_guide root = true [*] insert_final_newline = true charset = utf-8 indent_style = space trim_trailing_whitespace = true [*.m] indent_size = 2 [*.cc] indent_size = 2 [*.{pl,pm}] indent_size = 4 [Makefile] indent_style = tab indent_size = 4 apjanke-octave-tablicious-8a1b10f/.gitignore000066400000000000000000000007371515050116100211340ustar00rootroot00000000000000# .gitignore for Tablicious # I don't remember why these iris data files are excluded? datasets/iris/iris.csv datasets/iris/iris.mat # Binary artifacts and intermediate build stuff *.o *.oct /target cmake-build-debug # Intermediate doc-generation files /doc/*.dvi /doc/*.qhp /doc/topics.tmp /doc/TIMESTAMP # Data and log droppings *.log # Editor and IDE config and droppings !.idea .idea/workspace.xml .vscode # GitHub Pages deployment stuff /docs/Gemfile.lock /docs/_site apjanke-octave-tablicious-8a1b10f/.mailmap000066400000000000000000000012131515050116100205530ustar00rootroot00000000000000# Prevent git from showing duplicate names with commands like "git shortlog" # See the manpage of git-shortlog for details. # The syntax is: # Name that should be used Bad name # # You can skip Bad name if it is the same as the one that should be used, and is unique. # # This file is up-to-date if the command git log --format="%aN <%aE>" | sort -u # gives no duplicates. # # apjanke's notes: # The "bad" name isn't really bad per se, just not my canonical one. Andrew Janke Andrew Janke Ray Zimmerman Ray Zimmerman apjanke-octave-tablicious-8a1b10f/.vscode/000077500000000000000000000000001515050116100204765ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/.vscode/launch.json000066400000000000000000000010611515050116100226410ustar00rootroot00000000000000{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "OctaveDebugger", "request": "launch", "name": "Suppliers Parts", "program": "ex_01_suppliers_parts", "octave": "octave-cli", "sourceFolder": "${workspaceFolder}/inst", "workingDirectory": "${workspaceFolder}/inst/examples", "autoTerminate": true } ] }apjanke-octave-tablicious-8a1b10f/CHANGES.txt000066400000000000000000000177551515050116100207650ustar00rootroot00000000000000Tablicious Changelog ==================== 0.4.7 (2026-02-28) ------------------ * Date/time fixes * Add datevec() methods for duration and calendarDuration; add multi-argout form for datetime.datevec(). ([#153](https://github.com/apjanke/octave-tablicious/issues/153)) * Add duration.hms() method. * Fix table.rowfun() bugs that broke it. ([#155](https://github.com/apjanke/octave-tablicious/issues/155)) * Fix the "blank" ctor calling form (`table ('Size',sz, 'VariableTypes',types)`). ([#145](https://github.com/apjanke/octave-tablicious/issues/145)) 0.4.6 (2026-02-16) ------------------ * Work around `unicode2native` buffer length bug in `string.strlength`. ([#143](https://github.com/apjanke/octave-tablicious/issues/143)) * Fix `datetime` TimeZone support on big-endian systems. ([#151](https://github.com/apjanke/octave-tablicious/issues/151)) * Add missing `datetime.ismissing` method. * Fix bad `categorical.ne` true result for missing values. * Unit tests * Centralize test running code in tblish.internal.runtests, and add MP-Test support to it. * Add some more unit tests. * Clarify and expand licensing documentation. * Update source file headers to uniformly say "GPLv3+" instead of "GPLv2+", matching the `DESCRIPTION` file and my original intent. ([#149](https://github.com/apjanke/octave-tablicious/issues/149)) * Doco updates: Add category directory entry to the texi doco. * Internal changes * Change some more code to GNU Octave style. 0.4.5 (2025-07-03) ------------------ * Add `startsWith` and `endsWith` methods to `string`. ([#141](https://github.com/apjanke/octave-tablicious/pull/141)) * Fix `string.regexprep` "demote_strings" error. ([#139](https://github.com/apjanke/octave-tablicious/issues/139)) * Fix `make test` failure due to missing `runtests` in Octave 8.x. ([#140](https://github.com/apjanke/octave-tablicious/issues/140)) 0.4.4 (2024-10-23) ------------------ * Improvements (hopefully) to duration-related arithmetic and datatype interaction. * Fix hi-bound and striding bugs in `datetime.colon` (`:` operator). * Add missing `calendarDuration.mtimes` method. 0.4.3 (2024-07-06) ------------------- * Fix "[foo (...)]" syntax-ish errors in some functions. * Affected datetime, calendarDuration, localdate, splitapply, mustBeCellstr, and some display functions using tblish.internal.mycombvec. * `table` fixes * Correctly handle nested tables in some cases ()- and {}-indexed assignments, when indexing in to those nested tables. * Fix assignment to some `table.Properties.` pseudo-properties. * Apply object validation after more mutation operations. * Fix variable number display in table.summary. * Fix duration ctor bug that returned NaNs in cellstr row vectors. ([#134](https://github.com/apjanke/octave-tablicious/issues/134)) 0.4.2 (2024-02-07) ------------------ * Add `end` override methods to string, datetime, etc. so `x(end)` indexing works correctly. * `table` fixes * table: summary: omit NaNs from mean(), include NaN counts. * table: Fix rownames, broken by bad internal `.Properties` reference. * categorical.summary: include frequencies in output ### Documentation * Alphabetize methods under classes in alphabetical index. 0.4.1 (2024-02-07) ------------------ ### Bug Fixes * string: * string: Fix missing trailing newline in string display in `string.disp`. * string: Add `+` operator overload that does string concatenation. Version 0.4.0 (2024-02-07) -------------------------- ### Breaking Changes * Remove `(fill,rm,standardize)missing` functions, deferring to the Statistics package. * `table` arrays: * `table`: Have `fieldnames (obj)` expose variable and dimension names and Properties, instead of the internal implementation properties. * `table`: Remove `grpstats` method and replace with `tblish.table.grpstats()` function, to avoid overriding or interacting with Statistics' `grpstats()` function. * `table`: Deprecate `rows`, `columns` methods. * `datetime: * Deprecate `.dnums` property access. * This was only public for debugging purposes during initial development, and not intended to be part of the public API. The `datenum` method is the supported way to get datenums here. * Fix `string.missing()` to actually return a missing value, instead of "". * Make internal-use properties on the main classes Access = private, now that the code is a little more mature. ### Changed * Require Octave 7.x or later. * Fix Octave 7.x and 8.x compatibility in installation and package loading. * `table` arrays: * `table`: Fix "preallocation" constructor to use 0s and ""s for fill values, unless missings are requested using an alternate pseudotype. (For compatibility with Matlab.) * `table`: Fix some advanced ()- and {}-indexing cases, including some related to multi-variable subscripting, multi-column table variables, multi-column RHS inputs, and the combination of the three. * `table`: Remove `reshape`, `resize`, `vec`, `hasrownames`, and `size_equal` methods. * `table`: Make `congruentize` a private function. * Add `istable`, `istimetable`, and `istabular` functions. * Fix `x(ix) = []` element deletion for string, datetime, table, and other classes. * Add idempotent one-arg constructor forms for string, datetime, categorical. (But not table.) * Add `NaS`, `NaC`, and `todatetime` functions. * Make `head` and `tail` functions instead of methods on `table`. * Add `string.ne` method. * Fix concatenation of `@missing` arrays. * Rename `+tablicious` package to `+tblish`; merge `+octave` package into `+tblish`. * Move `+table_examples` package to `+tblish/+examples`. * Move the `sizeof()` override methods to a `tblish.sizeof()` function to avoid shadowing core Octave's `sizeof`, until I understand if it's intended to support extension by classdefs. * Fix the doco generation, including publishing to GitHub Pages. ### Internal * Convert code style to GNU Octave code style, mostly. * Move `mustBe*` functions to a `validators/` subdirectory, just for tidiness. * Revamp doc-generation tools. * Add experimental MP-Test based unit tests to supplement BISTs, for detailed testing of `table` behavior. Version 0.3.7 (2023-01-06) -------------------------- * Fix installation under Octave 7.x. (#91) * Fix orphaned sections in documentation. * Add table.size_equal method. (#81) * Add string.empty static method. Internal refactoring: * Rearrange doco files so the main source file is named `*.texi` and its extension is recognized by editors. Version 0.3.6 (2021-07-05) -------------------------- * Fix multi-argout calling form of table.size. (Thanks, @rdzman!) * Fix table dot-indexing assignment by having table.numel always return 1. * Support arbitrary strings as variable names (#82). Version 0.3.5 (2020-01-30) -------------------------- * Fix compiler warnings on systems with 32-bit `octave_idx_type` Version 0.3.4 (2020-01-28) -------------------------- * Octave 6.x compatibility: move some mustBe* validators into compatibility shims Version 0.3.3 (2020-01-28) -------------------------- * Fix version metadata in the distribution Version 0.3.2 (2020-01-28) -------------------------- * sprintf and fprintf support for datetime, categorical, and other classes * Added this ChangeLog * Octave 6.x compatibility fix: use different function for registering QHelp doco Version 0.3.1 (2020-01-27) -------------------------- * Fix a dumb bug that broke string * Fix "shadowed function" warning in Octave 5.x Version 0.3.0 (2020-01-18) -------------------------- * Various bugfixes * Added some examples This is the release that I think is ready for general consumption by the user community. Version 0.2.0 (2019-05-05) -------------------------- * More basic table stuff * Now with datetime and duration, since I’ve merged the Chrono package into this project * Documentation * @string and @categorical * The start of some example data sets * Bug fixes, of course Version 0.1.0 (2019-04-30) -------------------------- Initial release! This library is about 2/3 feature complete. Most basic table, string, categorical, and Missing Data stuff is working, and there's documentation. apjanke-octave-tablicious-8a1b10f/CODE_OF_CONDUCT.md000066400000000000000000000065271515050116100217460ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [floss@apjanke.net]. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq [floss@apjanke.net]: mailto:floss@apjanke.net apjanke-octave-tablicious-8a1b10f/CONTRIBUTING.md000066400000000000000000000037161515050116100213750ustar00rootroot00000000000000# Contributing to Tablicious for GNU Octave ## Introduction Thank you for considering contributing to this project. Any contribution is extremely welcome and appreciated. These guidelines are designed to help all contributors understand how to work and interact within this project. ## Basics ### No MATLAB! Do not use MATLAB to develop this project! That could be a violation of your MATLAB license terms, because the Matlab license includes a Non-Compete clause. * Only use Octave and reference to the [publicly-available MATLAB documentation](https://www.mathworks.com/help/matlab/) to develop this project. * This includes using MATLAB for testing or benchmarking purposes. Please do not submit any contributions that include MATLAB test or benchmark results. They will be politely but summarily deleted. ### Other basics * Bug reports and merge requests via GitHub are very welcome. * Contributions include testing, writing more tests, documentation, submitting bug reports, and proposing new features and tests. * Issues and changes should be small and focused on a particular topic. * Contributors are expected to abide by the [code of conduct](CODE_OF_CONDUCT.md). * Problems with documentation (including stuff that’s just missing) are considered bugs, and bug reports against it are welcome. ## Community All project interaction takes place on GitHub. The project community is essentially the original author (Andrew Janke) at the moment. However, this project exists within the greater GNU Octave community. It is the author's hope that at some point in the future, this project's components will be merged into GNU Octave and cease to be developed in an independent project. The GitHub home for this project is . ## Code conventions Use GNU Octave code style. ### Naming conventions Anything in a namespace with `internal` in its name is for the internal use of this package, and is not intended for use by user code. apjanke-octave-tablicious-8a1b10f/CONTRIBUTORS.md000066400000000000000000000002351515050116100214140ustar00rootroot00000000000000Contributors ============ * Andrew Janke (primary author) () * Ray Zimmerman (contributed original MP-Test based unit tests for table) apjanke-octave-tablicious-8a1b10f/COPYING000066400000000000000000001045151515050116100201760ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least 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 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . apjanke-octave-tablicious-8a1b10f/DESCRIPTION000066400000000000000000000010701515050116100206410ustar00rootroot00000000000000Name: tablicious Version: 0.4.7 Date: 2026-02-28 Title: Tablicious - Tabular/Relational data for GNU Octave Author: Andrew Janke Maintainer: Andrew Janke Description: Matlab-compatible Octave table class for storing tabular/relational data, with supporting string, datetime, and categorical classes. Also similar to R and Python Pandas DataFrames. License: GPLv3+ Problems: Implementation is not complete. Code quality is mediocre. Url: https://github.com/apjanke/octave-tablicious Categories: data manipulation, statistics apjanke-octave-tablicious-8a1b10f/INDEX000066400000000000000000000017701515050116100177340ustar00rootroot00000000000000Tablicious >> Tablicious Tables table array2table cell2table struct2table tableOuterFillValue vartype istable istimetable istabular tblish.evalWithTableVars tblish.table.grpstats Strings and Categoricals string NaS contains dispstrs categorical iscategorical NaC discretize Dates and Times datetime NaT todatetime localdate isdatetime calendarDuration iscalendarduration calmonths calyears days duration hours isduration milliseconds minutes seconds timezones years Missing Data missing isnanny eqn Validation Functions mustBeA mustBeCellstr mustBeCharvec mustBeFinite mustBeInteger mustBeMember mustBeNonempty mustBeNumeric mustBeReal mustBeSameSize mustBeScalar mustBeScalarLogical mustBeVector Miscellaneous colvecfun dispstrs head isfile isfolder pp scalarexpand size2str splitapply tail vecfun tblish.sizeof2 Example Datasets tblish.datasets tblish.dataset Example Code tblish.examples.coplot tblish.examples.plot_pairs tblish.examples.SpDb apjanke-octave-tablicious-8a1b10f/LICENSE000066400000000000000000001045151515050116100201500ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least 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 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . apjanke-octave-tablicious-8a1b10f/LICENSES/000077500000000000000000000000001515050116100203425ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/LICENSES/LICENSE-MATPOWER000066400000000000000000000042701515050116100226060ustar00rootroot00000000000000Some of the unit test code in Tablicious, specifically the MP-Test based tests for the table class, is based on code in MATPOWER, with further contributions by the Tablicious developers. The code in MATPOWER is distributed under the 3-clause BSD license below, and the MATPOWER-derived tests in Tablicious are distributed under the same license. Each such file in Tablicious will be noted as such in its contents. The following is the official license notice: -------------------------------------------------------------------------- Copyright (c) 1996-2022, Power Systems Engineering Research Center (PSERC) Copyright (c) 2024, Andrew Janke and individual contributors (see AUTHORS file for details). All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------- apjanke-octave-tablicious-8a1b10f/LICENSES/LICENSE-Unicode000066400000000000000000000055001515050116100227330ustar00rootroot00000000000000UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, http://www.unicode.org/ivd/data/, and http://www.unicode.org/utility/trac/browser/. Unicode Data Files do not include PDF online code charts under the directory http://www.unicode.org/Public/. Software includes any source code published in the Unicode Standard or under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and http://www.unicode.org/utility/trac/browser/. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. COPYRIGHT AND PERMISSION NOTICE Copyright © 1991-2019 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that either (a) this copyright and permission notice appear with all copies of the Data Files or Software, or (b) this copyright and permission notice appear in associated Documentation. THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.apjanke-octave-tablicious-8a1b10f/Makefile000066400000000000000000000176461515050116100206130ustar00rootroot00000000000000# This Makefile is just for when you're hacking on this package inside # its repo. It'll build the octfiles and install them into inst/. # # This only works if the octave and mkoctfile on your path are the ones from # the Octave that you will be using! Otherwise your octfile may crash # Octave. To make this work, set PATH=...:$PATH before your 'make' invocation # to pick up the right commands. Example: # # PATH="/Applications/Octave-8.4.0.app/Contents/Resources/usr/bin:$PATH" # make # # Note: the 'make dist' command generates the dist tarball from the last # git in source control, not the current directory contents. So make sure to # check in your changes if you're testing something out. ## Some basic tools (can be overriden using environment variables) SED ?= sed TAR ?= tar GREP ?= grep CUT ?= cut # Hack to make Octave shut up about X11 warnings export DISPLAY = "bogus" ## Note the use of ':=' (immediate set) and not just '=' (lazy set). ## http://stackoverflow.com/a/448939/1609556 package := $(shell $(GREP) "^Name: " DESCRIPTION | $(CUT) -f2 -d" ") version := $(shell $(GREP) "^Version: " DESCRIPTION | $(CUT) -f2 -d" ") target_dir := ./target release_dir := $(target_dir)/$(package)-$(version) release_tarball := $(target_dir)/$(package)-$(version).tar.gz html_dir := $(target_dir)/$(package)-html html_tarball := $(target_dir)/$(package)-html.tar.gz installation_dir := $(target_dir)/.installation package_list := $(installation_dir)/.octave_packages install_stamp := $(installation_dir)/.install_stamp ## These can be set by environment variables which allow to easily ## test with different Octave versions. ifndef OCTAVE OCTAVE := octave endif OCTAVE := $(OCTAVE) --no-gui --silent --norc MKOCTFILE ?= mkoctfile ## Command used to set permissions before creating tarballs FIX_PERMISSIONS ?= chmod -R a+rX,u+w,go-w,ug-s ## Detect which VCS is used vcs := $(if $(wildcard .hg),hg,$(if $(wildcard .git),git,unknown)) ifeq ($(vcs),hg) release_dir_dep := .hg/dirstate endif ifeq ($(vcs),git) release_dir_dep := .git/index endif .PHONY: help ## make will display the command before runnning them. Use @command ## to not display it (makes specially sense for echo). help: @echo "Targets:" @echo " dist - Create $(release_tarball) for release." @echo " html - Create $(html_tarball) for release." @echo " doc - Create the documentation files in doc/." @echo " local - Build the oct files locally." @echo " release - Create both of the above and show md5sums." @echo " install - Install the package in $(installation_dir), where it is not visible in a normal Octave session." @echo " check - Execute package tests." @echo " doctest - Test the help texts with the doctest package." @echo " run - Run Octave with the package installed in $(installation_dir) in the path." @echo " clean - Remove everything made with this Makefile." ## ## Recipes for release tarballs (package + html) ## ## dist and html targets are only PHONY/alias targets to the release ## and html tarballs. dist: $(release_tarball) html: $(html_tarball) ## An implicit rule with a recipe to build the tarballs correctly. %.tar.gz: % $(TAR) -c -f - --posix -C "$(target_dir)/" "$(notdir $<)" | gzip -9n > "$@" clean-tarballs: -$(RM) $(release_tarball) $(html_tarball) ## Create the unpacked package. ## ## Notes: ## * having ".hg/dirstate" (or ".git/index") as a prerequesite means it is ## only rebuilt if we are at a different commit. ## * the variable RM usually defaults to "rm -f" ## * having this recipe separate from the one that makes the tarball ## makes it easy to have packages in alternative formats (such as zip) ## * note that if a commands needs to be run in a specific directory, ## the command to "cd" needs to be on the same line. Each line restores ## the original working directory. $(release_dir): $(release_dir_dep) -$(RM) -r "$@" ifeq (${vcs},hg) hg archive --exclude ".hg*" --type files "$@" endif ifeq (${vcs},git) git archive --format=tar --prefix="$@/" HEAD | $(TAR) -x $(RM) "$@/.gitignore" endif ## Don't fall back to run the supposed necessary contents of ## 'bootstrap' here. Users are better off if they provide ## 'bootstrap'. Administrators, checking build reproducibility, can ## put in the missing 'bootstrap' file if they feel they know its ## necessary contents. ifneq (,$(wildcard src/bootstrap)) cd "$@/src" && ./bootstrap && $(RM) -r "autom4te.cache" endif run_in_place = $(OCTAVE) --eval ' pkg ("local_list", "$(package_list)"); ' \ --eval ' pkg ("load", "$(package)"); ' #html_options = --eval 'options = get_html_options ("octave-forge");' ## Uncomment this for package documentation. html_options = --eval 'options = get_html_options ("octave-forge");' \ --eval 'options.package_doc = "$(package).texi";' $(html_dir): $(install_stamp) $(RM) -r "$@"; $(run_in_place) \ --eval ' pkg load generate_html; ' \ $(html_options) \ --eval ' generate_package_html ("$(package)", "$@", options); '; $(FIX_PERMISSIONS) "$@"; ## ## Recipes for installing the package. ## .PHONY: install clean-install octave_install_commands = \ ' llist_path = pkg ("local_list"); \ mkdir ("$(installation_dir)"); \ load (llist_path); \ local_packages(cellfun (@ (x) strcmp ("$(package)", x.name), local_packages)) = []; \ save ("$(package_list)", "local_packages"); \ pkg ("local_list", "$(package_list)"); \ pkg ("prefix", "$(installation_dir)", "$(installation_dir)"); \ pkg ("install", "-local", "-verbose", "$(release_tarball)"); ' ## Install unconditionally. Maybe useful for testing installation with ## different versions of Octave. install: $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) ## Install only if installation (under target/...) is not current. $(install_stamp): $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) clean-install: -$(RM) -r $(installation_dir) ## ## Recipes for testing purposes ## .PHONY: run doctest test test: local ./dev-tools/runtests.sh inst ## Start an Octave session with the package directories on the path for ## interactive test of development sources. run: $(install_stamp) $(run_in_place) --persist ## Test example blocks in the documentation. Needs doctest package ## https://octave.sourceforge.io/doctest/index.html doctest: $(install_stamp) $(run_in_place) --eval 'pkg load doctest;' \ --eval "targets = '$(shell (ls inst; ls src | $(GREP) .oct) | $(CUT) -f2 -d@ | $(CUT) -f1 -d.)';" \ --eval "targets = strsplit (targets, ' '); doctest (targets);" ## Test package. octave_test_commands = \ ' args = {"inst", "src"}; \ args(cellfun (@ (x) ! isdir (x), args)) = []; \ if (isempty (args)) error ("no \"inst\" or \"src\" directory"); exit (1); \ else cellfun(@runtests, args); endif ' check: $(install_stamp) $(run_in_place) --eval $(octave_test_commands) ## ## Recipes for local (in-tree) build ## .PHONY: local doc clean-local local: src/__tblish_time_binsearch__.cc octave_tablicious_make_local.m $(OCTAVE) --eval="octave_tablicious_make_local" # Always make docs from clean, bc oure modification tracking isn't quite adequate, # maybe due to transitive dependencies on original source files that aren't captured # in doc/Makefile? doc: doc-clean cd doc && make all doc-clean: cd doc && make clean docs-clean: rm -rf docs/devel/user-guide mkdir -p docs/devel/user-guide gh-pages: docs-clean cp -R doc/tablicious.pdf doc/tablicious.html doc/html docs/devel/user-guide ## ## CLEAN ## clean-local: rm -f inst/*.oct clean-unpacked-release: -$(RM) -r $(release_dir) $(html_dir) clean: clean-local $(RM) -rf $(target_dir) .PHONY: release dist html clean clean-tarballs clean-unpacked-release apjanke-octave-tablicious-8a1b10f/README.md000066400000000000000000000135061515050116100204210ustar00rootroot00000000000000# Tablicious for GNU Octave Tablicious provides tabular/relational data structures for Octave. You can think of it as "pandas for Octave". | WARNING: This library is currently beta quality. Please do not use it in any production or business code! Seriously!! | | ---- | This package attempts to provide a set of mostly-Matlab-compatible implementations of the table class and related structures and functions. It provides: * A `table` array class, and related functions. * (That's kind of our whole thing.) * `datetime`, `string`, and `categorical` array classes. * (Because they're pretty useful when working with tables, and base Octave doesn't have them yet.) * Auxiliary functions related to those classes. It currently does not provide, but we would like to maybe add at some point: * `timetable` * Table I/O, such as `readtable`, `writetable`, and `csvread`/`dlmread` `table` support ## Installation and usage ### Requirements Tablicious 0.4.x requires Octave 7.0 or newer. It may well work on earlier versions, but is not really tested against them. Tablicious does not require the Octave Forge [Statistics package](https://gnu-octave.github.io/packages/statistics/), but you will probably want it, because Statistics supplies functions that are frequently useful for data analysis in a tabular context. In particular, `ismissing()` and the related missing-filling functions are useful, and the Statistics package supplies the general implementation of them. ### Quick start To get started using or testing this project, install it using Octave's `pkg` function: ```octave pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz pkg load tablicious ``` ### Installation for development If you want to hack on the Tablicious code itself, set it up like this: * Clone the repo * `git clone https://github.com/apjanke/octave-tablicious` * Add the `inst/` directory from the cloned repo to your Octave path with `addpath`. That should get everything working except for time zone conversions inside `datetime`, which require a compiled oct-file. See the developer doco in the repo for that. ## Documentation Once you have Tablicious installed, the user manual will show up in the Octave GUI’s documentation browser. You can also run `help ` or `doc ` for any of the classes or functions in Tablicious. The documentation for Tablicious can be viewed online at . That site has the [Tablicious User Guide](https://apjanke.github.io/octave-tablicious/release/v0.3.7/user-guide/html/index.html) containing the API reference, plus some additional general and developer-oriented documentation, and alternate formats of the User Guide. See the [main doco page there](https://apjanke.github.io/octave-tablicious) for details. Developers, especially see the [Developer Notes](https://apjanke.github.io/octave-tablicious/Developer-Notes.html) and [Design and Justification](https://apjanke.github.io/octave-tablicious/Design-and-Justification.html) pages there, which discuss how and why this library is written. There's a [TODO page](https://apjanke.github.io/octave-tablicious/TODO.html) that lists what might be coming. Also see [CONTRIBUTING](CONTRIBUTING.md) if you would like to contribute to this project. Within this repo, you can see all that in the `docs/` directory for notes on this project. It's a local copy of the GitHub Pages site. ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) for more details. ### No Matlab Usage To avoid issues with the Matlab license's Non-Compete clause, this project needs to be developed entirely using Octave, and not using Matlab at all, including for testing or benchmarking purposes. Please do not submit any Matlab test or benchmark results, or any code produced using Matlab. And if you know anything about how the Matlab internals work, please do not tell me! ## License Tablicious is mostly GNU GPL v3 or later (GPL-3+), with some other Free and Open Source licensed code and files redistributed with it. I believe this is all compatible with redistribution as a GNU GPL licensed package, and conforms with the Debian Free Software Guidelines, but I am not a lawyer. The main code of Tablicious is licensed under the GNU GPL version 3 or later (GPL-3+). See the `LICENSE` file. Certain files in the build tools are licensed under the GNU GPL version 2 or later (GPL-2+). This includes the `mktexi.pl` and `OctTexiDoc.pm` files in the `doc/` directory. The tzinfo database file is Public Domain. The date/time portion of Tablicious includes some Unicode data files licensed under the Unicode License Agreement - Data Files and Software license. See the `LICENSES/LICENSE-Unicode` file. The test suite contains some files, specifically some table-related tests in `inst/t/` using MP-Test, which are BSD 3-Clause licensed (BSD-3-clause), and are adapted from MATPOWER written by Ray Zimmerman. All files under `inst/t/` are BSD-3-clause licensed. See the `LICENSES/LICENSE-MATPOWER` file. The Fisher Iris dataset is Public Domain. ## Author and Acknowledgments Tablicious is created by [Andrew Janke](https://apjanke.net). Thanks to [Polkadot Stingray](https://polkadotstingray-official.jimdo.com/) for [powering](https://www.youtube.com/watch?v=3ad4NsEy1tg) [my](https://www.youtube.com/watch?v=-zlq6eMycLA) [coding](https://www.youtube.com/watch?v=1z4RosaB-UQ) [sessions](https://www.youtube.com/watch?v=p6oVXuLsbxM). Shout out to [Mike Miller](https://mtmxr.com/) for showing me how to properly structure an Octave package repo, and encouraging me to contribute. Thanks to [Sebastian Schöps](https://github.com/schoeps) for getting me more involved in Octave development in the first place, via his [Octave.app](https://octave-app.org) project. Thanks to Ray Zimmerman for contributing to Tablicious's unit test suite, and writing the whole MP-Test tool. apjanke-octave-tablicious-8a1b10f/assets/000077500000000000000000000000001515050116100204375ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/assets/Tablicious-1024.png000066400000000000000000001753501515050116100236420ustar00rootroot00000000000000PNG  IHDRsRGB pHYs  riTXtXML:com.adobe.xmp 72 5 72 Flying Meat Acorn 6.5.3 2020-01-17T15:41:57 ]@IDATx{G,xIJT˶Zeγ+ֳڪYes2gyk3_gpmsfܞԊϮs SA=%Z=krme<@X7E ʵ~vsijgޜ m{hPsk/q-6{9ZzU|uAM,Xkz{d~}NQsA[Bk3pצyhf_c7t~u]Qj+$ZU~[Y9VVs6j%Kvkg[4tɫ9ZB;ĺ;,6P3ݚ*BŵtXԩo/Q]gU_[kyլzОnpЈS{k+{р=k("{%*.TOED_.F?5I{...+KxBu{Bo/Tt%^q)0P_-]$X$e*;LF εta>vIt:4ȭ!T!@ r/_V&LV]٬6>3ct'jq-u9l69pAMftXxlf[*;5_EMW3mU}ދzWwm΂e}.p 6z 5wn߮%苪ux,6ͺNk-Q5gmul}g М -o+ZF x$e{w9k'37H˷zƷzN+1]U)Z;ۮf[}y/W"|X]0#= !0Paݩ/+ݥAA8 3wPg4Z]kkrX޷VWk@ؓx:] _X[y>t!inkqw{\}mw~mcj[=4N>iL^fEs=ӚV!X\ѭz4[ltG\y#KԠ, ֦r=R&Rkآ=FJ,rn}Z ~5wDUSMv4Պ.;՜?jءl-0uX,4izin766)^6ּ_8(0h&,#q2frT!nو@NGlQM7jQ@7![M%j:G]ې z;'[CJ@):e>s_S۟ܗ~Gz;m٦Is=0 }@f_],V' ^[_N7֦3˹: y)Mn+P7l V#|4~!v L@c .!MmZa U#62PF6fBw4 l,)/V[F6`_kӊ(@Sh5翩]?z1ukF_M Ĭ@gl!5-a}^)eBޛFFL_Sb]<4w-BP!,[ 6 X yjZQjV6!2} X `Ew%+vlw+cn0Hajk֙n/a-{ڷUc1녫j0MWd}?X}8k^PK4*smRO@~#fj@A)u }K@9h9EX4֞u mqkeܤeID{dҭ?L,;BZD_[ ,qi.7٬k/}"?x_M ӏ4W,L)+BJՈRHm4/KJ0B`+ݵT4Pu۝i ~S6xWD%uүM PK~_F;Gʯb @ʵOٯ x'~' 5leX:O ﻱ ûs[_Xyٖծeݼq G)k+~uүN@m'د?~BC7qjeZ5\Bhh9k֓W39=ƫ||97np`N&\&x-YfZN(Wb ֨.B<:Qc]}ݿjɯ*o4X-& OU >4~*X̠haW-f~-̶Rq|7Uqd>޴!-_7 S$ǻM 1~EpB]yOEj♇#kpYi}vO;֚DzfXyӇm 6%]3RZl5亦;6>+(/ɭ6Ś]=V#ufu:V]~.;Ќ9^mvv;\pmrln14A d8`}VרŠ__ wJUP&#GA 6-Or ڝz+1hpe<'O٧`G`_Qkohz.5`j캲]_"􅻶Ьsʷ^vtk S[u>:NEd._3L:k{$d_o3):yZtmL(\ORe߆w`èrUп\4PYKbSּB\[цE90%hv4\W᫆BPF{@)-MԯL4RͱO}#P]S~u+:SSM5&bݷ1JuطyuxY>Zz:}K!y*|&Ng>WИDJzwU6 e8P8au&S/XׂZZ6B0`1b0h`1 n^p3]'6Z>u#[PYq:!q&'C/|ZkqPYKCq&ojl{Y6ѹ9چk hdĹ΂@7Up=i@~J+GìV֦UJ%>[,^v6m l,61PaQuF!Bsm淒|ȅe}7l!^\XQ(>- f8M_^3}F8/@3^*PLULC#7G||}>si$?:Ƕ,;noNl]]wA5 &T]5 +Zlj+ɨ+" ,i0acZhurHRֆ@ ֽ;o-dO.t uEq9 +>,;z+ $AXYNٴ"%P.fe7 SBKsd˝HX kZI [}S`(5'uO?痄vP^+ʣ? ӔZ@ lUZl~H[z9ZadJ5akٕA 5dst;iNZ0j*MeR66ƒpCk:xB֊zrQWr.*AF_Q;bv'*)^yd]wg;#Y9 kpwc6hDZNd+”5!YFٺӊ,ihƅgVj;I뉊C,7n77lSv|ZPYD&OZaqT '|Y>R$f#Q^qZCz4e4%U >m2\yf- )gnn"eUcm:? emOou[Rƥ6<VlJ/QZn>n)ORd.8RS eiM[utVӳٶ=p:ǁƋV@ 'd$P/H`h>XA>[sáji4`}Φi]fW >5ݬ%Lbv+4t[U׍.g'd>z t=;:Kѽv0C[0C3X:-bm4lV.'F=zm }qK;|AK´ j-{]_q.|̾WMK[V랩.b0KM!e_dжVˑ̴risynƽV^iSmn2 Km[[\V'fhI+Z-X\}Y,\>ul̬ o[u(M'*.[1ulEE(;0|"x$84ZZQ5`E34GBݫji?[Ze$-f^Mpj|~rr%_/VLm;}f r,Iz1% m34{Т5UGf[s_7]^%!MBk=S Ԅi֖֜ݼ2u$ :+UW+Ul0Lۜ4mgqş his ݶòQ,[)}a=v*MaYὅ%aBx؇ெǗ/kr;D4@mz_i>+c$X|uuV΃'G"+a7ʱ-2Ib=G&ajE&7L/}f*8Idr(N&栓![baqlkBoTBhJ1FrT7s%I"eӞܯhMݑPw ̑I{Vgw [\~|/` K3'GØuSs&@Pn%Pߗ)`+UF2~ ,;ZYXSN?cm1I_K7^!=IE=nGt`sUM%.綎J w~<{Xoy@أA=`OSsg+O3޸/gKZaYkÐۓxFX1Ed h1AMS*(TF|gF 4OJ{uڡݾ"IS8/@3^\w1^q~]Zż%qs\- @ʫ18SC\1RzK:a c7M%P|\bZ+|r~wts"@\@sk|1_?-Rc7/h?k\7;ɺG_G%m@4Gu-5waٶtJ=dq[}Pj0%,&e >k:Oiv}?xbN @ 6V+z_ɵuطM9-@o2^*|b\1W_ ̵}/mt@_Z >B{(Ǒ' :R{oxAv?wKԾw|: %2@8:U?g.d}^h/}˅0q`nQ4%pV*댵G_ @p] @Q-ZkW~]kz5 (˘t;FkV/|Uߋ+*gfFxr}$|*y >eÎ $#P~굯G׎y*Ym,@FƫQ~^>f?cԄ`>Ӿl@K@5j߈kfuyC8 #Q5 (-&*.A9s¹.{O/ohKB8,ꂟzS7buWl+_L;4>]whO~7g` %x#}=kp,#؎&-koqEokoP>di߄@\2 6>Fm}^k\knrUMshBw.')Y5+][Hû_" pB;7l_CVKNH#⹍&P[~;oib>N\  /g>W'b柺g+PV&"8jb/],>J>yG>{@[@6(v[ݭ孮]kil:.6+q|-f> cL5g(4|ym|  $Mm]ȲX'sJr=w[`n5OK Î$qhsns>d}]Z@#Jʔ[/Em% Nuec7 PhMM/#~0E]|(. xSυB7VΎᄖuF8U Hڛ~B*%YX7)Do.@`~9[_2otemY^w#rkC~cLb|1$[^ff1V4o p,ݪav?RLZTW.9[v,A8 kQv#|CSʕe6ύ<9b  O[~eYk=׮AQ{SaZhW@IDATIK1g>_u"U, L 9@HI@k?N|1YMq=wo#&T4q/jm>ՈkZwm}( /YM-{v=ޚy b+#]la Zo2WBB7Y5ZF|Q߿n.@XU*/ǚf[ eyzz@QeQЖU}g,SgE>:bk0֧mҧ&&3d>@D@]cۖGsl>ud2:  >?^}h~%M;eukBJ2}`@ _=&W^-ccjv>5ӯm/`[-81x?'uS_SՈ7$u><'X@8j+ҿwmNۆ䟗\}]ڔdE +Xk 2s MF+_novKhϯ>ʩ߆nΦc@W@&.j?/Fmgjg;rtq_[1Ԡ5-rb _noY5#%ﮌ߳P.o_]wu1/>s$VP\?N1" uH8e${hQ@@ [z/~)[zgGv6mY<,P p=G?)_cp ]k߶#U 4j̇}7N}G_qN\358y#_#\;]_P6bƺ b-!qpr@Fg?-.ѺW'"vi%pwm~-}O6=[ ߎo'@p;!~~d%%(.{1_?ڎ䅝 h (PTyeV&rn׻K [ԡEuimu# xkJ<E-Ö́R٧RϽnYmMr"( +Wlww1K vvCϹ.uxe~e"Ӻ>V\uv(иW }6-)OpC;co $&;Gv{}ps}0y>\egӵw}ίܫ_O*;/#@-{źk-?_\k{0}э1%iP]ȋ sV@W@SmzV K?wk]>䟛L,..` @{-אfv>p-nÏ_rkNi?º?]&t#/=W !`aZ\}Vu6˰-h/_{}T Q1KyX-[p.n*.w@k|USh|_ۑ<Zz6 $!Nb\k18wkUnnޤ\צB /A+ۇ\O H8ז'Z[m[DuKt-ˮh@9Oz`{v-J“[W_*. :GXNul_<\; y{߅S "Oɜkp@US34%;ߺo{m9-Zs +_8`>?^}Pu)P.ǜz5If-]@^ @S oɷl_mmLW9rݦjVxC; X >AՌM  甗}1'AG^r]wx  M-u7g~u2r뿥W;VNr۷QyH!4kz#xFЪڕ?e+sb&Hy!@%4+Y+Yݖt޶W3mf^Zݵ ;|o,EsmCrM x(;XjkY"'T 4_# ?-8z?)㡽{u=OsL;@>xj(v62D)R =kM  ojo3Չ=W5O6}q45X \-tB&{-W_+.!S}6ks}z&F^ޯg" _ŏ˖.ȹUZ-qWgWct{B}7~@M#1{*|Of6bKvbbJQy?]߃ nYyzۏ@$,6wmY]׎(=YY@65v8P- [_Ѳ;l[)enI ˙@A@k5~2V`MZ7 kk(ItJؗUW{~-],&W_sOJ6 r&@ЬZ3bsNI5wc^:˷^ة> ?}0?bc}W˒roxgL 46*+5W9|y}U]gk$*_FpE䟉KnV&$VD7u>k~@zŘʩƚs@עI;^<n 9-|zvb}9)Af}MG_t%pzG 'UO],|ܵch3\gfFl"Q5 Jt% @U5mJ*)A8%y@h,u{M"ڱ4]'oUYmB +o&WmRZR vj~N3qq@[`g?#!]Z[9zZ0o^MW[֦$^Y p(84jֿҐC"z2B&S@@ 1||+lh}) {?U)@_U:U}Jo_}C~駨 5چ\_i/{h 4_K?b%UZ|^@^|ZLgMO27./gCh g"D9gX9Q'v=^Z?_9bCl5/T,_Ȋ՘k.[Jt<9B@I&(\\Qfړ<䟧b.s-6YW5C֖ s'@P!P)忭*[Ź7D~o@s+Ѷ_i>Lòkq_oǒ d3v(r +7 O`^<YQ|v#'ѹAeveS@N]+:c/} y.;uR Y@uʯD`Ŧ-@*5}3S}1'8vmYRodG [  [~o{GtNyk\aLخgk'J@rS %$^הx%κls˙@h6_s_zm6i<ڏV^v=N5xuF 1PgM 7Cb ?2dE\4n8t?heReIT &1v?zTNi:{UO-8, fmaP}okYuv>^f@]u R1N1_6FZSܦ>Q_g@@ a-ڢ́ѾJr<ꬻ|V]/ku-[K#,#lڏ|IuGC.  p~?Y(\uE\ǘ&ey/+ш7 m Zkۑ,iOHfHSokK/@kŕ?Zq:]d֟+hku^YF`u2[nZ3r]Gj>j-eϯh@{߶]ܓ=C=]ײmGcfᬵwOUz#N[_?CQCכ'jF_ρ @kiq,15նm?2mZ;?8-Ehh7Re%D SH9p L E_ѢH Gޛ㚌(@ hGRگe+Gz\ї+ʻ֎`]KɶLy֦oZ,osҾ&8i5<_)ҡH} lıNy@h"}1 [[3${~FKF !N1 s6K9Jcż'\Ng}bc}q=i n,Ir,  Ya;z1?]LjW9LZp[0c˪+ak6%4fUi;ť/FMۏk,R !@[ lmMMWH\K˰ %uWsUGNhXk3bm%_#DKF}W>U @W+gy?מ_6'zG7s)hi nZUrOԙ?QiFZF/Ug?K0igHT}?!d?NiLl `+ `ώ{:O, ۏb umR/{>B>}l;5_" n@)nX6t}w>AfظFZ Knkv.؃x_&IL6+q%fZg\ 4x,Py~ \~]Y|\@S7:Ϩ&n>xhn97{89 "翱IS糕!]} מ_cnCpC{TQ#}еtE,&.ݼ }R?OEOI#z&|>@f}m)^ r[13TuRSֿ@ }ͯx|3~=?ʯn}|F/I3s&@DX״kuzZ\}a[9wMͪ:7mhEӾhb/ا&M)jܬڎdo>/# pe?/]j#ɖ/E\ZSF~,:W\TV*36V\Eks4l)~^}ۢ(]k=F_ʇt]w,@~颒y[ojt=?kE W}^ݫ x#"jehΧ4gy\)f>Ζעrد]}Vp  @m|lWoC/d$V^TzgtPrz9^O*}կ\-+?ImPBb}0 .F[S%.I" " EUeٶw)cz e#'.@,D@ F+?5sZ-瓿,o뎶9a.w$YN!jkOx𫊊la'ۏާMY&×qΒOg?H+"`nT+#v0!1U;[4! ^D@D@"+OJ-yi^&E GOY`G@|Vz/2}b?95Xc%Y㳿?ˢ IKi>i6N5 "?o8v!Eh¾x"O>9rFGF&2K_`m QD@D@n@|ė#*UZη{?Fc0<-O T[ `W(Bο_V <?W$~" " "&G1r+'xn88lwqE_XL4[ #2V_?ȃTSf$$##?0D@D@D` qꟋ_<I-"ڻa;xO82˘5bӪR\ _~c.@"U!_O/Gʒ/0&*" " $@"?/^oflhxlvovML?ߩҪ3;ux8\x5PYF2Nl*H_aC+hQhPYi~fѪYY f!>ٶLsS{G1,m;e ՟Fwh~26 ]Rb]%@%k+qdT]ٱ=U'r|;ke1,,$N fÕP;V{@jeokldӅ!;Q^wJG=m9Y8Iirfv3ӣe#Mz*L(|f% .u-v+ ]mF ; %-LUBM8YUF4JJk8b òO*A;'PoYسs.Chnֽg.x8]O`¬uà&s 7xyrќ5YͰOٯq fDe/l>=myAkS@C.9^0օ]pz{^zٖ3&;a ${92{˺Hfboϼ7̆˄TqyO0_.65XbonB)s"6miiVQrp6 {3ڊĶ!cXAv[Xg` <,(4(^gH Ѷd5f۔LÊsni"E˔FKeq룜tv48 ٞVoX(xNiD(Ue>;igq#/tҮnŤMne4⊗eLJar84t"yBnIϼ <n=D8mɊNyjTd6^vL* 6C4*(, #j3 ۢ5Po²8:;qgX5x3YuFov\XRk]0{)Rfyh &du0][^ 3,!eʉOLNZ%ӥ<Ҙ9]4(g֔!P<⛿j&ژw?㵳c-<,Ì/`gh2!vnfiGZW=~]Z`j" $pH8dY@^VGE.mdE_<Ą\RFZ~Eu20BJZg "J%E\FdML sAefiLjfR#B,9/FrL6΃$)LdZ"@,(?QZhO1U|/dO|x).@ŭ~h^grVйЪe2j{40s,Æ=lN6' \A|7ӿǟEUpv?7O5kiҒC{p7w-guvдR&" 9B{N5-vN-IAA>$q) %Ԟ1̘3f8MYCٛQsc Ly5Kd*bXb@q|\"+FE`R.ki=XRJwC_LJ >'& Kd,LԂ9OGޞ-g Lr+]HΛ}3l@li6%/"*=k i"My˥ \N,,36;xkI`\ʐ , 2R.0NC u{Zg8"^zxl|4g7η?}Uְ+l%=K-U[Z~3L F)" $0͐.JeZ^VMN 'N/гt:K:;sϖlHJ- \V8biݿ`_YJ|(e|Jζv _d|]ځ;GxtkG[a!+߃쫒jI"F@IDATZѲLn락iC_E@D@n9$I3Jkf!$?2λ\[`sl6? N5Ė *DXd3g.:c{zU)oR+kHTǣ?L[(Aol0Л4疬̾j jU~6_vNL׻xۇ3\Mb+i}fBZm0K` :e939ȊIik!9`[BQN 8e%swbN*y_eՈcT5Z|I:z#F}!ؗIbj7ko6ɸAy=tNU+IӤ?ˉQ`t=BkG+΀ooQƭt,ٖ0}4Ge.QTp圗6,ĒHٜLqr(jV)u42+gD_,c ,NM ]B^<ϸ6,ǯ/2딿ډI\5#!9l(NZ 9+Hu11ej{v ^-'~GIR>jiR։LS,a*Ǘ3jD|](%A2%IFE2]΅.hU ^'L[ޞbDSsX|jWvm ~d,lv@;e_Gϳ$ obɑH0>_2%Ҵ% Y:M {yRYʧ`r}Raq_A7%qr{&" " D|ѿj`JM2)c>@LrХg"c`kd¿r(S˄U ͤCz@M3f7~Jrd]gx;[؇#mK¿6꽛a`T/=svNG.)KEr!ѱe>n1†Ik&ˤ43(cͱt1?(^c XbrUDJeWX6HB"ڬ^>U}r aOvcPKRLN6WqL9J]@S=F)Ӭ,630<03lElL:_">y@}Gϳaz]?)~xtt=7}JMܷlaRZZ`$%eq^e.|ul,yg[8.It.H>{;٣/bGK{*\.\Ν]R3Ce$t)IÜof#" 'Bk(l<:٦2YkO[1x9M1%GźsA YΞfZڔG ?Nn+x@mNJf3ģ ]BLbqlFmü1KvÝVZn C/#QUvi+$vMh٧TgL`v8 @IZKĩшӰ،iLP|EX$Q0x5 6PMX*Ga$!|cmO+w).s(gd"1,ELOQ8m]S@jfXl|Jċ(v v'ME3<=!H'aM@P|l7=S<<3%ڼdKj#Ɣ6&aNUbpcɌhӒKewnQgόRIE?2E3" P -VARXEJE 5Yb?Գ2h0lGU V912 HRX@&)u9 (X3!%o9Jqz:+0QX#6n0٠UJ3L0 XS0q.&]N>Y haBs@c6^by蒅VƊ$cCza ;dwY|ifp|2*Xf!f1Wn/ym>E6m?" wH[a#(xh 8C S". `̮r%%ϴ *`J*]Wbx4~Na[g>K9R54lRSoܴRWm.uӲ n>Ed _nRX/U{Rm _ոp&&(N^v)teGŒvv84^̎ˌIn u:0ΎrC,١r@g7NfXZ0C&ei2~*|Ȱ,ݩE(3<Ї1+<ڥV q>Z$H'o˫V0V$LrhmK-߄(Izo@+)|4Sˆ6pT[@R}Wsnˎ)Mjj@eRvk>ɠ_m& `kXtJ}/~z:*znY[Mߔ)'FԬEDTe}n6_*1ƯRJB k5f(7Nf-Fa;!È-kc:WX8,a` q֬|޴1rZ[Oeθ3Y.GمߴaBNWa#_5=+I3v@h=u?wt.*swՎ%`L\w;$3|3P⹋S "B_avҸͨ8Nz?;piyǾ W/M,YkQu9Rz%ÌKl 4+.a$e4 `eA Û<0QX$6r~ lJBʪ ("i`$3Q_fYf]~NS#%;f'ρ$=DNS[aa"f p7(]U~e4CEt AJb֢+z >^{"fۡYXGxI f!{>3}SIo;l`v0X I*|4'J$fԥ\0Pq+cgtz޳֑x{:F ϰvR7z 3$ʘxN#-Lw`>Mni9MgudbiBMfl< BVtgv[ۗvO(oJN>x0t^sA,tl!2KM~'%bXg(mh ޢI'ӥ {|'Mgݙʯ1!רڨμEQߊpA_N0)V x;IL xb5- [~g&m6$,#a|jfs:xi*!V3,"mI:%f҄粅fK>ԜzIW'wG_^yW1)/؏Nm^2%ZU`Jj[j,AV,O4uP::gc( fFE$`LaT)@S3ÎJS32:MY}OBSdOs@g5Z ÍX2>߶F[yF. YVh ?1nI`Xҿt6nx4wDٯImn2FB;FxZN-=tu B֣#EL`3=%[c $4_Xb :˝0*X.,٤Xu"%^ Y5;[SٓVf6T4$ /%( pm*~R6^NNgi2DT+n@6 ~?T}6RBK066 @lUayeM8VEz6kg߉#N 3]0 `z˩er9% u9_"N$E u,.a{px6j }/OH4㔑/=QZ&'SDZ L4" kE C!ѷΓxM=Gfw%z\@f(mݦB7R"JZW q0 &^Wti<'4#idY3!&Rv=E@D@YfrjG6(M\sE^W8#as_s,~2x k:K54ᜅv7o:>yiI|w`KG!J2+$eu,@]GO|'e7/e ɍ@r[).ʞj" " I* IxnX"MJ:hl+'`1^2uFoKU(REv'KVIq$@wk漜0 z& `nT+_-O*9+o|`QZʜ" "pK޵J,"hScl-s>=N2d,揕v/'D p#n([OPM!g9)8E?ѯرݟ[8iO|?p ݕ|euz|c7'#h,Lk#%ʢq%G$MԞ&ήD}2.Luf(f y;R%3$86Nhu|ïJFʹ8>74ؕkNƸT0qfBs>~Wb' `1^wHS]` mW+oc3)MTJ tvmճΖ y=qQRh}Gu d$WXC=! 1\s-.JMD@D I m[u6Z'3) Vlm=sO Т@яeu'$MhIQNp\߀4?('+&JcB" "pccV* %sg͹ZY*&+z[s \ʙ2 Jif^D0(1 ,MxgsqW͹jss83!Tʃd'҈HsC[5"R(Oz,L Vp3Jv朁r VV1ǟ=/Zl|N((I%HVj}X |}KVDix5F)"0̉5Xth6o:8]כ?DK)Yj2u9'ci6X|+&h ~$#,3`^еTMfsʒlΕWZiXSbYB!y *VÚڛ黇M[U}6QlΆfsara&9 Br7iJ֗| (+ _w.&!%JZ=Ѭ `Œ-@64 SASPj)"KlLu)eݺhGwGeH3WļG1kŪ,l&EyV0mϬEo؛q͸gfsЀS(˹Ds1vU&IZiΆ͆ۤoR QЎ)ȝi0ec)<+'s D@D@n%bp ƝOGU .佐oDl~22N /bt]OЩ.e> ٜzI8,ȟ'\g/|&WYO:{4pi,]D4[|5)ʡVԭAD@DەԺl%_8xbgw[F& j6I O*lqL^@oh'٣߰x2QTm侫Ifs.?|ΆC7l< ֭[A\7`+q͐bbJdd1E:TRqA;)ƭguEDi6ubnq2&.%䱽6߷D@j7tEbb1ܳȓ!Or"gGD]F RИ;:zl΍_(Ƈq,.tBg'w|֮ &^rtv2f,]~3_#f[<*,ߐkz%" F@9z|P 13Zݬ{' H [C-Y-0g+"L×_s54_F6쇐b HMD@Dv h6x2RZ_3g yϪ-B@:w2+0eR~Z^}h@n2ӵԇ" " UlND/_7#'KMp-ե@20k ,GQ$ykZPLG" "p34s3\g8|18vGg!zۡ`z=PZ}0A>_:(n+}!;rY;3e m=ldX+X`, YX [;wcsATωVhK0qEv -}.(" kKqKXj=:a#ՄU奱B$R^ky1^ =VQc)5$@33܎D[UGg.!E2Y*yơ  X*4z2L%wT[r˹ՓD@D 99M.s$ZѝfCx|ɳ ,fGNe4j+/m^X'c#QM&d /u,X{oS75Ro>Z{gb#m TmY2%W~! \{*)DP eC ӊS{CAC\mqbbΎߡ jKw2o*0?H9Fs0v\ uE הMx98Eq;320w-dNO /BVhw,ϮS,U*ڷB'~C8YJδ#K(&" "pK,( j&8q{pֶRx=Cvy6:>+KP@3ћy Ԋgyi6Yt̢MljD*ň|ϱ,W UE@D@.0? 惘lSqv ?WҢީI 7Jj1fݽ,oU3&$E/k~w;<[gOO6=]D@֐䨚2VltSxǬobzwf~;2v_bNiO?0g߷"^# Ufvj" " H W~ɳ Ƿ88T<2n:Wa뽰 y]zb>yNlo> "euz[LR  D1JV6#N+;db=%tn6*܉Ua]Vݧu+ ; .KsIڥx`WE )]z m da.w0,ׄoڿM8+QYD@n@D4TŠa Rឹ'hQ Y*NK2D@D`W*`.@6jՋ!9>UUd [$fוRg$f+40`Tj,6[iqmQoX#Rǣϭ˼[{2Tj-7}p*Xfsla._ΛJc-Sop48pe&n,G8QVZ܁hWU Ief+_Fx'cレFW[ޣlk? w njq۩:37%8BڥQȻѴ=2"*Xt(" "0K`/Q󴚻nw?lc)ꥤG//̅؛#Ͱ^=t^~-їg.@Ƅ4?`]Agu)+" " HjujT=JijޫyPށ*qUA!|Ch崘Hf9խ GqL^@]s}˔5R%࢟!PMD@D a2xe5?փf\Uz'6MB@͌w,)sJƱGǷL^7sw*b~P,@d5N" "PsqPZA@Z[{f66V1VR $&X!'bhy 83I.@_篊RJpm@>gќ}n|Ԝ Wq0BY^ًVam+JO8!Ѽ2ڪ [ I&RY]6ID@$0>(ߘ@kg# @PԛZI?3kW H[@s (hE$ew11^ $@mFq4 CCŵ9wC9jC2:r@!["[!}S+Y;Q܏*2(Q[nm^d|N}s%Jü6@e,+OD3nQ3su Rbkg륗 /Zou. NԴ҉e­H"2 "bmj DPV,n>v+,kȰMhUG@@u,k(e7~0du+In:^ !U0$Nqv TWH "[Y{;-ou5ةN {/wր흢 c}7GbZf{a+qN΢| b}$" ՔTJ՚ o9j:{>A ]]u`jdTP)κ +V;pjf> 7ʺ!daqj堦BĹk$" "pB`<-^@V٘"G 5zBҪ18ljOV_#@bi%} %bD$Ρ9qH\$P:ފjS&X$@5xZ ! +4ba=[nJ`1.(F)fey9#Q|@5~g}βFF~ʸ]W^ 5"$`}_ 7AF2?gRYxm%⚚MGGU*/\$UM|5d;58K(S. )dۨTN ƣ V_eѿ{򁮰@T"?n+LCP+Sɸ0b mݓ(]$@n1>n) E7͋C, ~kBj =ɊW?5݂^MN)o] GWozRJ"tthh(w)Seꩻn>( K\HdE_rOz_F@eT@V/`;VxbE|wRT97s¥FXs?eg?FOjj'&8:i@p!lP%ɊcRhU~ϵ;˻C+)}CF "8Lǃ/q%?]s= z?bƒ8Q{\j2&Z+yD1r$Q\v2*&" ">@ Xmog 8xb,*0rzF^VC@\5k*"+dvX,ډi2Q|@[{q{/z?~/k+G̅"QKx66bgWR@U$*\J Rh lQ%ghmqj+8|Y1T P*~ 5HD>g+0qgYͻY3 Y;H1D6Xg.ѺxD@DGѿdobAZo Ac; e]f!v$V>O2*X_(pVb,@^bz4w*Ĺӥ#FXSq tdL|?ה姍?>f2Cw_bmWޅS#=$9=+Iɓ*WjV$:q4V wݏHk,Kob{m$IH@E& B٣Q|K R$ SلL*`KAk,E qv> KѝB70I?ض^y9/ϝ[UY,;0CEfh #-㪣k!vفQ]E@Dq>3g#Lo}>uJjfw$| 2\X `߃+8+@S@: ]jmᡕIMt5PAGf:^uSdU<I fO2nkMjFDw(\NRc?gFm" "/gK8|hj)K% C y/C pP#2c;@wܛ(wZp$d[ʻѬ,/gge[H((e=}NΆ8Wqt U!F2D@D@KE !)0ۡ6SPc[>a `0Qs37õ&R /V\덗* j ~u|R8obIVMv]JAXaW@//s{ h#" ń!/9[ r–HBO Iܳ63j02=\B%LW7IDATϽg(B;o2^)x[z*oM\E nz̒/" @ N2> Bk3dJwlQz]n(UG`|Ǒ) ƿ╜g2Ѭ0 P]E@D`d>MWA6u-Hz@l.[I,󋔵ED@%ci| V^9.LKw/:ڟ|q2zqZ_de,mEzDO.SEBT[+r5LL,K@@en8" &@Ef+/*(tڵηs.86, N~g?B{h X t4oE*ԒB ?HGcLjP+ghcu⊹ǗƟl,ڰ[+&KD@n@d`#C6N)Қ.Pcߛ6zyimk?){ .G2 k,[w (ȿ$Rr  57*>|3+ɥ6l<'9֪b.n8#t~cDcP*%34%;{?$uWI2n&Lm.lEws$5^ I)@n," "x$TxUPXN=wmͫѴ)O+Fyn>u7P>hC 5OJ g|G|di%s@KϽ(wK㦎NΌn8Qn97u+" DH@OJz{q菇_ljZJ{7waðX?sd;;ݰ vǧ*ϋB,!˙䋌ED@#'TMfc(aw'xEczW>Buv72=@'n)wΚjg ;܀A>KWD@D` <əz_yciʽ(cJR--GKʜJwn§J֡eXw d7I Xs89l 9}^O?3UL*ǯ|#w nv1<3ө{(kJ^5%d]:WDHYA pfczu }~ed4r#\/}Ȉvdjjg Yz'" 5 8 (g6| ~7 }Ktd4V_}4!E?C9|ފ VZi@)jP!ZWLRߵ& %Ns*d'@u nH8ͪ@~^Rꯐ$!Rxס$n_1&6g7A^k3X ,hu3īBN\2~-uOϜ j,s@VD@e|%TځzUʁqT XSRЊpO@Te\҂|6X2oP[EZ2Y?iFH̅,h%XH%`= 0iod$V2ה+yyJ(VK,YCP뻽JDZ ~t" Qfu5 HMB@@SU룹iઝnsRuU۩*ȁsyվ@ѫ0z/qkDuTx[8SsgPv) sD@D@<<XA_Bgʁ@SHhʕzzA =1i*f)CW@Ckv>%Z[ v JUDr7Q*r{|$(ni~GaSXi5, &Θ|bDYd4z^~6n^ ty7׌<$½sM~sYSΓFMD@D`Y)8x'eeK%"1JpDm Wz;l 3]$wSwPs~>{('bXw\-" "0?qA 0;]DJp)!m\a2V;tbv w? P[)ۛčōwocߜp-'+x+l'}/AThJ@D@$0xLj={q&愯V չVK4Z6bBDD:U[cw`qxxE6LɠJ#ZĬ݇2a``ӰjO ʆºRE귯En3!m+8$';$y4gSua[[qx/HA((UΟ7" "0/l#*g#pN^K2jyYy_!6TZvJש*JN6uZ" "p" @I-e8sM5hO3bQxFpu[LãD@D*xSi?s5hUn|(6CMd *ʗRD@D@DE?quE)YZԕ ^JEȟDBN! j'dӒM)H@ 4 &^sD@j1iɪ `E ×{œ;^_c2j|q8fĞ ˆRYՕ󌒋DOR\ҵQkaj"D2xUϟO?/ $" "  [ݕ?P P^Vkו" `.r%N;D(B/+\$QjKAE@D@D2V^ǪQz,k4M Hڷj>Y-ݓ@5Vv@5kuRjK@@m/McrDX3;8-wYg8ׅ 5L$jL0▉R5E@D`Pk|/bv;a"PWNq!81GFw (7" " wL 2O19@Ny/te _V9ϟEw!/\\ DD@D~qY*W K:@ ũjh ^_$GD@D@cg0ւK&" " 5!@U{sjrf7Nbs4lJ|+8|擢" " "Pfs]ZS%8TOnQ )s$fW,IåԂyZPgx%f1T (\C@5pQ9i ,g4NCD@D` PMCN ܭ&& ї<9emKj_,X8d-XMD@D@j@`2XPv=.ۤ A# ::^1pt"" " +M):+MCyz[EV¨\fZXy:Zdf92dj"d2|u_[,؟ 4ĔOzlz%" " K1ur _{1"^kDd4>95l[5-PP]RJD@D@$tQj 3"6sDd4:~ J?O,8͟'n93-s0B.6sk1j)RE@D@*!O>;g˺aJ&!"Pg2|u[,Bșw#B$rS Mz!M% Wyw$(I;X%{S#&ko-4 _l(3~!B)KK=S NށNR=D м{*4+-OZ{/#e e+tCHt|=-FB6!Rlrm>VX2*9.u" " 7GA`i6UB VE>dZHE 0![WM^.)ad}<-dy;ko)ǝft͇"@*fT!-ǽ8m9;f].0U~@g,E4y'c {Fm5sDd4 -; [$Wj" " "p{IP瞹GFD?E`^2%-+.-KeZoF/"  `>@py4 0N9?K v;+UE@D@D`A9~u).D` X)Z kD:8aM-"܊yS\ўnT^Q8[&fʒ漵ѝTkVXH5'Jd䒖[8.Mw= wy6:b+XVlDd4KCtwg(Io(x=7:K58xb^$É(*D՚'%M,@S/@-WdַCp'+ ;"pKd;>LhG+nb@Eu5CqG/aջx6@kOH[# P遘`IJU`(e멃ѫlҏA,^DW* W?k qTz$AD@D` "n)Cމ 5BթXm{Z8y_ -Yj" " "pwXfBZpwSGU2n, ? h1L_ٹ" " "`b<ș")#q5! `M.tuR.I$^P;$@4 Pځdwx6:&IEfVcf \," "H݃W*%l}ڶy(JpfV\yݬc{lk8(״׷m ;f8X& `ad؁,YdH,Ґ 7=Q `-.";;VĿ̀`%bDhڿW֝N4( K4rS=2 l],S-˱%NB; !;\B,7N0" " M! N# !PMփ ΜeK)srΖ3Ow<ڠ׉jĖsB*&tT `=3g4w_$jmDE@D@jH}*bLH)! pPk+RSr:1SQ$#5? %ܖksuJ\HJiڑ$GKIʥH.f؝YJ2\$H4xl$wlOf(q,gm(u\ OX T C-nJ\L?MnQu) (es< @b\>O(; @ ǻi~|zEa(ksz4ٝ]rq:}}ӥlO+?bFbs)mw@5=VC Z< 4(НC#Y@c'qosl!ؔ@ ^׶Ƕ{wCil;R+V?cbƖP62lƸS2?&qa69 hEq涾aW=޼=ǂ)ǫ;oDX(7$l5|Oӿl t`M;ǫg{ \I|Εnlw-c5xx|ʹ ~#FUvW&JϿ@  @~֮|E m}ڵ#X`M.upi"oţ]ٜ\A휌Ӎ=E/2o Gbk'%8x?3n^2KYqAlJW[Zaz>3\w^6@@؀)Y۽7=wx=ٞ\I; +mF1?[.VM?[T@%~v_͒̚|9^"  @ ?MvN7ȢE@k@\]lN ݗ~qc%͙NW߱ @ 3<쾳ֶd// .pn)Ɯ { ͙p}8@Nw~6nyMcOanlK`]uRsӜ GΛ%,b)s&\υ@w+l&ӭJ$(?ͭPnǓ{>gB 919؟ @@@L3]ϧD mv ]LMhX!VU @@v!GWb3a%/.0%v Ltn{1ࡵX;=vؘ.g?k_3]ۚ;" f\r=͘6K߆a|+oxdcٔYoo @/fϾξ.,Nj1Q _oٽtvI% -Rg @|!O(/ @KQq[m-MP5?>6˵| (^~J1h!aBs9AoW ^~HvNO1O q?iN>t܋& (t,kmwN~c'ӚbIkW  @%9|fGcyp|sg_N<9cj,p4Z_ -8X찯汓U~.;^_'@!o|}/<~>>znXO[kk~=hw~o1_c [&ܲ ;` @{fwC @@@<pt8`oƋ ع;5OqCzaaI^ԫǝ 1 ȋrX<cr51lkZsk7B92*xm}wI.9wĮb^ @ 3M;*CX \CڝFI~ j-6v "@X`M.ufw8}xxôylO=p|g;gw?iNcAB @P6??X0]n$?Ɗ[?{6mM  @$ܤy,X}X>[,&߾3>䳗zr NL[ "@\pkb9q?{<M~ l{;g'mw?Q@V%E fm5;d{gokO?ξc)'>vޙ y?V|z @i @ Z1g|/W!0^ösnjXȟ|1 @ }6bgc<|xbP?z"@Xg`[9qX^ rWfC,>gEV ,$#@ P)`%J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*MtoWIENDB`apjanke-octave-tablicious-8a1b10f/assets/Tablicious-640.png000066400000000000000000001125031515050116100235540ustar00rootroot00000000000000PNG  IHDR^tsRGB pHYs  riTXtXML:com.adobe.xmp 72 5 72 Flying Meat Acorn 6.5.3 2020-01-17T15:42:15 ٞ?@IDATxٛ%]%ZUYU% $!v$$ 4M(;@a)-ۻ eK᫰lz[~]tkeQ6X7qeypCV9<&T3KEYB@"Bv-Ӕ#ȅH}kv$}k\ ud#II f b==a)I:GZ8bz@HZ{ * "8玐DP $-('6HdԴCٺ -A D{3W"r.VC_:⵴$ZI;uŒሷpwӍt! tNv+d#Hd!$MQƠGp'âqgM1A"IC:"( _(ԜOwaoA.(vjxa4L'Ak͹pb!&pAJ??p =ۣ~h# nc@ڬ~LtFz5Xncԑ9KL\%;bAB!TĮ/x . yֱcֱ dq;Xnſ ^!P,- tZr%h-;dTgs9֏Q:-Z*=WX(x ^2or":p"up< 2z@rZ!v:)1ڜac&N &1mo!h 'SLᷟr9G<:1]jzݧ@`[QÃ!HNF. A[WSwIKIf6<όIN%/rPIbȍ`p1x͈gr58i mm"#Cv$[N΃ ,i{8.U(|uX$‹,ĜC荩_ Pk:@_16HؤɃ94©As!%Ϝ}P90d7 oN <Q26hᵅ!ɾuD<jz'⋟Nos/ hۢ|oZ ֮'.+Ȕ%v:ɔN!)zi!b,BwШk]4 })ѕ4cvuAŲu{WXm͡KuΧ̵ơOGlA֥ ѫI7W7!i^È7ǽ1O;]>gH5A'wȌ"yꐦ"#uM_{soNx3"3{No>.=gFzY1Ν0Yҵk6^1Aձ`oT{G7 j޸!|q{}hpp1un O{=:#aͮWwfua/,u:Js}IJ3}Xn x,$ȸ  V/m ^\P%mP,l1>>pTD 7[ctB%Kf/.Awqb8}"cDc_aVӭo1r)* 5+PٟWBWIZ"1%l~DМ 1lt81l,;=4)yx:yo.k 6B1b6p*:Sr^Kuk/mJ[@{"#~76&#A&(M" 0Vpups8k7ڭ QwAcsJkp>f-ԟ֘3 9#st@P2tB;G+,[ rw""1ȳM7{GO?$ftgjzd4w*1A;qݬbřEUӰ!s@D$1Íl9a<4pG=E L&I쵻ewŜKt&gyHr};\&._"L1Db/N3iK] V;Tvב+406,Ǻppl=dlŒ@[$b!b%u;.=^ o-q#E[%KB(VQ?hl NOcg%ݻ#b&v|Os._ mE|X!#}ʔP=Pdc1j¿$Qf˰Ic2 H&kmb™ 4-1 }|xqemh`Ds$emP諁;4lעK)ȁlb5 x0R D:n2X_X‚[N[|X췈 h9 00}f٣uzFc#Sm7ˎ՗A`^ `GXe@gi-#( Gz6l~KAq`bFjOOY:?N}ŸKp%-vGE$9W[\` ם[=`Evc$- Ǭ[ 15GL;f+RQ=<_vmݥĎAC#v2|m;J4fهÃ|tm“DFR9pHt@-)6gࢠDE"n׶)]S1=q/kXRdPkf]=2[v{,WD'8/!io'@ɕ fk5K.j P`;TW Ly&?}dʯ,j,ǘ6nzۍS?|u!k(EpkeWsMW.b\^#MWI56BqlRxG{"୹mϹ K,[=^%HWX~mz{; 8K_ IN|Rk'¨[Mv+}/~q VL4(QۆؐG,1\J9xe w‚lu0seۻũKaIwY08η5F<_KwO|_vC3'Կ CɲsicWH`셣) vgֈy4Oɶj[\ l<o.M&%T3s0[a+]<+4#MPTao[ZsиYOB`@'g,!L+;hBbApEVݎMQ횥xrdvX!\Hv,&yCI; ^8W10qۛ;.LS]Gz$ ؜ <7qn;#R;JQ= GHL=K|9/ |%<{jr:I㥰ʻ4Sv:DJ`mC'uU .*ltbdN" Hih'iX"=8=~_lDy}S!IN3!?I<"]-lHE0R8:c 0MABJ;7ާ83sq-n9 &`,l\N 7 !lhJ:G ą}np1iIK<1ypAspJp^p6 {f\󧬶ّGO r ]|oʝ z[v/*[-y$`Kт Xj.r۠m,Z< cYNơ1\2dJz ]붑Cp3(}⎁",>)t-픅lBPs[r0de3Σ'e44U@֢m>Vv)<:"Ȏx3^y5^ZK >'37ګxUO3_ǕpsyEI׭L>KuWqCNͭ C La, FXy7U;X96<_a+xeߴ 7u\})EctٸWa)Mn4\#vp?{8gx-A*0WiZBW!V8fb.~vǂة,1}4DŽ9&\8'Ys&Ybx Km$DXA$lr?8Mo/4;dVN{oΈd9gX4ĕhF?f)^PtOM.xXP0|_Oduow\O'w-8tn& z64,TŽ}!dc} L<6̱pi|Sw fwХoC]Eu:jgZOfz+Y8F:wqG$ʘ1il. ynOcN 4_/ Wj xaazrw4HUxp[mA"Ĩ~[/!6wZKNE_{Gxgi]N.ۻ& E/ Უٳ> cDh -d&Pxo N̑oP-{?ӖZ9 ϟIY.b:yVC&h3gs[%NG?}8tڽlW!ft}G35؀g'5G\Ö[.- ɲ#ݞ oa- 5w^t\r9P'=Gcrs[ Wp6G`':&IclDcJ2ӻvCj~/wssB@8At?JOZ$`[O*?8㢡/|=C1Q<74_?n/|r)VM_]Xr߼5.8}v̍x?`~?``yl8įGGCFB@m!`]\G9o40:, Ck#χmݧda2Mqsl<ϚC Q! @/0@VO})=cvTka{X;aQ|O, @;Δ'L/8~aPS\`w >DC ?LW^2qϾOɗ>T.˟&w2&FĿ N|z@B!8%#~Cɭ1O 82W2dNn}Mn~7x60)e_|y܅aGNؚPK˔lٳvB]G13s1ǸKjb9n:¹nٲgOeMq=+Y0<×6*Uw%;6x  xB"Q#~pqk)~ŵ/3dc6:Í3U>W! @TPnnƲ&Bfnazܪ[Mع<=]\1H'q-_0a(:^=JڮA {! w/[CtQM%T 10=?xbn_\{oXǗ|g0+D^u~$%B{pGaBw::F̎m3y¿v""Cm}4 ^fx/rgsv ! vQ H^^y$\LKj!\l|ڵ[@f<8\<طRJu#ҕރ 4:8пJ1jMh%ވ aŤo `_O7_ľPګ7!' 5:sXKn]D8CF.#9CGQ808sc;/ÅLJ[8 @Fſ},"+h>“ƭ'V8;hp8p{tUDu:h1K&7a#:=wPԉWNHk=|>} 5:nzh-7aBTsp?݊_Hd}uۅ'OF)b B&3T>lkgO*uU[_ɾ `YvPAkʕ!1 ӌwBln?*_:z}o9޹nE!@K6bNM_4@7-hG{8qCA5gs&o#cK [vr{6s⇚ߋ vwTO+#@L~Ɛ 5`X}hf{on,t a̡"}CQ `˟ \xq}eu uG7V;ąlt!HgN6Kcߴ;s>q>cJ\OŶd|G_HUpƣ?+Q ek<20M?"z|c:?.7g3S[O*-@7p>jډ=TK'~SG:ؗ/A1X`+Sֈki y-=?[鍯 s cp0:D*!p}uؠ'v6" XPk)X2^NUvL"? wZnҧ;w4[30 ! 6#`Sk99'ɵ/z=ig6Z7Cxrd! 0=i7>fM´`rQ~Ck<ѾӣOB@ \ U5́ \:oDK݁x 7 uHzw83av m` Dxp5,Iw 2Ng{KoY !B'P (Foa6JS q /ԜXf͞%&؍O%W.HVPY.48 gn4fLBjg;T]"Lֺ^oA?D[OlV ػ%wྣe >p495fq$X{Ĉ+֎k݋_p|au4dl$/>>)E/K/施 K;Zm^{Vek_"]šnHˆeqm|= YB@[\tr;u +pD{#ob@EFAæoz=]Xxwx_t Gpr_jG%^EɝoW?oScx&tY FD2;ݽ46E\={/&^?K/㾣!OG|7p̈脀kɵ/w]ϐ5ùӘ{,/nvh- ^0"}E C{罛N(:Ɠ.:>ɏᮈBg5썄]La|代,d}p! D{ةL'Kϥ˗(3PYR|5apkdۂ+9! '$4orCQ'Gƅ!j6hk갩Ǿƪͥs;׿h/E/|*]״b_~ "eb}辗bZ0]yɯBŭG?9fNF37e5@ή7a,qćߩ;g .m& ! ȣ8jZߎ|ޮ$]12z=X"d`8vv BOD=DmIBB+&v:ϫ(|! $WKoVloZ",:jbst_.\=8u"9~-KWWCl]S"xuHD! ȾAk9yg/As1Ȼ18B}O 48c䮍&yDͷ'/g,Qr_,zı! 3 ! #`웬/} ײqQXu_Gyre6#qG@螬\NoE=N`,~ӼppciFGGt-ĎwzB@2 awqCtGIg}9{w[X:^Io|5ɆlՈw˱$9[[Q,gO,4zOtݻBGQrg~;t) >:fx_^Jؘ=>`d$8Bwpb#Xqz>،ȡk<ԡ=0f!0RlV M.}&~ÿ: s;es w@ᾗD0#}6aRN;h[~H~>9tE180Ts`gwPgUɆMg|*(4lΠ8Cļ_'| O_nBa$׾,>E ^h]bսswř'l%(@Fo񥿌t 6a#J}uUzN-qyĂlvʄ7<lh*Uw[vJч#Y̙-[_/ɝoQSftx&|Fj+4! <U{?\K7LǑL_奨W`9!B'|%`f]N YƁ2 cgؙq4iTPB@(Ɨ8'[ؚzmhm6Npe>ѩv @h;7Ӎ;&exE}zo6n*0cv G##`__0<=[at_X#,\xwU6+Aq5"r&?e^.j2wtV>t>N G!6=%Xī*(:[~Pއs)_`"&FɊ&_ɭ1rg>yFGi6ŭG! @0bN}dYe=S[tHZIǧifÍHXV"-9`hY}gp9Y҅S?C/B@ De0~'Déc&:~[̺n`+0y B qXmiN`G&!j)&3j\xwg>BB|nK^:|h'Z|gwb&xac#0o>eJ\taBIT0%+gh}S_yzmu8 9VKHb?U ciDِGôeu"V &?~_#O:W,>#'qwАpds8߶v0"`ğwӢU6}|w9h~cg.k`RyB``7.\dr y c fjƩ/A.j?4FGS_JUdv¹?Hnke'ѺD)I!0J.~:]d>uv'5}o_?[J`5[\0K!!OV?\+ t0{yG&lL JY瓛_ Ļ{Ƒ755 ţc5(WTVHCrǞw#o4M|.~c< 7o <.,|w/2pfe?!  #$\TAz} ;w/h NDw#EhUX5@# C Kp-+sqG)Ϋž^^u[kٱl`?‰C1:m`8+]6ĽL!.O#}x-i 65=|>@VDu8,tw81oަݼQl wԆnW&||ryKg>}S'Nh 1c;[B@AO7Ym|98):ʩ߲j{s+i;;چHYvP"dzkA wVipCU{JXl1o@IDAT1C&nm נ{08,~L\nXLW.ڦ)>݀=Kqr/# vrH7ƩiA!KəTN| d&χsV1f\+C b)qJI~E_8L/wsa2:6>q >{@&! 'қMVA3ƪ\m|!]pyl?:J= 3++h+g .0gB%&")Ctg峿'ؑW Fɽ%MɰΝ'RJ=!"&gIn3NHEh|2OE'~ۗ G!0N ;/|$UGсWQYE7D;)6ђ 3A0 ,Ҷac1~w0L#1KJD1F y/,p $iM1ɮl|X271<O<-kI̻SQڞE*,ϑ I\j |7EnY*ʤN_޵cMA%.1{'`{dLh>ȝQCiX^`[ 7LϧE#2G>w^\r峤@\pb_0uL<,72KX܉|.oDB5\}oQߘzea˹&fw kWBh<I#B&w\Tr2+fcګFt`RH7ҐR?|+]#I;e ^ Vc% +z0 l4AdT\`,Kce኷̝Vd ՞As~Eoq|tnz'>u$9G ~]#h΅Ծ4:+`rIT6cXҙgT=ٖJ 8d{Pll$W6a6 Ylq^#{J MML@q-"ྙ Lv?cA&o,r+n@Ջpqi@֥Fk@*{+9fuséü8 *i?@z>Nn릻kIX^A ?bEP6]AqѶ 9]V`k[p "룭bM aS |'A9=ŃY)GW Kr{;A6~.d:O%>c .e Ź'wwKpѷk f~pJ3Mp5ǢwjHfR/Y \Y5,~?ڶ숗$HwPlr pKaA%aѤ8g!!0by6F nX ֺVϢmS oNm#vG !Z$Em#-&洵ٔtp1"GP|6u ;|oJi{[m^H1 Y5u64ه<k¿ TfRKCOx3" Ko yWq`9) tߨlϱ"XY-dbN%,B)t찬2gb.II0>ۗXsǖP"(z۞Vs p`Ո  't2֕r,h ;s bAǔpj 71ryL 9X qhk#r wB!WMF,{_X~9b7EG_0-mОdR ދ{ÄS8!Ё@Q)t=Dqmcxő榸 ]r? B.+Y)Ƕ>tkۼ5H-k&|}AA9{L}6/9%@g=Qo6nJLu2сWb&t_KWhrB`TvZvuĄ_f0Ml]fuxH PЇFPy19=P8&Vv*t9;x;-KWx1`Pٽ lIG?)qɯmDp4Lŧ"[~OnkXNeB!KV8;] ⶰç a"9PyñM"n*a0HliBGx0Gd~0:8b9j)k oZO|"^Yco V&wg9)#t<;׿|x P IzI\BI:֓AV鶮og4N+:joHN?D[ q=B@3XޝXzOtӾM3ll$k0H7͊տwMo:B۶M^>^R-#+ FkG~X~aC5GjlpOb9ظepSZټiU1:znX\Iowl-1Y $Bq#Xצ ' prQZKg)!<2ҷ} V?}:tyB>`j#?/+::5m7ذ 4gѱn#TK6ڄc A\'ɬhar!h!a/UZOo1ʭI`=ś7dCin!4&R+El x"#?8]San6Ω(Nx] n;xڤCnq {!MB,~OA-QcsЦXMW ΕK5N`D1b} ׿DgN&"2 wG1YUxh0H} k o$]GJ׮4 ?KTݓl4&ҘqbMwa]yv V9eP1?e$sI'Xh€kzTn?.(Mٲ`_p}=su818h _qpn˰~zG蟌{|6lԵ4}Cx"dwbwGÿUź]pfrKϦcEΛ|cE4N4j9~R&H֭gca{agv!E݀QvHB;@,>AF- axz uT1<!u &p0Q 6GL7Jam f0_񵝅1n]B9A'};sU=G6t5zxJ蕯UQyY$E> oM׭׹hX..os{gC%xaaxD"`{2ǹG>X R z^A`6* H [x"` f|[J/[8 ``#zACwGt3r{-<ۙmTimfb"`R(:UCcJQkTw>mder6%@}ϰz*_O-/7EYGPو:VԳag}:.4mc56 6Lax CP5ѿ__4FD0gs=c`ċLf`t/bܞ;{ЏE^N&n*|Vx# !h$2y UQ'=ɹP~[a[\"vsTdlЎ ^WHcc&9Ѷe ovС|ι؍+%*-|sIir:]KW7Iޜ>7 fKcs)U^U m:m%<{ сW5h?Ň.]'WT$YCX^#6kPG{辌QtlU9H`T e{Yn(dZ\P~k9veq] qy(\r˖P Ŗ~۶eX[m^>,_4g kCΡs S•la^%'!!5ԠH#,T@sسA7fބkR,:XMLw$f 2 2ޮ J d'~y,U KY)cw2,ω`<s) p:F*GclnjsWjG(qltPG՟*FF$ a\T۬`V/P? t$PP~P$B``k,|p4ŧSv4{!KnDin g`,_b/T3ݎ͹DzO| |!h"  ** &W]2"`lROSBLUA{j ]A(hMF/7q6se 0 H d!VH~ W/6mR['x9ƍlV'D_5Na2)+S#QZF$%$j@g)SvWcSEX[W@y V >/&q# Ʒ~.֩HP7&8⚻[7(TcCQE}Wz(kCَtnz2ۢGحlMgOB.>~<;LA1Jf1 POw2cȑRB`4`X1"9enW+]*Bvl~p5۽E2{_[1䝓H+ޞf F"(5J,Ũ]x<*tvz!X13GKweS')q06W,s &e!B`m&;?twG'sLhalMVL.)6g/z#^M7!pcUh0?ƨPnOտ2]bzj8P8u_KXBƊwk)m-r/3zpiE"ث* }/oK u+W8YM gNRq~DU΂ҘaoG>iq䜛 `\VI @Aׄ_}6CP?Y^1[\?/yT88rH94_أu@ðu 9½zaپv95yh|z/N y"OF#c`Xۤ.뷼 Giڳ^{"`?-x02®H`F0+G}D!&^@zSmJnv{qߔei&ùyxk.s/75ݚwH*X ՝~-ĚpT%[ ZK~KE11Μ͋@K{*evY|Y޹XK5!+i % \,F? V2B@lF+]~)]<'!HÙ٥;=QmBlb_C6ҳ_m[Zx ;T J .`c#>f8htې<̓  B@# sŚ~OA 1r|!CQ2B@ Q6 mXߛp O8-L݋gz~4_ZZӼ jDEpw7n^z[pxLP1]j t㶭(j=iyDʪtbr[A| mk!G^ߥ",ZaAMa@dqۙ;B@x"'#aW.vuo;Ki쥀2#7O"fW#{W{%0+-c3"4v Y#Y|6 6/h'܂d~yú; 򴏏d#O{ʕہidf`XBlVįA nNPklbzmͣD;*26$?A=`eJ(q<k>Xd-^ ]aZI>^F_S~ZGIWL6B!i`Lأ0 0!i(>xj$tœ0\&j߸f5_WHAc":3yB"Å˂&G$j\/K ֣pD$/ R!@]&N4'W< n#(54!X҆^ !#`+YO~7No?.H}+hq\ں35F؀8=۩jCAky!J=̎T]r>*qXK&K_(NSwC냓Ƥciw4XtQx HA*~ Nn_/PɋxzNI.B`ګv N1ѹdk/աϹm9y0{zNU4EX ڷa H팡!X)hGJ@'؀EE_EpRtWbh[BKW9N^N0Gi@gׇjJ@)n&'<؋K/XMel]P7s)4a8{0L晜LLWsО=qhřqa)`gqzKt~>Na2/lb '0KZ3rEGl6.ipL8XI?t1R[~]V6ꢹ{4^IW.sԧ~gjet嗆Hn u@;yT2h_q V`$cA{M@]қNvY1-Pb'C>9/ݕb\/#-P,\ãy)!  "Lo|9ݸW`$w ) ,. {mp{ypA9|e ;5(Q:Q}@!`v$7>5 x NCeiXʏ7 p ުuD>d,0_xm$4& mX_KnwĄY҅'FW[FAMAr^l[hC7-q8~PBDƝgq]7Md#]'=1bx5{;V Q-v܆R"`o2;3. )h+*@u/RmTOtt8%Ԯv*3d=Gt 6m88dupkvGTT8Z b@i;'&HWa)! z bkד4vLx/-u6{<{'PSvR6U lϸ+"|A'<(QG -h?@yP`KqD8":vQNJ\풴CFj:Dm,0U~ǂ3 vGC%Е1I.}#^=},Ul33j3E+2Y0:D  <*J6mKT"ǣäp"Y膀q$!u/o̞#9;3]ECC!,os7+ᰭPX&%8)gV b23=_vկ _SjVXZ WGyg2Kg6R{!=Tѹ$kXtIQo$pdOB ?Hj4ĴV0;Rվz屷MAlT_QߨvC^SW+WSoِ-ʅ2/|ҥ.!M#sC@<3ߵy7,OPiiCZipy's=-_Loߩ0m'+Kf)֡zeqYTUZ"gl.hGw@*zCVH]|RD\w?;Rn#nt.&]Cn08x35{]{m ~V-8qq%d}}¥G[VZK[a5YŸ3Ymf$i-4Ц2<ILEty0ye%1Z>wmńR@` ̺GeSJ[γa)Fd'tW 1{0 P1JrՉVvl$iZMoMW@PM35b?d ܖe~3Ogf/[}Dai糨may tAwC5=>#Ȩ`ӡLWs<-bP_o2SqflD@,!{}K4S3vɀ&?πE4-HJ|jH)0%o=%(MlObn 4]DsJNi>Ǖal\:&:X0^gW gC(M'A.葧iHh}tmܕu(+B͖ZUkGJ}ۂ%5__ZΝp(43MUrͨ SKR^To[o_Ւږ@6A/|]^TeQJ鬒uuF8z %cȬQ3EϬ~ tYGTޜ.hG~LeX{)צ2Ny/Dt#"QRt FуB8%r7Ƹ7̙mg޺g&P#Yàͷ_O% 3`S멒 eV;?@. %@Xc̊\I7]K!?7TG%#@(+/58"dw[}ofm.ME(S]ݚ `w %dyYRͨ0(*v?ZjՃv/׻_N!\"gAʐi{Sr0BAk.eB 5{y7B;Eh\V*;[ΓrSKj ,B藓-O/>HzPp ]N52ji4%%B &lCG`$`=ԛͱ!l N랎57?l@ \Ze=aN@`Rt$ys YHA5S0Z 1yQҕ,ݑ1O@JVV1Fˍ=T.Jhq9 ԲJV[ ±rC_kFyE}|X Z2#d!Vh ]#n)N9z:!xJ||ht,:<12s`w R>LҢok6h!5uL [:4D֎C>zZE G;ݖc&d9)x% ]ɩZIYR{sҍ?IoIfVm-Ӑ&'] # i2z2E0<9: ]}b+8M u-h[5xwN [9 @ӇO"lJR"Q9%xF;\!5[ʪ0 #_!@i繙l`݉a#7Y8!oj^=&wD9b(dc۳\սjiZ\Zk6srgodG~LC&P AiJZҗ\ gCn_-l`;/dD؆ +&Д㡎6 Zڮz<vg #*{H_Pozqr{K@tزUZhY?7ǥ>q$ :کF~>Uޅh ˃bthԋv Jzcey|?N ,6LtBt,%te알dk0ˡ}('3-`,RS)F&,8"w VFCxe;q HIeM=)CEqaɦ#HȲp#tx 0#`)Kʳڌ]pX$-`se4dt/NiGߚJ%y oUuh,W"ϻ"AE`Rg6,+O]9 w BSi]i^04iU>xЯ!t-bh4$0jLC wC ]BZۤvZ4YR} C ^gVs.%i'Pfwz9]x 6EU+>fi"_9{ ';>u0 *rޔԬE<}n CG:Xg=әHfAeH3pwv6/b@O:8,S\|<̻WH@>>奍jiݞ޼Y>T{f/@;/G]->ީ>G>b8%0Lqu͘e,')Fd#dzy'yROZ2빟?f;R{$ b!-]ԎZJ`CVLƣixzwm |21)onɦ3n% @[k#,.zw zSU\Voں!pUMxGC )Do iBJ5vI>iBkitW#]z2 t`꭯֗OV+O[NUzdC0 ]C][fzr#3d&tW`2PWC vt{UeR8v}oNfhy"cA5m_dxTFyu! 0P'>;03m&RTԽޭiytu!wuV&#˒Gzm7XiJ_kwDʤ^NկY; !o kXUNi<.G!9 XXQP{#̧Wi.+^Um^#]ʹ~GA-)3r~a2BFM/oOD}ۙa!wEnu{^ښD}c)⪙!^m>:K/ _2qxI@jR,ȚMORhJ jOROɴv[:Iqu$Q˵[&N}mdXKrȋ5;EqחfrW=SLk;ʟ~oYlRgd"^@G -C>jPӅS*)]DZ2/؈eyҞ9 B)Be ޭJsZ<3(;fKcXj52b _IOtP8 @J ey;ax?yўLOJ7 ]  72 5 72 Flying Meat Acorn 6.5.3 2020-01-18T11:50:08 V@IDATx{G,xIJT˶Zeγ+ֳڪYes2gyk3_gpmsfܞԊϮs SA=%Z=krme<@X7E ʵ~vsijgޜ m{hPsk/q-6{9ZzU|uAM,Xkz{d~}NQsA[Bk3pצyhf_c7t~u]Qj+$ZU~[Y9VVs6j%Kvkg[4tɫ9ZB;ĺ;,6P3ݚ*BŵtXԩo/Q]gU_[kyլzОnpЈS{k+{р=k("{%*.TOED_.F?5I{...+KxBu{Bo/Tt%^q)0P_-]$X$e*;LF εta>vIt:4ȭ!T!@ r/_V&LV]٬6>3ct'jq-u9l69pAMftXxlf[*;5_EMW3mU}ދzWwm΂e}.p 6z 5wn߮%苪ux,6ͺNk-Q5gmul}g М -o+ZF x$e{w9k'37H˷zƷzN+1]U)Z;ۮf[}y/W"|X]0#= !0Paݩ/+ݥAA8 3wPg4Z]kkrX޷VWk@ؓx:] _X[y>t!inkqw{\}mw~mcj[=4N>iL^fEs=ӚV!X\ѭz4[ltG\y#KԠ, ֦r=R&Rkآ=FJ,rn}Z ~5wDUSMv4Պ.;՜?jءl-0uX,4izin766)^6ּ_8(0h&,#q2frT!nو@NGlQM7jQ@7![M%j:G]ې z;'[CJ@):e>s_S۟ܗ~Gz;m٦Is=0 }@f_],V' ^[_N7֦3˹: y)Mn+P7l V#|4~!v L@c .!MmZa U#62PF6fBw4 l,)/V[F6`_kӊ(@Sh5翩]?z1ukF_M Ĭ@gl!5-a}^)eBޛFFL_Sb]<4w-BP!,[ 6 X yjZQjV6!2} X `Ew%+vlw+cn0Hajk֙n/a-{ڷUc1녫j0MWd}?X}8k^PK4*smRO@~#fj@A)u }K@9h9EX4֞u mqkeܤeID{dҭ?L,;BZD_[ ,qi.7٬k/}"?x_M ӏ4W,L)+BJՈRHm4/KJ0B`+ݵT4Pu۝i ~S6xWD%uүM PK~_F;Gʯb @ʵOٯ x'~' 5leX:O ﻱ ûs[_Xyٖծeݼq G)k+~uүN@m'د?~BC7qjeZ5\Bhh9k֓W39=ƫ||97np`N&\&x-YfZN(Wb ֨.B<:Qc]}ݿjɯ*o4X-& OU >4~*X̠haW-f~-̶Rq|7Uqd>޴!-_7 S$ǻM 1~EpB]yOEj♇#kpYi}vO;֚DzfXyӇm 6%]3RZl5亦;6>+(/ɭ6Ś]=V#ufu:V]~.;Ќ9^mvv;\pmrln14A d8`}VרŠ__ wJUP&#GA 6-Or ڝz+1hpe<'O٧`G`_Qkohz.5`j캲]_"􅻶Ьsʷ^vtk S[u>:NEd._3L:k{$d_o3):yZtmL(\ORe߆w`èrUп\4PYKbSּB\[цE90%hv4\W᫆BPF{@)-MԯL4RͱO}#P]S~u+:SSM5&bݷ1JuطyuxY>Zz:}K!y*|&Ng>WИDJzwU6 e8P8au&S/XׂZZ6B0`1b0h`1 n^p3]'6Z>u#[PYq:!q&'C/|ZkqPYKCq&ojl{Y6ѹ9چk hdĹ΂@7Up=i@~J+GìV֦UJ%>[,^v6m l,61PaQuF!Bsm淒|ȅe}7l!^\XQ(>- f8M_^3}F8/@3^*PLULC#7G||}>si$?:Ƕ,;noNl]]wA5 &T]5 +Zlj+ɨ+" ,i0acZhurHRֆ@ ֽ;o-dO.t uEq9 +>,;z+ $AXYNٴ"%P.fe7 SBKsd˝HX kZI [}S`(5'uO?痄vP^+ʣ? ӔZ@ lUZl~H[z9ZadJ5akٕA 5dst;iNZ0j*MeR66ƒpCk:xB֊zrQWr.*AF_Q;bv'*)^yd]wg;#Y9 kpwc6hDZNd+”5!YFٺӊ,ihƅgVj;I뉊C,7n77lSv|ZPYD&OZaqT '|Y>R$f#Q^qZCz4e4%U >m2\yf- )gnn"eUcm:? emOou[Rƥ6<VlJ/QZn>n)ORd.8RS eiM[utVӳٶ=p:ǁƋV@ 'd$P/H`h>XA>[sáji4`}Φi]fW >5ݬ%Lbv+4t[U׍.g'd>z t=;:Kѽv0C[0C3X:-bm4lV.'F=zm }qK;|AK´ j-{]_q.|̾WMK[V랩.b0KM!e_dжVˑ̴risynƽV^iSmn2 Km[[\V'fhI+Z-X\}Y,\>ul̬ o[u(M'*.[1ulEE(;0|"x$84ZZQ5`E34GBݫji?[Ze$-f^Mpj|~rr%_/VLm;}f r,Iz1% m34{Т5UGf[s_7]^%!MBk=S Ԅi֖֜ݼ2u$ :+UW+Ul0Lۜ4mgqş his ݶòQ,[)}a=v*MaYὅ%aBx؇ெǗ/kr;D4@mz_i>+c$X|uuV΃'G"+a7ʱ-2Ib=G&ajE&7L/}f*8Idr(N&栓![baqlkBoTBhJ1FrT7s%I"eӞܯhMݑPw ̑I{Vgw [\~|/` K3'GØuSs&@Pn%Pߗ)`+UF2~ ,;ZYXSN?cm1I_K7^!=IE=nGt`sUM%.綎J w~<{Xoy@أA=`OSsg+O3޸/gKZaYkÐۓxFX1Ed h1AMS*(TF|gF 4OJ{uڡݾ"IS8/@3^\w1^q~]Zż%qs\- @ʫ18SC\1RzK:a c7M%P|\bZ+|r~wts"@\@sk|1_?-Rc7/h?k\7;ɺG_G%m@4Gu-5waٶtJ=dq[}Pj0%,&e >k:Oiv}?xbN @ 6V+z_ɵuطM9-@o2^*|b\1W_ ̵}/mt@_Z >B{(Ǒ' :R{oxAv?wKԾw|: %2@8:U?g.d}^h/}˅0q`nQ4%pV*댵G_ @p] @Q-ZkW~]kz5 (˘t;FkV/|Uߋ+*gfFxr}$|*y >eÎ $#P~굯G׎y*Ym,@FƫQ~^>f?cԄ`>Ӿl@K@5j߈kfuyC8 #Q5 (-&*.A9s¹.{O/ohKB8,ꂟzS7buWl+_L;4>]whO~7g` %x#}=kp,#؎&-koqEokoP>di߄@\2 6>Fm}^k\knrUMshBw.')Y5+][Hû_" pB;7l_CVKNH#⹍&P[~;oib>N\  /g>W'b柺g+PV&"8jb/],>J>yG>{@[@6(v[ݭ孮]kil:.6+q|-f> cL5g(4|ym|  $Mm]ȲX'sJr=w[`n5OK Î$qhsns>d}]Z@#Jʔ[/Em% Nuec7 PhMM/#~0E]|(. xSυB7VΎᄖuF8U Hڛ~B*%YX7)Do.@`~9[_2otemY^w#rkC~cLb|1$[^ff1V4o p,ݪav?RLZTW.9[v,A8 kQv#|CSʕe6ύ<9b  O[~eYk=׮AQ{SaZhW@IDATIK1g>_u"U, L 9@HI@k?N|1YMq=wo#&T4q/jm>ՈkZwm}( /YM-{v=ޚy b+#]la Zo2WBB7Y5ZF|Q߿n.@XU*/ǚf[ eyzz@QeQЖU}g,SgE>:bk0֧mҧ&&3d>@D@]cۖGsl>ud2:  >?^}h~%M;eukBJ2}`@ _=&W^-ccjv>5ӯm/`[-81x?'uS_SՈ7$u><'X@8j+ҿwmNۆ䟗\}]ڔdE +Xk 2s MF+_novKhϯ>ʩ߆nΦc@W@&.j?/Fmgjg;rtq_[1Ԡ5-rb _noY5#%ﮌ߳P.o_]wu1/>s$VP\?N1" uH8e${hQ@@ [z/~)[zgGv6mY<,P p=G?)_cp ]k߶#U 4j̇}7N}G_qN\358y#_#\;]_P6bƺ b-!qpr@Fg?-.ѺW'"vi%pwm~-}O6=[ ߎo'@p;!~~d%%(.{1_?ڎ䅝 h (PTyeV&rn׻K [ԡEuimu# xkJ<E-Ö́R٧RϽnYmMr"( +Wlww1K vvCϹ.uxe~e"Ӻ>V\uv(иW }6-)OpC;co $&;Gv{}ps}0y>\egӵw}ίܫ_O*;/#@-{źk-?_\k{0}э1%iP]ȋ sV@W@SmzV K?wk]>䟛L,..` @{-אfv>p-nÏ_rkNi?º?]&t#/=W !`aZ\}Vu6˰-h/_{}T Q1KyX-[p.n*.w@k|USh|_ۑ<Zz6 $!Nb\k18wkUnnޤ\צB /A+ۇ\O H8ז'Z[m[DuKt-ˮh@9Oz`{v-J“[W_*. :GXNul_<\; y{߅S "Oɜkp@US34%;ߺo{m9-Zs +_8`>?^}Pu)P.ǜz5If-]@^ @S oɷl_mmLW9rݦjVxC; X >AՌM  甗}1'AG^r]wx  M-u7g~u2r뿥W;VNr۷QyH!4kz#xFЪڕ?e+sb&Hy!@%4+Y+Yݖt޶W3mf^Zݵ ;|o,EsmCrM x(;XjkY"'T 4_# ?-8z?)㡽{u=OsL;@>xj(v62D)R =kM  ojo3Չ=W5O6}q45X \-tB&{-W_+.!S}6ks}z&F^ޯg" _ŏ˖.ȹUZ-qWgWct{B}7~@M#1{*|Of6bKvbbJQy?]߃ nYyzۏ@$,6wmY]׎(=YY@65v8P- [_Ѳ;l[)enI ˙@A@k5~2V`MZ7 kk(ItJؗUW{~-],&W_sOJ6 r&@ЬZ3bsNI5wc^:˷^ة> ?}0?bc}W˒roxgL 46*+5W9|y}U]gk$*_FpE䟉KnV&$VD7u>k~@zŘʩƚs@עI;^<n 9-|zvb}9)Af}MG_t%pzG 'UO],|ܵch3\gfFl"Q5 Jt% @U5mJ*)A8%y@h,u{M"ڱ4]'oUYmB +o&WmRZR vj~N3qq@[`g?#!]Z[9zZ0o^MW[֦$^Y p(84jֿҐC"z2B&S@@ 1||+lh}) {?U)@_U:U}Jo_}C~駨 5چ\_i/{h 4_K?b%UZ|^@^|ZLgMO27./gCh g"D9gX9Q'v=^Z?_9bCl5/T,_Ȋ՘k.[Jt<9B@I&(\\Qfړ<䟧b.s-6YW5C֖ s'@P!P)忭*[Ź7D~o@s+Ѷ_i>Lòkq_oǒ d3v(r +7 O`^<YQ|v#'ѹAeveS@N]+:c/} y.;uR Y@uʯD`Ŧ-@*5}3S}1'8vmYRodG [  [~o{GtNyk\aLخgk'J@rS %$^הx%κls˙@h6_s_zm6i<ڏV^v=N5xuF 1PgM 7Cb ?2dE\4n8t?heReIT &1v?zTNi:{UO-8, fmaP}okYuv>^f@]u R1N1_6FZSܦ>Q_g@@ a-ڢ́ѾJr<ꬻ|V]/ku-[K#,#lڏ|IuGC.  p~?Y(\uE\ǘ&ey/+ш7 m Zkۑ,iOHfHSokK/@kŕ?Zq:]d֟+hku^YF`u2[nZ3r]Gj>j-eϯh@{߶]ܓ=C=]ײmGcfᬵwOUz#N[_?CQCכ'jF_ρ @kiq,15նm?2mZ;?8-Ehh7Re%D SH9p L E_ѢH Gޛ㚌(@ hGRگe+Gz\ї+ʻ֎`]KɶLy֦oZ,osҾ&8i5<_)ҡH} lıNy@h"}1 [[3${~FKF !N1 s6K9Jcż'\Ng}bc}q=i n,Ir,  Ya;z1?]LjW9LZp[0c˪+ak6%4fUi;ť/FMۏk,R !@[ lmMMWH\K˰ %uWsUGNhXk3bm%_#DKF}W>U @W+gy?מ_6'zG7s)hi nZUrOԙ?QiFZF/Ug?K0igHT}?!d?NiLl `+ `ώ{:O, ۏb umR/{>B>}l;5_" n@)nX6t}w>AfظFZ Knkv.؃x_&IL6+q%fZg\ 4x,Py~ \~]Y|\@S7:Ϩ&n>xhn97{89 "翱IS糕!]} מ_cnCpC{TQ#}еtE,&.ݼ }R?OEOI#z&|>@f}m)^ r[13TuRSֿ@ }ͯx|3~=?ʯn}|F/I3s&@DX״kuzZ\}a[9wMͪ:7mhEӾhb/ا&M)jܬڎdo>/# pe?/]j#ɖ/E\ZSF~,:W\TV*36V\Eks4l)~^}ۢ(]k=F_ʇt]w,@~颒y[ojt=?kE W}^ݫ x#"jehΧ4gy\)f>Ζעrد]}Vp  @m|lWoC/d$V^TzgtPrz9^O*}կ\-+?ImPBb}0 .F[S%.I" " EUeٶw)cz e#'.@,D@ F+?5sZ-瓿,o뎶9a.w$YN!jkOx𫊊la'ۏާMY&×qΒOg?H+"`nT+#v0!1U;[4! ^D@D@"+OJ-yi^&E GOY`G@|Vz/2}b?95Xc%Y㳿?ˢ IKi>i6N5 "?o8v!Eh¾x"O>9rFGF&2K_`m QD@D@n@|ė#*UZη{?Fc0<-O T[ `W(Bο_V <?W$~" " "&G1r+'xn88lwqE_XL4[ #2V_?ȃTSf$$##?0D@D@D` qꟋ_<I-"ڻa;xO82˘5bӪR\ _~c.@"U!_O/Gʒ/0&*" " $@"?/^oflhxlvovML?ߩҪ3;ux8\x5PYF2Nl*H_aC+hQhPYi~fѪYY f!>ٶLsS{G1,m;e ՟Fwh~26 ]Rb]%@%k+qdT]ٱ=U'r|;ke1,,$N fÕP;V{@jeokldӅ!;Q^wJG=m9Y8Iirfv3ӣe#Mz*L(|f% .u-v+ ]mF ; %-LUBM8YUF4JJk8b òO*A;'PoYسs.Chnֽg.x8]O`¬uà&s 7xyrќ5YͰOٯq fDe/l>=myAkS@C.9^0օ]pz{^zٖ3&;a ${92{˺Hfboϼ7̆˄TqyO0_.65XbonB)s"6miiVQrp6 {3ڊĶ!cXAv[Xg` <,(4(^gH Ѷd5f۔LÊsni"E˔FKeq룜tv48 ٞVoX(xNiD(Ue>;igq#/tҮnŤMne4⊗eLJar84t"yBnIϼ <n=D8mɊNyjTd6^vL* 6C4*(, #j3 ۢ5Po²8:;qgX5x3YuFov\XRk]0{)Rfyh &du0][^ 3,!eʉOLNZ%ӥ<Ҙ9]4(g֔!P<⛿j&ژw?㵳c-<,Ì/`gh2!vnfiGZW=~]Z`j" $pH8dY@^VGE.mdE_<Ą\RFZ~Eu20BJZg "J%E\FdML sAefiLjfR#B,9/FrL6΃$)LdZ"@,(?QZhO1U|/dO|x).@ŭ~h^grVйЪe2j{40s,Æ=lN6' \A|7ӿǟEUpv?7O5kiҒC{p7w-guvдR&" 9B{N5-vN-IAA>$q) %Ԟ1̘3f8MYCٛQsc Ly5Kd*bXb@q|\"+FE`R.ki=XRJwC_LJ >'& Kd,LԂ9OGޞ-g Lr+]HΛ}3l@li6%/"*=k i"My˥ \N,,36;xkI`\ʐ , 2R.0NC u{Zg8"^zxl|4g7η?}Uְ+l%=K-U[Z~3L F)" $0͐.JeZ^VMN 'N/гt:K:;sϖlHJ- \V8biݿ`_YJ|(e|Jζv _d|]ځ;GxtkG[a!+߃쫒jI"F@IDATZѲLn락iC_E@D@n9$I3Jkf!$?2λ\[`sl6? N5Ė *DXd3g.:c{zU)oR+kHTǣ?L[(Aol0Л4疬̾j jU~6_vNL׻xۇ3\Mb+i}fBZm0K` :e939ȊIik!9`[BQN 8e%swbN*y_eՈcT5Z|I:z#F}!ؗIbj7ko6ɸAy=tNU+IӤ?ˉQ`t=BkG+΀ooQƭt,ٖ0}4Ge.QTp圗6,ĒHٜLqr(jV)u42+gD_,c ,NM ]B^<ϸ6,ǯ/2딿ډI\5#!9l(NZ 9+Hu11ej{v ^-'~GIR>jiR։LS,a*Ǘ3jD|](%A2%IFE2]΅.hU ^'L[ޞbDSsX|jWvm ~d,lv@;e_Gϳ$ obɑH0>_2%Ҵ% Y:M {yRYʧ`r}Raq_A7%qr{&" " D|ѿj`JM2)c>@LrХg"c`kd¿r(S˄U ͤCz@M3f7~Jrd]gx;[؇#mK¿6꽛a`T/=svNG.)KEr!ѱe>n1†Ik&ˤ43(cͱt1?(^c XbrUDJeWX6HB"ڬ^>U}r aOvcPKRLN6WqL9J]@S=F)Ӭ,630<03lElL:_">y@}Gϳaz]?)~xtt=7}JMܷlaRZZ`$%eq^e.|ul,yg[8.It.H>{;٣/bGK{*\.\Ν]R3Ce$t)IÜof#" 'Bk(l<:٦2YkO[1x9M1%GźsA YΞfZڔG ?Nn+x@mNJf3ģ ]BLbqlFmü1KvÝVZn C/#QUvi+$vMh٧TgL`v8 @IZKĩшӰ،iLP|EX$Q0x5 6PMX*Ga$!|cmO+w).s(gd"1,ELOQ8m]S@jfXl|Jċ(v v'ME3<=!H'aM@P|l7=S<<3%ڼdKj#Ɣ6&aNUbpcɌhӒKewnQgόRIE?2E3" P -VARXEJE 5Yb?Գ2h0lGU V912 HRX@&)u9 (X3!%o9Jqz:+0QX#6n0٠UJ3L0 XS0q.&]N>Y haBs@c6^by蒅VƊ$cCza ;dwY|ifp|2*Xf!f1Wn/ym>E6m?" wH[a#(xh 8C S". `̮r%%ϴ *`J*]Wbx4~Na[g>K9R54lRSoܴRWm.uӲ n>Ed _nRX/U{Rm _ոp&&(N^v)teGŒvv84^̎ˌIn u:0ΎrC,١r@g7NfXZ0C&ei2~*|Ȱ,ݩE(3<Ї1+<ڥV q>Z$H'o˫V0V$LrhmK-߄(Izo@+)|4Sˆ6pT[@R}Wsnˎ)Mjj@eRvk>ɠ_m& `kXtJ}/~z:*znY[Mߔ)'FԬEDTe}n6_*1ƯRJB k5f(7Nf-Fa;!È-kc:WX8,a` q֬|޴1rZ[Oeθ3Y.GمߴaBNWa#_5=+I3v@h=u?wt.*swՎ%`L\w;$3|3P⹋S "B_avҸͨ8Nz?;piyǾ W/M,YkQu9Rz%ÌKl 4+.a$e4 `eA Û<0QX$6r~ lJBʪ ("i`$3Q_fYf]~NS#%;f'ρ$=DNS[aa"f p7(]U~e4CEt AJb֢+z >^{"fۡYXGxI f!{>3}SIo;l`v0X I*|4'J$fԥ\0Pq+cgtz޳֑x{:F ϰvR7z 3$ʘxN#-Lw`>Mni9MgudbiBMfl< BVtgv[ۗvO(oJN>x0t^sA,tl!2KM~'%bXg(mh ޢI'ӥ {|'Mgݙʯ1!רڨμEQߊpA_N0)V x;IL xb5- [~g&m6$,#a|jfs:xi*!V3,"mI:%f҄粅fK>ԜzIW'wG_^yW1)/؏Nm^2%ZU`Jj[j,AV,O4uP::gc( fFE$`LaT)@S3ÎJS32:MY}OBSdOs@g5Z ÍX2>߶F[yF. YVh ?1nI`Xҿt6nx4wDٯImn2FB;FxZN-=tu B֣#EL`3=%[c $4_Xb :˝0*X.,٤Xu"%^ Y5;[SٓVf6T4$ /%( pm*~R6^NNgi2DT+n@6 ~?T}6RBK066 @lUayeM8VEz6kg߉#N 3]0 `z˩er9% u9_"N$E u,.a{px6j }/OH4㔑/=QZ&'SDZ L4" kE C!ѷΓxM=Gfw%z\@f(mݦB7R"JZW q0 &^Wti<'4#idY3!&Rv=E@D@YfrjG6(M\sE^W8#as_s,~2x k:K54ᜅv7o:>yiI|w`KG!J2+$eu,@]GO|'e7/e ɍ@r[).ʞj" " I* IxnX"MJ:hl+'`1^2uFoKU(REv'KVIq$@wk漜0 z& `nT+_-O*9+o|`QZʜ" "pK޵J,"hScl-s>=N2d,揕v/'D p#n([OPM!g9)8E?ѯرݟ[8iO|?p ݕ|euz|c7'#h,Lk#%ʢq%G$MԞ&ήD}2.Luf(f y;R%3$86Nhu|ïJFʹ8>74ؕkNƸT0qfBs>~Wb' `1^wHS]` mW+oc3)MTJ tvmճΖ y=qQRh}Gu d$WXC=! 1\s-.JMD@D I m[u6Z'3) Vlm=sO Т@яeu'$MhIQNp\߀4?('+&JcB" "pccV* %sg͹ZY*&+z[s \ʙ2 Jif^D0(1 ,MxgsqW͹jss83!Tʃd'҈HsC[5"R(Oz,L Vp3Jv朁r VV1ǟ=/Zl|N((I%HVj}X |}KVDix5F)"0̉5Xth6o:8]כ?DK)Yj2u9'ci6X|+&h ~$#,3`^еTMfsʒlΕWZiXSbYB!y *VÚڛ黇M[U}6QlΆfsara&9 Br7iJ֗| (+ _w.&!%JZ=Ѭ `Œ-@64 SASPj)"KlLu)eݺhGwGeH3WļG1kŪ,l&EyV0mϬEo؛q͸gfsЀS(˹Ds1vU&IZiΆ͆ۤoR QЎ)ȝi0ec)<+'s D@D@n%bp ƝOGU .佐oDl~22N /bt]OЩ.e> ٜzI8,ȟ'\g/|&WYO:{4pi,]D4[|5)ʡVԭAD@DەԺl%_8xbgw[F& j6I O*lqL^@oh'٣߰x2QTm侫Ifs.?|ΆC7l< ֭[A\7`+q͐bbJdd1E:TRqA;)ƭguEDi6ubnq2&.%䱽6߷D@j7tEbb1ܳȓ!Or"gGD]F RИ;:zl΍_(Ƈq,.tBg'w|֮ &^rtv2f,]~3_#f[<*,ߐkz%" F@9z|P 13Zݬ{' H [C-Y-0g+"L×_s54_F6쇐b HMD@Dv h6x2RZ_3g yϪ-B@:w2+0eR~Z^}h@n2ӵԇ" " UlND/_7#'KMp-ե@20k ,GQ$ykZPLG" "p34s3\g8|18vGg!zۡ`z=PZ}0A>_:(n+}!;rY;3e m=ldX+X`, YX [;wcsATωVhK0qEv -}.(" kKqKXj=:a#ՄU奱B$R^ky1^ =VQc)5$@33܎D[UGg.!E2Y*yơ  X*4z2L%wT[r˹ՓD@D 99M.s$ZѝfCx|ɳ ,fGNe4j+/m^X'c#QM&d /u,X{oS75Ro>Z{gb#m TmY2%W~! \{*)DP eC ӊS{CAC\mqbbΎߡ jKw2o*0?H9Fs0v\ uE הMx98Eq;320w-dNO /BVhw,ϮS,U*ڷB'~C8YJδ#K(&" "pK,( j&8q{pֶRx=Cvy6:>+KP@3ћy Ԋgyi6Yt̢MljD*ň|ϱ,W UE@D@.0? 惘lSqv ?WҢީI 7Jj1fݽ,oU3&$E/k~w;<[gOO6=]D@֐䨚2VltSxǬobzwf~;2v_bNiO?0g߷"^# Ufvj" " H W~ɳ Ƿ88T<2n:Wa뽰 y]zb>yNlo> "euz[LR  D1JV6#N+;db=%tn6*܉Ua]Vݧu+ ; .KsIڥx`WE )]z m da.w0,ׄoڿM8+QYD@n@D4TŠa Rឹ'hQ Y*NK2D@D`W*`.@6jՋ!9>UUd [$fוRg$f+40`Tj,6[iqmQoX#Rǣϭ˼[{2Tj-7}p*Xfsla._ΛJc-Sop48pe&n,G8QVZ܁hWU Ief+_Fx'cレFW[ޣlk? w njq۩:37%8BڥQȻѴ=2"*Xt(" "0K`/Q󴚻nw?lc)ꥤG//̅؛#Ͱ^=t^~-їg.@Ƅ4?`]Agu)+" " HjujT=JijޫyPށ*qUA!|Ch崘Hf9խ GqL^@]s}˔5R%࢟!PMD@D a2xe5?փf\Uz'6MB@͌w,)sJƱGǷL^7sw*b~P,@d5N" "PsqPZA@Z[{f66V1VR $&X!'bhy 83I.@_篊RJpm@>gќ}n|Ԝ Wq0BY^ًVam+JO8!Ѽ2ڪ [ I&RY]6ID@$0>(ߘ@kg# @PԛZI?3kW H[@s (hE$ew11^ $@mFq4 CCŵ9wC9jC2:r@!["[!}S+Y;Q܏*2(Q[nm^d|N}s%Jü6@e,+OD3nQ3su Rbkg륗 /Zou. NԴ҉e­H"2 "bmj DPV,n>v+,kȰMhUG@@u,k(e7~0du+In:^ !U0$Nqv TWH "[Y{;-ou5ةN {/wր흢 c}7GbZf{a+qN΢| b}$" ՔTJ՚ o9j:{>A ]]u`jdTP)κ +V;pjf> 7ʺ!daqj堦BĹk$" "pB`<-^@V٘"G 5zBҪ18ljOV_#@bi%} %bD$Ρ9qH\$P:ފjS&X$@5xZ ! +4ba=[nJ`1.(F)fey9#Q|@5~g}βFF~ʸ]W^ 5"$`}_ 7AF2?gRYxm%⚚MGGU*/\$UM|5d;58K(S. )dۨTN ƣ V_eѿ{򁮰@T"?n+LCP+Sɸ0b mݓ(]$@n1>n) E7͋C, ~kBj =ɊW?5݂^MN)o] GWozRJ"tthh(w)Seꩻn>( K\HdE_rOz_F@eT@V/`;VxbE|wRT97s¥FXs?eg?FOjj'&8:i@p!lP%ɊcRhU~ϵ;˻C+)}CF "8Lǃ/q%?]s= z?bƒ8Q{\j2&Z+yD1r$Q\v2*&" ">@ Xmog 8xb,*0rzF^VC@\5k*"+dvX,ډi2Q|@[{q{/z?~/k+G̅"QKx66bgWR@U$*\J Rh lQ%ghmqj+8|Y1T P*~ 5HD>g+0qgYͻY3 Y;H1D6Xg.ѺxD@DGѿdobAZo Ac; e]f!v$V>O2*X_(pVb,@^bz4w*Ĺӥ#FXSq tdL|?ה姍?>f2Cw_bmWޅS#=$9=+Iɓ*WjV$:q4V wݏHk,Kob{m$IH@E& B٣Q|K R$ SلL*`KAk,E qv> KѝB70I?ض^y9/ϝ[UY,;0CEfh #-㪣k!vفQ]E@Dq>3g#Lo}>uJjfw$| 2\X `߃+8+@S@: ]jmᡕIMt5PAGf:^uSdU<I fO2nkMjFDw(\NRc?gFm" "/gK8|hj)K% C y/C pP#2c;@wܛ(wZp$d[ʻѬ,/gge[H((e=}NΆ8Wqt U!F2D@D@KE !)0ۡ6SPc[>a `0Qs37õ&R /V\덗* j ~u|R8obIVMv]JAXaW@//s{ h#" ń!/9[ r–HBO Iܳ63j02=\B%LW7IDATϽg(B;o2^)x[z*oM\E nz̒/" @ N2> Bk3dJwlQz]n(UG`|Ǒ) ƿ╜g2Ѭ0 P]E@D`d>MWA6u-Hz@l.[I,󋔵ED@%ci| V^9.LKw/:ڟ|q2zqZ_de,mEzDO.SEBT[+r5LL,K@@en8" &@Ef+/*(tڵηs.86, N~g?B{h X t4oE*ԒB ?HGcLjP+ghcu⊹ǗƟl,ڰ[+&KD@n@d`#C6N)Қ.Pcߛ6zyimk?){ .G2 k,[w (ȿ$Rr  57*>|3+ɥ6l<'9֪b.n8#t~cDcP*%34%;{?$uWI2n&Lm.lEws$5^ I)@n," "x$TxUPXN=wmͫѴ)O+Fyn>u7P>hC 5OJ g|G|di%s@KϽ(wK㦎NΌn8Qn97u+" DH@OJz{q菇_ljZJ{7waðX?sd;;ݰ vǧ*ϋB,!˙䋌ED@#'TMfc(aw'xEczW>Buv72=@'n)wΚjg ;܀A>KWD@D` <əz_yciʽ(cJR--GKʜJwn§J֡eXw d7I Xs89l 9}^O?3UL*ǯ|#w nv1<3ө{(kJ^5%d]:WDHYA pfczu }~ed4r#\/}Ȉvdjjg Yz'" 5 8 (g6| ~7 }Ktd4V_}4!E?C9|ފ VZi@)jP!ZWLRߵ& %Ns*d'@u nH8ͪ@~^Rꯐ$!Rxס$n_1&6g7A^k3X ,hu3īBN\2~-uOϜ j,s@VD@e|%TځzUʁqT XSRЊpO@Te\҂|6X2oP[EZ2Y?iFH̅,h%XH%`= 0iod$V2ה+yyJ(VK,YCP뻽JDZ ~t" Qfu5 HMB@@SU룹iઝnsRuU۩*ȁsyվ@ѫ0z/qkDuTx[8SsgPv) sD@D@<<XA_Bgʁ@SHhʕzzA =1i*f)CW@Ckv>%Z[ v JUDr7Q*r{|$(ni~GaSXi5, &Θ|bDYd4z^~6n^ ty7׌<$½sM~sYSΓFMD@D`Y)8x'eeK%"1JpDm Wz;l 3]$wSwPs~>{('bXw\-" "0?qA 0;]DJp)!m\a2V;tbv w? P[)ۛčōwocߜp-'+x+l'}/AThJ@D@$0xLj={q&愯V չVK4Z6bBDD:U[cw`qxxE6LɠJ#ZĬ݇2a``ӰjO ʆºRE귯En3!m+8$';$y4gSua[[qx/HA((UΟ7" "0/l#*g#pN^K2jyYy_!6TZvJש*JN6uZ" "p" @I-e8sM5hO3bQxFpu[LãD@D*xSi?s5hUn|(6CMd *ʗRD@D@DE?quE)YZԕ ^JEȟDBN! j'dӒM)H@ 4 &^sD@j1iɪ `E ×{œ;^_c2j|q8fĞ ˆRYՕ󌒋DOR\ҵQkaj"D2xUϟO?/ $" "  [ݕ?P P^Vkו" `.r%N;D(B/+\$QjKAE@D@D2V^ǪQz,k4M Hڷj>Y-ݓ@5Vv@5kuRjK@@m/McrDX3;8-wYg8ׅ 5L$jL0▉R5E@D`Pk|/bv;a"PWNq!81GFw (7" " wL 2O19@Ny/te _V9ϟEw!/\\ DD@D~qY*W K:@ ũjh ^_$GD@D@cg0ւK&" " 5!@U{sjrf7Nbs4lJ|+8|擢" " "Pfs]ZS%8TOnQ )s$fW,IåԂyZPgx%f1T (\C@5pQ9i ,g4NCD@D` PMCN ܭ&& ї<9emKj_,X8d-XMD@D@j@`2XPv=.ۤ A# ::^1pt"" " +M):+MCyz[EV¨\fZXy:Zdf92dj"d2|u_[,؟ 4ĔOzlz%" " K1ur _{1"^kDd4>95l[5-PP]RJD@D@$tQj 3"6sDd4:~ J?O,8͟'n93-s0B.6sk1j)RE@D@*!O>;g˺aJ&!"Pg2|u[,Bșw#B$rS Mz!M% Wyw$(I;X%{S#&ko-4 _l(3~!B)KK=S NށNR=D м{*4+-OZ{/#e e+tCHt|=-FB6!Rlrm>VX2*9.u" " 7GA`i6UB VE>dZHE 0![WM^.)ad}<-dy;ko)ǝft͇"@*fT!-ǽ8m9;f].0U~@g,E4y'c {Fm5sDd4 -; [$Wj" " "p{IP瞹GFD?E`^2%-+.-KeZoF/"  `>@py4 0N9?K v;+UE@D@D`A9~u).D` X)Z kD:8aM-"܊yS\ўnT^Q8[&fʒ漵ѝTkVXH5'Jd䒖[8.Mw= wy6:b+XVlDd4KCtwg(Io(x=7:K58xb^$É(*D՚'%M,@S/@-WdַCp'+ ;"pKd;>LhG+nb@Eu5CqG/aջx6@kOH[# P遘`IJU`(e멃ѫlҏA,^DW* W?k qTz$AD@D` "n)Cމ 5BթXm{Z8y_ -Yj" " "pwXfBZpwSGU2n, ? h1L_ٹ" " "`b<ș")#q5! `M.tuR.I$^P;$@4 Pځdwx6:&IEfVcf \," "H݃W*%l}ڶy(JpfV\yݬc{lk8(״׷m ;f8X& `ad؁,YdH,Ґ 7=Q `-.";;VĿ̀`%bDhڿW֝N4( K4rS=2 l],S-˱%NB; !;\B,7N0" " M! N# !PMփ ΜeK)srΖ3Ow<ڠ׉jĖsB*&tT `=3g4w_$jmDE@D@jH}*bLH)! pPk+RSr:1SQ$#5? %ܖksuJ\HJiڑ$GKIʥH.f؝YJ2\$H4xl$wlOf(q,gm(u\ OX T C-nJ\L?MnQu) (es< @b\>O(; @ ǻi~|zEa(ksz4ٝ]rq:}}ӥlO+?bFbs)mw@5=VC Z< 4(НC#Y@c'qosl!ؔ@ ^׶Ƕ{wCil;R+V?cbƖP62lƸS2?&qa69 hEq涾aW=޼=ǂ)ǫ;oDX(7$l5|Oӿl t`M;ǫg{ \I|Εnlw-c5xx|ʹ ~#FUvW&JϿ@  @~֮|E m}ڵ#X`M.upi"oţ]ٜ\A휌Ӎ=E/2o Gbk'%8x?3n^2KYqAlJW[Zaz>3\w^6@@؀)Y۽7=wx=ٞ\I; +mF1?[.VM?[T@%~v_͒̚|9^"  @ ?MvN7ȢE@k@\]lN ݗ~qc%͙NW߱ @ 3<쾳ֶd// .pn)Ɯ { ͙p}8@Nw~6nyMcOanlK`]uRsӜ GΛ%,b)s&\υ@w+l&ӭJ$(?ͭPnǓ{>gB 919؟ @@@L3]ϧD mv ]LMhX!VU @@v!GWb3a%/.0%v Ltn{1ࡵX;=vؘ.g?k_3]ۚ;" f\r=͘6K߆a|+oxdcٔYoo @/fϾξ.,Nj1Q _oٽtvI% -Rg @|!O(/ @KQq[m-MP5?>6˵| (^~J1h!aBs9AoW ^~HvNO1O q?iN>t܋& (t,kmwN~c'ӚbIkW  @%9|fGcyp|sg_N<9cj,p4Z_ -8X찯汓U~.;^_'@!o|}/<~>>znXO[kk~=hw~o1_c [&ܲ ;` @{fwC @@@<pt8`oƋ ع;5OqCzaaI^ԫǝ 1 ȋrX<cr51lkZsk7B92*xm}wI.9wĮb^ @ 3M;*CX \CڝFI~ j-6v "@X`M.ufw8}xxôylO=p|g;gw?iNcAB @P6??X0]n$?Ɗ[?{6mM  @$ܤy,X}X>[,&߾3>䳗zr NL[ "@\pkb9q?{<M~ l{;g'mw?Q@V%E fm5;d{gokO?ξc)'>vޙ y?V|z @i @ Z1g|/W!0^ösnjXȟ|1 @ }6bgc<|xbP?z"@Xg`[9qX^ rWfC,>gEV ,$#@ P)`%J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*J} @dpq @*MtoWIENDB`apjanke-octave-tablicious-8a1b10f/assets/Tablicious-wide.acorn000066400000000000000000006000001515050116100245030ustar00rootroot00000000000000SQLite format 3 @ Acrn-) "l-- tablelayer_attributeslayer_attributesCREATE TABLE layer_attributes ( id text, name text, value blob)xKtablelayerslayersCREATE TABLE layers (id text, parent_id text, sequence integer, uti text, name text, data blob)b--ytableimage_attributesimage_attributesCREATE TABLE image_attributes ( name text, value blob)pR;$ G/D ]"Cacorn.workingColorSpaceNamenullf/.acorn.profileDataPNG  IHDRĉsRGB IDATc`IENDB`X%colorProfile HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km:)\acorn.exifData DPIHeight 72 DPIWidth 72 {PNG} Software Flying Meat Acorn 6.5.3 {TIFF} Software Flying Meat Acorn 6.5.3 XResolution 72 YResolution 72 7 acorn.snapToSelection1acorn.snapToShapes;acorn.snapToLayerBounds= acorn.snapToCanvasBounds1 acorn.snapToGuides/acorn.snapsToGrid1acorn.guidesLocked3 acorn.guidesVisible +nacorn.printInfo streamtyped@ NSPrintInfoNSObjectNSMutableDictionary NSDictionaryiNSString+NSHorizontallyCenteredNSNumberNSValue*c NSRightMarginfH NSLeftMarginNSHorizonalPaginationNSVerticalPaginationNSVerticallyCentered NSTopMarginZNSBottomMargin: +]acorn.gridColor{0.112960, 0.112957, 0.112959, 0.500000} -acorn.appVersion6.5.3 /acorn.fileVersion /acorn.gridSpacing 3acorn.gridBlendModenormal- acorn.scalesGrid1acorn.gridUsesDots+acorn.showsGrid-bitsPerComponent%bitsPerPixel dpi{72, 72}!imageSize  &&2 U#)d37bf3c78-7781-4605-822c-5e67f744b44cpublic.tiffBitmap Layer 1MM*?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N&%n5_E.M9>Un]9Na普m?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N&%n5_E.M9>Un]9Na普m?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N& :h)|(092~H)" @* ^L~xfMdQc(.f:.G⹾sgz{!>efl歳h[vl{.Ϗl jݬ[+Nӵ[fv6@: Y #f5y'rFf|j^3y;d#.AZz(4*?C|;) ?ߐP 8F ؁!"Du*?P`7"b_(Q@HpwP'b]oXX 9|͋cizΟK]W^F>T kE#jKr5`@K>_?~_;k=@#P(z 60tB0y {bڨPt8D K$Vt2Ā  H*I A9E1o+̵-˒/ 1̓,3Lԋ p$79Γ; lq>驤iqjR7;D#,`Dʠ R)rJRǰۦUl<<0Mu;mQEe6 j>do qܗ-+4]AРB /Ǎ׵?B* RmN ,!aHj/*5>=E.MNU-͹^]eo1'A|f2hwgxTRPb` FhwK˯Jb1Qs٦յnݷ{55Pzt`|#'|H9"Jt`^ts;4]O*I n=/M#-};NpD_I4<_j=GqE I/Qo+7n&)l&hxh'[? p#hť69= /%б~NDD2 J @"0F0tԏw$/}QP: K~h}fv1*< -Q`D1$>,g:4`6F#[Wh4U F`XE'X,05cVZY1&ct sN]yU2,::r9r1XQXu~@*FN@,I 6x³Ib:whv<3q؝xb 䶤-TjDM&JGNѕ*;a Va~ܻN_C]^bZՒ@I};7ƃ&Y(ԃ|[BlF܁0!mqj%٥. ]!0 ,:7Z1JCy\ܼ%%GG)&3RƖ:̮J>YmCD BUs1ǁJ_84[>;2+&Nh[lYa3){4u@˱8sd:gU?ǰ&e,>plFZ/F%U` X"Jp>6u n[;aZ~y 1vn#~+"yԣ麳tve(NQb~%)]_@7[N[/+ͅR~XҸ5)t+b w' \js `禞~Ojz @X4 Bt>!DX^1FW9pҧ;1LYq9NAPZ5IRu>ԀISXU * ZTZW*՛ lXk*hjkmWU@@Z6dX]WV֭)tߵ{gW?Xgs򯜿m4;-mOV -o#n*mܫk͕q<#}X9Vñyx{;|zt̀@ :耾?l1(PAOR~!4<~2j 0.LDΛ $ H, PQ! G2,",˲0L32L|1U$G)jRT|O@P4BP5D);:*Kĵ-'L/ S19F+STJAEEXV3 33/<̽!J/Qߟa+K:e5P"G @m pLd @P4? \!lڙ9!vkg9w!n_F@Dxzgvj:jk:ַk j9'"@# xRR@+ao;MrDshT$Ga:u~qwr<'r/s(@n^s`$*_d gQ'5)1Z`' >x7y>Wb0A (]H;7|?ƍ̓:LqQh%ɇ~?l%t ( ' ¸fo%`5q L8`C>w4'BY at/j y# , P=)Co!? )҇Ĉt D<#C)E8bWf-E0@su UzK-8}toK|I\ȕ&K#AH9 !d2+hD?^d:RR^MIh";=UJY+et$ARaJ=+wo2sMsEDZZynUIə :1 jlNa ,KgBXVN֪J=3fNb; . zU@粙k.Ω>F5'8[| Qj 4NF:"~avJqV5ʎj|*6iB,},0˫`?xs74f fќ3~[7TXM5d5U֓lyޮ:X)9&֊lke.f+Wc,&УU MNIzjiU%n ]?4C lM-i4.ҤVf1GSZ-]ŒC O@h@@ QU(u>#q)f2V`!þM3 ~ {2/8kJRd,Ar61Vd1JeեQU ՏCmʢ ܑd~ruGZ˘ /֙ʫVcDykCHEYJ]Y(ڥeeM?g-/ L* áJ'Ţj7ǣ G$ɤLW,˥X| @ "p DѡKLө JTժtcwD Xۢ K. v`X[=|_.H2?lp`"~%覀m-ٙ``OJ?:LUkLz]mppu3P= Suy0':{^|ZyYZ޳{g}tY5yCXdpuoY@pI?7"Gi܍@2cz8}AOy}cfI {\JGf=_c~TuE&]Za!XەeYmAF;g9MfXJ_`Y&7^?P D 47'HW0J H* ,c[+K}b!'&KA0*I-#rk@ 4@Àk&y;dKpŞ#Dn;|A(8Zy zpj" o8ۑRIQ@H:Ǒ{+ѐpJ*Uvz͚e$j<)(O#|$H]epl%>t2wЌw!=$Ȕ*OyM(T2꬧#`N#̻VVxOme2W%@# 8 ɹJ{ ]xJI d Bp?&XM}XG>(_kfšgA=ޜ E Fe+ـ݅Ug*P vLSX9il,kz-Os}ꦤ8բ=gQ`^d\C N*p5u|LGYވ**ILL|f1*O|E`]:C [OSeZXƭd^rRr+ES ~Z&A~ "~mb]~#N+%c5WfĂ -wyȈ5(ovOhMw;}cY, SqKΏ^Y9wL~5WfqJE UDMhrb@ir29vhYޡTJ66!mI/5Vkٽ6H\Ou,ȥ/>8jprKB$j`xN ] a:Xǘݥ.I cby$PɊOy;"O=\!Ґ^+V{:$gM_. (}3N?=L=$Lt_"bk LRu1Ai,p$\_ɝ _[##3E?ӝ.{l֥P܍ ފMJ` I qeJ>@>) eQ @O =}!~Q]^NQGĝԬf̡h=Z 4H Y6O b5a6!E9C=Ct'igC٥tW. R 5K] )5QDdg4ϛ 8ٸ8D =G|@m6MA(NnSPP>U%^V]w9W|(Ō;iTCʋFe6%f]%]^k@|>Y:VdyzcKOY pOM؂qN jҒtčHƕ]"XU~XJHҹZZb) )* qLˑz,QnѨ%1Hfq՘,vs -VN8TNŒB ޛIkTUF%QVM{"$bGeOD?9 a"%UYYƑ/ZQK7`k fD'x|ȬVQ۔ lh= =?8XR@@(%0,NpeIeZ)N XC:XÄ*q;E=ͨ@H @DlOiƜΝ!IJ֐Ob( \ Y̚8|jci>x_Z gUF"f%cIFd &Jl*1jd6%Tx{MN&@jFm@Vc}ȬQqATor4>DXETT+UUƒ%?+Aň 𴢼A@Pw_L('v(ԫ2;91[& Xì2%|)iS=<eOlG)J,p8XÙhH:Qaܝɽѭ-&ҐIN)ꯒ6>N*a\F z=ʢT*=F&8]!w*ez1ޫ**NHV^ ^՘hp_M'fzF~Wjm-G\7B̐|Y$Ӑ@4[X`^Mp6ʮ--,7`,Ep9Yü4%ǂIUDo6>/FMtQn7TPM4!p5p6B^%z&ӌrtqP@?O BaPd6DbQ8V-FcQv=HdR9$M'JbpPS̝seT8 lTƐ+Uv_XlV;%gZmVeo\nW;w^oW?[񺞗;gq4)`>?= &MjuV2tUξ=Tia "tz]>Wv{]wx|^?'yȳL 4I`%Ǚ˰j@ 8 (AeƑmuǑ}|& T"d%l@+ J`:(ڒID. 1'g&\7j4n)ch CMEєmG%IҊln\GP 8@,/Um[q~qgr:ʘ ,N K@H1\[͵mۖo qI}xX'V&Gq&4xĀ:)X\i~1uI`iq7r h⪐E.MNUQV^rEe@xN9*N5cZ_>4^œy,`J ukUj@"Nյnݷ܋]~9xJ@ kֵTIљ89X~" (r]o]e#ȥl5Yܝ< LC]Kޏ(Gœ=u6U NM r5`@L2ͻdhAQdPCٜN3p )8GF`TYDi1TΚSZlQ#2d0z|G nbhXpqRjjoSѐ,.b%|\@T"ZTH)XV[넳o,IN{.#ABVK4t*k6,lc!ɒkYVLO-kMiEVgknuz;h*HH FZ\S>?+f]v=̇zegڼ̌_`95W^[̗P?#%e]_ "@ ,0ln# S>-:5l8%&iHL0l=.Xoa=fo %=(o9I`[u 3 ֿ+L}13xQ P ؞1=~@gc쭕YYl0R\:P<rtDž  `"`zҌ,N\D`"SٚC:8JV-ZOJX̱)wC#t٣|`tP-;~ˌzrm"[/flm7rvj4p&Ħj@4Igm?{/U7q+ZH H4ú'lh쿰# Bp+ B3 Cp;CC3ZV%|zjjƬ(@X_'@{"¾Mc(Jr+#nn^7/h@  `4$+Ȇ;D+s?OAPt% CPE+0ij;  A( hLV`)\" JU{_WcG1Q G+`8'X`0!+<́o[q\w%s\EuOggD~#d:ڄM@Rq/gS@h[W;]}Az*3N#B*`R SX{ghz&hC8Piz(-DO2&0,|syQ?)nHnBQiԜN&4<&,ɀ)s|;sCt}"`3|7IxmӠ@蜯"}a)m/fGPz Zm) ?J.xY%\_ ;/[~~4Y }JNG@r1m@)SAL ȟx(ÚZǀ2K؅P+g^FQ 1pzXدx_bTK6'DT>cx u7E af(c@ 1:0>SG @-x@XPRpDHY>¸7&f8 t(eSJyQ*HSpX!``0q f@rnNF@ F(6Df@LJm`l@\f5DfCƇ's4Q:HNٕDsA_Au)LO@h+OlL*\OKW6B#r +N6ΐ8D1[`q[ p t?O BaPd6DbQ8V-FcQv=HdR9$M%:R9Sr }QEdD(  jU:VWVkUv_XlV;%gZmVeo\nW;wAϠk,t/i̾0WPoD8 Q,r,/]RT@8?}'rloXQs>xr` >PtP&5]g|~_?~_ NoY0Ld >Cha" }d`rnc/-jۄJQG !ȋiz&Q$`=͈ .  r"̓,3L5͓l79Ίs& X/I$H2/4B6(y괆=gu 3b6΀1 6H=UUՎIxaVEr`y()|= "( Vٖmgiږk̊~a\u/z ` Rv"~d^W%baƢbL@OS$Uppuw (Ҏ>Mye普mutYqu*z/)a J F/: 'Y!P/TI =( Wza W`z{@|(衼qo%-gzA%-Wk (mx3b (y4Xm)(]-2͸F/XX<^oĖ:[#7Z \@c 8'Oo/ܩn”ܧsT>fNm eR Ȣw9~ ?NJ-*X`};̅; xRik#mX[DIQ.&D؝{%)-9QDZPO$scl bX8ղ$e,e<(7W!TNI]|L0FֿCl K .2#&o< /6|`vm#ouH]1`s6^%{s:HO3pN9/&d@X4 Bt>!DX^1F~A!HY4Q)Jta1ލʶ?\]'eI@Xx  R! <sbvZP*TJdv?,6bl7ZgU !K j!]DB\val]qnp^7swBvYMlz>0P4 VF( !:m9`P J0,B0' 'g XF"p;N㒦*pH* Hs 1gFoG1wG H2nvIn'Ǚ")`@,AS G8~EzvnLtD@F/)ʄ@"q@д5jngZex (8ࢪ ʈ>+@P"QUWVUu_XV5gZVo\W*j%ҵqKI: bJ/{⒟HDE/m.L3NuAw|!J؛o%(g{7Zu8/c87c?d9Vgnqԋ:At>Ѐ xU4C%'' ռO:%R+KH1!J9ezznsiTgI6>ʈE>@i1;p<p7qlNu$Mԫ1v@ 4 cő1MYJLf_"P)g%SZEH#dtFI1r~3iXMY  & Z*A(?DQfg]`x)`(8$VC{8"05̗Z,ϔ2&ߜqN99g1(e~? '}9\6Z K׃T>?2J9imH n  Cܜ8Q8Hhi&`);gughWJ*Sh7SyOihVMY%W=k*a!Lǡ'PyfgpP?#tnVo25DsvSy0?V$,al5&XIP>tPGf?;S1;fNSh @ X"[dAneX~H*rԨ5b Fwio.׻f] Wv-2O͵ P)4Iif~g`z8 -pDb(`FY>bA08r.P6U*Iq6'$7TuF7^g^@Viw6D7޸^ek`!*@N۞%x-%?>q jl)jO&Œk -Q3So>xwFFGBv7H'% ~kc#=IjahȃdKLnQfqNAp}亞+r^>F2bT3T㻥9ΩzWehaW-Uz5b+_rv[>/wTa%:;tIX9e ШDP0ʱOXU;(?z?HX#p;[8,)zoMOi>d+2yߥр N!0x#ۼo7@&L/<;/HpC(ЎPk A"{(#xi);3u壩 aIgZ#[(6 ATdtu*)@2 *Up!'J.$b)2 0x'E>6?s2$3.*8Ô9ä:#ļp;Xkd 2Ɏ+Ȝ{Paq)(>X"UH?O BaPd6DbQ8V-FcQv=HdR9$q5Uʝ+%I 0:M P&sOTjU:VWVkUv_XlV;%gZmVeo\nW;w/r,M(+x@(HcEi$.`0OzTb^b 4Lu:6m!6}W2TU_ p! -= ҅6IC=/'z}^g|~_?~k/:p Ă~+T"2 (  aDTG݀ H4P ((?QuTrQl0"!c`,y-˒/ 1̓,3L5tIb\oQf0;ࣰ>'oTpU4 (x*͓dqPԕ,go)ZZNvIxRX(uSX-cMeٖmgq9QF('t@(8 ԄO{b~DxAJ`R <B kQXn<DDzI@<Հ z e普mu)QG[BUS< y_<z XdUk k'pLׄb nz~幢Gn]gjӲE:p(0 %-pN/|G"9JI PN󽟆>4):Zaځ^n~'aGi<Kqi`& X= ~w[Ɗ1Փ4F;4 {lS%l.^tsͺ|( 6c.8L T1tJI.)` OPAE)2S)?`%pD~D: vswj)syEWD/Ada %S8T Z1ޔcj2y$,Veuh.ퟳw#4hgzPa]1X&Lݖ8#᢬-<2h6x^-ɪTQhj8  Ϗ{:XN|bAsy$o ).c&yY>g;?4CpJ"EC17H|f- q0l` 'bE z'Y]ou޼,0ڵό#E m ؎RhvTv-?1!/=Q}}7hd5:iO@U@## 3z_MGKm"8#ǒ5)Lt5閥65w.׊( 0F fR~w\ӪCoRJKÀW?G_~?I'dheT$1OFf:+~zMtgOe$J 1jLl >@Qx Wޒ@q1qMvPowJ l6 &@$)`>f?  o*NCu}2ĸgBz~& zrI&q'2u'fQF:N-l#:LX۱b)vvkiX/n4l7|)"FG'jPD#Mn~m),//+{DCUp= DXe.PRm(D13 JD$2SjǢV 0(I0/"2# W7838c~n@8#BHlC5gJ cb Dl Ij_r\v:5"8QEh"c(^At =B!!3$JBm= @A4+J+-A+r2()(C$ 75TGLn/d#D3ήToItIIJh/kUBCb|vpvCsQQanq2=Jvoom8ޡLJ1.`/t2Q2%NQ5Qrn-'9޿sCYI2=$}zt S஀/tFBmNU1Jm<j0zd@]ҊLgUXY0Zb\Uooze0W6~OD^mF15P FYBt%^K_1 'N JVQ^V `a.*Æ,k[?. )'S4ЃN,~!\{2Nb΀ Pd,QHd%kT&eeH) B&dtKV_hhL4MOpqgc֎I~Wh@`<26)DȚ%GPb:u(ZGeP,$+|rӣld+HAI 1Z'nwq7qj`֩^Ίv(.exSqpA:vD5.SB_dvq5DUwWd%Hhpo2_2Tc!2&vxy($Q"ZKt@*hsE6+C2S7?O BaPd6DbQ8V-FcQv=HaOtp*eiK9m @ pv"3@ )6OTjU:VWVkUv_XlV;%gZmVeo\nW;8 V:XR糖 i@Vvä $u.? ph*2d#!#0(PO_\ g a߆涓|\#:^pw@WWMl˧XB7u=6#U-)n,WycNO_?[Rw\M7𣥘YajR|H3khaɚD2H*] W%/ 0i5I]P =0epil$FL0*쐛⭠P f>(IbLbIBmBP((n.l?A/xOj #;@JdR/X΁Cގ]on0fv<%m&܃r12'蠙`ʉ*0+lN/̲@iO fy6c1q1uqx)X!&H0G|aEI Lx?qOo&( PjާAIuHI>n1TG(DWq  }'z@K$jʰ_㌸c6xXp ;_L"`i(X(@Ld&*NC'"n:ئ`Luθ8,yh$U20Ŋ+.r.[B/B,K`8/z:hD2G NzV}J kfA #2ˁ*$Ĩ0 ^ntQ75a63e6c$CVrR\TCJI-”דE\cQ, 3DxL ӜaF2KlXlq6/FG~i+ Jf74b|l(b((B]EaF4d&!/iin"`)X$4 4!D"%j:6w.mL4gӰBPyvtgMN4M'P' ,{e. I0Ĕ i5j(@X3QB5>4 冒%j0QԆlFKNuQU5UUr*Wizq ]bԔT(+J%/1`qf(I T'qV@I(FP'fTl0X5Y\u\0H6̟J݉B_"̌z!( ~uh.j l'R6U0EL #5T%Ycv9cQ00 žm*A0jK+m`.c1 0 J ?O BaPd6DbQ8V-FcQv=2;ŭLb@ ( ́0&“`(2 A@`iҔs=̀u @ (-:̭Veo\nW;w^oW`pX<& bqXf7drY<}V6NcWO VgYl='vm?ޮ@񮎑v m d&v{Qxn˲N\KD6 `y)o* Tɰ (2,zA6>kB n9 '9d,  =I`7G zl>>`.?uGn36Q`-*rW4U!Y4xpȎ2oe=OCgEicfG}ҁvAty]]l|u׀YLeueX%u|ݕ"٪t ) T9۰HU Bf3҂Sa,@|1 >dxRPsnA=!PBXLcDqN9CiX 5T0O@-p9'(?F7|SFxc-CN$DNN:-E'si1S0]f;#cCN ,E5V#[=K Axd ɏo)EAYԹO]hK:O]?ļy ĦP~L51NzCDW!&U&`?ҁ1h.Jp TbLqnMٽ7SrNW">Z~?Pl-e4 IHؚ@l,sH'?xE^N8i##QLaet1X` Yq?gO({UK g]}&d2WB@,¨dC,2lYeT\djrYFQJDdϙ~%5, 僩J' <69$ΩPdBfԖ[=v(jUc5g0 ߣ-)0($ ?P$C xL /À00^.}BY0I'@D6J2x`-*91dlX֫uz`جvK-hڭvmpܮwKxޯww~Ghjp ap%3@LOWIb\kͽ6Y h6',=v ˙|ىp1.Lʁ?^O/u5BuW`?{Sǡ__.FTlK eAPPO!8%T6Y)HuLU>AFmMOSTI(!|{"d6G,|!0 0G$W]M#*~)I$L(%Sa$\Qd9L&9uEKԶ^eu I!EhyF)TVAxtIRRᗹ2E0Cd J4 @R%S*?iWuu328h* @eD iX`B\(^_54 To)iK2PJ*dKӗ>̵//0 0J9 6$)CGK@lS#vkr=9KVݏ/ ٰlKg‘r\sC2J5%GEF=4]KS5\ՇXGf`Tl.y|W,d+mUM'qKvuR(OwHS4fⵖ?@ Aޓ~F2$[yA9y^_|G7} z-Pݿ~:$"6 BU?&~Rn- UMa{|8^/a$خaV0W:!ڨ$&hWC`'DqR uLUb4N!w5?\E .T P!hc 4Èri$n 94!4p'%l$Hx+Q=CH"n B`0ߙ<Hp `)ňZ rطC6@;;7)Aި]b]M@ֲn\+]r-:(C%dyFLNd̩zBL(SurQJ_#Om>II+Z?2~Qș}× IcԖS Z#3fC"]5 SBbܝ+tsoif.~/5Y 8ђA+8uF{h@L` ZH*@֩7Rih쇤ҊSJYèb& K#ŕ͕PߥFp?AÀTA7Bdg,S1xX+6ôfF?#2W \t2ɟ.2J>}[*6UӫyO%^㊞Kͨ?%(50[ |`]64{m'2mst TI[zQ?kABȊ] uH-îދҿpN0LdՑxpih[4V+Cy7E ┎U&W!m1zip+TXs@?G0&Cj? c40^ʪG&EglL[I:;g-5T+H>)u(8k q,'ʲ&))@dR(vf݃IТSASw.r(ldqP#@"{ZC(c#Hii!28PQSXk^0us^64q  6/1oTaŵ,MýjfF`0@٢e,=7s:`arbwI4܎}ɼ޻{),&]dY BIbĖ눏9CoϋY.!gtz1쵷 "u7TBD# Q I7st܃Ob|M#B>5j/#dǠ.u\ɽ'?x2/Rc|y|QZLBR@JKQ8Cڪ4Zk°;0"3C6/A7ֲߺ%^yS_y.9nI%Ǔje|N8B}Ǔnܷ}“nI;-xPwkSZ e NHҹBH<7m5ċQ>$O]و=G`k|޾? EKkx):MkD@UhdPTQIL?M!ǬRi8 ơXC9^۽aRaZbG1yR,I"ԟ2휍_VٚEoӉX50H UM ѣW I]XDSԢ()]U $ŋXŔj$> ֙ej'?D b0?4݌@5  gD 6'8F6BP1RUPz-W | f~.A$!49=4r7cz78c+9R\tM$T ӐgPQ\(ŠB@PZ J 3 tQ)4V$=ٝ:@㍾>à|?1ؕclTDfiuP B$ T?X,=P U `hnMž4!zkAޙѥ.UeZUbVejV݀4:G؅St` T^#׌!rM YaJ Y 䜙hTAXlf CvW[C]Gd*3V|qަP#T?$ۘ=JP vQYe*mՁĦqgq"rg*rBY%O͐&]rb- Ap@(gzG Ő^lM ny"t0 ?.ƽSҀϟKL  % W"k"?d%܃myH@o@ q> i(JJJh Ckt',p;mjrmzW-و=\@ȘɎ'tUYv_v(d{e:MHpnO͜ҖȌOtI`T"xH>] ɖ(^Ī5C@.]QH b (5|]W&ڏ* o1,Iø31#q+3q:9Aq_V1Ra4fh@O80pɶg-pӱѠ?2ZeI̱"r+"3#r;#, b$lmX^zxpqr1pfXbZق2hkǓex/0s 01Go*q@d3 ) <o*/E3Lo^|í\>Cǔ@%dW\N (s?s?@t lrR2LP>ct ZlQx nm)F| ACGFj5,@@ICъ8kGGN y K$LLJX'u-*1md:ŒS38WXuX&{ AfƆ TY1-SC(egKh@ h\0& $ti[m8@?IF$yg:>CG0`DMk5]Edc"ڥ_}eacgV=ipNH=Vpo=TґBqJ57asww{wK g @;xEvNCܶ.*" qZ{SFlF(zۋpw+E[i?L>femNcM,NWAKEoxJ Aˍ+M`'j6ktgL;lPm-D,x3Q-R;WyE*\| [il&dAp + M /DΫ|̈=r\a쮶 ?rM8ܲmVx슖ť$ S q?KG^uN_.D:Dp><il.l.ɀ]y}MF^k d݃ݪgG;:{)G+P˗';C.gQcLo3L{d6ECuAѪˁѩ4zYȎ䏲P^Nj}䎛,U u >i}| f>gCRHꖸjEM2V ط\RQUfA#/iןiV/˵oU5+أT/ݶ1[fqq8uO>3w|@ PC 8M 8R+#1r;$2)K&%2\U?\*?Y>P#/I@VN*5*V+5r^*zhN ѿXj (0C!"SD"08, @>" {9guƱ;jQh"䟑fm6o}anNq\8)se9&&DY\d_=cEf&#swV}^Uu^4EcicGDYgs(=x BdEUhEMaYvawEa'y!4~ܨ=֎^dL#Rv]i!wcBD~dH8|gu*}s7EܙiQhIϏbI|%6si+Z:&6 FJVҵ@ GAAꊦdӈL }8:V0$QP ~"dp4&8ȣY1|Ur=z]b2#mq\~o)A}9og}lY[UtB r/qtyݩlELq{CAuyرfwU,3qm٧ ]Ws0 6_3;\661kS2y8_CwW1@ *+6"5 +VQl-?r.ӷ͠do8-X!ɛu{ƠyGEhKϷ +!j@pO/Ih_;TQ0:R)0`3 ,c `8J- TuW/A= !pA%dxU4@N($+eppSj5փ[KG*$9+$WN^|Y*B ɣZd9qvb 4H7 ɣ|1,#Zs !i*S Y"֤>.JDΕdLF\b,&I,xɨq؃ 25r?9QQ%6s1cQO@ )vG".lSKמ2\IR Zr3ѓ{Q*'E(bS( 06h&x Bh5AF0|x+ |)DW Q 3ka`U4 ! 9MQj'd~ z?G Uƹ d$գJiv୺'r# ;2vX$Cb̜zRe%=sb</Nj] 4/]쪽)f'nGMxgA@|s݀> }_s~C򰧴´fAN:{m?R[ǹ ͛j;? ݽ=Dlx !Ȓ,#Jb <)'!a+̴ȒzPq ao~զrR8P95OpO? %Di SMt(R՗n!TSܨILM]ec햁n .quStiד6׵EV}uq'Z |{Gekl׼zy{;^B>{d6_0q7E vƊ*z-gvNl   APMƪ%?)N@#dR\GD7P6DUB2S`OA8j-EEWhS$H1bK"2Oɲ%OA@n-@z+FqQ^3S`!7khbi}6HwυQI"ȺH!YK2SBd#4JLR1hV4H̘KRݼb$D`)8*00ɨj+BZ܄(3BȐޜQJ`2N&n3v6žĠr D~=)A CjN)ž8bZ ,.4Q=G!D-y|YϥfNCZ?`, 2HUtAG٣UaJAl/!7-мihⳓ ?B}ӎJΏ'G[U*82g&^WhD1v/8d' yӭzu;,ǰ$Zy,)Q@8@ * /k˭LB.$Vٓz,,W\[qk3.>#8S,SXc "@a3KKWJ5L¢y>䰗Qm5k:, A=@%VDZU_TN yFfFKVWbR TpZomb|b&DM*ڜ @'16&dܝQs"RT^fOqM,.U78cꣾIUE RYSXz)g6/Ն^'~1v܄:hԑ;v"Y4*fGZCL4&DbY&ݎɠL\OR~Eoi,ذcqYN,V0(F!FAě'fBOAZR=a+NGmeXۻvnݻ"^QݾA%CާҽS,|/Y7F$J%=PZBZE$®ʾj謇4١WToBܫy4i{= z"B`*eWX>lyb'>(PY`mn:q}'u7;Q:]W[.CpnMӽ7~R>GJaŬ,dhN\T#0Up.L"P° 2J(0-K%:*͞+F,hlQѽ1jB&0FP 8,ԧoPd&z!%`"@!2rqȎP|a$*ҌdLTp""#Dd+h׋lr+vM|뀵$$(~$R%mNҜ'|(mRm()2)r`asan’o@ H2 "rr-k)FK*tsJ*Д,Ì)" ^U.K fȬ,RQQQbSlt((i3353s93|Qs1rI6w1J܇&Q*U*S18m1&u12:S;<3I:ү&(UBV? 69kj:rS!5b!9csn"Hr{.Stq:;vĉ])i9CU P'Fr%ȼd1H<z$n`15 F>|{#TUtA;MI!R#[^(:;Z|<wqȟW$D{KC'g!A1Ry! [؈wRڷN;J`SV䋶a᭛Ͻe}i@aRԷՖLՀۇc84bcs>3O |MYi$ע[][fgVy(\¯7[M]ֽW%1(nbX~4,`(l@.^ ?O BaPd6DbQ8V-FcQv=ۀyI$p^ c@8T Aa fT:%GRiTDFn@z7镸8!Ksq~~ W-Veo\nW;w^oW`pX<& GW Meu~&Vv'4aMV6jP]Dk &C8LxPÇrn#e$ .@ ̆YGdx|Q vPI*|`اb3G~_ ,  K=*L+Os6"+D Ê9vL%g1r#2"'a0̂;,qNjq$)lVv1 (/’ Q-QlNibضh,0Dzv =.N;=ϓ?ʩHpA"A P4HT$F|tc2̀@KGYWˇ@ya3.Ɓn >* aeYƩsX*笀(Ҁ6%aHesMuݗmw<~L%5H5sl8 \x~ QBgagmxR% H5٨AJVoI&g&Ɓ0ހV~&|絞~d3[V2`#~\űui/[ >) q\&GVq2}8@̂avrvܟ,m6CSr J2В/ףnahIYGUDS3(U}Ooh:Vm֣ UH2Bm r2vR+?'N?@*vP \&꘳%pS 7>@4!PBXL~v|;&f]M᪨Nχ6 L\́p|'0݃2(B\!@t(8j,OlP)3 H:f4NY^uъ:GXyO>G9`<kkU]Xt"7E\ĥ MjFY2eD+L6lY:c[ٝ3њSLFBCzN60KSsQ?G2IX@wAYtBe(`lh3ص[n[ wtf+%B?痪^+Ѫ -dC)!TRZ.G)$z^~?6 LsyAˤ~$D4{0f@+qa,;"0Y6$) `f!KJUT^Z΁;Km65', #RiQ+Z,VXUCWPӂQ7QœG2DV\?}#;#1Ax`b =!UR.uT1%Azj n$,Ҕ$UΙ:@M'߹wn]۽wU")3K9:_Y1B )͉pAJu+i|xRjXe? ŒȷYhp& ?cb]18 {tOuGhe pDH~anV~!7Qź_Ac̉*ǶFX)FLJ@hI- X} 3z܉-|RbQgp6RP F8Cs ''KXd)D$*cXFAɜ }M4o*m\ s>ƸH5Av -_V믶[Oj5cW9/ݝfma5Vt~ ?e/SmLnҙ{ȶe=΀mW%Aɫp Rk++]aՍo!\ ?| XvἐTlR ?GdۭS jR1Z5q_|5n^e5eL`^.q]mT?^UM M<1k菇 [L 3 T1gRߺÞ4tp^-d9ety92r 4{}RdL!ش2ߖlXHb X;`[!zV>ʼ55ڔߌ!~s/+ubAa%AQ 2jq RůC$D͡"V6O1 _c2ϐH.)JL_ExRǿ *FSH&Awh7h`Д<5nijT0Z0j u` Dhmk}-i:j'p P{ rnj1%q(F%a®$I c?¦RN / v׏T$Sn(.Xjn :P>{q^vmCLجjq]>oAntk>"`*FˊXr%$"aJF4jq.ˎ{Nl%!㠷!nVKRo"M$Q%.KR6 HB]j ~J:TILƌ0b3uG'&ƌl*m C*U2",42BŒ-+-2-rcXoO#ʽ "(-!pvK*%aaw` wĨY Rм2-fO,ri S,! $Ҋ0T0n4i6m6<f lPEI,\s 3d?*l8W%v$$qC:&+7)!>\0 n-Vա+nunMuS?3?s! ֭Saԝgr`Lu 9F$0b&[`6&r?S # 嫅8S،i&\ jntEG}GPHW3SI|x. ':P4ݫfF#(sEDH&w>C. j1F4 T`Y 4M P i0: KKP,z\'k#%F"$Вq214&HA3 i CP$V%Z0h&pf*Ԕc*OA,%/܁aYZ/v0kG$D~RP0$,=HC D,c3PT$pCc@ֈXbF,Uc6Yb6%bnF3mtlj4FlL%Mat̷ f2,w}^yb1HfcJ[z7j< 7LpQ 3T00fj+fֱk6*Ou8LLb|( drRSD =L'&K-~6iU@ -H9%̃<&c=tHn E.Ɯ1!kwAt7E;AEANm# HwE-c[emUry"!Q~`h 2c&.VLP68t qlci~C!i>:EG}@X4 Bt>!DX^1F~A!HY4Q)J؋?İ[']! &!@4^YVFʹ3wv}@ : $3HiC @@k]bgn xc"t0HcHU@?ju3mL޽kP2S5 rw?t^_v0?tz o  itAIǑ~\&f@ʘ u7N: @@+*Ӝ·p?D(!t)J9|Gkl .KDQv癸ț foغb1,K2Է.K0L32L`f0{0SA:'8,+Lv's"p!Tj~ () O  O4?O BaPd6DbQ8V-FcQv=I 9@G@ Wz-9;ȴ= L% A~ u_?Yq;E ʟhR7P:% - 5 Ð=rʉLIg@^P KZǑ*g_Y"i,pNB2PzzԚk K#6뻮QY\%9 pI(oXy6!ħmq~{ B-a=轟m} ;OKfX YvJ''Pl[pE y^*6~cggdEsÂခ ȚB7\T!$C9 UsJ98;X)ϱZT 2Vk,-X C1k,pa۝TFȗ%UMSTj I"DXDIQ,<ªR(%E'`4%Pc?u?f<<Y :: G8ʊTr %A\%{ qټG#c)Hs q'`9ȩ'RRJV?p~?G>ic: OHN,!Je2?epO29HA8j&_5_(Bn`p ê ǘ?Sp=Ȣ<\u?T Ƭ29Z+ˏZV8u`_P8RPEcrɠ=eA`U/^7ҝ EϺKFZ5Z:9] ҇$35*UڽWa-%+ 7L ]bD`9?2f\͙E監b0M~`\(뛍9G34,) b%Pu2IqG Ŀs zGtsW` AIQ4fSBhQ:i]vfǍs4@-"Yon.o`R֠ dc"TFt` QI`bH'`9p|ʦgkmǹD^̒'h*?hB=&\H.?D ,d\ip 6AE`?<؈k m8Jٍ@MbYef/ I^薋֥ Q-v_)\Of7p&*א1TZϘ*T3>s~ 5dW*>DN%J`hkdq@DEޖL%\i 1j$n]r+%Q{ _IqPXn5ˌ.5gd@4ȯ1!nM?Mk@(r80D^q0Œlm 3d`f&Q) ) R zm!C!#r9#%pDπd;2 @vO&0lw"y+/^ m{Ok($R)g)Q*R+,#6D~eꏍ+ ¥PVfN$b.B(f'#Bhh~*0mq0س$1xȀ%43E4sH+X W@Eu1L  AXSZqM̗f Kei§V\0IΑs ;$gQz~s<=3 *̧(duBzc`rY -EG.Ϊ;(s#.S;ֳ)Bi޻C#E4UEr>!ܩ"zTCɖddpgc 0،nLcdiίBXys)F ZF3CLA8 ď30Zp6q8IM4 Ϙa81Qz&$b~M{J2*9̆d'Xd2^'0T#x 'jJrkZ ^rdIQMTPsv&jlQj+&"eF6 ݋gt̼+TU"Sz?++`xgS4;(8uYU[ Ka\`/l^tl z T3`N 6oSY5$!ePu_c,z4D̩^.PFD\6MdPGIelf@8n,(W6p]9;>pv :V=J [>66aq/ fȄ5x@a|WYT"xDK'5bg+Ń=%\ZH E`B4X#,/3g:3z 4tuT8L\?{#^,,US؝xs:6t%Xb΁ 50w.MNpNzo. ?O BaPd6DbQ8V-FcQv=0?\kރ?80<ҍGRiTe6 I$҉T]0̩u!Ѣl1P \-6B) 1TΚSZm èaF?KstE'3IM, Ex ݽ0^V6FXhbElHVѦin R],VXTE1cczSLa{G&l\Ic:1YUгA'Vbt Xԟq V&;4ұ.?iD2\z4 TxN=t7w(zFY!5}b{?jYy| H)'LZWb=_[~_4b{ڐG|U:ZO/6 %|X o"oF@$cBϜ7dJ~BR^S6RzjF+$MNU0<,">,H?Ҳ<8@v쳦Vko0Ps#~FJCDBE9dz% X$$jbXl 2뎼p#yP20?X4 Bt>!DX^1F~ `P4L@bC6IAAɥIRu>z ư=XB)t 0Xvq\[y^`\6bu%tI#V;pW Y,0 ,NC5ClM[4mVWX|gNpP .!0xp0$1zp8'leԡ9,`"(ƞJoB(qy>34z kax IF0pl%Et_F1gFoG1w#j$~[0Dzş֭q Ζ'j`y9H ( + <p$EF1ٞkRd+A WmGR!%PJaCUQTw^W`X6bX2 Png_Sx+8er\iIa2G"X|7l7:* ZO8,\w.XfG Phi![ZL;aBpPN4!=Pl̟ǣ6@O:h6i:V.WHF$5au (U&@ޖ8r8(n   l;_GʔJHr+J fɽB KPT9`P7t&~$mPi8&s tx>x6RXE:Huh){k\Dz5 ?ؤ^9s{x|_qTG+iRUϙٻW8KsgHS%YQjK%;EpP @P(@ a4'BX EHo #4:A^3A< xu!lG$hH+dK2N̙,c >jd9E W=> b9G8cw"(Q  FùH3T@pBi;II8$vTPXTZgh+4Nid~US'G=l QJH})䨗]Ky/e9#p I0a>@/ # כ "KM[0e`u̘ [s72ӂqK9g;aswO?g( 0f3CkX8!P\4f*9FߠLm 348i&,3bpK0ˀ`ڞä ~R:KIM tM)7&TSZZk,݄c=09h|-V:{HexHU!I,EyA64!ķ УkQ( Ad,*AܵW_luFY3TAѲ-DXtvRZGmdH,,p?y,d#[1Uj60qXb7F];ujk+cLCmL@6.J|ngZ^!kc x~ 4f4V@@ % RJ/BT/X a<)p7&vˈ.SJ> R'2&_Z݊@ %\2/&N3C|sqG'%d];9  :)##d̹Gn]Q1;1^~w'C,ـ, GWRaj@9h= t6//~!\ Y-zC}bM3'XFPLZƹWiiڑ҉_5qڛT<-JEF}f赶'el ݇m3IgTr %0!}c?O BaPd6DbQ8V-FcQv=ޮ0?YKͻd8fҀ*93GRiTe6C#2l1R 94G7 “ YZmVeo\nW;w^oW`pX<&8{%.%hMU i Apn#/τh( juZf]EpMmHDr-*6Ё! 8M OiL*q`% A|~_?~_p$~pJo ͣ, 5 Ð=mAċ@ߜErRxk\h4##ڄ,}qDU{(9 9cH+̵-˒/v)L%'1r#j n L3s0ϓ?Aˏߜr)oiIi8$|i.ДSCQQT'iڀ@f0IOVm[u]וz)O%'Q[`@`B•.4@`E_[͵m(o ߜ n)8h{ 5zzʋq\Rp'aN6$☮-5pmO'ag^@tz%XN9AgYRRrvW1H)}F` G.&&H\{tyn\Rmĉ82cLB7~?Bei)&'*S+},3;X X^ vxf< ZLٝ3њI]7$K-wW '6٧9Aӥ}(r?%#b;6A=`d*J]I)Q9,O)T(QC:Q=G!+."e{ODY>"TNx%5D?ҏ\<Ӏ2F; %1ZYk%t;dPFu%jqUκWXW!pxV k v hҮ. }cS7c\HCSʹ<(МXÁB@;<]*uzlԏ͞JϢHaYF\[qE\ ~ :oH6ѵ`"h]/rrq-#{6L%\yRD xy|ҪUL @{2BDr ,Xb\Gp1ɜQI t)!S ʦ/S4FH{•^| ! i@Ы,uሶcx a Ɉ1@}EFʉK 0̀ 9[>g{_Mw6L' HYQQ"3$2#Qۨe*SGtd~׹ln}=0 nY'N-L怚ߪvF[/@Eb|Cc2q%e`e-7һƺ#EDTs?V9nC]-IWwnһp4ئ&2y7;ۆph$߸bSZPu[M%pS(KÈrV1$<9W]"X!d=AeOexM:GI]."jz&׀LELB5R;OE?ȔEzk2x֬Jū'y]w;D4% Kx^{n߼~D䁺(@! @/%8=G^GA3QK-HQYTO[ ܔ?FLQmay_O}_6E/t}i%X]MJuGH~s"{%a<"s~0CVӅH$izܩDJh}p(?/*%N|h$0'TP10UpYLY#E4Q e^mU*f ~r'SЄ5/b:*͜PDHhް 0 b,{4 P3%}(Z. /Ћ &- Z$P1qkNR$xc@0 |R{0g">-<,MQ1Um,@P!Y` N1Y1zaHoKMbq}PedepMIjOFfqb3XJ&.IJp' (pN&*Zq\rEZDh1!VbxbXnmJ*,!$2E$rHC2!2j59(j/fcJK"%P4DxmK7m0o)2)r[0@6`'6D*)qrJ ]+ҽa0Řm>Z+.2.dLM M2DhK.'1R̔@qlbOBi`^0-213#X`+%.3Q0Q,8pL5u7sy7*&JJ검dgFd&3}0$v$@#Vo@vr=9<3(GB0 ?O BaPd6DbQ8V-FcQv=ޮ0?\ ق߲ \l h MiTe6OTjU:VWVkUv_XlV;%gZmVeo\nW9kͻ)s--hHH $*ˉ 'ry\g7tz]>Vy$D©Wg&Tf@`"Z+ޢTQ6Ff4(8EQuϘـsƆF:Hrv䨖 Be'TS}Ou#q:(lĦi^0<H(2jMWM$\GT?%War5WZ]Ii58RU%ˀ Iā(00> 9I6MnU(eM*($QrB_\p(VZ\xHIa98|,4j3` g94ºWN][&1;}##(yU9?n'z@^Y< h ND@?'VgqI\i+q=,v`x xcp H(=l% - 5 Ê{YFO6l`p |Qt;uO\yu#<~4 ae [ D/'2/ 1̓,3LC$DG>E쑠o@zxQ95Д- CEG oI)c?Ҙj nFUMUUՕm]WeC9SK% X:X5<geٖl%EY֊~eOQG#@^+$di]mwyޗt͟Io_2QeBp^n!bf$|( 'bn]e晭 oߧziCFWiNiiYDn٤@1rS#`K  J1!Nյnݷ~DXqaoW <(0tۇgxif6 R7ƀOUo]9kEiI/M,'xՏbknOT}0O$Y>Dv/w S U2l J9vCm,L - X-Pm2rؚ%E^0uL+A@+JJ냐x S O3‒!\K sOx"&D؝QEu|/Ni2pќ,q2(oPm 2X;ƙ`8k0\ƈR ?؝$Saa<+ $lND'PDNN p  |F(*PKYm-ĹJȼ so5tK< ܇vX> PHT04SzOS~ݛÕ9QJxw`߳zچ:CN @US,z(SXP8KR]KE=0:jYQ2]1Lڇ3lAZa0H6,YUUڽWKlaLK2)`Ŵ5_Jb'_a*l-Es$_MI+ qqRH]d( $ hzt"d\Au<Ԩ<Rpr 9n{< CqZ5` G:g\o߬pZ^X@ cJB-T(@Ұ=Kr'*"u?LX ZhhR%ܒJ?t(/flݝX~ű7bu2U+Z,v ͟ᶶ\M-&@ J`ك@ (p^ Hd #;IIBq$̨%.>0 ~Q(ޣd^KGMs8&T_ #\sf?˸nG4x@pO'cuR/ȹ0$-:@| ,<AT. CN)En9GI%ITY-Ki5My=OEBEOΦ u`bŀ4IUm[T?:m9Pt*wEɀ  qo9gIiVYC_F :GVCHDW/s{Cվ? M^Jo/Hb dM{}phL*x;Lz,*?+ B(C0:Ʀ FR*H*A°Š P{G!Hr$#HD̦֟%lU*aj 4RRT5Msb[ ͳV(4}` ̐<) GQ#IRt+KR }Ja])X vKLp 4#`k[V\Wj~0G V0cd*F%L%ykZųm[vo[IYna yp_wWW)*Z܅} yw HL+0`X3cx;c(&=Heޯ`9sgXw!-f~Gt`˲AXgjƳkz4g s/=r@2@otr?O BaPd6DbQ8V-FcQv=FAUc )J S*%GRiTe6OTjU:VWVkUv_XlV;%gZmVdMjĕ:' ~@ :,?5 fanW-fsYvgZ=&{8Ƣ&XHh6,P\pp<ry\g7tz]>Wv{TGTg^ooc&TfȞ+Q$3P& , JAPl̟T~{^ؤk0iؖ,+LUől]eƑm'uGsIwQiΑgr ) j % @+L,3l4͓l# rm8܀-z߀Cq+1ؒ°o%z₟GD}r3FY Fr}e٢wiZIsjw3/(J@4$7L;7o'(@7 DZOmRsIQF 8 @3 P.@PN GYìd?av\8.࿖c p S14CXm 9PC@!B%qz\@%C%Z d "n" ؽaQ2FXt %x)e*gBW*[EHBrBHY !DR.F#x#Tjoeb$5aYa`bً1CI M)DRVJ]+L 5Q'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N&%n5_E.M9>Un]9Na普m?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,3| #(=RSs H$ )" Z P\/ =9N]ktQg[ HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km  ]pR;$ G/D ]"Cacorn.workingColorSpaceNamenullf/.acorn.profileDataPNG  IHDRĉsRGB IDATc`IENDB`X%colorProfile HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km:)\acorn.exifData DPIHeight 72 DPIWidth 72 {PNG} Software Flying Meat Acorn 6.5.3 {TIFF} Software Flying Meat Acorn 6.5.3 XResolution 72 YResolution 72 7 acorn.snapToSelection1acorn.snapToShapes;acorn.snapToLayerBounds= acorn.snapToCanvasBounds1 acorn.snapToGuides/acorn.snapsToGrid1acorn.guidesLocked3 acorn.guidesVisible +nacorn.printInfo streamtyped@ NSPrintInfoNSObjectNSMutableDictionary NSDictionaryiNSString+NSHorizontallyCenteredNSNumberNSValue*c NSRightMarginfH NSLeftMarginNSHorizonalPaginationNSVerticalPaginationNSVerticallyCentered NSTopMarginZNSBottomMargin: +]acorn.gridColor{0.112960, 0.112957, 0.112959, 0.500000} -acorn.appVersion6.5.3 /acorn.fileVersion /acorn.gridSpacing 3acorn.gridBlendModenormal- acorn.scalesGrid1acorn.gridUsesDots+acorn.showsGrid-bitsPerComponent%bitsPerPixel dpi{72, 72}!imageSize{931, 645} ^^zdcompositeMM*?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N&%n5_E.M9>Un]9Na普m?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N&%n5_E.M9>Un]9Na普m?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N& :h)|(092~H)" @* ^L~xfMdQc(.f:.G⹾sgz{!>efl歳h[vl{.Ϗl jݬ[+Nӵ[fv6@: Y #f5y'rFf|j^3y;d#.AZz(4*?C|;) ?ߐP 8F ؁!"Du*?P`7"b_(Q@HpwP'b]oXX 9|͋cizΟK]W^F>T kE#jKr5`@(8TᦐxBaɴf@Vyzf!m`b9f܏+AciY0K0OA/Gn$SЂ#<=`>C&w0XE\j P8$ BaPd6B_Ѿ~p(r~ O?ߐWrq7}<%rٵ )iH JLgUXlV0f>i ֛6KUwoW|*BS9<D @ }"nhl{s:>"3hJ ԤǢgL#  ̳`C;/͓l74,X00 8NC~k1t@,s2 :Db0MP Ei -O EQDS8T)Y9 EBu΅L6DZWjdɲw31\[dږkX"=3H%l`Vc'”]̞RUH%<7 0!<:WjۑlPr&1[ȡex<^ᐴ0|CKJ1DuE@DYg}dT{}qcȡuvJ7K"q5͚ o)"j +j3V3{TzȪuFWx|(zz6V5 T ;8$BYOT(ٶ8BcڇY~'@jFWq|v+Lxf@ؔEW L_, N'jfh沚r ÇCyF}*i>'~1r_PmFrN)GD4W0 arX0A ǀD5f D P1j@A`[, AПN*ER?06# .FZ:A;Ɓ`oʦYycᣴ[x ߸%V !DcH@Q #A61J"$pgXR#W J\N? 9O֒RW6+Θ#~`(L D@;rG Ŕl:,'捏(>J,2'E uIYQHSg;{d|?;x->LG#j=Iu6X2jXZ<)|Y!}03i!m IoQ=@@-#!A3) pAؤ#tPэ 'k9O`AS`ci)yc@-^W[|Gm"IpY4Q-2)U$e_Nɏge =!qybJHl'uS:YZXd MyK,.W\^Gw"FY͙ˠW|@x,+!8ia_ӫ&iM@J:qʖ]5ZOBy VhZL(Kh.\Mb p8h9p^)_d[Jk|@qtX" B."R lA]ER*R'SNv͙_="1 1u?FC徐5 8C{V2=(e8IzGs\"Y'e>Ƙ,@>?pL7W=)``%s potܼ[^Z@%zLYS9A8AicȀ(,\k_:EyG:osaμ@L@UE?Gw .C|*a SEkZx<("%Yy# j?!ebѳ! l]:~61Wr36,Sj}QUW=ӴhZhl5^2CY6$7XAc۝@g=.FI?аX^, V%g#t&bTOZjDnLg.ЋZӏ*8yOXp@Jn:Lb! a 7Ȓp|&[k!%f2g&v (j, 'PuRkc0jFv0 B EYaJvioV7 `" Χ@n~I0hM > Za 3'80WöOXNQntLan`!} !Z?L($$rE@#{YteVl@\`! ?O BaPd6DaOx4PpRp nM'Jao;8{A! 5INyUGRiTe6OTjU:h29{: ;%I,MZzwe(Q"mq͟(=/f7drX'}; A=&#idػ*[ `Snw[}{@WLcŧϓ:XZ1NJn)(9x|^?' Ga 1G88N^fc3a蔎9t!l}@Q7iB\4\"ĝ\AFC[l;1E(̀ PN9HCkR`#(H| !~` B xG>I]+p=Ԣ3 #, Eu&1.AҶ 3*.h}B.ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km kk thumbnailMM*$B?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/ m7NgS}?PhT:$eERiTe6OTjU:֏UVkUv_XlR gZmVe]W;w^l`pX<$.bqXf79YA!4@|r DJUaVJ]9-H|U _ CFA=ֶLIC:gaF U+XuDVwVh( -`Lr\PA"J8'+@mLRnduB"5,@|u AT.@"@pH(D`,;? @Z$&i5Mtp'%O|F>J5NUN_^]W#ư>%*nm[0p aLg# (=uzϺI_  3i=*GLdoT 'V "Dß ߝ>O ݿ}([(Y,2l+Z)@]# a!>_+:|o;;xt(΢JA}y @H0  .CC+%E[EcFj=O6(dh+hȒA Gj{ rD6jp e#&3L[,dM9Ns;N.a$Q$1RM*6V|v6m`MvWMehOt}mYMSEXNWUꯟ}#@ P;BLIUbɧƢ@3i+ LjgL~;t6 +Vueq1쨅Y(yѤdg"|iu3':8wOkBb&|i~`8( 6"F@"L~pK`!Iqt{İ`}6^>۩+,q,!*"sgc}unܑ} #Wy?Ɵ%`9ʘ :(z_g ú쟟發V# PD@!<'H=0o;s1+l: ̔VDT HA)#'V޾d?`2g4榊ϳR2EWx#1r>A#` $熰+p.T |Mx\%N# ƻZ7FKd,fga*X* 8% >eI' Ԝ2P"@@i1&dԛNe D!$D |P҉RP*Ի=FÍD#6ei6! ( $Xf @*wEDBնVFrx@ Fω'PBreLœAY{0XG$y r8G?_MYI)$+55ކ,$~>WxP@k[+v\{Lљ#i^KOqJIE&dL~$,^R7|ov7WO9MlR_2>HjYchKDn9wU;ƥ )HA{b,fŻ GZzzMHTtwVK t|0XdJ2z֘%B[KZĞPc&g|8G ,ohЭLx4>ƨ' 3 fgí!&Ja[Ae@}@x~+.m@yuv*K8o%gٛ5-+Cb  uI E8!NHYgJ\qrc75ߵn{=ZkܚLMɘH[%;`?Z(r]Uݭ{@ !f"Q&짐p O{-nb0}췐~ȲxMK@R'}d7 .,i|FfY<G_10;ÅD} ?GE& &O.4ԝ+饀mo|כO/()aC?sBu`uS5si #>LcqSX6PX M`"h1x^.F@~G8ϰl0NTl2>[! @*RةpXoҖQA? @ȹ#52k%:\|Y 򕉹#)M٩Qpc.k68$D B ! }83XnڌCqj*b3X\@bq!q*,P;T!<4 ~S 8bث (F ~#./%YA48o.X@ 1LHDZt{-#i/8U6|P3O"J%B%29;kD[Elⴎ @e7~H=q>S%YkqDĬZƪ')y{! $h%F$,؏ "~+0msC8| j"…x ;p]U}BFm3Jmi HL@ʺ %0I3[*{(G4(y U2K\Ԛʬ hC18 *y8񢇸R +(@$mZ0dzfJ?r@>X@, 140!*|F6HKeA:(m8aK> Tχ\Z769>^/1Ա<<-pW0RY0Z++˓rI;h&`}=,#z7_`$1@pSN4:L<KH8%F<ꄴƒ<,o$Mv$| &:mЋU b-Rd[.8ZB$XA᪠8&! QzFh=E P)\~ੀ |{Q-5J+"#F@  R)j@..̜}0|x(CIwx RHn(!aB ZO7 LJG[Y-9FIPM 8d3>.)]6J7S#1:^R53 B:@1$tѢ; @ ےAVࢭ鋟uEtu譈!U4W]vV=JUAS;b "SQPh8e^R]_L69$qmFq&׀֟0) !  qQٔ8?ieBNJx3)ڄA:D5$70Q74SS! X䤗@~94q @0!<>XZ-AB70 Rsļ](|AQ̐[YS3Ӆ4ܗ8>0}]9լFu \Ꮂ͐֍1r ZQ $t؜)bW- ER,?EЗP|N׶G9witQ^"Yiw}7)5`ָ*{,Q~+M~g@.Y@"ɩ}Fa`V M(?O BaPd6DbQ8V-FcQv=HdR9$M'JeRc0y6&6=˲ yϨ@A )TP$K>_?~_;k=@#P(z 60tB0y {bڨPt8D K$Vt2Ā  H*I A9E1o+̵-˒/ 1̓,3Lԋ p$79Γ; lq>驤iqjR7;D#,`Dʠ R)rJRǰۦUl<<0Mu;mQEe6 j>do qܗ-+4]AРB /Ǎ׵?B* RmN ,!aHj/*5>=E.MNU-͹^]eo1'A|f2hwgxTRPb` FhwK˯Jb1Qs٦յnݷ{55Pzt`|#'|H9"Jt`^ts;4]O*I n=/M#-};NpD_I4<_j=GqE I/Qo+7n&)l&hxh'[? p#hť69= /%б~NDD2 J @"0F0tԏw$/}QP: K~h}fv1*< -Q`D1$>,g:4`6F#[Wh4U F`XE'X,05cVZY1&ct sN]yU2,::r9r1XQXu~@*FN@,I 6x³Ib:whv<3q؝xb 䶤-TjDM&JGNѕ*;a Va~ܻN_C]^bZՒ@I};7ƃ&Y(ԃ|[BlF܁0!mqj%٥. ]!0 ,:7Z1JCy\ܼ%%GG)&3RƖ:̮J>YmCD BUs1ǁJ_84[>;2+&Nh[lYa3){4u@˱8sd:gU?ǰ&e,>plFZ/F%U` X"Jp>6u n[;aZ~y 1vn#~+"yԣ麳tve(NQb~%)]_@7[N[/+ͅR~XҸ5)t+b w' \js `禞~Ojz @X4 Bt>!DX^1FW9pҧ;1LYq9NAPZ5IRu>ԀISXU * ZTZW*՛ lXk*hjkmWU@@Z6dX]WV֭)tߵ{gW?Xgs򯜿m4;-mOV -o#n*mܫk͕q<#}X9Vñyx{;|zt̀@ :耾?l1(PAOR~!4<~2j 0.LDΛ $ H, PQ! G2,",˲0L32L|1U$G)jRT|O@P4BP5D);:*Kĵ-'L/ S19F+STJAEEXV3 33/<̽!J/Qߟa+K:e5P"G @m pLd @P4? \!lڙ9!vkg9w!n_F@Dxzgvj:jk:ַk j9'"@# xRR@+ao;MrDshT$Ga:u~qwr<'r/s(@n^s`$*_d gQ'5)1Z`' >x7y>Wb0A (]H;7|?ƍ̓:LqQh%ɇ~?l%t ( ' ¸fo%`5q L8`C>w4'BY at/j y# , P=)Co!? )҇Ĉt D<#C)E8bWf-E0@su UzK-8}toK|I\ȕ&K#AH9 !d2+hD?^d:RR^MIh";=UJY+et$ARaJ=+wo2sMsEDZZynUIə :1 jlNa ,KgBXVN֪J=3fNb; . zU@粙k.Ω>F5'8[| Qj 4NF:"~avJqV5ʎj|*6iB,},0˫`?xs74f fќ3~[7TXM5d5U֓lyޮ:X)9&֊lke.f+Wc,&УU MNIzjiU%n ]?4C lM-i4.ҤVf1GSZ-]ŒC O@h@@ QU(u>#q)f2V`!þM3 ~ {2/8kJRd,Ar61Vd1JeեQU ՏCmʢ ܑd~ruGZ˘ /֙ʫVcDykCHEYJ]Y(ڥeeM?g-/ L* áJ'Ţj7ǣ G$ɤLW,˥X| @ "p DѡKLө JTժtcwD Xۢ K. v`X[=|_.H2?lp`"~%覀m-ٙ``OJ?:LUkLz]mppu3P= Suy0':{^|ZyYZ޳{g}tY5yCXdpuoY@pI?7"Gi܍@2cz8}AOy}cfI {\JGf=_c~TuE&]Za!XەeYmAF;g9MfXJ_`Y&7^?P D 47'HW0J H* ,c[+K}b!'&KA0*I-#rk@ 4@Àk&y;dKpŞ#Dn;|A(8Zy zpj" o8ۑRIQ@H:Ǒ{+ѐpJ*Uvz͚e$j<)(O#|$H]epl%>t2wЌw!=$Ȕ*OyM(T2꬧#`N#̻VVxOme2W%@# 8 ɹJ{ ]xJI d Bp?&XM}XG>(_kfšgA=ޜ E Fe+ـ݅Ug*P vLSX9il,kz-Os}ꦤ8բ=gQ`^d\C N*p5u|LGYވ**ILL|f1*O|E`]:C [OSeZXƭd^rRr+ES ~Z&A~ "~mb]~#N+%c5WfĂ -wyȈ5(ovOhMw;}cY, SqKΏ^Y9wL~5WfqJE UDMhrb@ir29vhYޡTJ66!mI/5Vkٽ6H\Ou,ȥ/>8jprKB$j`xN ] a:Xǘݥ.I cby$PɊOy;"O=\!Ґ^+V{:$gM_. (}3N?=L=$Lt_"bk LRu1Ai,p$\_ɝ _[##3E?ӝ.{l֥P܍ ފMJ` I qeJ>@>) eQ @O =}!~Q]^NQGĝԬf̡h=Z 4H Y6O b5a6!E9C=Ct'igC٥tW. R 5K] )5QDdg4ϛ 8ٸ8D =G|@m6MA(NnSPP>U%^V]w9W|(Ō;iTCʋFe6%f]%]^k@|>Y:VdyzcKOY pOM؂qN jҒtčHƕ]"XU~XJHҹZZb) )* qLˑz,QnѨ%1Hfq՘,vs -VN8TNŒB ޛIkTUF%QVM{"$bGeOD?9 a"%UYYƑ/ZQK7`k fD'x|ȬVQ۔ lh= =?8XR@@(%0,NpeIeZ)N XC:XÄ*q;E=ͨ@H @DlOiƜΝ!IJ֐Ob( \ Y̚8|jci>x_Z gUF"f%cIFd &Jl*1jd6%Tx{MN&@jFm@Vc}ȬQqATor4>DXETT+UUƒ%?+Aň 𴢼A@Pw_L('v(ԫ2;91[& Xì2%|)iS=<eOlG)J,p8XÙhH:Qaܝɽѭ-&ҐIN)ꯒ6>N*a\F z=ʢT*=F&8]!w*ez1ޫ**NHV^ ^՘hp_M'fzF~Wjm-G\7B̐|Y$Ӑ@4[X`^Mp6ʮ--,7`,Ep9Yü4%ǂIUDo6>/FMtQn7TPM4!p5p6B^%z&ӌrtqP@?O BaPd6DbQ8V-FcQv=HdR9$M'JbpPS̝seT8 lTƐ+Uv_XlV;%gZmVeo\nW;w^oW?[񺞗;gq4)`>?= &MjuV2tUξ=Tia "tz]>Wv{]wx|^?'yȳL 4I`%Ǚ˰j@ 8 (AeƑmuǑ}|& T"d%l@+ J`:(ڒID. 1'g&\7j4n)ch CMEєmG%IҊln\GP 8@,/Um[q~qgr:ʘ ,N K@H1\[͵mۖo qI}xX'V&Gq&4xĀ:)X\i~1uI`iq7r h⪐E.MNUQV^rEe@xN9*N5cZ_>4^œy,`J ukUj@"Nյnݷ܋]~9xJ@ kֵTIљ89X~" (r]o]e#ȥl5Yܝ< LC]Kޏ(Gœ=u6U NM r5`@L2ͻdhAQdPCٜN3p )8GF`TYDi1TΚSZlQ#2d0z|G nbhXpqRjjoSѐ,.b%|\@T"ZTH)XV[넳o,IN{.#ABVK4t*k6,lc!ɒkYVLO-kMiEVgknuz;h*HH FZ\S>?+f]v=̇zegڼ̌_`95W^[̗P?#%e]_ "@ ,0ln# S>-:5l8%&iHL0l=.Xoa=fo %=(o9I`[u 3 ֿ+L}13xQ P ؞1=~@gc쭕YYl0R\:P<rtDž  `"`zҌ,N\D`"SٚC:8JV-ZOJX̱)wC#t٣|`tP-;~ˌzrm"[/flm7rvj4p&Ħj@4Igm?{/U7q+ZH H4ú'lh쿰# Bp+ B3 Cp;CC3ZV%|zjjƬ(@X_'@{"¾Mc(Jr+#nn^7/h@  `4$+Ȇ;D+s?OAPt% CPE+0ij;  A( hLV`)\" JU{_WcG1Q G+`8'X`0!+<́o[q\w%s\EuOggD~#d:ڄM@Rq/gS@h[W;]}Az*3N#B*`R SX{ghz&hC8Piz(-DO2&0,|syQ?)nHnBQiԜN&4<&,ɀ)s|;sCt}"`3|7IxmӠ@蜯"}a)m/fGPz Zm) ?J.xY%\_ ;/[~~4Y }JNG@r1m@)SAL ȟx(ÚZǀ2K؅P+g^FQ 1pzXدx_bTK6'DT>cx u7E af(c@ 1:0>SG @-x@XPRpDHY>¸7&f8 t(eSJyQ*HSpX!``0q f@rnNF@ F(6Df@LJm`l@\f5DfCƇ's4Q:HNٕDsA_Au)LO@h+OlL*\OKW6B#r +N6ΐ8D1[`q[ p t?O BaPd6DbQ8V-FcQv=HdR9$M%:R9Sr }QEdD(  jU:VWVkUv_XlV;%gZmVeo\nW;wAϠk,t/i̾0WPoD8 Q,r,/]RT@8?}'rloXQs>xr` >PtP&5]g|~_?~_ NoY0Ld >Cha" }d`rnc/-jۄJQG !ȋiz&Q$`=͈ .  r"̓,3L5͓l79Ίs& X/I$H2/4B6(y괆=gu 3b6΀1 6H=UUՎIxaVEr`y()|= "( Vٖmgiږk̊~a\u/z ` Rv"~d^W%baƢbL@OS$Uppuw (Ҏ>Mye普mutYqu*z/)a J F/: 'Y!P/TI =( Wza W`z{@|(衼qo%-gzA%-Wk (mx3b (y4Xm)(]-2͸F/XX<^oĖ:[#7Z \@c 8'Oo/ܩn”ܧsT>fNm eR Ȣw9~ ?NJ-*X`};̅; xRik#mX[DIQ.&D؝{%)-9QDZPO$scl bX8ղ$e,e<(7W!TNI]|L0FֿCl K .2#&o< /6|`vm#ouH]1`s6^%{s:HO3pN9/&d@X4 Bt>!DX^1F~A!HY4Q)Jta1ލʶ?\]'eI@Xx  R! <sbvZP*TJdv?,6bl7ZgU !K j!]DB\val]qnp^7swBvYMlz>0P4 VF( !:m9`P J0,B0' 'g XF"p;N㒦*pH* Hs 1gFoG1wG H2nvIn'Ǚ")`@,AS G8~EzvnLtD@F/)ʄ@"q@д5jngZex (8ࢪ ʈ>+@P"QUWVUu_XV5gZVo\W*j%ҵqKI: bJ/{⒟HDE/m.L3NuAw|!J؛o%(g{7Zu8/c87c?d9Vgnqԋ:At>Ѐ xU4C%'' ռO:%R+KH1!J9ezznsiTgI6>ʈE>@i1;p<p7qlNu$Mԫ1v@ 4 cő1MYJLf_"P)g%SZEH#dtFI1r~3iXMY  & Z*A(?DQfg]`x)`(8$VC{8"05̗Z,ϔ2&ߜqN99g1(e~? '}9\6Z K׃T>?2J9imH n  Cܜ8Q8Hhi&`);gughWJ*Sh7SyOihVMY%W=k*a!Lǡ'PyfgpP?#tnVo25DsvSy0?V$,al5&XIP>tPGf?;S1;fNSh @ X"[dAneX~H*rԨ5b Fwio.׻f] Wv-2O͵ P)4Iif~g`z8 -pDb(`FY>bA08r.P6U*Iq6'$7TuF7^g^@Viw6D7޸^ek`!*@N۞%x-%?>q jl)jO&Œk -Q3So>xwFFGBv7H'% ~kc#=IjahȃdKLnQfqNAp}亞+r^>F2bT3T㻥9ΩzWehaW-Uz5b+_rv[>/wTa%:;tIX9e ШDP0ʱOXU;(?z?HX#p;[8,)zoMOi>d+2yߥр N!0x#ۼo7@&L/<;/HpC(ЎPk A"{(#xi);3u壩 aIgZ#[(6 ATdtu*)@2 *Up!'J.$b)2 0x'E>6?s2$3.*8Ô9ä:#ļp;Xkd 2Ɏ+Ȝ{Paq)(>X"UH?O BaPd6DbQ8V-FcQv=HdR9$q5Uʝ+%I 0:M P&sOTjU:VWVkUv_XlV;%gZmVeo\nW;w/r,M(+x@(HcEi$.`0OzTb^b 4Lu:6m!6}W2TU_ p! -= ҅6IC=/'z}^g|~_?~k/:p Ă~+T"2 (  aDTG݀ H4P ((?QuTrQl0"!c`,y-˒/ 1̓,3L5tIb\oQf0;ࣰ>'oTpU4 (x*͓dqPԕ,go)ZZNvIxRX(uSX-cMeٖmgq9QF('t@(8 ԄO{b~DxAJ`R <B kQXn<DDzI@<Հ z e普mu)QG[BUS< y_<z XdUk k'pLׄb nz~幢Gn]gjӲE:p(0 %-pN/|G"9JI PN󽟆>4):Zaځ^n~'aGi<Kqi`& X= ~w[Ɗ1Փ4F;4 {lS%l.^tsͺ|( 6c.8L T1tJI.)` OPAE)2S)?`%pD~D: vswj)syEWD/Ada %S8T Z1ޔcj2y$,Veuh.ퟳw#4hgzPa]1X&Lݖ8#᢬-<2h6x^-ɪTQhj8  Ϗ{:XN|bAsy$o ).c&yY>g;?4CpJ"EC17H|f- q0l` 'bE z'Y]ou޼,0ڵό#E m ؎RhvTv-?1!/=Q}}7hd5:iO@U@## 3z_MGKm"8#ǒ5)Lt5閥65w.׊( 0F fR~w\ӪCoRJKÀW?G_~?I'dheT$1OFf:+~zMtgOe$J 1jLl >@Qx Wޒ@q1qMvPowJ l6 &@$)`>f?  o*NCu}2ĸgBz~& zrI&q'2u'fQF:N-l#:LX۱b)vvkiX/n4l7|)"FG'jPD#Mn~m),//+{DCUp= DXe.PRm(D13 JD$2SjǢV 0(I0/"2# W7838c~n@8#BHlC5gJ cb Dl Ij_r\v:5"8QEh"c(^At =B!!3$JBm= @A4+J+-A+r2()(C$ 75TGLn/d#D3ήToItIIJh/kUBCb|vpvCsQQanq2=Jvoom8ޡLJ1.`/t2Q2%NQ5Qrn-'9޿sCYI2=$}zt S஀/tFBmNU1Jm<j0zd@]ҊLgUXY0Zb\Uooze0W6~OD^mF15P FYBt%^K_1 'N JVQ^V `a.*Æ,k[?. )'S4ЃN,~!\{2Nb΀ Pd,QHd%kT&eeH) B&dtKV_hhL4MOpqgc֎I~Wh@`<26)DȚ%GPb:u(ZGeP,$+|rӣld+HAI 1Z'nwq7qj`֩^Ίv(.exSqpA:vD5.SB_dvq5DUwWd%Hhpo2_2Tc!2&vxy($Q"ZKt@*hsE6+C2S7?O BaPd6DbQ8V-FcQv=HaOtp*eiK9m @ pv"3@ )6OTjU:VWVkUv_XlV;%gZmVeo\nW;8 V:XR糖 i@Vvä $u.? ph*2d#!#0(PO_\ g a߆涓|\#:^pw@WWMl˧XB7u=6#U-)n,WycNO_?[Rw\M7𣥘YajR|H3khaɚD2H*] W%/ 0i5I]P =0epil$FL0*쐛⭠P f>(IbLbIBmBP((n.l?A/xOj #;@JdR/X΁Cގ]on0fv<%m&܃r12'蠙`ʉ*0+lN/̲@iO fy6c1q1uqx)X!&H0G|aEI Lx?qOo&( PjާAIuHI>n1TG(DWq  }'z@K$jʰ_㌸c6xXp ;_L"`i(X(@Ld&*NC'"n:ئ`Luθ8,yh$U20Ŋ+.r.[B/B,K`8/z:hD2G NzV}J kfA #2ˁ*$Ĩ0 ^ntQ75a63e6c$CVrR\TCJI-”דE\cQ, 3DxL ӜaF2KlXlq6/FG~i+ Jf74b|l(b((B]EaF4d&!/iin"`)X$4 4!D"%j:6w.mL4gӰBPyvtgMN4M'P' ,{e. I0Ĕ i5j(@X3QB5>4 冒%j0QԆlFKNuQU5UUr*Wizq ]bԔT(+J%/1`qf(I T'qV@I(FP'fTl0X5Y\u\0H6̟J݉B_"̌z!( ~uh.j l'R6U0EL #5T%Ycv9cQ00 žm*A0jK+m`.c1 0 J ?O BaPd6DbQ8V-FcQv=2;ŭLb@ ( ́0&“`(2 A@`iҔs=̀u @ (-:̭Veo\nW;w^oW`pX<& bqXf7drY<}V6NcWO VgYl='vm?ޮ@񮎑v m d&v{Qxn˲N\KD6 `y)o* Tɰ (2,zA6>kB n9 '9d,  =I`7G zl>>`.?uGn36Q`-*rW4U!Y4xpȎ2oe=OCgEicfG}ҁvAty]]l|u׀YLeueX%u|ݕ"٪t ) T9۰HU Bf3҂Sa,@|1 >dxRPsnA=!PBXLcDqN9CiX 5T0O@-p9'(?F7|SFxc-CN$DNN:-E'si1S0]f;#cCN ,E5V#[=K Axd ɏo)EAYԹO]hK:O]?ļy ĦP~L51NzCDW!&U&`?ҁ1h.Jp TbLqnMٽ7SrNW">Z~?Pl-e4 IHؚ@l,sH'?xE^N8i##QLaet1X` Yq?gO({UK g]}&d2WB@,¨dC,2lYeT\djrYFQJDdϙ~%5, 僩J' <69$ΩPdBfԖ[=v(jUc5g0 ߣ-)0($ ?P$C xL /À00^.}BY0I'@D6J2x`-*91dlX֫uz`جvK-hڭvmpܮwKxޯww~Ghjp ap%3@LOWIb\kͽ6Y h6',=v ˙|ىp1.Lʁ?^O/u5BuW`?{Sǡ__.FTlK eAPPO!8%T6Y)HuLU>AFmMOSTI(!|{"d6G,|!0 0G$W]M#*~)I$L(%Sa$\Qd9L&9uEKԶ^eu I!EhyF)TVAxtIRRᗹ2E0Cd J4 @R%S*?iWuu328h* @eD iX`B\(^_54 To)iK2PJ*dKӗ>̵//0 0J9 6$)CGK@lS#vkr=9KVݏ/ ٰlKg‘r\sC2J5%GEF=4]KS5\ՇXGf`Tl.y|W,d+mUM'qKvuR(OwHS4fⵖ?@ Aޓ~F2$[yA9y^_|G7} z-Pݿ~:$"6 BU?&~Rn- UMa{|8^/a$خaV0W:!ڨ$&hWC`'DqR uLUb4N!w5?\E .T P!hc 4Èri$n 94!4p'%l$Hx+Q=CH"n B`0ߙ<Hp `)ňZ rطC6@;;7)Aި]b]M@ֲn\+]r-:(C%dyFLNd̩zBL(SurQJ_#Om>II+Z?2~Qș}× IcԖS Z#3fC"]5 SBbܝ+tsoif.~/5Y 8ђA+8uF{h@L` ZH*@֩7Rih쇤ҊSJYèb& K#ŕ͕PߥFp?AÀTA7Bdg,S1xX+6ôfF?#2W \t2ɟ.2J>}[*6UӫyO%^㊞Kͨ?%(50[ |`]64{m'2mst TI[zQ?kABȊ] uH-îދҿpN0LdՑxpih[4V+Cy7E ┎U&W!m1zip+TXs@?G0&Cj? c40^ʪG&EglL[I:;g-5T+H>)u(8k q,'ʲ&))@dR(vf݃IТSASw.r(ldqP#@"{ZC(c#Hii!28PQSXk^0us^64q  6/1oTaŵ,MýjfF`0@٢e,=7s:`arbwI4܎}ɼ޻{),&]dY BIbĖ눏9CoϋY.!gtz1쵷 "u7TBD# Q I7st܃Ob|M#B>5j/#dǠ.u\ɽ'?x2/Rc|y|QZLBR@JKQ8Cڪ4Zk°;0"3C6/A7ֲߺ%^yS_y.9nI%Ǔje|N8B}Ǔnܷ}“nI;-xPwkSZ e NHҹBH<7m5ċQ>$O]و=G`k|޾? EKkx):MkD@UhdPTQIL?M!ǬRi8 ơXC9^۽aRaZbG1yR,I"ԟ2휍_VٚEoӉX50H UM ѣW I]XDSԢ()]U $ŋXŔj$> ֙ej'?D b0?4݌@5  gD 6'8F6BP1RUPz-W | f~.A$!49=4r7cz78c+9R\tM$T ӐgPQ\(ŠB@PZ J 3 tQ)4V$=ٝ:@㍾>à|?1ؕclTDfiuP B$ T?X,=P U `hnMž4!zkAޙѥ.UeZUbVejV݀4:G؅St` T^#׌!rM YaJ Y 䜙hTAXlf CvW[C]Gd*3V|qަP#T?$ۘ=JP vQYe*mՁĦqgq"rg*rBY%O͐&]rb- Ap@(gzG Ő^lM ny"t0 ?.ƽSҀϟKL  % W"k"?d%܃myH@o@ q> i(JJJh Ckt',p;mjrmzW-و=\@ȘɎ'tUYv_v(d{e:MHpnO͜ҖȌOtI`T"xH>] ɖ(^Ī5C@.]QH b (5|]W&ڏ* o1,Iø31#q+3q:9Aq_V1Ra4fh@O80pɶg-pӱѠ?2ZeI̱"r+"3#r;#, b$lmX^zxpqr1pfXbZق2hkǓex/0s 01Go*q@d3 ) <o*/E3Lo^|í\>Cǔ@%dW\N (s?s?@t lrR2LP>ct ZlQx nm)F| ACGFj5,@@ICъ8kGGN y K$LLJX'u-*1md:ŒS38WXuX&{ AfƆ TY1-SC(egKh@ h\0& $ti[m8@?IF$yg:>CG0`DMk5]Edc"ڥ_}eacgV=ipNH=Vpo=TґBqJ57asww{wK g @;xEvNCܶ.*" qZ{SFlF(zۋpw+E[i?L>femNcM,NWAKEoxJ Aˍ+M`'j6ktgL;lPm-D,x3Q-R;WyE*\| [il&dAp + M /DΫ|̈=r\a쮶 ?rM8ܲmVx슖ť$ S q?KG^uN_.D:Dp><il.l.ɀ]y}MF^k d݃ݪgG;:{)G+P˗';C.gQcLo3L{d6ECuAѪˁѩ4zYȎ䏲P^Nj}䎛,U u >i}| f>gCRHꖸjEM2V ط\RQUfA#/iןiV/˵oU5+أT/ݶ1[fqq8uO>3w|@ PC 8M 8R+#1r;$2)K&%2\U?\*?Y>P#/I@VN*5*V+5r^*zhN ѿXj (0C!"SD"08, @>" {9guƱ;jQh"䟑fm6o}anNq\8)se9&&DY\d_=cEf&#swV}^Uu^4EcicGDYgs(=x BdEUhEMaYvawEa'y!4~ܨ=֎^dL#Rv]i!wcBD~dH8|gu*}s7EܙiQhIϏbI|%6si+Z:&6 FJVҵ@ GAAꊦdӈL }8:V0$QP ~"dp4&8ȣY1|Ur=z]b2#mq\~o)A}9og}lY[UtB r/qtyݩlELq{CAuyرfwU,3qm٧ ]Ws0 6_3;\661kS2y8_CwW1@ *+6"5 +VQl-?r.ӷ͠do8-X!ɛu{ƠyGEhKϷ +!j@pO/Ih_;TQ0:R)0`3 ,c `8J- TuW/A= !pA%dxU4@N($+eppSj5փ[KG*$9+$WN^|Y*B ɣZd9qvb 4H7 ɣ|1,#Zs !i*S Y"֤>.JDΕdLF\b,&I,xɨq؃ 25r?9QQ%6s1cQO@ )vG".lSKמ2\IR Zr3ѓ{Q*'E(bS( 06h&x Bh5AF0|x+ |)DW Q 3ka`U4 ! 9MQj'd~ z?G Uƹ d$գJiv୺'r# ;2vX$Cb̜zRe%=sb</Nj] 4/]쪽)f'nGMxgA@|s݀> }_s~C򰧴´fAN:{m?R[ǹ ͛j;? ݽ=Dlx !Ȓ,#Jb <)'!a+̴ȒzPq ao~զrR8P95OpO? %Di SMt(R՗n!TSܨILM]ec햁n .quStiד6׵EV}uq'Z |{Gekl׼zy{;^B>{d6_0q7E vƊ*z-gvNl   APMƪ%?)N@#dR\GD7P6DUB2S`OA8j-EEWhS$H1bK"2Oɲ%OA@n-@z+FqQ^3S`!7khbi}6HwυQI"ȺH!YK2SBd#4JLR1hV4H̘KRݼb$D`)8*00ɨj+BZ܄(3BȐޜQJ`2N&n3v6žĠr D~=)A CjN)ž8bZ ,.4Q=G!D-y|YϥfNCZ?`, 2HUtAG٣UaJAl/!7-мihⳓ ?B}ӎJΏ'G[U*82g&^WhD1v/8d' yӭzu;,ǰ$Zy,)Q@8@ * /k˭LB.$Vٓz,,W\[qk3.>#8S,SXc "@a3KKWJ5L¢y>䰗Qm5k:, A=@%VDZU_TN yFfFKVWbR TpZomb|b&DM*ڜ @'16&dܝQs"RT^fOqM,.U78cꣾIUE RYSXz)g6/Ն^'~1v܄:hԑ;v"Y4*fGZCL4&DbY&ݎɠL\OR~Eoi,ذcqYN,V0(F!FAě'fBOAZR=a+NGmeXۻvnݻ"^QݾA%CާҽS,|/Y7F$J%=PZBZE$®ʾj謇4١WToBܫy4i{= z"B`*eWX>lyb'>(PY`mn:q}'u7;Q:]W[.CpnMӽ7~R>GJaŬ,dhN\T#0Up.L"P° 2J(0-K%:*͞+F,hlQѽ1jB&0FP 8,ԧoPd&z!%`"@!2rqȎP|a$*ҌdLTp""#Dd+h׋lr+vM|뀵$$(~$R%mNҜ'|(mRm()2)r`asan’o@ H2 "rr-k)FK*tsJ*Д,Ì)" ^U.K fȬ,RQQQbSlt((i3353s93|Qs1rI6w1J܇&Q*U*S18m1&u12:S;<3I:ү&(UBV? 69kj:rS!5b!9csn"Hr{.Stq:;vĉ])i9CU P'Fr%ȼd1H<z$n`15 F>|{#TUtA;MI!R#[^(:;Z|<wqȟW$D{KC'g!A1Ry! [؈wRڷN;J`SV䋶a᭛Ͻe}i@aRԷՖLՀۇc84bcs>3O |MYi$ע[][fgVy(\¯7[M]ֽW%1(nbX~4,`(l@.^ ?O BaPd6DbQ8V-FcQv=ۀyI$p^ c@8T Aa fT:%GRiTDFn@z7镸8!Ksq~~ W-Veo\nW;w^oW`pX<& GW Meu~&Vv'4aMV6jP]Dk &C8LxPÇrn#e$ .@ ̆YGdx|Q vPI*|`اb3G~_ ,  K=*L+Os6"+D Ê9vL%g1r#2"'a0̂;,qNjq$)lVv1 (/’ Q-QlNibضh,0Dzv =.N;=ϓ?ʩHpA"A P4HT$F|tc2̀@KGYWˇ@ya3.Ɓn >* aeYƩsX*笀(Ҁ6%aHesMuݗmw<~L%5H5sl8 \x~ QBgagmxR% H5٨AJVoI&g&Ɓ0ހV~&|絞~d3[V2`#~\űui/[ >) q\&GVq2}8@̂avrvܟ,m6CSr J2В/ףnahIYGUDS3(U}Ooh:Vm֣ UH2Bm r2vR+?'N?@*vP \&꘳%pS 7>@4!PBXL~v|;&f]M᪨Nχ6 L\́p|'0݃2(B\!@t(8j,OlP)3 H:f4NY^uъ:GXyO>G9`<kkU]Xt"7E\ĥ MjFY2eD+L6lY:c[ٝ3њSLFBCzN60KSsQ?G2IX@wAYtBe(`lh3ص[n[ wtf+%B?痪^+Ѫ -dC)!TRZ.G)$z^~?6 LsyAˤ~$D4{0f@+qa,;"0Y6$) `f!KJUT^Z΁;Km65', #RiQ+Z,VXUCWPӂQ7QœG2DV\?}#;#1Ax`b =!UR.uT1%Azj n$,Ҕ$UΙ:@M'߹wn]۽wU")3K9:_Y1B )͉pAJu+i|xRjXe? ŒȷYhp& ?cb]18 {tOuGhe pDH~anV~!7Qź_Ac̉*ǶFX)FLJ@hI- X} 3z܉-|RbQgp6RP F8Cs ''KXd)D$*cXFAɜ }M4o*m\ s>ƸH5Av -_V믶[Oj5cW9/ݝfma5Vt~ ?e/SmLnҙ{ȶe=΀mW%Aɫp Rk++]aՍo!\ ?| XvἐTlR ?GdۭS jR1Z5q_|5n^e5eL`^.q]mT?^UM M<1k菇 [L 3 T1gRߺÞ4tp^-d9ety92r 4{}RdL!ش2ߖlXHb X;`[!zV>ʼ55ڔߌ!~s/+ubAa%AQ 2jq RůC$D͡"V6O1 _c2ϐH.)JL_ExRǿ *FSH&Awh7h`Д<5nijT0Z0j u` Dhmk}-i:j'p P{ rnj1%q(F%a®$I c?¦RN / v׏T$Sn(.Xjn :P>{q^vmCLجjq]>oAntk>"`*FˊXr%$"aJF4jq.ˎ{Nl%!㠷!nVKRo"M$Q%.KR6 HB]j ~J:TILƌ0b3uG'&ƌl*m C*U2",42BŒ-+-2-rcXoO#ʽ "(-!pvK*%aaw` wĨY Rм2-fO,ri S,! $Ҋ0T0n4i6m6<f lPEI,\s 3d?*l8W%v$$qC:&+7)!>\0 n-Vա+nunMuS?3?s! ֭Saԝgr`Lu 9F$0b&[`6&r?S # 嫅8S،i&\ jntEG}GPHW3SI|x. ':P4ݫfF#(sEDH&w>C. j1F4T`Y 4M P i0: KKP,z\'k#%F"$Вq214&HA3 i CP$V%Z0h&pf*Ԕc*OA,%/܁aYZ/v0kG$D~RP0$,=HC D,c3PT$pCc@ֈXbF,Uc6Yb6%bnF3mtlj4FlL%Mat̷ f2,w}^yb1HfcJ[z7j< 7LpQ 3T00fj+fֱk6*Ou8LLb|( drRSD =L'&K-~6iU@ -H9%̃<&c=tHn E.Ɯ1!kwAt7E;AEANm# HwE-c[emUry"!Q~`h 2c&.VLP68t qlci~C!i>:EG}@X4 Bt>!DX^1F~A!HY4Q)J؋?İ[']! &!@4^YVFʹ3wv}@ : $3HiC @@k]bgn xc"t0HcHU@?ju3mL޽kP2S5 rw?t^_v0?tz o  itAIǑ~\&f@ʘ u7N: @@+*Ӝ·p?D(!t)J9|Gkl .KDQv癸ț foغb1,K2Է.K0L32L`f0{0SA:'8,+Lv's"p!Tj~ () O  O4?O BaPd6DbQ8V-FcQv=I 9@G@ Wz-9;ȴ= L% A~ u_?Yq;E ʟhR7P:% - 5 Ð=rʉLIg@^P KZǑ*g_Y"i,pNB2PzzԚk K#6뻮QY\%9 pI(oXy6!ħmq~{ B-a=轟m} ;OKfX YvJ''Pl[pE y^*6~cggdEsÂခ ȚB7\T!$C9 UsJ98;X)ϱZT 2Vk,-X C1k,pa۝TFȗ%UMSTj I"DXDIQ,<ªR(%E'`4%Pc?u?f<<Y :: G8ʊTr %A\%{ qټG#c)Hs q'`9ȩ'RRJV?p~?G>ic: OHN,!Je2?epO29HA8j&_5_(Bn`p ê ǘ?Sp=Ȣ<\u?T Ƭ29Z+ˏZV8u`_P8RPEcrɠ=eA`U/^7ҝ EϺKFZ5Z:9] ҇$35*UڽWa-%+ 7L ]bD`9?2f\͙E監b0M~`\(뛍9G34,) b%Pu2IqG Ŀs zGtsW` AIQ4fSBhQ:i]vfǍs4@-"Yon.o`R֠ dc"TFt` QI`bH'`9p|ʦgkmǹD^̒'h*?hB=&\H.?D ,d\ip 6AE`?<؈k m8Jٍ@MbYef/ I^薋֥ Q-v_)\Of7p&*א1TZϘ*T3>s~ 5dW*>DN%J`hkdq@DEޖL%\i 1j$n]r+%Q{ _IqPXn5ˌ.5gd@4ȯ1!nM?Mk@(r80D^q0Œlm 3d`f&Q) ) R zm!C!#r9#%pDπd;2 @vO&0lw"y+/^ m{Ok($R)g)Q*R+,#6D~eꏍ+ ¥PVfN$b.B(f'#Bhh~*0mq0س$1xȀ%43E4sH+X W@Eu1L  AXSZqM̗f Kei§V\0IΑs ;$gQz~s<=3 *̧(duBzc`rY -EG.Ϊ;(s#.S;ֳ)Bi޻C#E4UEr>!ܩ"zTCɖddpgc 0،nLcdiίBXys)F ZF3CLA8 ď30Zp6q8IM4 Ϙa81Qz&$b~M{J2*9̆d'Xd2^'0T#x 'jJrkZ ^rdIQMTPsv&jlQj+&"eF6 ݋gt̼+TU"Sz?++`xgS4;(8uYU[ Ka\`/l^tl z T3`N 6oSY5$!ePu_c,z4D̩^.PFD\6MdPGIelf@8n,(W6p]9;>pv :V=J [>66aq/ fȄ5x@a|WYT"xDK'5bg+Ń=%\ZH E`B4X#,/3g:3z 4tuT8L\?{#^,,US؝xs:6t%Xb΁ 50w.MNpNzo. ?O BaPd6DbQ8V-FcQv=0?\kރ?80<ҍGRiTe6 I$҉T]0̩u!Ѣl1P \-6B) 1TΚSZm èaF?KstE'3IM, Ex ݽ0^V6FXhbElHVѦin R],VXTE1cczSLa{G&l\Ic:1YUгA'Vbt Xԟq V&;4ұ.?iD2\z4 TxN=t7w(zFY!5}b{?jYy| H)'LZWb=_[~_4b{ڐG|U:ZO/6 %|X o"oF@$cBϜ7dJ~BR^S6RzjF+$MNU0<,">,H?Ҳ<8@v쳦Vko0Ps#~FJCDBE9dz% X$$jbXl 2뎼p#yP20?X4 Bt>!DX^1F~ `P4L@bC6IAAɥIRu>z ư=XB)t 0Xvq\[y^`\6bu%tI#V;pW Y,0 ,NC5ClM[4mVWX|gNpP .!0xp0$1zp8'leԡ9,`"(ƞJoB(qy>34z kax IF0pl%Et_F1gFoG1w#j$~[0Dzş֭q Ζ'j`y9H ( + <p$EF1ٞkRd+A WmGR!%PJaCUQTw^W`X6bX2Png_Sx+8er\iIa2G"X|7l7:* ZO8,\w.XfG Phi![ZL;aBpPN4!=Pl̟ǣ6@O:h6i:V.WHF$5au (U&@ޖ8r8(n   l;_GʔJHr+J fɽB KPT9`P7t&~$mPi8&s tx>x6RXE:Huh){k\Dz5 ?ؤ^9s{x|_qTG+iRUϙٻW8KsgHS%YQjK%;EpP @P(@ a4'BX EHo #4:A^3A< xu!lG$hH+dK2N̙,c >jd9E W=> b9G8cw"(Q  FùH3T@pBi;II8$vTPXTZgh+4Nid~US'G=l QJH})䨗]Ky/e9#p I0a>@/ # כ "KM[0e`u̘ [s72ӂqK9g;aswO?g( 0f3CkX8!P\4f*9FߠLm 348i&,3bpK0ˀ`ڞä ~R:KIM tM)7&TSZZk,݄c=09h|-V:{HexHU!I,EyA64!ķ УkQ( Ad,*AܵW_luFY3TAѲ-DXtvRZGmdH,,p?y,d#[1Uj60qXb7F];ujk+cLCmL@6.J|ngZ^!kc x~ 4f4V@@ % RJ/BT/X a<)p7&vˈ.SJ> R'2&_Z݊@ %\2/&N3C|sqG'%d];9  :)##d̹Gn]Q1;1^~w'C,ـ, GWRaj@9h= t6//~!\ Y-zC}bM3'XFPLZƹWiiڑ҉_5qڛT<-JEF}f赶'el ݇m3IgTr %0!}c?O BaPd6DbQ8V-FcQv=ޮ0?YKͻd8fҀ*93GRiTe6C#2l1R 94G7 “ YZmVeo\nW;w^oW`pX<&8{%.%hMU i Apn#/τh( juZf]EpMmHDr-*6Ё! 8M OiL*q`% A|~_?~_p$~pJo ͣ, 5 Ð=mAċ@ߜErRxk\h4##ڄ,}qDU{(9 9cH+̵-˒/v)L%'1r#j n L3s0ϓ?Aˏߜr)oiIi8$|i.ДSCQQT'iڀ@f0IOVm[u]וz)O%'Q[`@`B•.4@`E_[͵m(o ߜ n)8h{ 5zzʋq\Rp'aN6$☮-5pmO'ag^@tz%XN9AgYRRrvW1H)}F` G.&&H\{tyn\Rmĉ82cLB7~?Bei)&'*S+},3;X X^ vxf< ZLٝ3њI]7$K-wW '6٧9Aӥ}(r?%#b;6A=`d*J]I)Q9,O)T(QC:Q=G!+."e{ODY>"TNx%5D?ҏ\<Ӏ2F; %1ZYk%t;dPFu%jqUκWXW!pxV k v hҮ. }cS7c\HCSʹ<(МXÁB@;<]*uzlԏ͞JϢHaYF\[qE\ ~ :oH6ѵ`"h]/rrq-#{6L%\yRD xy|ҪUL @{2BDr ,Xb\Gp1ɜQI t)!S ʦ/S4FH{•^| ! i@Ы,uሶcx a Ɉ1@}EFʉK 0̀ 9[>g{_Mw6L' HYQQ"3$2#Qۨe*SGtd~׹ln}=0 nY'N-L怚ߪvF[/@Eb|Cc2q%e`e-7һƺ#EDTs?V9nC]-IWwnһp4ئ&2y7;ۆph$߸bSZPu[M%pS(KÈrV1$<9W]"X!d=AeOexM:GI]."jz&׀LELB5R;OE?ȔEzk2x֬Jū'y]w;D4% Kx^{n߼~D䁺(@! @/%8=G^GA3QK-HQYTO[ ܔ?FLQmay_O}_6E/t}i%X]MJuGH~s"{%a<"s~0CVӅH$izܩDJh}p(?/*%N|h$0'TP10UpYLY#E4Q e^mU*f ~r'SЄ5/b:*͜PDHhް 0 b,{4 P3%}(Z. /Ћ &- Z$P1qkNR$xc@0 |R{0g">-<,MQ1Um,@P!Y` N1Y1zaHoKMbq}PedepMIjOFfqb3XJ&.IJp' (pN&*Zq\rEZDh1!VbxbXnmJ*,!$2E$rHC2!2j59(j/fcJK"%P4DxmK7m0o)2)r[0@6`'6D*)qrJ ]+ҽa0Řm>Z+.2.dLM M2DhK.'1R̔@qlbOBi`^0-213#X`+%.3Q0Q,8pL5u7sy7*&JJ검dgFd&3}0$v$@#Vo@vr=9<3(GB0 ?O BaPd6DbQ8V-FcQv=ޮ0?\ ق߲ \l h MiTe6OTjU:VWVkUv_XlV;%gZmVeo\nW9kͻ)s--hHH $*ˉ 'ry\g7tz]>Vy$D©Wg&Tf@`"Z+ޢTQ6Ff4(8EQuϘـsƆF:Hrv䨖 Be'TS}Ou#q:(lĦi^0<H(2jMWM$\GT?%War5WZ]Ii58RU%ˀ Iā(00> 9I6MnU(eM*($QrB_\p(VZ\xHIa98|,4j3` g94ºWN][&1;}##(yU9?n'z@^Y< h ND@?'VgqI\i+q=,v`x xcp H(=l% - 5 Ê{YFO6l`p |Qt;uO\yu#<~4 ae [ D/'2/ 1̓,3LC$DG>E쑠o@zxQ95Д- CEG oI)c?Ҙj nFUMUUՕm]WeC9SK% X:X5<geٖl%EY֊~eOQG#@^+$di]mwyޗt͟Io_2QeBp^n!bf$|( 'bn]e晭 oߧziCFWiNiiYDn٤@1rS#`K  J1!Nյnݷ~DXqaoW <(0tۇgxif6 R7ƀOUo]9kEiI/M,'xՏbknOT}0O$Y>Dv/w S U2l J9vCm,L - X-Pm2rؚ%E^0uL+A@+JJ냐x S O3‒!\K sOx"&D؝QEu|/Ni2pќ,q2(oPm 2X;ƙ`8k0\ƈR ?؝$Saa<+ $lND'PDNN p  |F(*PKYm-ĹJȼ so5tK< ܇vX> PHT04SzOS~ݛÕ9QJxw`߳zچ:CN @US,z(SXP8KR]KE=0:jYQ2]1Lڇ3lAZa0H6,YUUڽWKlaLK2)`Ŵ5_Jb'_a*l-Es$_MI+ qqRH]d( $ hzt"d\Au<Ԩ<Rpr 9n{< CqZ5` G:g\o߬pZ^X@ cJB-T(@Ұ=Kr'*"u?LX ZhhR%ܒJ?t(/flݝX~ű7bu2U+Z,v ͟ᶶ\M-&@ J`ك@ (p^ Hd #;IIBq$̨%.>0 ~Q(ޣd^KGMs8&T_ #\sf?˸nG4x@pO'cuR/ȹ0$-:@| ,<AT. CN)En9GI%ITY-Ki5My=OEBEOΦ u`bŀ4IUm[T?:m9Pt*wEɀ  qo9gIiVYC_F :GVCHDW/s{Cվ? M^Jo/Hb dM{}phL*x;Lz,*?+ B(C0:Ʀ FR*H*A°Š P{G!Hr$#HD̦֟%lU*aj 4RRT5Msb[ ͳV(4}` ̐<) GQ#IRt+KR }Ja])X vKLp 4#`k[V\Wj~0G V0cd*F%L%ykZųm[vo[IYna yp_wWW)*Z܅} yw HL+0`X3cx;c(&=Heޯ`9sgXw!-f~Gt`˲AXgjƳkz4g s/=r@2@otr?O BaPd6DbQ8V-FcQv=FAUc )J S*%GRiTe6OTjU:VWVkUv_XlV;%gZmVdMjĕ:' ~@ :,?5 fanW-fsYvgZ=&{8Ƣ&XHh6,P\pp<ry\g7tz]>Wv{TGTg^ooc&TfȞ+Q$3P& , JAPl̟T~{^ؤk0iؖ,+LUől]eƑm'uGsIwQiΑgr ) j % @+L,3l4͓l# rm8܀-z߀Cq+1ؒ°o%z₟GD}r3FY Fr}e٢wiZIsjw3/(J@4$7L;7o'(@7 DZOmRsIQF 8 @3 P.@PN GYìd?av\8.࿖c p S14CXm 9PC@!B%qz\@%C%Z d "n" ؽaQ2FXt %x)e*gBW*[EHBrBHY !DR.F#x#Tjoeb$5aYa`bً1CI M)DRVJ]+L 5Q'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,35͓l79Ή|:=ϓ?<@Д- CMEэF%IҔ-K ELӔ=O EQISMUUՕm]T}eY֕m[˅XU}_ a؋UybMeٖmg=iږki[Vo qsMuݗks]׍yޗ{}ߗ }`X. N&%n5_E.M9>Un]9Na普m?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWQ pJv_XlV;%gZmVeo\nW;w^oWxX<& bqXf7drY'ryW-/tz]>Wv{]w^?'z}^g|c~_ > Ll%- 5 Ð= D±MLUől]#QmuǑ}q!Ȓ,#L%ɒj!IҌ)ʒ+̵Jܽ/ 1̓,3| #(=RSs H$ )" Z P\/ =9N]ktQg[ HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmapjanke-octave-tablicious-8a1b10f/assets/Tablicious-wide.png000066400000000000000000001545361515050116100242070ustar00rootroot00000000000000PNG  IHDRsRGB pHYs  riTXtXML:com.adobe.xmp 72 5 72 Flying Meat Acorn 6.5.3 2020-01-17T15:44:08 *`@IDATxw#IZJYUj9WΙ2;3UUZDԑ*$ͽ AFp^; t77~ٳs.Rs#uHD@D@D@D@H@JWׁ@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+)]]" " " " $ qUD@D@D@D@tu 䓀n>U5 " " " "ORWJD@D@D@D@JW׀@> Hs\+ pFɺFQlqF6"\"%{ZjM-=M-}l CGρ{LנrS@.Hb F(Yu(Y%°b*1)ǿ!(wm^QGCءuB)ʾ;lVlEW[M@>6f=rPKd5~.k<#N)8tͮGmbSv8R;CM֑mvkXStkFQi0*vCMrk(= e6FED@Dn l+ kvEVi[ڪl̮I/qRAy@C futs.Y6 7] $!ˠ ^&u6džn'e J0odn3E/1!4vSCR Sf`!Цk.Ya !<{°i`jgU(t”%Zl0!@k4T% 6 _I{l0[wb5΢!1?Z@Cpje%ꏠasKהGMy<*R88ä_" y&`x/Q! z-ZrsQm|1gQyTΙM)Jm1MfRO- EFjT;4u][s;;hf eNi=Qu&\ЩmٚA;$C,\mt"( 6/1ٵTQa֥f%k6VF88ަ@b&.x}oq1*vڶx}l[gz4w{M9$d,+l_ES&-Fab\6=! 3X(AB){/@|`E"=:?_O魘 g|NP-tQCi*jL@P]4LkR)!AI%!uBioיC#Rxy _/G2S^VpPNrH Sq҅ plzh'6g"SUć-MrDO;0)݆e;[-zz=TYQX9o s7Ń޻5(WxV7fʏcKGPkzjӵMZ=u,6 '0o-^4Iz9HB4,8ƤR; ~jBPqBg2=%xϜAJaDPT7]#T8p>TkNuދ@[ma8퍀\|ğO7ngSÒJ{pw| <SThڲ]V8M!KHS7MNP04@zՠ͕ zG|Kڋ٤a 4wM;1^vbl7lP iILr[ҵtĵta,{FM@J7 ]>G7]֭i?bhs\fTX XD-f.3﷩\E@v!M HE->}0d1w^7]@Ln5D[piG=q,>^]M&_k[4ԈYFƜ.0\H~.0Kk!ZXy/^Jgko埨MXFCqxz@v@QhNX$\vi w;SJC~7xDUiq$(n ,ʩd.`v_f!>J/ug4+G)]?xZq^)VP97 ;[r[! جN/M i[MҸ #14.ePvXFDҹ+bxE yaj;VNC\ ƻKo:Nާ<55bocn"/00G) !;szu4Ĉi8H73KS`(.G[){^0,AKݙn*W" 3pJ~ ?Aa9"TLj8Rsrey:#V +O;w; ${gĦ8Xڒ]!jL pWZwJ9L4.b+=Yj*Lx94{ʆlR~|tj\E0‡s ^\<-51_qk:jO ?^UWr\ڇO)p-`>s9릢[^X~cGZtOȷn;n˿=wGV/mHKJ* d7ra="K}="p?xsk} QOyvjN:HlHTwZp3mς+ SN-x bgGB//^lzRR"H?pЛ|T4ޛze2& KvNɵ[̫vx h[I~F6"lGr Q ?AyEA0xz,x8:RS0Eg/EZs%so"h ɲN"6]~~.4ڥ=xG*TҹraGf36"7nc"d[Z>nv)U.6%8{4h:-|;C>`¥5J1Dk0H7{/ӱkxqnk HN:6@C_O2rCs%ӛ| 4E,Urvӻ3EF\><,!i#j!Ь/lv*5`GGz!#(yQ|e!4c5GDS x@CP4xanIwoHtn;yICkCdu[{b@TiL1xIFQ`}WWv;9$\~@S@ Y_D:uIdٕ=q{tѭ^;>K]ED@D@D &+gƮ#!#gWJ.S؛#U[AUD@D@D@ڇnعOnЕG]yDZ-%kM/x(S" " MWمwn'%k(R[5V0@pt-6گGiQCAk;]mʠ{tUD@D@N"#^sk9 cժmH(iP|#VӟP9cy޻ai-ٚH"" 'I%kHegiMVr.MJ$x.b6qTZIr27[ntn{73tNުp ,!&]ۀqluhi9G!%61֎@_e oiT69B1~Z9J̢lFʜTD@D 䕨.DEW[vv_ӝ^t;}ۺn}|h>&ۺ-n͂Yx}v J0\2PTZ'.!W;5"Cr*\Xtgڪ u%uR .6+I]CA-pRT@Ql⒋˦7چ6؎Cx0ϖ56gn@kB7Z%^bϓ:wܰ/;@xwkǥ/ÎCC"OnUDUTlu pCx ^zvc*" "y{}:jnG Wg56Y-r. QoSm jo>;_ 7pНM %i]zqC Q3Ƒ1"tdg5CT6mb,,LAI)z*IGAa,b7%U.yH*^̡Ьл=ƏoRBDJaͭ.z)㾎9qNۻ5WD@ڟ @V|Ƌo-x$n tK&߂Y;R]=S:ZLA o4]^zPY>1nEʈ>]PY;5(%L¦n *lI*Yb PpDGb!'dGT`NҶ<`;eYNð/acwaʘۥ8lvh%qWb;Hv[jKn ;s~oL{45ok9l s+NGL{yjBv\d8E0 Cצ7;q%@LƸs[S>q-܋7܆7C{wo2S\$ڜwFrKCt7x-4.o-cܢiq`$3g`nR-wz#V706.>eBHsiL,]st ͥq5о0aZDTM^I lu1Vo¡%+:o Qb(I \w͘6`eoG7 ٫Iθv\@- wh~QMbSO/a~ = OճQ/4M=Wm(Rƶf9v-Et5[9=>ɵ]QE7bUc\@}` %n {2P&^8Ma v闰r0<\/UH^F6c =}8w >mԟ@7cW.[w޺*apq b78 JBc> D pԸ`_? P+Z(nxʹx>+%(Rƶ鄛~?|_Bo 2|' s|oޚ-TD@ڐ9 !ȍ{@s˯_JvrgA/D=1%Je3A1S%pp~M w$85\&[͛uj,/.05X\QMSPBfي 0 p#:[E|J!Ʊ>4!/fp9?J IWޣGzU'O ~ _?M ca4p4 d1S11䫕J8y=[)خ^G =TUՈ8Ee(.n i,tAgB3Ը|A"?8`4W|"F:ÎԴ;q3v%-#6E \WHE09`S2ݒ⏩! GJ=`j90=j9p4}Vr*{JB]etY,ٵgLuN'6791]d)Zb_.W]#ͣ|)=jV rfjfc֮l]#B&pa/TCA0.B:4;!+{(f)SV#"\X.I&6q|` _fl|gBFo=KStskj>դ=f`h_&Ete@~t_0#=<sHm\ҭaˉ-_vߺ;"0TΝY$Rǎ8'e{5;[^ ?{/~2z>=r$" H`xVU"DYkxÛ .]seXWv嘶mv+Wt (x]~dt_ҩϵ +sG2 u"#" " $d>G|l֐)LMq {^>? {w޿Cv!\;qC\˞߄ugt#@nC-<L/\)\ cK:U3rSĊ@Kn0(tXx|E IU䐀Kv}t~bM;{JJu; 7uH|=if =ɜv8"2nt E DXKH`?`蓙W>tgx$5*VE" " "HEXlQcc*lfĺ<<8tTw0&[  bkR8EF#0ڃ،t9ވx ta" "  0[>ֲWhqwfEn"U$Xfoo2#Гs ݨ4[ 2EߥmkJAoJm} 츴N# Ħk0|p?r!ZyQq" " "~?|ͧt[{w0RrBW9$?y-l!d1^?"C!.'J&rsUħo!w-/rR(4|mխ\33t.-T7xi皾{rY LIՉ9C4-)d egؗRǐs2'agM~LHOT8t" " "Zn}A"\!Rt ъؤ"E0넅 ~V~q?i >kj$" " A!"-}KZ`QB2j*tcڣn xW] j1#Z<;د H nCٿ.KvuƋ[̣hٕf#Li( { ?jd5\KH!:/ַHe$Wo2X`å;¹7"{:BD@D@ZKvh[-c`01zO KC$t u(JVm^7t E\c}pd Vut .%d/#~alpE]-D0>H;e=Vo|VE6\]3#O}Y!=uID@D@"e0_&?4LkbJ}` .\Č \5mQlm1 '݈ڊ[Ղd+\gXs@ $LvٛpEP~ ] Q?+rQDյ5"}o@vE{j9€ (DU;1 ;},fA|*Lv0GCժzD@D@Dc i] hK"xGMThU Cgehި4RKN_'kX jmKH<[@)HuKD@D@5A>h-hNS5t ,<-5Ve 15lǷt{p$xʴ/X~7#"ޭ_E@D@D  &B-r4%@sNnm*Z)t SΛҕM7cJeŇpBܫLG9"" " عO0e-qvzƔ_#ݑ-6\ XTސ/Gm;y"u ߸B1A3@<{n&O" " "O%]W! ¶Q2Xwoa9.. mk"6A]չt;wi9/ioi>s!}{g@6ݶ JVXf鞋th6@ixЬYS!(U$" "KI3'SՐ4E>xy8%n|>U8FAˆsQWrFn@E і~BL1, 5dw{]8eҏHÄx +=Q7ى >d5Ju!{IZTYڔM7oQq;bM/jHb鿇FŞSD@D@D`ONUh _sX8@$CKM|?87Ȯ9Vkb7evqX6V+o- ?lzh~=" " "p&|_rӁenk`/…d)œ VfGaCE|/mEX4ZCXC[7#OXڊN" " "p w^ =Pb`ך[磌EAGV-Sݔǎb+N sN;  yHހ*hncqڧV`ZYD4{n<\{fC9"DBs)ێ{gH W>BbGB_d,,jd'O޶s6[ *4,~8>{=xuk2*]0EJ7ڛka8PyϚc/OtJ%P x7;ʕ!P W@ߚzg n 6ݐ@8"@ij+n~lndLoj*Š 賦rOz)" " -imuUC W⮨c{QV t'%xV\[Ƒbc.F8`ID@D o7QS6g`X<0<G2M[JPUPsuSO[RJ#HrN_7tpEXp+1'1>x Ȫ& @5rs%1 L{| rcP\ϭꕔn[ 6 ;^_p7|p㱗^o" " "G% K[l߽3^0HIDrYtYIR̭/wT~xAxw+<Ϊ" " "phc7}1Zr L; 31!zn2E8{/j*cQu ^ aŐm%{w^:sj"`g?qS٥}@'5)C=;-p%Y6.} U(2zAli\m8pKewz鲫a)h9UhʁE@D@D '`E_U؝w~̗g&kD#D]@_\Q(`)qaAu\b\ :Tb32d{-ER~mE@D@D o\uޭĵh?Ev-TȰb/DVbwwHr NeGJ7+=>YC_7$iSj@IDAT[cOKu7&>~vJdPfN³EȅsoŐ)ʸҫĔ_c[x*S!npcXy*YW"K]!˅hFհ\Ɣ5C.5SD@D <%x.>ghVlG{"k(*d_>@ckn8Io!D@1;'$ {nL0&~˅hsC.~CfŔG;nk> #P/3L"CsvMSfHd5#(IUE@D@D`;.0t 0eڽ|ߣfJVOwi2/-_%3|h`Ba3;s"_nC Tz.0\zUtWs 8$Eۘ>+1֥l9\Ϭ+{^:9@#I yp&G>dU̚au0 ݃bp= PҤu yl'A*s­UWJ7ەqGV,nO/G@h;xG1H"" " d..dYlAD4:50n#0T2j/\[U F)̻ .Ro3܉۹ѶpcZ^4=z:JD@D@ځ[9F].ۚB^A Ѳ;ޞ鞀DgWXU iJ)R;@h_P|De" " 'Bma̙zc/avk0FREiK᧻>m.{`T'#e@K߹b#IDyZW)ID0HD@D8$^.Tq 0}j ww<,J~Ź*g!3p~z*χelUåt3#< ҏvmk7#)H=MO{h`w۸̄G%6tqɔhYsɺ[/>Y[x)ݬx7~לA1q3G٪SD@D@:$g9}pe"w]x@}LEa2Gե$(-\8[)Aϰ"-x-~ *" " "pj fٌn&/#B<]D1C%XvᡘU׭RYǻ _t#f؋\zbOڮjD@D@D B[9|=bɠF~52c  Sb;~ .._?H\Cxv=G-}L!QGLD_}< ]'" " 'J:^_aB܈"L]fcY2Q/y8Ab䕫OԙthĎCSF+W„3^&$."t)Z"" "p m7?9D۰fB%Cq=')"鹋q7cA1,_-|69\JMpo!]U5 t+Xlz V*"@Hy8?۱XsMh12in 1D)vB\RĿL 1o%3\tU&/{v=tVC[Ha =q߽ГX݅l#GRaedQuVN$#g|ݾ /@TՈ@bkEWae.}z/{/{%*M4yQ$t\A]%C'dR$Z[~ _@oCO0B]-N." " #1g'@;3x_1\}O' d>!RԺːvhcp5;4]ZTd.-IխMmoQVJ7#V{;n1h]Sà;qht@`3FQYGeBw^"0\OT:AF9 /Rw~ oac:!>x0誈)$$KݰR5e߭_py"F*,f;ڑmի|Z48}cc™{*@]Q5" " "pD\ Μ~ }f+ƽ_Cׅ^8kGD|U 3MB"gsi# j*I>dj+!#8,)Gnn嚝%b3Ï#/xtBh=zsdLA}L.+8Ŷ-"0 P񹿍'^A6ۖ9̶Xi,)ݓbҴ/9c=hpR#X3I"{M߽ [Ŵ] efO\l0ft0WY>m7|E;]m +Dž{ ?Ŀ#So۹O.v'@!!~e.ZdГ*ppt+2Ȧ{pVD߹ϑ|Χ[ >cVPHLo'pD+P9F ޻Q ̺F3EVk*3:H︹ksh-@d.Y!f?SoK^3'A)Vњ;;Z[u="lsYtsؒu;q2 _Y3(o@JD@Ds8s1Zþj:DT&S3$:eO`;;{o7s8u7=tב-Ta_3I݉kdYe ]~K.[ig>rVB'pqR-68]3ة!a7㯚_H8r.~`Qv 4'>h(եh ?e2w䧛KȽpgs_Es!-%)U2ãE@D@@any&x9O9Gir=.dT]Qesy/;>f./GP_'^5cjU=" " "Љ\ 1tLbcC=vq;jވ[05.;|;tln[x2l秴~+1>}86"EpPA<B3B9G$.EΈb/WurlS)ݬ_,6 2~7ZC{'1 z!" " 1ٙҷ2!5g_m,$x.I')l7BMisH2nt鹐:ZD@D@:Gp]bT<ێGɪ]Fut 0A/tl0t $So!\ݮ!D<1fh<p?%oq9|/A㱗)>,v=6]Si>Cg=x9 +?3G#܃_ay{*" " "p y.FQE \ G+gᴀL&j(ɜ3aEʙ${Awk;ψn!bVdEwQD@D@D '>sfLࣦW9a膳:"-{v4q|HH6üzNx[fLp<}O:6aPj_-ąow !z'IFfx%`2Ո.W7߰S2'a8t'|s9=q -AJ\ƚo3#H}mU-[墽O1(cXEJKƟ;m܆w $$dm8$} ( z.޻L7t57 7Ŀ>I;N[D@DpعO7nm:nKz'JStE5.L1Gg:m'kA`<\a;A:ym)&n z$Z̹6I240|ln;.bс!.PB^d=[|hsI7NoţW,6< '" " 9%/ُB7P' q]Г\Kp5.d fq(vv=1IgCn嗬I4)O77}k8s&?mwѸ^S95wCI2*]s-n;v8t9ECE<<i&jv;;[1B0~w7Ss?rd4w|C`Ю" " "5z|-}Ҡ[G6Ï!ISaC cb YA% +Ҥt] ~BnzL͎!h.,Tǵ+Qi(B1\UH<pg畇p-;8ii!`ױ~ >#FωW 9/pstŲ JVBzghKsɻhcmx |?K d&+!|qaSBF1Fxv8bS1~L޽+E^idM#ٚTb|p^xD=A%JCPI:gA]-ThF("" " "e;[VY{G_-"%jkMERq0vuU@7`"tFF\RP0vy-lF0-0e?lQB9avALи(8?(ȈMM C q_CxqHwqĮFb!q]a@,43Q 0)&Ի^18_͟.uc_l hn"N`4aa(Sܸ];{*wmTct*]UZ*0YmZF R/T!m*X'oʥLCR H]A/=[%_8ף/yCCWԆ(g ƥhf63l.@O)[ha&n8otƘ8d&) >VB>l;h?. U10] Y WN˲o[5q=vI8ܶ^j+7pؔ^ǩK߰w-8K;/M- оgEa0IP={IߋTZSBJ-dqL8;iu D2E 7 zQ{ lƦpy}xk?ϋ=qR?8SJYƀNa˽Yа,VpCfxg ă i8Oh%leHsSq-@ʴ'c}7k&@#h;. R=<O|ٮpxRzo]ݺp̭Mjs܆#69§;muZԶ8ox7 ɬƿzGnI.rq~am޻r !Whb* É6 f%1pn1O c3,q-}`ޢw}WzK[@hoM]óe ]h<`aCuĄƁ88^̡JnrƥPp,ZCi8ሒ k+|n#A ]J@*һ,[@yv´!kpse;ܺn8+l)i`GUKځ<V "ߥ x}fuN Eo FEU}t EeGT>;ϡ %ֽMc6M&զJ|J)ͷ_x# V:$Aξr7xJؒ>Ss^3hG)I5D#47 tk )yM6eC:rY<5ڙ}w;,[l F3#^>E5 iHTVAsxՙZMx5L}C+`>@@%fR*.Wz0c0vA3gj}jlz@4i!u2l86ܿ?@񑯜Gb&3dwZQGߠ7⣷wHުx"G]dQH7 70Iwަx(;LwF0-s嬨?y)\!ûr,܁?(gM6w8YNeKSy-}Y-WZOs%8WZ{n=d h<$޼]׸8wǙRRNcn<*on> >@5S#лŚ?enJ,!:Fq< 3hB 22+11 `-ҭ\e럻2w k;0N4<ɶC{*TEJwl$HI JSM?rW]-5[ ϛb6 R,vt4i:__} 4]I7I&Y]ⱛ~8Q=,>$v*wwad^He͚n^)E0:pXkcPڒ|V8 P74d6Х)+~+ ]~{ ."8xqdcnPnҐM[Yg춭[|'9!8P1 wT&moy liz)4{8BH>ޥMP8 b|p@8N|%#T6Q+3Tvydcq Cw}zuxa;`<> O]p>i%{hv:@D@D lAbv.m٢bG?joIfnFk z/Z mވwNzؔȐTH0>`FMYS9ocn5}Iݦ!~Q+doFMy!xKa= q9 1-Vx>{;gTNaqU̙`q(l9oSy|R~ckW=E@D@88:io uҷ~u7P0ò c0^T04D.n"ux4 o^w{o$[YU*l6^p}72'R?Vҥn$O3f5ΝbU.GdVAf""bfxxqpȢ*BVd-F38G_7Q(mzKJu1umM㟉sLu־oBE?I@ b(mXVamtXZeRdh> ;)kFdWηƒΖTN%b?ىUJ0eB}6%|=K__s7 V\h?wd+)Ӝ3<1v.wC޴~XT7m{ v'f2_T_ռ6,gk 04N!AB=l}޾IL oٚ!@` $),y?cNVPz^TÒPzQMz2TͪzΉ"Sa ʊ~JW*jO3H^MҜbYG)/ȕVYZUP4߬?J*hVDbbI,–Xacʹ/G kz- ѩe'߬Z.yC޲zv> ͏*ӷtm@9L2݅2ײÕĤ]5{+WN\&nw0T\w1OWj۴^N^Qe,YN,J,[lKZNdZwQJ\ RRI'EE]$&o$ϑTlR;ZԜu+&=֢ Gr wIqMAqbpqz|A{g[Y, BVUs8Td@&5ù{ @`(fn?d5;hf@+hN٠pDZ.ͰVXXOOy O{ɻRqvdBVQjMY`*nNSr¥7 Uie$QR='\ wz6j)g=͟@;Mt%AVPuu}6__,5]n_tgSX>*g0^(Y9=s57 ZIIq,;LRR2OҲe:CyAH Kk*5%!V64ҵ|EzXw~ʀx2 =ωe[B3^e`4OS.5i8ȥ?KO+͙3'kuFW[eZO Xӽ_'j[~5AeYKl[lJwG%Q!GoE 8ʨyuՇ Yj63kr8KzL44ip~^6xZF_3JeMn4Q^)h/6?7q*3>6a=XOh\d7lBYͅCKZʼn&bvV2׿=ǒ 1UCMM=|JWiZY=.dm<ҽѻ-LO&UHIjRtUI)cְSzqnNOKaKOVLTL,M:xtt_S5"yl٭>w߅a0Crc n'8z|Eh@7:]r[h{CxVzW_sf&ٞTdz!t:idѾ͊y:fp]ļQKb̿q<{eO5=%9Wlr29~%c,O 1C?)2O>շA+)udn2'fmg rE͒lKmsg3]^ih۹.]sO^4yEI=uT˹4zm6_j3{9d&iuQI,y_ gRkX뒀R-9D]~#rчN='vz:e=]h!HaCk~4@`%Zc|f^)}u],'T PUVOަN_;4ԉ2VL8oر*V`Z| |űTc]G84[ܩu 5g):\W/uJH(X%FI1u.y[V*6scҽ9&guTՋ~Z{Q&i/ĺ$s{)ONGGkVڋUWu:v^.TUR3Q#\[4m}"L袡z](@6S_@4 g\-M)L ]M&=mn0,ڏ t&|ݩ&,fnwva瘍W^UKiɟ5.śOg]d؞^oX Y (*'if ݶkC^K$kҩwePL2t糰݄m)g8Q֋NkD&FԖ6 ԛɲR$#gm[v&6SJ]t 2,ѕt|/R wK{3QÖS{6]crby:ʉI'Ci91ۯl$']J WLb"uh&3)x *6ӳ@NU;T~#u1e&1eoA*azW3 e95=tl#%I{ :5Sngj& ac9{#z;)/{hdhm [ed*E}nfyLn$ (s>z=ugg)>qK~>+%I*?<-k:dM]\'q\Z`?{3Kmnc|#Oԟ&{6˱eM-g\ZuRw݅yzR~.vQ6srL/ 'B3ߗv@}mWMOJ~dvenhz `O='lzK;*=mW{9XK6$p%R\%|Ge,uQNel+,fT>M'W2uݵD -6'liquȩD/A^$m}LtB(74}nR>F봗ﴙ@vLHlXퟅ߇`R|E`)-)$AeW{tDVYv(l2¶hS'e^ /`}6E0;\>Cw'QjWΤpʠd&Wo0njKg3g\BP桜Nd61:Og*R%^G ,k_dN.Ԗ1vW*VK?I=b.4u0>@Qs\DN bdWvA_(Ul5(9?;j7䴴tKPOWS-RƩ6ZOOAnZ{ӥ\5Dr|o҇4*O6ZIG˦shiGdѷݩ)ΤmHГש deyCb=UaԘsgMy#~[ U:zic,L &eQmd365rPU-(x>}#tߞZC٧iJ|hL_oY/BSekdߚ]ɲ[ʬb4@@y@IDATr~H$OvrԳ jG=Ē7mIWѣ-P[ELv'DLLv1VС1C'A<)P"X^ ]O׿\^^W41R^YG Ir'!/N /ã/K*Wx5R*Ew`D?>i(}t+-RN,Yg66/o)]]ߓsۙw} [2/QJ^wh ׌OND>J?rųDaI30F[1]ؖcfh ˪,teߞBı45ꎣfs/o%\nߗXi}P>@"]7wzΝ-.cUy90of2sry}yPr<~ȁCQ&ӱ-w1g 9l*h[wۋUCy)ʋyw{44ZS ~U.镚ni op#=)OV* P:) [iUi6NC@oÛCP Sj?k )Nxr_ . [ޖYVN_7K= On,iѳ$^Lc?ePHBJ*Adȟ#^ҭBBmI}Xijq  =krσ$+m8,DS:T痧Pwnҭ\*/nkn)M#\[wۧ 7 {#`JoԦh70ۄqyOotzJNjے">Sn ̷3b @wC=˼ NՑ}QCi@uT*["_xy-167*iNqin5G2Py_9nWG@o)R(g$J9k >q{!Uþ~oG ,EFMI.4@OM=`5,&,nZ=֏7y-D(ݛΖ"[W4{J'Vh( H $`W~Й @b˕峄 Ҷ7utԀ[ŻZ/\0ނ N-~]bdAѲ:|rӾ=t+"m<"ͧtuKO]`6)U<]ARor_& 85[ we-;CW Yt+]=V,{yޖun` NZMׅEU8Zۉ+Bhwf JcjubqPۏUp7n5,2bK+>(,aЮ! 8c˖# Ԁ]\Ú!BR~E4;._[~wd\BZo(ݪKBӦql(8UdOc/BxɎBXl2D2[t0[\uN^ee">7la ']UP+l6 V ع5i7-@g3U3k &b@)Ո”.f+8S6 G ؆PU(\u}JW4nsE(*2m.,fnKtUDoՖs yOO-:Dy--@򖾎Hk%2X+P3<.^?B#i> b ~,ܢU ]ӅJ@\38gxjorΤeݧqzԥ ֽDo/ t[6}V<)$ ^<͹ÿ:i& 'g*8B+?* =w qzb6lk5#YU1c=wG1 y?6ae *\}KE](ZQ @e!<b,Lh͞%0FED4Ks%J2>I; dy8DF @Hu6â(LZ]ߕ㟢=o֟_)@1 Vlbi@utﮂv[mP{:μ@N Ɍ}/Ɍ~qTiּ"TXr/<d_T6&gy3Y+M{LSUrm[S:ȽZNZ|f 8]S𖍰Φ9,(نܢ"ВQJCV\ICiO)G8utz5- qVўRbgcK1fs}&m anťh*HSK1& ;$XMﺝkUJ[ S2Lsd9t$uYdj/+rv@YxeJ 4Z(X_ܠXNfGaqBVvNngjXN&MĂ%L~B^n$@x JG?$sSҵTPZ[Ay[4J1B [q1 Urrͩ$6 fqʊ>CI-%v|-ȠwWt+HD :#ŭx˵y$ArXrʷPH< [.픀rL~*lwl BQ'¿ȁ95r& v7=j/sjbJ 0řcg =kve69r'^t/annųlWAwzd7P{:2@`)>:F8UjCo۪N.ZJ2WE@'B2䂦|ͥ[ik?gX˔؟IW&s9n [R1AD~&Bw<ݬ!#ka6c20DNMvMy]PDJy/`'Un`w_*n_ [ :-~9ܼ7|.Sb?o+,"U TDZ۟˭]&@`H*:#Rb,#,2e&^oӪY''^Wd#[t )B;,. <ӿ|_ ,!VubR۱g %X@ 'R [}9Dus Quc@!2^P{zм@n &oM9tU9Bֽy7HmT#l|m\1']JI2"g5OnO}8e"@#Zn6e ײ @Pl1C2ltirϝ4ZEn?w>]U(++a:qr6&sck "*o@ ̦MTw/2t{{Vbq!SXYl3X 4WJ (';S_IN' v%b~4jxvET.g]_T1%0R/DAo@O`rI+ϙ R! ySF @k)xz2j[g]kHxWaL|\Zb9:k " %h^ K;R/($F%]2گ [ï|ZNY[iY35D!rEp,[D̋$-,8 xQEϭM~%)f[ҭzb3C Ҽl~Q0ZIX Of]ldLف"$+Tku |MvzJ9FzAAGG[F]!}蔨tq]áANrtp1oAhLy/Ҋ-3EOA6dSCPxblɖ 2A,Ex7픳+tRp(@ (LfAHw+\48umtߝ?U~QnWuy[cCǹ%rH+DfGY$گ6nXg6=y(`gtɀgs-93 ;#0~I VdPf5Xx9Y}Y٦8s]h?ؙ- @-kO95Ln~MJ9 p^SCZH8xKR r]P)"VPn!]>C,OZw)~i UpQ%_?g |1@h̍o=eݍLz)g3\Q$8ʠNzYgkMP5|ٽ68aWwhA]_ÿÿQSQg :C90 EŮzDtk}^KA/G;RbAxA;,J+3rmV"mf'iW%Lhs.zC ğxl?ͬLb쎴Qf 9.ھX"jF|J߆YQ~alTJ{j({=;Cdg ˿לZtK8Rphbƀ 92Pu/H:rnS]@+H3hjmṛtk}(Yc&K]"`qVg8_ PAQg̈́me]I@)iK0IEne5B U P]@UpCiur\x9)[LX&nTD9(z̦ە͒v#ۓwG?_RwsPk'&jJُ+%,k"r('p4끕]NK;K8"@!YqlLkmW5AwYzY]hAjgѯ@ʠ;J6!N, aBMqfk@U &_&']57!U=e>2(尼lk5uDk[d)C ,q5Tq}yz'qsrV"%gY*~fp|W槫Pgӗ6d|iŻoTYeJPpra]|;~)Ukpؕ/Wi dv89I[˔y@U1_UC'mTXew~ oܣ\oDeMm^F(ZEShUuSa*0xN٬n'KXb a+ݎ e7'4@PMjF8x/xFan0}zTĩy(&›/?"*mҭQ]!$_%Gs+>@cm*sy(s/ /VL 2]͎;Yw+|?%^v(.mجSWP5qK}}bJ*(ώޑl =l;qԿ _qḾA i &LIW !yg cVX:+nz/!;=Vh컥(ѳPqeΧޯ_G_X5k(Z Hen[Vg3?]2뺝3iabl Ta(3S߮ @` (:+ ~A3$GwRNۍJ2|ff-$s-{*s?wdtߝ:~|fYrU-ڌ^{o~YQn V/+u5r,ܘ' $pMT, '݁4n <Ҭt_я<@Pn</Ga|ݜN{/7,",T#M <= Y.O7P@̘W T#gDUt&t?:D W[)װm' ;nw[!ro߭8nҭ0ҸrJW~rBʹĤȼRwK)4'Ɩ!iyfӡ=r69vwrt>$P=b6wLL,$@kN`z Eg'C %y<$s{d{&,' ( FkSgGmTKnLXeV9:sE{/X&]t*5xl(ݺ>&;"Ң}-W < _Z@ +b:za}Ants܂"?e eX%=3:UIKN+J. +*o?6H14  _ŸT䧫 d]Wk2n݅'>VViTys\@m^) {C|quѽO4[#04k0vJ@~XeʧjR~gEsG]#@JE_,ai4k5  _ŸMNnLA~5] t.oЉp*Bҽ@ <,8V6,({8} t.k%sxAPť%$@! "~LUgݙ1-ׅF<4U]JVI&_^YMBV/O@ ̎(|5]MK'/J.Z'A̺uIF~N)sSZr[WyAA Nކ8}-Ui> ˱K:Kcl N*υq&~ڕإAlX=60Aݭ۵4-ơ"ɼJU@|zXw*o@z) 98^i p_ha'֛JǬgqO{6(= +^ 9ZЃ; ,B@2w:)EaYa㙕A. tҕ+}w't6W谋awColK] %"a 8Ռ&oxgn}udˠA UέC#'/V你PAf igrw+< r`A@- G]ⴓjFBq͈$ҭIWh]ЛLiq: +0CloeNGSDCi@ #0=(F?u: PGo@Xl22y,B~?DFMuVVM"Ҝ#Bϓ!V*&?BNܼ}?]\PZ}?ֳ,,D2Cl0?]J8اO]껢z}u5 ~osQEXFw;5ɿhuIA@])؛8zgcK5#t>AJVU#̦Xd]&_+QܙsWїcO޽;!;bAV,t Iĭ_8evT65y*[=v8Ȧy|̽(CX@:?VvTxk5ue @:`g49Ieyk֟T⭟uOΧo@lؠO,unSlE$G4!@TfM!.f$#]ӕ[IZ)ղP^B$/ݍQTRN6tU4X%UE 5w@O`z`+EuUh׃t+9 D}~N IνrmJj̓]щ @bU2]w,dCS1 pPX[Q1mDf]tF ^ [CG`vu$icODisHs ݙ\uMh,z'B@EʺG5xAu)>wC⪜ )?78q!@JeRm)K@:0+:[v0oF@VEDc5 @wB@9'oM,u",^C{ E^Q1hi %DBV]hܳ%Qu.u=[J b@@`vl˧ Az65}*gS@ Dkc6t 4OjF&RIT3ku ,%󬵬QUݓՀ4@@ eu:}\/8)ҽn%\6n٠/L?!@UGEeSw8Z[j~-\P|2ivbTLɽX B+-ʊw aLi/Nv_l~Bglν`h("ZL *T)u Y`UAt%pc%|~%t^p,]!@qa:2fW +lu *PUh]"6BB!;wfȟ UGSfKAPՙ36KU|6]D\)[~ 6U/ Sx Vs@:;teCׁ9.dEA~Ab&gQW2 uևԌhz([zg &WՀGT6Ap0FFZY͈ DoT#ҭ1lr^Ks:B\ CjX%s;ׅN/SΦ՜ PJTiFJt)VcE @ 7ʠkY|M6]/?=GzW&ҭ]8ml)KLX}7aٻ @G  |7/d|7*@VFv_[^@gD!lɅ@h L,kN(ݠ'-92>P,fnRՀtg2Zmq @%d)f^1ђ]it-|#nd5J\E 9Y1ggPr@_2q[*Ui\A  ӵ鈴W*~[_qnjMt morG]M,(@hɛ`)Ū4RW1le-J׵`\ߕF΅}=@ 8ifRΦ󝬷A[ڻ.*&=ӱj4ws7@@}c`xS({%ť/|Co@@" a6@@iQt}v\8Yh6]9OPΡqG 42=z@JWe#Bɺ#6]x] qr: HDoA @ P"bbH{A`9I*MmCs`APy/xhn*aWt}g T&%aq~]\@ׂR?   8=Δ{:Z,lfC P> STBS5HADo= @ ͡t@Co8.XC(]ߢjXoJ 8 f9j޾֚st__(]ڇnlH#PKq7 x Yɦ {ЗZgv6?j@vI (] l@f8bݿ+Iw(Cn-lR,etGCIN'/ QQ(3EMw>#Ȭtρ# {#Կ[Ig @3EB'tC~g  ˦2VLno|7 @I h 4UU)|!PJ6F(@NQ wA"FA!(]9P(]?] 6_XDZJ7XXFo@kM ;L 4j7 0Ӏ4<|tUPu܇ TEYp V.#Ƌ{ t<"wJkVF)1 @6 S4k՞ !#+{5WJ]gsB; x 梴B^43 @Pn8XE9=ͦGR @E N&{MAatc߳^b _+kε>IJLT̒=:Bt!6' j:>8~Ej3 ( P@x6Y1gwY$n~t: zas#DjC 0 Pt~ sV-9El m"U7gҟ)0  T%;f<\ޞ C_&ҭ\GT_ ŐHs|཰Y|٭ـ!0JÑ(]]HU04:S"Uw@W|6__ZZMܰ "n-t@GHU(uX$SV]KA˰u~]':JVr"e`g4AeҲT>QҸ " le~??gq\BǬ { K@6>YB\HCJj<۹ c9֞@y>!M8_+Td|?4]wFZ[9隟Oʦ+lQ1 +ť6WN_BxWf6?0_'Ģ]OwJQ7Ge1J+0  JR~aT9OwKɎHv4u] N@6rD]c]ƨA"\{3 @)sB'F% z>33Sʘwwcs<_d-hy>t^UUw 4xh @K Uތrïl6+&EQ%ݠ"/Ga㰙J)/0EP-FQyɠA @E@>;نI|6~l ?IL .tnJ9r]negfwy:j߼%BXQd(ׅ";V5E}ZJwAPof#sK.}A@?F @KL)vx0}~L?n>ۻ @P7fS!Ĭ1JێG_^_"y| ;tk  @8O{G#u6߫~DnfqEV%|7gL*/@ PJj[ X HU¿W]N?IwSN1UDi_ @7@D^8*@mctpq(@ (n8o,f4EG-)q5ރ @ tk# @@ P# @j@FGG@ V@zy @@m(@ j(V/ @M[!@ZMar @ tk# @@ t[ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km:)\acorn.exifData DPIHeight 72 DPIWidth 72 {PNG} Software Flying Meat Acorn 6.5.3 {TIFF} Software Flying Meat Acorn 6.5.3 XResolution 72 YResolution 72 7 acorn.snapToSelection1acorn.snapToShapes;acorn.snapToLayerBounds= acorn.snapToCanvasBounds1 acorn.snapToGuides/acorn.snapsToGrid1acorn.guidesLocked3 acorn.guidesVisible +nacorn.printInfo streamtyped@ NSPrintInfoNSObjectNSMutableDictionary NSDictionaryiNSString+NSHorizontallyCenteredNSNumberNSValue*c NSRightMarginfH NSLeftMarginNSHorizonalPaginationNSVerticalPaginationNSVerticallyCentered NSTopMarginZNSBottomMargin: +]acorn.gridColor{0.150563, 0.150563, 0.150563, 0.500000} -acorn.appVersion6.5.3 /acorn.fileVersion /acorn.gridSpacing 3acorn.gridBlendModenormal- acorn.scalesGrid1acorn.gridUsesDots+acorn.showsGrid-bitsPerComponent%bitsPerPixel dpi{72, 72}%imageSize{1   Z U#)437bf3c78-7781-4605-822c-5e67f744b44cpublic.tiffBitmap Layer 1MM*TJ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g f-v*H UM37bf3c78-7781-4605-822c-5e67f744b44cshouldApplyStyleChainToSelectionI UE37bf3c78-7781-4605-822c-5e67f744b44cframe{{-128, -128}, {1280, 1280}}JUQ37bf3c78-7781-4605-822c-5e67f744b44cacorn.styleChainSelectionBlendMode@U=37bf3c78-7781-4605-822c-5e67f744b44cacorn.layerStylesEnabled9U/37bf3c78-7781-4605-822c-5e67f744b44cacorn.maskEnabled8U- 37bf3c78-7781-4605-822c-5e67f744b44cacorn.maskLinked7U37bf3c78-7781-4605-822c-5e67f744b44copacity?7U37bf3c78-7781-4605-822c-5e67f744b44cblendModenormal.U37bf3c78-7781-4605-822c-5e67f744b44clocked/U 37bf3c78-7781-4605-822c-5e67f744b44cvisibleW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeoR?go/a  b-c9 _4)t 8 ;vF%k7-g6m@pw}Wx۝WKMv8's7.]wub@: L l% - ЯP= Eđ,M/Kg|>n7:4pS&Ǐ.x=@~82{٠$(L~z.Ħʯ,w'L 3b3#~n3P4,˦F3-FK@ s?: A+CєS Tu +MSTOȴMR/1H,W"J@Rnj%u)2Y`BʵmH`HKHh( %VX@)xќ?#Z,΂O. NnC~%☮-}QT6p%1^0ѓY16#Σ.ȏn_~k/'Լ'z3Qs]+{=\MmH[)`, JUIS,4vʻT[{L7>N$ð1,+*i !~'4#V͎uJYNj +&,m17ƠILu.U{iئ\YS)Iup\2\2AU+Nti@]L۲jFmSwyNCT$7(NDKρ[F ^if6juO~qb\F7x979 =q5wģ>KpyBTLQA'f2,$B ' :9A))PG=dB5<8+)ރ03F) Q (T\(~K L"VZYEiD h<" !|B#"hb3܂C"$i3~^j =nX'ehuzJ^@;M{iƖ{v'ot@:O#V0?y}Zv}_`Ic5՚~% %!voaPWfx EᨁPG&Ȧȶ8ANөDdiHE#?@Vp6jWQ}}_h {^ cp )XoR _&6Y z|9`[ g9{٦o iW"Iini~j*jjjj*δkj޸kc7OO#a=<3QOS)Wg W` Y4$V•B#>CJOOEoet[h=/=vIiIƑhzs& uAyycd>1ies,bx~=rh9܋/c/xL#-um_Xkur0>X_7l{\ Y'=ܠog޹7zV h't@`AAU^4>Ah^KZyz.znzұ{.ϴcCұR|p_ 1i@XuJSV0;P#S>f'u|F Z>QՅsɻiכUtR DL5&z%bQ!#^yN h/ ˯Ih$Ɣ T>B"i.!:nݓKo@ 5!p<qD"|ePj&"RqR*hE]lXqr. cx|OGX1e% }J"ȡlbJE9x˫aM6lڤarRJi/&FȾHk/P sD2 SPEC,\$5,!bTymRfbhq;*>#PJ]Ѥ5Im):'Li-N<'jt7 `0t%~$Q1;^ D(tR( ɑ%Os8TU7rQ?!KW MpWb!d/´ ]0̒!S h-i(.tQ<\R4 4+h 8pNQd 0F\vճD"W2rE)ҠrӊNFQljwYK/f,͚czQ8ő6 3dJl6n_l-T$a-C%EO\斗TSuu_ b%R,mTFAՆ LU)`U*|&`sb`c :'`^@ [ggΟHHOvdl|ƙKMJJWizlFk}/5 01^7*Vc컝Gyu~8kj:! xnX72'yq^l3bjmf,!:w 9dy:l;GRI҅pPdRr{pЬ6sD [p"Sj@Mğ3y%"ĈL[@ag(AS~NAka=RHX%;H/HH0%b 15 PC4 IJ saS؂w2~([w\c7QR"Ǝ-G?Wo GKáf qoPnGM[]gA$L@o2:o#w{<3_oh"E2obL2gI|'d%I`"x%慈`RC`9XxO``"? o"?1Z"|5?ZI$0ITNg Fw<ϧ DѨM*L2 @u84*U5J[*nQ~$~_k͡S/a,\M  00F A08Ov[@0E^t| O*Kk 5v kk vχf{8x"MTy7gE= Ng3AauQ9szaNV}2az$D19(.cTa`T}PYbPaJ$E"?R"/a ZFkP`(&` @,mA `yyjz:,*ӬEC~Nzbr:zxST}v0AaBI-l#k "vg*ͳBѴ4<0(ӜCOa?KR幮{麮;З@0&k V<*A$o\20CıS~cIt P7XP`n,no}Һñ T8E)i[4xCL'JҊ*@-"T"U)"['Q*yFā# ϣ,DCVzSAE%BH̙ZنJIJic,p5ʹn` $7DUUtSK !umg?p#n> [lKRzq" Y#g,F$޶ƑJ h'M95hdZ * ͊&'aA&Ԁw+9-"s{jMƗ!a0E*%]\jA5! { JZ^ }>RKi.׎ﶘG1H)j^gNGERҕ1ի$ s#\\qQ+XCԒ$E pWyds.Kh86I|THS}/]X^ϵFb7nwRJunU32bމ-Ih2f?Z9g 53 >%<'强T DCTQ R1d6Mʉeڜ6Y8ͯT1t%"Yi{B==%͚>ERG:E _)d-ʹ8HeU/OL $ 0]s?S{VaW`RDJ{^@(> @<&"`x?01xl:?.&3)k6'3{>(4)s~(\#"dL?)&Y?'@z6$4`,56~St JHj7>6q報WnaP<K5:^[6;-k7;{8;Ĕ"p&.@.S6Rg<>/=:ѿ|rnmϐ>:/WI%JI,RĝD v @4yxRx!E vGRR^BF$"V~TZJ((AvEIg_ tG!F5%D !WEV=FQ`*]QT ٖc&%^b0gI-ѓJ(>9\AeEoV,ZJ>)eO[V8r?Xp_%iH՞g*:|gaush6γ FҴKVֵ퇨 <*ru@ L2Gfۻo K:àXB|:L49Y8=-G Nt@B]$@I @I@_hd:x*UU^JOV %W*Nww"=RFj',+^ b޵aJ6ccVOޝWQYSIgj_)n&X+vEAWXCYhOg͓NHl \Dd\ '$?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/?~VG*hmA__M" 5 x *A@ @ @^ +pR A@` GqQDO͘wۡK<*ş֢W@]~ FqYŗ T^Jf ;xXJWEɕbf@ 4N1NזWdLZ~;IP:x#FKEHe=* p4x8G6ZmxrID}6Fv9]k&:y~1#qꕾ(lb,,ٕ9dz=ktJtleB)zfl,a],Kv>ެebϋAdE6N'vɓ,D4tf T*%lDوL7*aFe1 L93<73UFF Y`- bZYKoz5(8H(Rʄ&,@`c0 6JC+#1r;$2)K&%2\[.ǟ'k6'3{>(4*F)4\veQ]9S(H/ !204G.7+v/7~08,`+U:⯌񊿱5}1OLr0A@j0?b T@u6aj`*g]O.e_W8FgajW&.sJ&}G?Ͼ7nplSFtͲl7nCwWuY&XѴ?9n"=a&l&kx`QthV x"6k 8yP)42Qշ@I:Rm\"W@T^ɨ@-@VYAiOa'&'i|5U>NqbɯOQ=JPT=j{^F<tFog&~g'yD"]މb1J]m.KbSg Ajk') Zϗp8TN2Q< jeThX Q CD -{#L L: D*SWcfjA 0"˳*̷. 2UБgjFZF]ʵ'}z鿩H]㪆pMG?kCcf S#ceo?(&[l Z*gJwDX]je ]őw}kf8>R8eEۋYRm01z $ YjWWrgp ]<] Ѡ_:i*[pcsUtm-"׆&dTmo42W)Fu1'd]wGd xȄ Q2 DrB=%o@rCC,Pul._ (g !6^?p*V̷G2ut@P!XBioy0,Ũ"^0(^jY3@Z[le#FΛL_9V֤p6Q4x9;iqr:xZnic$O/xʷe/"Tmk&B(c(TR#3ԉBiXjgB EDɄ&D݅ CiQc$ <@h#!82~tΣ~\x)G*XQ.JEp}7f@я@`~y*'E(bѪ7G(4Ѩ{^]8GV&@0kUFȗeR# :P BP@4~xcRmNB=G YETpA;Y\mmzHHMx)@$ UvU¸*]+vתJntOW@84]v26&Qjeb٢?näaX4Xk%8@ Ef۫wo-#Oq6DUΪUbJsDw  tYo h\ G,ܻ:?ǹ7`7;e4<!SY,0.ՅTUF*6:&?!t(K@[&b G1+-: JW1Rւ0g @e`^؀0<+]m$Od,2.F#$dGTn3?G2 nCYcnL^d4ឡsnhND exp\ա4.#D[[2^ "ǀ iE\ţ*~fԺT]0WXĈ a8K8P aB`vꭇ6.#dOyEl@~ʨŌ,u@ ' T?al+dR?n 6)#,7/"o1 .8/yiFа vx@RarG'mOndVFaQa؞?M2Tjy/>.(šsX~,V?X+tTf۠9b"뽃Z?Cw3XE5eyktS.;~)C*>-"L7]7pP wK1xW (E!,_==9Q☨<%"jv5cl a$*g,!dP 8Z[_/-)Xe4p|tS2@0`[$S}( Dg t  _P2Z@-g5/a*,.Yt V-.R.tT[6~hnP4NHoVD0a.{aRZ'm*SLXfxhjYUFaXYёF#&qk(n`AQvn#mRC&w7 w`T$%؞.;Q PAlHB{$9QB\@P2|y8c!?yٮsjy-u_kqу2N0g'@ro@ɲIEN17Jnjvɼ#,grB V~wd9螙ꞹ=gHS0r&t~AL(|;P3\ZCex(vȆer@@p V;V  piPS7Bs蟡4Bm_igTEC:""tl-SA0p0e_0aWH>zXZe\pՠ %T-0% !jv.,%T0vo/+;z[%Apo(3zmDMs@V~a?|wF^xrHktbme-yah{E ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd |2r,fns$LDcL 1Z QkUv_XlV;%gZmVeo\nW;w^oW0wL멻S3uχT ~@Xn  3DCL8MGJ 6[=w[}pΆȰW37s< < +HbM0*=>?'z}^g|~_??XIo9DAxiγ58%!Hֿ DMLU”[yd0n `,)LY%ɒl')ʒ+̴b|}N x) r3/8:(̤$C1-EєmGIWo$Q*Oz ʸF׶4]WeY֕m[u&)j•i~"Cbـ@{"¦M]܋rMunnx@  ` ȆO}van%☮-pzњ|xz T  h(9t)w :*a CS]i 5Ϥn(cV1qG`Ѳ }/D*hZ E az~ݷ'woA;)xQ\dge3<Ǡ&5! ƦCt3tOTns9g`Bl(O$M ;`=!NOo܁p ַz` :oTk`nb@I4 Dk#H½B$/ƞ\` W x1M D)PB\^Gr ɘLUˡW osBN]^e'3"@:}- d20*< ߁Rõ@q >4PHiFXRBHV 4R{ G#7P8QL[="I܊ e"e5 2!bZ$%_{8k (t@0.x Tҥ6i-fњSNjMY5ˠRcx v:7E dYnT)e@>JG  )>72^ St f6.\7TLx,$tA*ZMIE)TH59 (&C7H0xTϐ4YJnLzr]@\J@ Y+ЪWaTnGf,C 4`̩ wɣ0_V"pFQ8;ޙ>4z#D:Q9dYS@X.[;mmɉfzj0JP3@pH,¡pl:ĢqHZ/ƣqz? ȤrI,O(ʥrl_0̦sIo8Χs@?@͸~uMv(L a❌@X~54"Š@ը`V08 o'y{?_wU%h}C@z7 a|&5[./|o;}N[|o]l9ׁ0p!>2 M9ZVUu}barZ!z"=Ө\M&0TUWV\A|V5&"$ C$YG$*K$:OƐST%OQN M=7ӌe_[!fA_Ƶq5]P?ϓgu~ Af^(*5T46P#sD/b|*ں+ʳ+Zڷ+h=]Ke1T^ϗT@ #J:Y(DT@6TQO J1cė#B[o 6w7{7/7^e$(ME>n8%% %V@Z>%RMeM)b1z@{TS]PRM-ZAE2A q=_[=k=ywSxSTiX_P [`@͑Lӊ7V*e54`@81 9ӸpZ ; hXo RTӨ em+u@.`c!4Èsڱy/2?G0EJF˳xi?~ ,RG?Ưq7u6RG@) 9^ ͉`!(HO"\:G #$(;xE#Y33@ YEL /X~\]M%CdAv$msc!= RO)qY0Y`vdN 8䜳sx`y6|3ۄ. RƏbL1d%4+N1hr9eAO8Ww%lg h` |tb0LzӊsN<2 HHcȗR49*Z`B4?K#nPN2&} @% *mOՍuڻ^MUAXm *Xp,MfHdZمo`/s Ҳ JQP@a쯀B3H[l \ζVo@ *"ke4hi+zuZx伷ރ?8l~UԊl`%D%| @xn7XCn `@;1:oJIsWg uXQ 75#}hr27dG  s<ǸʼnV cU,&I+#ŏѲ&8/]G"} 􇇳Nlyeమ{q5` a,h"nmкCN+AUH-zߌ@r_+T+ܐhQK@GU "Zz_quiI- ~^=X O$ ۻy[C _$I)A7j0 Vd-}No }y][9jƲxV ^P"lx ^޻|h0 _g8ֽi+Pi&CUu3^hN48^-}4=ẘR8S,YͲi[t vpIX& Dn ] {$h3  ]ۖo qܗ-s)' WbIrx@hHk@}l%3MQ' $⮒)VG@X8˝[cX=SFoI]'G=@*h.Ngl&@l+[da 6wFm,)uH~bo)p;ˬdRP4wJlh *)/MOUo]v:ea{,t2Q 4PQ!vAojgRểTD-|}Čp?ޟA|ºa'L~B0a©FKq@X D P.@PGq ,j' @shإB HCp%*0ђ%B`!(px\!DXPez|R`uVn ڈ2FXDiQL(]`=Loe~d12@ J4勘K.EnPsGn6:'e9TŽLp#9 =7Ph! -yҋ(SbLY1X?_siTF63-<](0#XG-zȃeT*J8YdSH6ʀŽN˔AB`HETnQ<{q1zsNsA'1w0ZO8]-dK$ <FA0 Q=>juQG |?h/IKƐдx,h6R%SUV[(' aB%D [l KV% ~?cVy 28ae\WPbT`ZO-QH|FL(EP[}o]8EUmbe\?G2`& k?O4Iuygͮe6f+;E{ofoI԰>mnYD@!*z|pF X/`\='~߀z ](p q91Ӡ~)$w(Wߏr=hN:Gb{X*AIC{/YYo.eܽ){7wNҬU9kܣDE3AјAkH#>̌`Q^d-@rie7.ݜVEmJ|ߝhg6 3@ ETSHlpM]:04/0I\J_4-W.σ S(͎Lj_,<=105i+PgBexHGF hy#FJEڋM@n8p0+&̂,5V0*VrķOfβ p ue2qlZ&'2TQlo *?&H,0$.v`F N#z$و;ghnjxD 1A1EqHN:qσLdb@P~s2LxM4¯ڕEK(jxL*PёH"&P˸0r Š36lq1qcdjzEDӮ8# jbCRi Gra>pq nrBo DFCR;N T!Œ#ÜmB`0L2$rI$M$/aS;&Y# ڍ6 [Eힸq /(@2_[%'!*0&yQ~Owjpg@`66*r-2-r"zG pĎ{&ۦH}zLX.ڍz:lP--*S,ep>A,ƞY- `L`66s35a63e 4Q&</DH*+rx'Y,f 6b3r~wrTOcBšRg;s>3>ng"aO8bBF2K+}Tv84nX1>>}_9m6Lbf1,rT5E4UEtX38v2V~ЬG$5m(jң`< _CQͥCE' pHP.q?,mBKMtM>ˈv:¥Hc)v)J,M0Jk#ak:@J@JMJ/b/(J 1Mv9N(H41U5UUuX-4hZ8Ԑö;ɰgFё(MVIXmNeȒ3̐ `KQg-6t3U@FD&:G Jư:]]|NZS& ~2*<TC Ȓ,# F:kSga\$`B+/C@ ,3L5͓l79Ώy+[g)lbn} hFbL7GL Bn\&瑵C3 ) t:3Եdum[uTEnz)~9T@3!3!&W6k͵mۖo ēPWASw^Нnj(`WC]vTWeA&q#|"F ((T\xZX=x(0Aw@<"T 4`1u}+~1YQa)}*5(2ʼŽ͹ESA B j{io 9<V!uqR8 -3-s5=Dl1ERawPSq;+=w Qcaخ%zWh-b((t|dsnkJ/gjc}Rt|u/k(J0J1HPXor2M>C~؀x0Bf  8m XATa)z=dƍDqQQN*EXӠXyu5? 7#8z@s/l Ů@`goa0aj IY!i@UȰaR,ꂉpQ"ҼHP Jay6#%DRVJ]+xHȟR&cœ6 GF&@e)j3F4/}7NM1^p@?ٕ7')QK)#gmŹV[|zT?1ܠɭM؀7>L( m1643g,P ^ܥZV&%?QbT&!X2Xǒ%;bo~ X/`y/rJ&p4Ӻ{_+QȺ ֯{̞8 ]UG 10p"o:LIy"أ ܭYYo.qTڞ^jbNt%Y4Ci.0!N`\gnE,3?S3mL jp,2DMʉ{ozo]gVPp=v|"ԪTq aYaY5R 0VflҌn)@=`n<=M%#.{*YJڀ@BVt^GI>cw |4C׀Q)HLl7 ':\pNzQd}Ǻ{ :L,ң\f/6WH'u^/x  ;0JM 4w fg ,IƦg珜JN Gf!^)gu ܒblT_O}]?&x9&2U#OaZX*=ۍ>0̺OF{lN&pLVdK'dBCCG(/p)-N:!O";C;LB2HXASn1@(@D rʰ0$.mt0SHxF|qҎb_)> '4!4`FIN8:ak,)_`iԑ t%1y*bp|jK B3Bp#Hl Cojp;1MQ1Td %~O'I6E( 6]8ELq,$T<+`HbBV"Q!,iA^v B18 u0zs9'lar SO-5g^mRLF] t (s˞%e"M\*t`Uvh CLsn飲zfrAgl&.6.C1E~` ^Ѣ0J%nP ɷvǨ@tѲ6 S@wFg aCzy H7 Dy"2^Ncu<JiVXDIQ.&DзzHÉ~ГZ0J:dញ(| 2ɐ/Pʋc[p=Gղ@|Ù%GNXگW,[KX^H6%ęRnNI=&tCtH`^i0`B^ն'cn.%*2 <МIN2Və3A)O#qLnNG0Vl *( (BvN;S8Ν&( 1'Q2` nXQо8Ov V>7` eiP35)UР890w "VcUxY1w ƕTZQEIU.^iz7@h Q%Dh%>ALGO4ZѥhʹlcHW?:<1ea(&@ *!KK-W-eřVn3 kl@)4!7Wdfzf󔡞:ǹEz?Е%E T qڲ(l.^[yEF} 3H"O+=`.DPopj%8% >gG^׬ܜ)ѯ Ht~_YP2UI] Rrc\m5U$:_!譈KhR# - ٫ڭZ4x GXFOvS\ZP,s*h#pF#X(w2gQ,6?G!6& s (Q ;#T uBI6kNrS64ZD?_3dvr:3er.dv[/flݝ،rpaJSNW =7lЎSH5qV>[v[ ^u=4,4F~#6P(]YlT7\Oq^,~Xr Hi4E(pFH5z^N  .eˎEfi#VjgLdIΐ% zY]ou޼UioÊj/FdiSg{0868$?Ȕ%`\߃&Xp؆؇_, O Bh>,[LҠ}-07Wy^z_Mޣԣ뤖?a˪FDa @ނ[L?F1}!p !C W=9 Fz[#%^"\|;p'/ ~;J-(qޛ|8-2&yy|H&dS/ľ(flfIE($`fqgL ] fbfkmq0t~i xl&lI, f*֨"4fC"`CKO IbOą KF]䛥Jm:ed+i€" *.Q p1%q)r9bPB7P^C&в(%F-5 .rX=  aK9 |~"|2aoèDX^1Fp D@ )F9*@8>" LASi#<"0 "/EV`VYUDvۥjk k&VHbj6E4zH9Gt]6Qjval]qnp^7rw?t^^)g< ZMˀ `2CZhQN(~rrk<* `FkI ?D-y2OE1TW6q!')nI!'Zի` + ZRФ`)[&&Ɖ"KJސ9}+'%vıo0ĊIt3k0CǺKDH,1$ s@ΧC⎔ :隋"LΒ3k$ yȫdS?GbX5dY6UfYuhZ6jZJv/ph)daSJ$+zFE l-#7?zas~'bffe ѡgRG& ~լ} G*+$$XRMKy &,,K;/gS{3j,i5~%a=N,j[eJɥN(2~Ϛ#4J]/˲xg#2~FUYճ3;ݰhU[$v"7Ou=WWuw_v=Rq)Ǒػ4@*"]c8n!SAwY ` B-yFb?G}?!CĀDa;,"?äV] c0(3Pu)p*T"M3HibM4X;zGjbXkS 8?S7։cl B2`7%5U ~D6(QH%co !l0Z̛I K9m-"tNԚLҗbLY1DəS.fH2W0,v]A\D }^vs;s;5ܨЫc0@/Ga&p~ ͢Dx۠dw ؜]p.9pN?(`MT9Ve{4kOjA)d<`Ka.T*SQUNUZ)D#pb!.xG&hD OJft[Eǧ'`*4Y_I4fq`cB/("vWWLqv%vYKXL/JdlN~ ,J.4UZ @zL@N7 ;qA 2!<ț+e&][uٻWnMl#r Վw6qufkCqN谀GV@XVҌTEaA啀]ʡ: et5b}CF1_ѱ ԹbaVatFW5s֯:1P밵`#& >K&gWΠk @ 3 5wqAxRj!lS`s*UZs+ôfYxK>wà_HZBh] .w 5Ц4-lXp˳]!.?pGhy3šhNjbh 5*YfW!`&\%[_ z}1R]Y۞Bb$ǩ-'..~UjC[wgFs0%켕ZZ^_P,c~DJKIe(ׁcKy0f^onHW8%`%<9G)\r]\nUw1>zհcPz/ Qn ыJvF̫5j.@Zui2 :"m^b%?=`M Su lYdCjΧgJe@iF~Z տ.JԣQ[PZUƽwp{H1'y/}_r"2ryi*k`VN+5R{n?s1И]sw_K5dyW/F?q:ra MGx@$I,@`~R@IbMhKB IZ aZM%AަZi Uq0upy|h34 TOH4@`4tG~?'m8oFM0>`A@}d &Pn$OdL  1iMzGkW@D$bJkjZ KP 0oQ`)*z@+IPώV01qdL@- `@-`,J)Fin jHqX`< R&&r q;NJ%]C>2&j#Lde,p!!!"2%"d߀#̓ mjr((mi JaF0LZDlR>i0&rl"ZA0E!NAɾ+$Pcb%NeDFb퐱!ɦ Q P+!i0VԶЀϥ pJ&/2/r/l@ 8`J s/zh V"V`x\sk42 ]!E <FrXg Rcb jI%z?~Qk~P +1U4\ %-(5%M"Y*:ϒ_N1l0ftDП.*Zq(drSI@A4AnZaqXKE@ȿ$p,E`-lUwC$Q!49@$@Sa 1W'e3*IPM<S2Z8Z Lj296%BSH i[:-jc7+K'*v;5Tұ^SKS~wjxU1#Š,c,dփ%R֓Pt Eu=SAT5D{&nyTj(Oa6FKnÆGOUiEUѶ{M$}Ƹld'UPM:D&M~>2, 7>q"Do>"bX?PH4NAJdd/,K2it@ϣ1=¢S7NtN}IpRNy@߯yA(yE7J:(U[o%1ku`#O)eYc7rftIiVYkimyoqW/s0&aҗ`HbC?#k|n']͖ Q"/$ @dA#ƾqI9o!rR8 P; EFi, b71 LlȢV(i9֮ *}*恟bI$発«"L `$#O-r"ġSr\)#6L$D??3#A3ȷSt E2Tk"te'Љ%LUYԵuEDV-U4MXΩ5}IQ ؈ct{[T%UuCVPdF7%s\Eu]wew]Ѐ (  (8&]`nƟ XHv2@:& F@P dqpFSep~dHpn(@,?(ƂDf4;* "9ʒ4Xy P6RT&/ /ĈƛlHŪIáMR+c%p[AU (\ٲUG"}"lօ4 @ 0w!VOcR=|sMO4ACu\FK=ZqTMS!#jR˼ub=#=WWye/UI }=7;Ͻ%+)qM;䀬^{R*SU,b|M@!`V 2rD1 #eF ~!\^$bԸKH@Q`zChY4A#/<*%oT:͑#g> cuĘ?$Vp(;h#<$\ZDqSU_ j6+gةo$7V9dhS['r(w^Kr"RL?]R A4AK B}(s]+IPIE:"BC94gR3hnIMܙ(ay`Ye*%#T 8I{9Lc,TD(DlҞtf\R"$GL$jQbIs"F]wlANIM/ӢQIR.5tٺWzTzRjUK}C@bvY@Pp'Sjà^&* =!$ ;,z:UȢqֻ=|bhSjMl  C3Cu =G |"XAfITh<  5C>iWFn΢F[+I͵S:=&&_coVua*HNĘޕU?ZKsM}=PWdK 78HK_0SH4~Q'%H.,J @*5`ų{#]!ϡj#~UQe:KNmS2{sc̙3>@}~Cj")IZVDS?.6ɜRz/Gh,8Yș͞`/ ,kCS$0;q3-6u>ׇQn༲w|^ؓaTEA*'caJ{IY@$ł91A([p7-Dm& Sb/u$œvޞԔ|O)q.*OMh r]o}o+8*dnhc-5#䜗Dvy?32q {>4 68}:Qѽ/t=P<| ` C!R_ &kA?RtA#H?h" ǫʽzF_EB,d:Td9Wgi+)G$kFµҷ 2I3L PL2(LA4kµN̄M KkM ۦ..Ër.}0l逷*=)-k#s k%P(IKgc$&,"%T%žs=\8ᳰkCl::ۢ +nj1Gȫ)Z s-LP-3<,q#;ci4"ҭ<Aȹ~I?$d2\б#@7!QQM\7/CM Mz_IɽDzn6Ȉ|AD1"C͌0G}$(}ŷyCs?g8K8eSХH* 8 S.yp9,$Ez,IT31KMT"\U ZL_㢻 \\cT򣿡 ӞLX@Y@F$@5YV aVb hD`N362y:ҲaScq&<إ=JoN{ "=K%O0*lĄ !6\ )ִ#|^ß#ȨI# }t%t5 !C,n). 2ۆ8 Su95A-!+ lXEգ@EUn̬p#$"r DP$t̢lGDP&!b"q''3)),%ॻ(?%qC&W1A.tĪc=)d0DFWlK]xc N0)ӱ:t%>:k2{vc =_Wӛ HXx> !{M"\Fr1 zԆ~?Rp?O BaPd6DbQ8V-FcQv=HdR9$8y@|p)~M7A @Z#RiTe6OC [m5/p*fsX4#gs^%3Xeo\nW;w^oW`pX8~=&x+A@ H( ]?`S陾]طY9 Xqx^C+Yvn ^r6t]o?p^c^t =/]>>[ˠH3ݿmsҰ{> "C:ͣ0#> 3K B 1<). 8 J( ,#RPn%f@*I(RtaC1̓LL5͓l܌ĕ^q)o@SI:'!@ܢ`Eєk {YG%!g=%N/ CtuMSMUUՕm]WeY06K >+.7m `6cΥW ~ &jXm˘NZݏkCW~z^rÓ$:z jR8Ƭ/rc66{V/ OoV܇%q?p@iĐm ݖGqNp=p8 $lft+"hуSI29Y+IqƆ@<8,fCZlȥclK њSNjMY51cN|`M` rIl>lʹgQ&c+&W.Խv'DhRL gבּFYJWrylԪ@x'8*z8_`q4Ncm 3ܢ|b ibB=Ii[ok h71aoIDmDpګz =sqEɹW.\ԔkBk%Wrz9Z.)k#@%pA{M{oq1l$@OIՏ/f^ R䞴F,vXO a\-]$ݖ\Q  BXaFևҶcW\Y/~?UFH1MFLRCp#Y0d(3:e,aY&|x  -PZ).dft'qVe H* AjO rgJT)4嚓2id]1 Q/6ZVj]Eb*4 @1wI<Ҧe/ѻGj E͙F ;O<;UX$蝱y%r\v P"MSKN. x܊#w +,eGeFo%>4Q>"/4ܮZ5MkƖzzk>z˰C0ephhp\g$*8 $z߭&,ҩ' ‘ h1"m(m  0j^>CB_  |hAHO,*{3 Q<-݅6-B*+vNOܱzˋ}(Af3.0fJvEB:0ɆƎ1O-&'COl.|oqn(FKqqQbvcl(| "bfIdg`8zvr 1#g|"k'D#f裑R_'}'Mq0qlfoq/x%aRLm4i~)q¯h*: h"(e$./2jrf ,kRa > Aco "~+O/bA,<͋N4LB!"lU5si6m6͋5ϒj3g/AfIa6$3 *°1 ' # h!#B91S=>15-I6L3z%a4&8Â)z(4s>B4r"*+2!"k@ݲR'H|AUEtYSƣ&Ӵֱ;/"\epneA4EAԔ1̵pAT,N4@CnGFnԛM4Mn4#27j/$%mcWOB7 Ȝʔg t+Q&2yfA(,L >,gw<Ѓϡ=!UaV-YB+zNj3E22S:ӂΨ L@HŋUVJLaT)tׇ|X[T I5/5}?5^5^luTHЬWϬ 0G[y`ĝ'VU^r( odĂGCkĘ'>7bVYe\r14СmJ. (78ңzeVM!Q^r>0d(e"z\oqJjVP֛mvmdbZ+g>†6tp%tQp>McV6#mʜ|ڜB$Y)K/SYsDVrқqYu\QTvޒL/59v@7^cXXՒaSWBcW1Ҫ[!IZRy~w7E(NttuT($a?ئ;Om0 ?O BaPd6DbQ8V-FcQv=HdR9$@q|u0M7 gH N)Te6OTaophuN3xv'S"nW;w^oW`pX<& bqXf6.{8ƚVYLx4сIpj(;]XrL}M+m+A`"0OH(utzXx{v{]&`ɶRBfv!eB\ZN>7@ ol% - *´+,`ʳ+Zڣ]l2f.˖)q3 `|"v ф%'*i)y̮J(-KbsLԔG'O%Jd&΂t K#j"ܤT AД- CMEєjC@ -O`f68-bv N4'`cPW|\ו| (%4sGuN( [[_ڌi}gR ^v zN*v W Zyޗ{}M\8i;Sʁ>O=}*%Ib]Q/`hF`IzF˥G?-sA`6ӀHvS֗ne?'ˠi('9Vlű.ͳlgw ~\sWEv(~ӳVpmNbf~ \3'nZ4d=ϰ]l9toY,hʼn;2E=mLJZf`#c ~ Nkzi,o ~؀V:k.VT^x6 $-b CD5xJɸ6n?u.Z'$1 iO|z0'`d!LpC}AQ ޣVpøg<^(87"ecɍ:J7IXޜ IS`udsbԁ:=(R?[H4 CY@ 꽣dp^<_ʬV F=NI='H:2l.Ue!ԣQCw j& XI 3 qAH Y91fC fLlwGl"P\U-@4E2U2Gm 2^8š/Ff;-@>=8'S~O)FpoI}I LI?.WKL7@ALzIIaLkV9'K2,Y3VBtFLke8H*TUYUm_L"%)}1dOoU-M~nG b؝MNJ@궧I5CFΖ2uR NYH&xT]I.ʊe52U͈jvZ]k큃Z4r4562ZXv6d[.V=Vg( \J@Cc.%eSPi U!Fe~mgpw& X/`7Je;LrcF&/Oqd=lOML*#}shBlF7Vʃ&7+j͉X_W(=Px fYYo.e?}Ҹ%F (+/dи7Z% 5c9;HVmPxAhR`JSC,ީb0` I @L]MFIE8=QRKɵ5XeR ?RDB%hM{3F\^bG*D8-u0=3A **[g xkk*f%8%gȉ`2 I[40+&3JrB^ᦠX%d i*-[ѓ.8 SgM)8gtX΁=mxk z,eh*m C D'`< BEtYETE`@OI8҃C6!eTEH~DR&`d}/M32pL)0sfViv^*^j31dS<-qp6eU'UKhޣeiTv^FA +mdKH,Ļyt4u[-9i Pur-rժKքr&8 T( `gLZeX)T*'urcs@w&vjb3vH0oYr`P ƁER AoCl1l4~gy{{ߌNTTR޸4"|Ϣڧ.԰Ztg+nF=WMe$1]q׼ ?O BaPd6DbQ8V-FcQv=HdR9$HzƲ0q@T&B 0#dRqóe6OTjU9?ZͻjrI?PzM.o\nW;w^oW`pX<& bqXe^Pi3~1Df0vzfD}<+.e̽7]:|A砐ta8'Kv{]Tke5ރuq"I|n] &)z= ŀ `蠢?p- 5 Ð= Eďt%,Bfz߀`R D/ 𢂀tK!ȏIr RRv k0D.( ,1N3Lԍ@oAmуA@5Г91^opN\дiBӔ=O EQԕ-MSԧb%f t3 pC*LmQa'n%qRrmV=/lib[ҁ qt=~aK.}>1'%{2Vo]pJaW|an%☭~L~Ed&g) (H2,ЍfTbDrݻ# 0".[ͤm=2LpIpڙt4Rvמ VlU3S(8Ҥ_Z\~Ezxi)ڀ2"F|{`]UUV)8 6#f-cirO7u쐖inͽry^h~%b^q@G ˢr@-?{Icn ;Q7߀V' EjnUZd|R@]>`RZk9v~ _:w5{"!0"DXDIOޒ.+#ڏDtN A4P|-Q:ˉf-ƕk,8|@l 2G| %q3YCɞ?7ID(>:,D 엕RVJ]+偭4V ; +#+AO G{,S!(~cto"+5- Q?L"# 7~I?cgII; .ƚ- 82#x 'H0NVj!+}㜻kTzUYUmO3M#Ü^6#gT'%à^!8VGH&rw)DJ(&r)S$z8j`"8H$@yfL@Y=XV- 96iqPJ@iHͅ%V[|XBZEŮ,ߜrTQCu3HldsaԭwRov&^EwS2l>Mqd #!x>V!\PD=BxOj("`\-T>yJ [ ?E"lKp5`i]XOّrA 1"?!H`(h@ $ EӀMN2< q,w1`Y:g\푍iCm3ae9W+ ;Yh?fLw? Ѳb j=L^/  0h@59PK(k sF[- f!qZI#`umq-]R)9Ce -%ԿG̐2V6ѮQA \NC=̌78Sq^-!adS2n@yK^Bf=PKɀW|2^yȎ CHA5cV&PTҠV$P;cmS]v\?H2Xҹ9ҟ3-!*V1ىUV\)8&=}&x;LC7u,[A:QdL]܌F0}O^zAsʬҋG^]@\ PlK~pL,sPjDGohy{&Hrl¿PuW! ,X8_ Im 2#<~Vk̔Œo"M\Ehgg0nLH0}?A6 &NA#.d|eFX_# qh%*ᥤ`dt`^n!r_E|1`WщqRkb㘨*l~a.D " n,Ѭ:1myfmF1򔃎 m);fn 2"1#24"A֮n6 ǂR* "%Tk$pr-#c2tvycVg{({`3'瘑,βtz{G'+r%bnje10=μq<)QE`!(+lvҤ*)/.2)%hڇhzS S 3A4/!lVc2𖁌vh z<qZsmڰ i4N01EgD #m'19&}Q L8<3jJJ"k,6ݑ@Q(]==B{59 s+6袓||~\~aM;o(/K/{Ll% ,`s!n'[  H@w Ƒ&lr`o0d&@+vΨ;v i FҌ9+<$HY'<(TPW<=D6X@݀PJ@F#Pe<_fJ"e *IQ6u1[q*L ,$i)>,(h% C(3wӣA"TJUYUm*TPcl .ʸQ5,ݠ"-oXU b2QA`a6Xd-b%&lasOfZ[MiED8!:}F:`RP@h"PJ3hFB"*9hT, uҥ&to4Bo /<{[wBy-_[}റV%ޕO)n^Ѫ:o_rL|V<+Q#H-x%l9Deq#$?Mf0mb(ω12c\wv2'd\FIR$Nq-Gۡj&ivj`@pG*d]Q=842VVً1=tqTP?<<." T[&'AIo7 ZR2 &~ZbhP [4-gԦ$}'.fBfds`V#(FaimRAH&]#D҃ݲkXD8ŜgSPUtܛzo] 9v"Uę(Ayz7}`??20h6pV\(0n ˆ0>\y^>s}QUm!$LpU 0J3C䬗]|t ` =v!ػ>D\,#{*E(n fm墼;y=2x+*E ?{&\Բ YDb`. qc!}qG}ZnnŒϽPGL*zSIHU +{צK9i_>tHNdp@fNNF' b1|&ng+l~<7f7j06@&CI 0JN,hע`&c H` b`6rd1"*O 8ۥPQ ӭ"31UqXT 3Ϻ`dGZ$cvUZex&Fr1oGN- 2~Ph/qȾi*yLt Db^e%EPf@&`?2!2!b/ ^wć𚗍4)F]cx~W!C!qoPqnΫڍ뾿M*wEL'E^V $J@BQ(kTZd<|6+~-L!mDvm GlM7(-2/ʬ)De&S&hCFKq%% 3cS>Q%t(nQRB3 .0vDƶB pBXA@. CN)En9G&yo)@I5A D[xLމEQU.MSNUUn]WeYO:Rݖ? "(< b:QAV/7T☽\âbwߏ8[a`@lpXr A!mN'owqW/b\2Z[\7} /t NiW))p«nt <=DApdA# Bp+ BBiWHF#:vN7@6$aX1r⅟Gb}GF}42hX  2JH:Kr交8ܽ1Ls$ʪʔJZr Ѹ !@6% aPڃs53MQkqhNp`>O@PT;OSCQTu%KST)#ciagέtv Iu'U%ml[!Rjv!vm[mn[³ G%k.&6Cl6%σj\Wr%&~bԄW|xfa#bx=}ZoOd;Gj/Zc v0` Z;cfyofsp=IK>g X. O>u&៾?S@d &˳lFӵm{cQ͌>~H qkS(mGqs;q%P){/E['8r;O&`u:G^'kvsw}R)i @ ,Ơ'{zc>红wAoZBGb/|cO?`XDm 8ő#].X Ax*vA #{$$Ϛ>co@|h"/x@LI~S (h0bST&?Y0 eJ/0 CᲇZ7FRq2R5y-` 0贀jO1dc=] B0 !LvOIA(V2TE@?xNgH#x +*QKyqc{.X"2!!Je{Թ)& ]j1ɑ2,:hM8g㜅Q!c@'9gt?O BaPd6DbQ8V-FcQv=HdR9$M m483~ a! e6OTjR L[/YNI=xQkyE'zL<(CmuݵG`0̄r;H6"" *봼G掬FKI0!8֞${&If`f"v?8 D P-lK&a: =''R P aB;cƎX?FC@4L{(!Jp[K&Ed;@}0601n.Eؽ]4p70-4s2@^@H1>;OdA,Vw)BHcY XH9 9X\cP%aY+'@h$ t*hZNKYm-ĹDƕ/hP0@+&sNj05fXDp7A7q+sN2`%,Ɲ,6l~atL<1ʀɚɩAE T-rX74g&m5M*JC|(IpE T%zII1r"A!:!ƥDL*-)4ŪPj c"| 9., y2OYUn!`!l𠮮H&٣x-Ym`HL$q̔P cL8ɯiq#/xZe!ܻtY:p8 K]xA\R߫z: &}B΢!E(Dcr2#iiz;PϽhQ$@}9iT#@ }_@( !0\2"1(R+#1~q>w7. p& K4*F)4]2N*5*RV?/r^,6+ 6:>YmzA9p SPn167_'ӾN{cPz@ i^[6;-k7;{ݥ7>L~9# 2`<>/ Vޯ_?ޮ9]ry/6 ;S  lK_‘=׾?AD ""H&∦*ȵZd|*3pI#e?[p LP $P 6N Ez%)VV8R3dG"'=71{A  vz~ ]%󌯘 Y2DM*v9RJ_(|rOJ6f 0 N# °KƱ&mHͷ 9Ԝ[@ L4KǎH҆)f3}B<1~.L' #,QtrN<>$֚k|3&r̵K|e%~:gLtv& 2F'J7 ?ȩcs2#m XD 4j⌯lZcoW')}_¨*8N'>? i;7Qm0& 6zWvV[Zaf|w`O'ʉʺ86]9)&O~o{(t|H,wc@@i(s#l>9E'9l@t$ (  q+Pz?^/N/,C(g !6;/bk| Q !N Eo)saR{众#,f4ƢrV< %r/A@$,4&S~H\ٗzMn6!잓P'֓7j3L9\u9| 9G/% ?O BaPd6DbQ8V-FcQv=HdR9$M \`]~Vͻd@D`l N4XvyOTjU:VWVkUv_XlV;%gZmVeo\nW;et%hMM i(AHb PfsYw=Y pMMjtY.8SGzpÀ@T`'R'*(9ry\g7tz]>Wv{]`&T綜f@ p03~_0ѿ Ao$p 4` @L37  Eđ,MLUőjbXm \k:p2"CC; t#L\' jn&B+i3 *"ʐ*J3L5͓l79ΒqraO/GQS7 M j@N47G%ɴ-K~da6Bhr, SeY֕m[u] Uʲv x3I*@H22"Uk=JVqlMbJp÷`( {}ߗ cG`v)|3@a@<((E[M-y"yitܩ:yP{(O.Jb[vy,)(ű.ɳ։JV~$`r6glY"\/ Osi: |!Yh _EM4qXir={l/O R `#yšug[* 0LzX6D6cy .݀H(h%^Jbpn+7ae#<40`P{;( 9PC}ʉkˎ7]F]v6B|w*'Ll;K "L,Ř\2e EyQ5DQn$.nag<|RLE)%ʐdq ^X&y1 c RZKYm-i)ifX,ɡx݀$+ ˉ3lLf#c71@0>K*i9DSv'fK&EgE0\'mDiP9?[ mU h>GY@@@D Pj=G!S@z %z0,At3LУGM t怷$>ƤNҠrPCFO*QUNLKdv Bklppd"+=0 ?O BaPd6DbQ8V-FcQv=HdR9$M۠q>~ѿ'C  -C iTe6OTjU:VWVkUv_XlV;%gZmVeo\RLq+6 p@'ry\g7tcZGk4+aptlBwaޗ|~_9&o~RU)j֥i!ȏTY&;x'l(@2,/ 1̓,3L,٤A)lC&@xR6J31AД- 4=E ~dp l10A? lc FT-MSMUUՕm\i;]&ʀ@X*cWMe4Mg Rn&B,z"|5sMuݗmw9%<h}ӻ  H2AbEExN"^bXmITt'?P d.MNUY Wjc + F@ [k/ڍSaG&!gENJQ7mNյnݷx.`vg `R| D/': ۇZN3yڐ3bB䳱_+OUnħ[vngz JD0'}w鼟羉–$Z&@0A(Z>1Ol*gw82L2$  gBy&L& Ȼ@ X06BXM D)DYjP 0`1q"$8bAiqP 1 ' X!ĘaQG?ȗn0! rx %04 /FHΔG B쓘vf]<@6RNI='?-Q{k08 ))m-̄싏:˸I(2(&H~ 3y5ٛSnn"$H՚ò@r a(M;" sz>c.yAGg4o~zCљ b8Eb[L%8Y QRZLC'q1Ȣ^?P_m y>;JAU4ȗ[FksTZ=)MWbP_ B(SjV[낄@~2[hKW(j&]0N$%*+-eřGB^ ӛIq3 P1F0ٻ]l ( 1 je+i r\[qE,n\%RRE!DlʻOݸsn4̗>DCwW`"eryF9_\ ny0l F܎/y`'VXoTF$CKKGL2<;ږ  -Q@L_)59BQFIY.BTuR`ۆӡV_jəmc,"X/Co 74 Eز:g\bbjHtw1R,4B'W"vC %  y`4fZR0hutL;FJ5r]l^eR洽q}a@%ʰ)>jm]5VwtH3፱F <~8Qw~r ?5 [u^ Bhg#rȂfxOrύ'ry\gEur-nқ Lfs|^?'N`sOE. oum&z~ P0:'0l% - 5 qn:f  8*܀Š PuǑ|q!Ȋq{ <Z n'mc  (ȳ,3L5͓l7)|Y%BJ ~ K!/6`𦂀\G% H4-K꺜%bokd !1Sf1Y֕m[u]וNa½T`}58fQ6%(H1_[otq܋I]ǑEq)9ٚsM02(ON0Wz AӐfdS mۃCXm 9" 9vf?!DJ;QN*#9ba@~l/P П0`#}zlXqQ:2q5H6IѻW,V\} X`'daX߬=*g<~;?GJDzǓSb,m9F>3G(|[!;,}d%T7`[sR .ECa#rq8^@3?@|+9U@3yY>g:,b+4h%YdZP Bg- Sc.ڃ0 ܻT Z< <E1q/2X:bA3_ʀRnI4KAB f[onmݽ3;AA^O6+z8"D 7ܛ~oH{:<&٘YF &9d hD9\oq=!2|8ACXQ,Dt>@|[zA]t^D9'GwOQN"#+U YRQ絣u޽aY6 yv'ry\g7tkۮWv{]wx|^?'_g|~_?~_ , Ll- 5 Ð= DqMLUől]eQ,iuǑ} !#L%ɒl')4+̵-˒/ 3L5͓l78Γ;=ϓsAД- CMEыF%IҔ-K̋GT=O EQԕ-LP5=UUՕm]WeRU5m[u]ו}ֵaؖ-cMX6]giږYmۖo elW-sMuݒvyޗ{T}ߗ] Nj؎%☮-81= EdY.MNU&Ye晬fu}Ɓ.K?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ(N  (  (V(=RS)Vs H)^&<?' H U V K@8+K[qiyG2q˘r B9".$ HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km  [nP9"E-B  ["Cacorn.workingColorSpaceNamenullf/.acorn.profileDataPNG  IHDRĉsRGB IDATc`IENDB`X%colorProfile HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km:)\acorn.exifData DPIHeight 72 DPIWidth 72 {PNG} Software Flying Meat Acorn 6.5.3 {TIFF} Software Flying Meat Acorn 6.5.3 XResolution 72 YResolution 72 7 acorn.snapToSelection1acorn.snapToShapes;acorn.snapToLayerBounds= acorn.snapToCanvasBounds1 acorn.snapToGuides/acorn.snapsToGrid1acorn.guidesLocked3 acorn.guidesVisible +nacorn.printInfo streamtyped@ NSPrintInfoNSObjectNSMutableDictionary NSDictionaryiNSString+NSHorizontallyCenteredNSNumberNSValue*c NSRightMarginfH NSLeftMarginNSHorizonalPaginationNSVerticalPaginationNSVerticallyCentered NSTopMarginZNSBottomMargin: +]acorn.gridColor{0.150563, 0.150563, 0.150563, 0.500000} -acorn.appVersion6.5.3 /acorn.fileVersion /acorn.gridSpacing 3acorn.gridBlendModenormal- acorn.scalesGrid1acorn.gridUsesDots+acorn.showsGrid-bitsPerComponent%bitsPerPixel dpi{72, 72}%imageSize{1024, 1024}  4XcompositeMM*'|?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^oW`pX<%bqXf7drY'ry\g7tz]>v{]wx|^?'zm=W|~_?~_ , Llܿ|% - 5 Ð=ЌAđ,MLUől]aƑmuǑ}!Ȓ,#L%ɒlR|)ʒ+̵-˒t. 1̓,3L\79Γ;<ϓ? AД+=MEєmG$-K5MӔ=GREQԕ-MSMU 5]]WeY֕lUu]ו}_ W6cMeٖm9b֍iږklۖo qsMuݗm\}yޗ{cxW Nma؎%☮-؆1= Y.MNUYe晪Ԁ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUjlV;%gZmVeo\nW;w^o͋/{ɂY!f.5y@Ab% SXKɨqz!`c``5U=?C?@4"PdIEw*cuTEprśϺza) #w /@*Uq%ֈj"RI(A{owDgBsq9H!%­@L<Yj|D ܶJBN(t{bdY0H)X7b޶Uml ,F$`2( eeJJCo &K#ѡ<(t]44/Muǭ3{i{ 8 jLTF  t;H Q+6Pɲ~-D76_yGdU<^3+\R8Hd9i KEFj#]n/׺` 5`]C'#vkBsk Ti>յ'W&܀6a>`=_XymŸzWzT[1Q=7,ŀ2!'*X|I*gM(3Mo?kRd:8:=3?u._(=lQELu\pX9<;%1!\(pHxΊ@@?O BaPd6DbQ8{FA"v=HdR9$M'JdK ep , b  &⚈Xw1JU>b+ J#Q AEB׸|`ck`Xf7drQ_1ˡ@]DT HnB `R A@`!|Gu'%{7,Фh:m~|~_?O&Sk7( -"#*,cL2(Xm.GĹ'Z}? bZƫ渠/ !ȋ$ʈ*ȫz.lRj7 X` T9(fFpɛdf*ymQJ :yNs6q224F;N6҅,MT ( }V:=QH pH1h|`Jyh̀(i4XAXeLs,hjjтmu o.G\(@ %?LXv.GLzQe,2 )S[c63C=!6HxEwPZ>L9Yze_y>} ʗ8;g* +擘yr&h1Ǫo@ܹg~Zp-ؑW3(`&e%|$]?X=L  kim/Ea_OG!h7DOG e+Q(TO pN5慀I/O3T9DfreD3(hGqERDW{oJM㦬%pAʠ'9%/Y> ?y2$׃.DC8)bX $/GH]/i2\+{mp #9"M7zܡ+V}RjMQqg1 Y(1K1-`Oh `ET:BjL:%=_yqV4c y ?c.F9BueDU$ @W$l8h!4,˜o(Uh( Ւ Ə)x?GC,*l@  Wbm8(&t7A;'mF@ 4D覕,hG8H0u 4>^ʦzPEJ!I6 d"އ1BbU@q`Q9L Ĵ|de ˕T?H],~ `>ƛ"`Pܨ$r¢SUVo 4f(RbpgrJPֻ$jfs xeD+JA#,.Hth| jMQlSՐH!=FSΛCm.E!rj/Y&":G3Hai=l=C 1 c[J1ƃ**_R >k!Z/% f] ^?KwTx)%XˆPI^EW&Z*9`#%>ǝ>H aO_A7Eeqv;qJ>#VCLLj*5 J#XfbU"5Ed+y˰*3{Us ( ,TAa.ęنԄ S>i#T@$Aeb7:1h8]YI"챟p+` R*CEEUٮi::܊q 5GMUHYu3[M, q }VJ~> k*{ҍQQ/Q""v@{*@l oyBLA >m'i=} PJI[6hB_Vrt(S^NM,C,߮Bmd&| wbUOxnW*]P\~ G>| &ƹNZ3w1D/[xd~mBp!b}eQ3=Fr{sYg͏+sB;KPdr}՞,;V* d1ftx|{֎<* YozkzmSEӺqg*yb f P <: 됣r-\ץڐ h :  [ x:^:n h;% N" oh=d~\6 J`>H2!6v5I/ L ^f` `hΠ"o  ~BZ0b.c-.L Ow@ڱ-,|yzHHbj-QEca &jztq * .T/ 2A9>\1rdc0Y@B Yk6ѿ#␳ D aABJJAx̫`**9t""`(1Ocp*³L OR襂!Շ~Ly#l/baLNj<٢ &)#2kʼz 1~XnlA,0(R+araz R% k., y j(r$ҡOA/BDdAQ/f9>*1E0*a)B)54p lmГP#8kx*c7b#* (|#f2OA-.g8󤇱,+@ vJ򈭌~.>ȏDh5='ȳ8"+FS#8au?PpҒ1?K;ֳjKG;4 B&|  BB>==!>1]CPСt*>IjIR!@ FttСb$etWw@𾶈~/(OHIf꽢 SJ"3A j|nwKTB.GRxŚ[tFdRn LBnW@pKT4nsN𬀙2 cN#JP8<(p Q5<ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km VthumbnailMM*?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/ m7NgS}?PhT:$eERiTe6OTjU:֏UVkUv_XlR gZmVe]W;w^l`pX<$.bqXf79Y`tp^LDsA9\u}:(XP^,R (U(QdQغ/#3COB,QbcDX=uuXP aa,ΑYZW%i >́6ɗ@w,OrD\=BKNAUN[( J> m@Lj ):Y>K`O;Lt z*Zf(cH@0WyҢj? 2>) Iϴ-I? V2e`> T@2"Ӵ)W>NCXH0/ԚR${/Um!}n zd7  ܱLr#֜3P q=0 Q(Z%2>aBEht+K_x$\[WgI@XГ{`APGIPؔEqf7]-?N>!bȊL=iI5u|wϒx?$Ў.C:#f[jqat7Rzu"5aqD8?mmJ@PX_<)> nHy % uH,r*@ku[R0%}PFϣ 3 1 DZFGȵe>^qO1 u""+~L!% n. 'YI P()=1? <k֓2SL{ `Y8I(D~t@x+9a:I>* PFA-s:gb d JGKfBT^hAiM9x!8jpU:'KR6yIS`2.$0u tžuIQLi53FA$dVD"pFu"jQF@HΟ?c1)W@ 6C"H{ 'ϦwChLN d֊{D2g}}q!p p( H gd!$ U:q$: &, xq"4m"*,[iG4D&E e-ݼ7SRL-1*" p˅SucP $a<{x'cLBqa2$Pc> Zj#~f@Q?ɖT|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=-gH1@ `d-` &q .R 6x yvZgPf: YeFåi柬-hF޳.zi;>ݴ^gepھ_ oܖj V\Qu ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhR {﷝  *(C[*0hTPZ ի ZYW+Z`VpWd`Ƕ G|j-> BϪ='GV*Ǝ@@|E_hiUb@ۓqWcVq~G*SR׃vrw+~ngsnϛ72܂o j=l+F;t%oD0, Z (;G G@,KF@JA ,ɒl')ʒ+̵-˒/ 1̓,3 Z3l79Γ;:/JYڴO"T-<96=܉KSLeoѮL+N, µR| aʒJj?QD:*@$ 3 AB8bOtƮP/F/j -2ZnE|~Q,͵ėu j0WKuz1ۚ, al.&X|BF ZόTV>7cZ9"ߓb U嘶_F/Th *!ysaSFLbh鴽9MiuFT6ջcr0G4$sn,q\|]g̥MJN 0 $t_E/MOUo]e٦s_iu}v|*Qs-c>0Ex"  \>^jL:-R{[Տa Tc-{cԺ4HEnj0g,f#D?TęD2V+gQ3J9!r4T 1/8?N鿅H͑af!VYVh.f`bZ1khxV^{\8Q *[b"7b l,15"%Ul!bDmh1D Xa3ňؠuTm@ޗVcy *uH<DLlgȩ%^kP&!#̛5ȵ8viBȥ@ "f1D.y@x21@ #F#pLŴBȍ+IY9DSvN;EO9=S~Olycz Ҕ=J@j?w A`\BgٔN=-yjƈv (& ~sx@bcf/#Tq0Lb@o~h%1c9FR# d2J}CQM()PAGFRuN7UTwaL]4Sk FdCZ2By5/kS#+SnGY'=n?ɗCg3$̶{5lODzE-=*˦_K=\z|E@!8; M~HUA@ZooB^Ni Pp" 0ir뺼|CljwnW"WfxWrz?LL…Hf[#|P̆c&jih|iJbF9+pif.xEꘐ֪Pa'mf0P06˼̟э eXQA~"ą# 9G8SgԤRgr5#m] 29#A$2DA~O͞I$re&rhO  ^Pp'尰Q gK VDJ+,j%BeJ}%Q:.3Tm*ƿ:`)+Ff/+,1PMRC#0Z\ *3V RŅ!hhJζhiCfn0 e기+ό'0 T B)^Sd j&o'e7$n Qj0/zqy.*jg/'I/mШ1lgW s(\V'&<+*ҋY\bB'!6~]@R˦Gҕ)j  AT. CN)En9GI%?4Y-Ki5My=OEQv2"ΒcS^HWeYUmD0{@(@@|(>_@ @U_WUo7<0IiN|num^D;g] =%~>4 bML|@!_pJq 14CH: BuLḨb`Eu@_@ҍ^bSEXb[v/EI>Bil΢Fָ̄73\%Ll@J $*N )tإ5 Lj͚*Hi 3tA^|jq:'J p8DLmCJޟ!T՘I/k6vr^L Ԩ/ e}#ޤRzPB)RaLi3-c|Ң8QMԦҠ?ңTzRjUK5G#*2bI)%Mۏڪ T*+InGTY:\VSTGkO71-Tbӑ\ؒ5fRZ^Oȓd#Ѱ<@T:6vY@H]Z{QjmQ6̠~VSGX)#oWnmջ[pn5Ԫ=Q`Iej 8a=ǻv1Gw㼗^r?ǘdpP.Jh~%K~o_p3-5H`"P QG|1HXwaAc6Gs_!8AM!3Ƙc|qqa݈ (@ A}y7'Z9SʙW+!lȩBڕc̙3f|њp6< ba@40P䜑sV{ϑC(t#{b79Qb64ҚWKi}1S]1,@na@90XYh.ޚ՚]]u֌m+JCu R؛cl}vV4\`yAҹe}F3ۛwom,GlO/ hNpnwޛ՘璌(X ",m^xVjHXӊmPxwqMfX C kr3|љxAn9Ct~ya@FǤ|3̺[v<˗Jh˜Pe׻Q &Ajj󮏽ꕻ Ya1VVZnv~ǂ`kUX+dr1' gvL2M8x{_"a@G2ޯ9+齕^{p4pe9IxW|[H!s55y_Ұ[>zxRʪjֳͩ-[w-]^,KY?%Be@V%%@B[:" I*)"d?zegnyOr&"i!NB+˻A,H)$=P$PB'-?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgO˰n'%xhџY6OTd 5R ªB+`+^a͖ j٠}@oA-K#?߶= w؋}oTb읋= h`c!Fv[C-J,;MmU; w0 ^ [2~ݿ=-s^ǂ(F=3:O[ڣ=#ϫN+ KLt?/ ?hpR=˳km-O$9MjðK!HD= {Ol'+QڨhGj4I)H+(-LO!jj(O? AД- CMEєmʁ`bJ */`@+G EQԕ-MS5m]WeY֕m[u>tIMYB]َڶ7kBm<:!In\ⴛ:QK 1.dF+7? DM4#UI! F GlLg ǻէ|Ent{Hyʯ6EYF#Nj!̳V~ny&nѦ͎[!R{;\6zs q3g/|Un s )y(ԣ'a}sWq.()c{)R+qve`TMܖMeܖٿo)KT4 @X AMUp&@PN AUD?'xQ,)bJ A;Au޻k8H7{Kx96xҭÑ݆N gz0RmEf2=(-bVBd:D''#.@ F6~X5NE:.lg*X:0I8_;,Hg(X5 SAZEN 5)쏅/)- Җ +MIq2C6yIa=I.X͟b\kEym䛆 q\\c;SzOYF" JL 7u-j{Z AE eﲅPCTN*!p;yFC=CNaK0 IZj*v)*"Q)vPd14"ah<:W'xz{lF,H>5@H^I :%Ɍ#v%U9d |NQ7N~R+mqճQ[ ai^|siƼ9]̿cdDFV:rD*Y R%sX U##V`kF؋}oW E3x*RI2l2][u#wf]۽wE@@'Y0@地4n3^69UqȧG=z^.&ZS^9Q'#T +-|N7;UH NW]%NJǍ9T-Z7Meq+h5-{4OfLLZ*HOޡm)XŬ fqȹX4EY6fݛskW@p^F/@-~oAh] FJ~Y;Fi?ތѱ<ԼVkN~z PNyaJZpcBAƓ+&3s/bl],UmYO& Odz &xaK*I[Y9[^e(f[̇‡@i^\k_a#)lޜ  jL B{R<q^,K'\oq=pbI B;j{QT5*"wS4 %O ~WV [ޝkM8:ZYŻ$z"yy#yO;teƚ&u<+uwX.h t/6б5¢6Ɓ7'eKJCࠇ3IMӐ\ Ў^/!I^1}xϿ_|_cB;?Xw.*fN@{e MMH<SZ5)y:6[4>& L ؼ۬zh4dLo)‘+DA OVnG/1 d&Ih 6AJ.oFDGdFdoiKz J,6LC`d)$fMip,!E&x/,  " .@ zzAB!?2VS%&/nr8j1%nMh0I'8 젫Dd:M-ɩDG DD/[jb֭ [-зhQH$ LEK fRp[Aq6: IRBHch'"pBpub匲Em|Rm&me4oڛ)w k#InqڡPfNnl]10 C  4 l@$k 8Lq)'|σ'(r(G>-(̒VBI&L nR,2,oK<E>C !Ai"sm$o4f\1 +{`' F7,:O3/+f&7C`4F<; / g `0{RߢYY![s_6EqmE5XmhE8;@g2jp\K#ԦkJ(#y-&dR V,y! \hn%qB0 #YQ@R/3#il$.!EOqvPN:ogCԬ 0ls!`?" ~H 6lR/7FS  AT. CN)En9G2?䒙TY-Ki5My=OB]t~tc4GvX\`m[u]}4U?ptw\ 0'%þOA@@J Ud'>`[mx̖c@ՍWiu)6lq .5sK(`ZVaҽ[Uaե LI;X+hګZ[iC] @KNCpSֵ401B AQZ0į4b +5R74-{bL׸ .H0_U5SORcߠg@oIvm~nqoAPC162;J)LDv܀ P6+RX)|S- P0?f! p|X:жBa a!_Cxqa;CjG8q ”9ch  Bj-*cc3FxbROE'Zh m68srj D~cmHOǔ;bg!7p%8s;ƑUM᧯yW4dkWXvQAHi#Rx|05uLdhP^G8lz Sb`ݏ0 D,U,:)J*STOZVj[vRu:?Ǩ*C(.?`*CF ba!1DNU~W`lX{ECyx*ceAhWXVZ{QjmQ0t[,Ij]', E`zWh"w\{rnU˹6D?Ȕ)ÐYZFw` xk^W:^{пP-齗^TbVAUGRQNd 87`!p—TS)VBPƑH,@t(4ʰ+ŕVbaq3‘ gDa]mJ^P zM3/drSʙW+U:?)tO?)T2BnYYdkqLs8;g|e(Zh?pPM8't!ś{nzҚWKi}1t_K`[A8bDC*<YM1(޳֋:]quֻ-ژq[p@Š`?F@ כWkm}v+Wt_BG lNx']pFޛԕk}wvq8{yh!KXW-ߜWq~1xRl1Jgq"s]%3[s~qoen dTaQ\,m8?L`2TSWu~=Զqc:)U| 9p&A,u6]׻wzDo#nlAl̽`N9ӎ|W Q'0>=/{9bȅ&0L7Cza}6?ˏ]!,ŅU 0'`+Y7|y)C|SuY^Y{G,@0.rl,?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7J6Xe ?/3s0 a]X2Eô%gZmVeo\nW;w^oW`pX9+ҡ8"֒kR_4 zT*t _MjuZfk[=mnw[zx'΅ ̸;Yê ~ (BVʰhV .z}^g|~_?Կ~1hNaʿ XA MR9,+ - 1 Ð= EoGQe+Θ*@pL *IL%ɒl')ʒ~ TᗪIp +!;4;J  M; T5<ϓ? ҡ8Av(  EQԕ-MSMUUՕjXbV(){T :((J3ueْfiږ~(etnLk5*j.`{}ߗx%r|q`d)'T a׀cޜuۏy;Q._²T˵3/xʬHO/̏x!tS*It)Z+`lU\4|+D =@{)CD5~G*~OћftVद0B] 1Jg侭U;Pzg9B# Д*8 Qd)EX<ÝEÅ2(|c`8ൌBu P!1:GXy$)ְPyB8}#\y ?2FR! WE3DzRl@9'd)pRiٜHf8/ V14E/Sb49p"o$8ߩF KNK ñbbX'4S+z?G!Ә6`@p@jgV#cEi AE T- ?(M\+"| d?dGWRI)dDM-nDKTΚSSq2a G<6L*| N`+RmSQUN”bۀ¥- ssqu97APr1t E)MUN^W_72SQrP䃦" [, R.a.6nY=g%3 ,Hk,Bϧֹ] VQ7' h.K\[N~~Ҕ͒ˆ `7eS%NkwM(ter` lyK9&K< Y Z7Pn*\>AUa=!O0GOZ㞚H!VbuuDZp`baTAsS!d\*n&/,E0.U@@h$8R92f\͙AsÄQ ?jVGBV«)P%$}. 6ӣҎOJ9TPmeۗQZ(JƱlZWVj])S(Ѽ)  tq od%huqf+ [m~?G5Âf֫*L4X&</U̻? Yj6R\ֶ 09r VH%>7!=;gr^L1߮JeFH~(']tZa}1B.sRvU0sh ;d.@WsxעR/cz7q5w^쇘L2?~75_߼b*zyRiE?Ótk *1&CaiΥX/l_;^`rLID#YYR`༊O}_GV~ CDXt@^@ܶw+ll 8龮gb0 .t`AnF ,*2N<=@T("€[NZf k#.@<v! ͡ΔE\/cM\C bUЙ %R1\K((׍zgO`vf+@D DHBI 0 p ʝR8ĹD亃8).ipf 9F/&ti>X  AT. CN)En9B_~I%ITY-Ki5My=Ow~ uJy OP d!5KUm[u]}_ `ϠFt/Njkž0'Po]Ŝ {9@Ƣ&Xb޻ p*9VAA/s?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7D}'*ScX(KXlV;%gZmVeo\nW;w^oWߔG|uh+>&spXhA⊰pVs $Apm4C:`K  ә>'ry\<itz]>Wv{]Su1=''l)qXa4|~ ,OG`42@xYs+UbQfo)EXLt "^@AQ)" inf:GXyQ챏?[ZkUS#5+:6@si4̀B)q/ z/o0gdVJԥ%tRZ=cRyV6$9R2G" Hb H;-fњSNjMYkfҞcHiPQ0*ʱ#slY9x sn70Cn{f@;7I  a\-ɣ\o9t "-)"KJ.DtWoXc\mA0uF7`Uxyff8xV H/edL6i[죍%NP Tʮ8R f<͙C5\~UӀ` a,Z|!hZBh] ^J;TSN#ӗ"4xQ#j*0+`/#A@GZA˭uƹDjrz8XSʹ='04 D^κ[Ojm]9c<%֎4DdvbtH\_h[ɶY+Wvv߁p^ k]k/MNQr:[rt~=!LٿrELcV=+4 u)q/Mf @-wbQj<u^,(cob; 9[JQӀKsfͶiίq]՞?1BqFsfM)`\yPuH}pZu'OMS .4!e d_Bz~|:B0R fNC>u/ +hĔxl4&:0Ƅ0.ІK@ 8 XPg0'C"TDy'ĩa0 7m5 -1*±ŽZgc+*DDv&"HFT>J,-"zK!c "NT->3+GC5†f6gR1/1!!""&P m~xϒR0B'Hh3.zki1"RQ%2U%fpV=#)<4>@>fsqh2C.67P %,*r1R.Q$ptopk@*l@*/w*-r-DWv{]ꢿ+@ ZZչo:&ƀ4#7X8~˵s\= 9jMEԢvy [*X:~at]}-kڄpV񦂟8U J2*i@m[黁 @ G!KՍPN3IѠ@p A=!PߏGR )8h6x@{PPJ*@>GkM#o "v;KЌ0X¢tRBEy/C}7as>h䓹 u@4@.JV*7SrNVJ5&l93r8|oNԪ5'ctPqQ/T E9:Q=GtBFEAhI֡;0d:T 1H)9TS}GC╠j#sal5"M:r[`\$ǃ7&ZYgU>~:'F@X*C|~J⪢^[ aESC nMYt+* ʤ:i&a{nGo0gT`[lDMV,y;[ lٞsO&"3R[uٻKR9)0 oHN6fm8Ei6>֚Sk5/]XL< h~^Y> k:b\MAøg6yMW@p'dʜ@_؏&h׉l$.Ep rYg.e/ 㔒:cP{ L9HܛayY숺~Gduա>UsY@FUB@8ȡXjؚ'xUP1a| 橄YoUj]%qN[r4@iGP<7ou޽o5ceǵ=a0 Y  BM߽׶oJx$'x(QVuQnUB4I͕R?iW;z_MA>V)^'GuZWCږI7㵝!~@ES]!t#1_U Gs)Y(զ7OWB+Is־_R3 @@2UDL$`O`-PB"p'N(-BDCǬ~ƞ$&EL,a r1AK(IVJOh.]&K}.|ډMVND jWN$O :Bt ma J}-I  sPԾ' p L~1IC֕/VC2 Ngd +7'jDJƃP@):6$'Ɲ&R\0q0*6wbQ`p1i'' i=l9%tvl8>ё1ipVN8~/Xd& ~-Ǫ")Jog̠(VA @䳉(>oRVDA׊wZwqA!!"'E*\ >̒$N@ <䥦OY-j(ŤzPFb~Id@%'gR}(.0'Lm 2@Ho(R**u5A(vL"($($P DlM|'eB^, 0Gs 1.*hVIjH> ~|Oذ1S=3A4$,( T)LԹ >n3r4+@Kުb4~6<+L SE8 ?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9vPVÒ @haEHF_ôv_XlV;%gZmVeo\nW;w^oW |:Ζ Ȳ3竊 |_tʐPhJ@ 2V#8s|lW 890!\>'rx8'+tz]>WHEտ]<81g~_ , ʌxalAuJ)n(9x,4#3 PJ&,ş[0 $Lœt%ɒl9|)ʒ+ @|x){9 ,*2=ϓ? AД- C"^Бk :/H7,<)@Њ$6g_;>j)sK*@BTEaؖ+(MeٖmF~:|v +L8<̀tv}uݗmwyޗ [)l(x[l 5E(( M4ats )m` 78 FE]u普muTŪz,r=@E9^$g:ε`p\_zC@8& UIPEh(m"W3:0>I$f|-k'VĢtsK3X A%A | 5mutuǟ{bpLė(-CIr|MGEB J2y_!~GZϟs2@ePN AX-"J Zly :3)N@y7Bz"Dg|(|cLX\TEUϹ?9Tm` @\ݙм^ߠ4nQ=G!;ğ*ȃVTmѺWN][p50*AV'V+Sd@LFYDs7 r5b?؛ZKjw*D>w%Y#uDɶ8'`PO!ltQ+E<vJg#E$`MF)X_w0-( F ,G'mrzIR*lY o.;`>M~b`(b9ImSsdyY řl4mb?W*>',[=?|;UO]%t! ) -Ni-P\7_kc $)Dh2Gkm _%oH_S )YӍUz7IG\441ouF نt3&F}v^$(e+hmF<CEqN\O\5j#`1rM@'! hzY״yU废כr |ᴠR 5XWv{VշT8몢?: - ! B!A@@n , Llq)nEbfڹ ؂ 3>+AB$%  !sD `hFb[**X2l'R+̵-Gl' 4~Qx y詊X *@z X K? AД- CM*zuYEz)~QJtʄ l/Er5f 9#E>U-cddٖmg$}' ZfL:wWGR ҭh?Fm~ʐ H` G -?K?rp?j4cJ/` `*^jIm-Z^KӨ?'+\z;adg # E,5r%ٛSnnMٽ7 NC4xD !8)_,PVk"B*`?BK%.w@E&PT&pPHTN!G%L+l z`-b , lQZ]K1TΚa;q|sJ*(*?k@ɨtz~RV6(HHO(kWUVY[L\Y̆M8&'\, W_Uѳ (QDcTy .Ue#Ս6i~ )& 6L' H{k%c?ҊQ!<єU@92@;Yxv[[sѺWMBr6F kBK:vu7Mܽ "DaҤIeN!0@JI@~_ٹlMu-v)Mzch";<2v.a4xoa=OZ=#i {D` j| 8ͧbΨ +fA-rDX'&dGQ9!l;LIiҢ7/j1k'f\͙FiD&8'8xT` E }#1Y4`cKrGک*5WH (?-$NʙUU]X ?.BiG\'҈rܞ ܤO%ց'w4fW/Yæ6E jd$Nk! DUګM{~ozSn֋ym(gHp3~p!<w? S|)_r\Kn0, p6G ӣ/ ^GIcjޢ\&Xݯ>CWip N͚N bݺWqXܳw^B3jan]}+dHSDU]g}I T߅YjdCOA|7gJIg{} a^,4 0ĥ*wib#{E۰{{iC&2WسV85{#`co$"[%Li׎/e4E~3@9=@'&5aˆn8VԿ F*xm0z~B2r$C +ܡޝ Fr vO8>J*.?L P 0 md#݊ ޠb0j5!p™".-*cύf /O'仡H5LnH5o\Ei qIM^(gnldת(I HޓJ% m@t0 EI-4#M&pr0c |=j{Ƣ 1qؐG(jܻÒ6`(NƓrwjmp|(-ث L fQ"2-#(gXlp.p0(&v?CI#R]%a&'S0P_XlV;%gZmVeo\nW;w^oW`ao״8wc&wࡔ Y}8,=Y-&6z8@S=h%'6nn'ry\ktz]>Wrζ47sfۀ@pHiNCd/1~_ , LnxO&1vf n8$7b hGʼnyP jF/hIL%ɐ &)ʒΛ/9x tjD/)Z;=ϓ? AVnFd1sN zG8@ު4$Y'g Dt SR$S#Um[\ו}_v0_C*&ГjЁl [sMuݗmwq2dnq e P )q{Ma-}f/@<7S.MוQn]QA]Bs'Ҍh1X.q( :TChg֊o #n2vk{_NյnݷzQSn}kM)xP3`B,)]׹՚r|rͲKE`8&7HN+ `U*Kd’?ǰ5cY,ܳsF΁oS2n#E@X4 Bt>!DX^1F@HY4Q)Jta1LYq9Nor2G?_ɸT`OET@P _lvP [@Pez\Y b.~ԫg `KU}b`/Up Hq2?߹:+eX$U7m63lm`'8[`,mA FkW_~@0@4A0TAtڢpj)dgӐA 8:'`X;F1X l,2C* TL\rt(J2*J:BԷ.K0L3ffr 2(Ɨn#RJ,歽Ң/3T;: 󛈂QCεR; .¼WnP-< MQQ5X.r`V%`@*I,Fsy/%%] }]+`6a8Vavb/vJ W($.FFV,Ўc 6%&,~no}2#YH&ci:ViIj:jsDsM$h^mEhSw#lG,=յV *۶X{Ln~ 8ݵ[<0*RdN;z-;F. %oY˭1?=,]R/- ,+!|J 7n#qoyp7J+?%X>|?|7LsQ QB*&hgoęF7|t?g#+ 4H9`b bB8I a4'j$&Ҋ8iA#Bh+zpҴJmGk;V3]mߕ{rN5(1|]cxZ^p\:΋Cs#  SqSv!6 ޱstjExu\3YIvóyP*.T\7cdyyTG@H"Nf{obD.vC;)ýV2 bY+$sPrً^a))aP-A9DY2L4|;3&ۊ7h85e"D5}O?SH!^QXET#2 ǼfLHl &.,M-2Z-7"=Eu/ĉB*eMi7!$@?GbR=G`8nmRTʣ8NY9':S5RGG/0:Jv=KRW VkHYz2V%m$XF2cc4w<_A;X3?W,,q_6\PkhkЅ5 @& p6x)(clrs ?)eӨ0Ndi\[&YV>CdSHhCP2LZJOQAuvqZ))S B9VH^yWT ՜e>7ai*1qSέޔfw`襀JU9@bfNW7,e^{!*/MٚHͱZek:6TuUzSNh%1Fe/z־-2q9xt'JEwP"yщb@86K8$ en?Ƕ9"AHmA2P"Hp+`+%ީz5=_uHo!G )vv ~v6#*nS\2z/wU8ssO7 [jN8y{zn=!WWm ts>UGnKx{Nq;q6Jg塓酑ڪD,46Růҗ=[1qy5v|2.Ers tlO:(L!{+ʐ[/8~:)ۓpAՐ!! 9ɟ)4 TӬdhf!j㲍xTA Y=z;=;j8r i0K_%v @ѷCry>,s~-1 80zF8[Hzn$p$BVWT=0jھ19 CGD8T]'`9DCڥBR1nӳzqji8њ ) (_tgFiƤj spFr;0zkGq$rc3;Bl"?*˗7* $(20,5>>,Z&px23 ߷ă-#2M,ޢ+|-0HP>~క&x8v.$'rvB7߰0{߰ Di~lv4XcmȢ@^{4-kC`8Ī rG~M* c@A1R+˄!FDP)ࢇ0\Ll̴̉ýP|xF'E,L>$3517 JnIU;5֛CY62slRL@~Q dZu@(X(aύ l8~G9;1IJ2\ Qlѥ( 0FȤ Q!%"0ABE%AϛC!YKyC##GY6l!G{GhUl 80\2OIW wϻBRD3M#NM?(r(4/پ//:ܑBѮ ࠻TZM UA-^UaD VP#%֕n7|UXI?a'Py !%eGSR[](%Yi&=/e&:;]z ARbu>aF%9ByO,"[OV }  Ux=~̼ !f/J?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LeO˰u1&4WeGRiTe6OTjU:VWVkUv_XlV;%gZkUB@PP q\ kuon s_[T2@0rq$ tVͺ~7Mwz7 `& -C$#x\>'qxO7tz]>W ҷ&Ls..w=z}^g|~_?~_˂!s&@6% VAizMAI5bf x`slUől\9q|eƑmyxa^B& ~B1q̝')ʒ+̵-ˉh P8˂ td7y{XrN42`#NMEю4cF%Iҏqt&&|H 0  j%bϳ∣WuDġe+aؖ-cMeٖm〕@"&,/gˇ9 Jm3bstLHD[{t}}ߗE-AL5N͘ U ZāC$ ~29껟=>}vɾO]bR˺Zb1 E0Z&+hƅÈC>&WűH 2`ȈɄ3. ;pmXHu.  qo\%򜪮ҴP`+`1 p Kk܂R}8ܒB'j}XJg5_~S Yy,NkjUrع,B_U \ı 렚L쾍ӿ:?>^U"c:e [?,o@̕J0e@PnA=.+DĀXn`2&OVn<Lˁ0DR@X4 Bt>!DX^1F@HY4Q)Jta1LYq9Nol$yo\D@t Xz$P^ݔ|@o:K>O~m%^9&z|Y C勹c " b}\Pa)9@Hs7[Tu2jNqZ{m_ۥ~.$Ff$>"8b{q>͜u߱Dz+JTAtB0' B/ C07C?D1GD@$ L3@yFns)M'q FA JJ2*J,Bi ,˲0L32L|q&y:*@hFbZ*:,Lc<ꤰ47lNtCUD+2 L, 4SCJu#J@T|OU=]RR` P5 Ҳ̕q|,ܶ-m d@Uؾq @hslYWԵN4OUM[s\IdֳNмⷭشs;( @'3_VU˽NEOIo?W}V`~ O_[Jup: mG,}M}^k\yy>O[0 {_:ߞ׿v__gԽk{/W;lP&@`t[X&z+ Ev ҽ2@PFkXAa? b4G%86iƍ hV(c*Mf%F2zX1o-9KHm<4*)E`A!rΔkd!:CX"w.C? twʝ=cowFNpD:]A2KJVl*CĮy-Cڒjq⾉fmձ> &I=VS]RRP*̊g+d*HǞ37o@N&?

ZGP,!`O!( kSjuOUUjWx v(JJ*"F ! t8Vkqup~ LZG-#iGp XFcYˤMzd@QOeg5Td\ΒkQ2P~AbE#ၲ76Fagoep9tcej}ǾI%[0>Þܛ"6Y;CiȻvG+SSu--i,NZH$im+)k|e mC o*<۫B*Te~wmuUꏳǛ7 \bH[U*)qR܃GM bVrvOj J! ,,cà^&#xXS0 Lv9g<u=g?AbhSXEe3` C4ayPFȖ-#Y6R**1:8j+|CFm6\K`y é>U2Zv9.tm&ݸ- v+*)zf'6^U+Kc, w&X|r{ZvӨ?Wznv3sL1J_k97Tzxc*mL~<}QWYyt p1=5`kQ2y~I-`#];F4I6'!럶}I峜:i%.K]gu<84IPF褷KYM{; |7%qaQtӏr'r *M}g7չR~3Ysݟ0Yz%K$r -ES BD l ([JArm>S;,AWKF= AR'zm@|L0_(s[;:Ĥd2TKL3/•, ØbC@"+B0R鯀M4Ӛ wDd֑n~)E+Sq̀nH~RL(FMtl6ƶ,8Kd u6(T7|17Cn6x6>xkYO3Cnz; KGYCw; PB޾ꁨJJ+ϳ`  c: k&Q1]LI KҮL1Y2ߍ1Ta?}OFFj ,3?&(+ EHF4sHRe/30%20= ~Mͫ?R M3jE38n6+ 7#8K6;;T5C̻ X?iOj,7c^3b A9e)c M_%I&˂1(P=þ !RV4= >LPTh}:qG` 0 E_ a'ߠ*_ -S`Sc$W%i%[+1PSO)LreVRI,N8 XIAݔ5y{[5J'koO]SI46R kλLe{c=mn@A(>DXLRUwWLɑBUG66X)c,$BR?d'u^vWed?ۋIl1OR8ߔtOIS$3_HtPb\ p 7wv-D`Mj<2wf"?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfPw~5dWg!`AI– Uv_P\3RxW(Ph%2iLNl׻`pX<& bqXf7drY:?˙oPNp d~R#LmM\;:<۔J65Wn:]>Wvz;okx|^?'Phow2Tf^fBu"LJ1*s'B+6"ڞ[Ð= Eđ,MK:ϟ~ lxԃ X=INJ b*C*ǫqx PX;t/Q/"Z[A-[Πk 5 , Q*R%?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfPw͸~Sx4r$@ H u:VWE&񺠜7ԠѿYA B[4Gh^oW`pX<& bqXf7^&w~SY,-+4IjuQ]m&'e͑AA@dLAƯry\g7Qs]>Wv{]c9Vӆz~ft .70xw?_{~pq+!o=LkKh:'@ܺ` 5 Ð= EĎbpp3+*3h@ Ү,tPQ[" ZnAܥ)ʒ):-˒/ ""v'e [ 83jG@eŀ pbZ0;?S5MӔ=O D¿6M,&µlppo$U5!yj*`H2FBUiږ1,͵mۖjTD}( ᆶPĤR6x1o_ I{P'C@i{3X˫N K8-5@PT"sCT%Q˪޸}+Zb6G~q2}2aOve9ljZ fAzh4$`Aj,hIgTRX(Ƕ; Ok}߷`3nI-cTwp~3jmQ9?/ژ>vm }u 4| )ɍ+O[>?@Zz/OۑnXp K6 U (He,3PN `PI M~,;JmM eRHlћ4gY "AQ"DX*{#qpoEDdB?H+lM|*0bkѶҞFѮ68/cqJ$NEYF  \LRa9+\o&21 w &QK!RRJT3 1m6Hr,;cAE$tE;.,xTS-NF39L~(5 f)?r:ay6ÔG1a='6Nu'S~O"G'4 ?1QII&䞟~ve]5u @m3$@@tKi1IzѰ$f!$Ba (™J?G(kwL{s.(r~j-YUnU59S*gI6c -P9^T̟Y?UD T80mXd͏VN~s*apSR[o`0FU2 Ȝ"|? (@MʍV[|t=I<w STxθZr}2Cp:XE:+P"R.Y^gۥyAZ7^(܇,0[:ru.=+`u՜_PX ˿O a\-ȍ'D4alM)@af?p6~an 6ѣ&V}޺l! 1$qM (RdYOdqB~ D`"3y'Ø]"9/!3d7S>S 8h-DZm?/WF'/[ H  zpMA# JD]B:-iFN/!*a).`A9NvXÁp|ʛ,80%h>to6Zgyo]vdW TLAɉo H7jwTbiJMOwS`V/!y+@1H0RP?zGI07" jrQd1 $hj}(jO,\$svv+PCڰ&.nl`qs2adӼ*UTuGw-/_^l|oEE_py}|s 76׼Mꢯ^{,=,d&10VC`NYPEHCg`^06f]~_'FxṾ={%`@@p.e ШBܴ&.WE7 (hPTZp\6 ^'A~ikl Hꚪp t#^pRh 0ͤz{~lܘ(pv`o`0p0z p5-߁ze&\}A. N-W*.'H!EbAh٭ɏA͆Q1dy-n@qb&e`: MdUbr# jQ hˎ`*~hdiFibaff.o ^i 23!2μnɢ.k40ΨF2%2U%nD~,뎻.ubT_{RB0Im%*2/\+P޿l/WҾ+ OO'R*-jAfv`Eҏ$PFƀeL a oOKFy1.302338O"-HV˨+zOF!"̞-"s;7sy7le"x6pE.pNtN,@j<{$h:/7/}<3ȚU0o اm@AԎ&MXaS@4@dJ DI|o)h VMg): EXo)eV@T*b?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfP~5kG츲Erxx`ЏjPTrt1B*zM%MVeY֕m[t+ sN 8j倠r X’ WvS)П Zt|7 <"*SEw{>S<~xww( 9H5 } ~oG3r]Vujb9.MNUkCK2~~w2ʀ 6Hkyv &?.e0- +-8U4y Vű,7=lNյ ?anrlzYa 3biF4q'&Lys *L6eE/MӱqBgS((B0cvVg-0|() dD`D/*0#{^+pRxrn v[zb EVm CWG̜O!CjEj F]KP!PnAZMKHP~x< oH TʮrPA?8flЏ3ڪE5e 2Z`\ W QD8~TO!eIبE)6e~ N+cMP \`uH&_ tR.FH#!_qr-T$)zAH PB\  [zi @$ }L){VaLY1]-x:F"a` $ K% p@TQ2mx8JTBk΂ =S~$N3;&\\܂PP?Og#W@wOSQ MIhR?HBBT<3J͸n%.=O*HsTYP*QUNUZO8b@:\)4tjV2k`Q[b7~EiTiT`XT]1,5V,QVF<KZLgǣl)@3HBɮt6mmŹKݺ $ /-ӗx]AX:GPn  NLTՆ@ZiB^Sb/5UD4?'s"\@p%@܂2| s eqidN$o/[a\-2J3ES$62^QCʙh^erMyH9r@ػ"d[J6IQF# &K0 /%,?qΩxT.ݛma;ƋU\, & J#tK@5I SM_6/Qʇ 6t5Im5nRjVɁ$W i)\qmL GbTF*SY]D 7W[QhXYw 'dgM#%[,(*ayT5[wz[GwVljZI[5wl-Dd1<@“Rkp=!luMtp}U8*%G 9^EU!L9 ֬gvAU^~I\^̑zQ-6cUDbkmm1T-zvwvqF{Q:z#P;n,DGcq1&&S=ܼgy)V3m=g:t66?̬ÄUήcOO~_ TJܢuomS{҉F$%m^]8ܿO)yBO'KԵ[xA^ O?H?. @8/!#-o[hqʚv@i3N!i`dJk3Pluubv-k2Bb, Vz,O,-ժ.ID) XPθalDҭ.`,K+6}qLEghoh'&.9n %R(zq' Ay#ŝOH$nҢ͘K^ Ϣ#Y(P2Q,ԑ,fP\0? dp/ZNp'q'rn1< Rs21!2'uABT +Gp-HO kFB͇2SpF73xP}fb?g'πGU*@ȝ92֨ #hh̰I6{;;Noh3l o.&'[Deq lJsJа$<Aw@0L>L*YH"/'(h qE]EM>gl~CPN+L QtqrŌ2`( ` 4cSF<Jf-3e@J" )˫ITKtN@>"fTq:JIHD`Zhj4Ⱦ4?v`O542?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfQ7~6@z]9@ ,% >SAJ%VWVkTpng % $ELw^oW`pX<& bqXf7%[^XٜPh&0 Aq$Jgf];YD̹=(9 )"m@(8y\g7te0yN3E~_렺 C@cog^&ܽO=&? 3O\.h>ZKP) D).B] Q+o 7*A'ˡT f8lk6~*Q !XYM|WѵܛX@H4@`!` ,[CdVOQpF?pGqBHX $4R-n@p6LXdz 8bN@}k@NW⼑rG O$]I'drZKYm-Ø] OQK<(qМ\LHW3XzB` \)7XrNYt8'XF- ^F)G͔RAPsOns:hyjx V{I>TNQXA#XPbN=y鿢-2HnX8YCї3d٤fR}OTTG] x. A:s?.Jj1LԶ W @E2'W7[qLwH,I]sm$#^p(* _ÐY5;F[Gs|7BItΡX{=g}BQ9J6k-wT\N*x5MJ`=wNRUIh+@MfګoqEɹW,f?Fӗl='g 4@TYSQY0HƐ'xV4".7|Ay/+6_ (,%|oęW1k<]r08`l5N]7ݛq7D ?ACx Mg&p6+`g+ՀPZʌoe 9`J||d.D7-$K&mZ̓ k-FT\@=NDtFQ5۲֤wT6kZ' θisK=(+ A=UF#U# kKD;*{ F\^W*2Y\{q@fp0'",rlL5Pf-\.Zͮ&n'"v'~()i ˫dpQo.H0AĜD&H@(@tm VWF N0hY* &)N)'>x|Dg|i#D@`WPn8% oEi1)Յ(bE,O- MQc1)Gbxd An(IC]štCHρjh1 t_.aQ\PHJ£a©ib'`a.aabF(nqxl!Uŀ]E$jk0W@.r$dQlx#c{ !"C21#lo mmk0$ /lo&Շp}#q'2td~ƈh= J Nh$n%pwL| G'rK5,2ȹmPz #xBÇqa2zG}B.'a/0%:h0CnN? 4n,.ia 0Ȁ$8l0SDD4sL,L-LȨ,n3ȚH0M4}7Cp8@&PDE50GnX*#A2jPh,sH#ҠX(26H,;Q!9WKlv[85*ցB߸x."Otz]>WQpNwx|^?'';Ax%* 5^nok| >hHb[* 5 Ð= EĉrjNy. @;V hF1*!8҂@,K!r9ʈRª-˒/ 0̓,3L pmV 1 *h>)!3\] ƶqlV3>5`M- C EQԕ-MSMT灭3gW(; ) oNJbWap'4e8xKKV!(=%o 1W-sM '@-kd6 n Lu`~ y6ԛ%{Ob8-5^a,tt@ 5`ЋlX,%ZxpL϶ ")? u\ΣvrxoӮ[LawꕊkWNE%ϻ-b:v۽*]cㅵ`dJpwo7Q8u0=\]6m۶v5n~D8qR_Ƀ6`qRS|xR;W~o*93UW Vw+ H4WYףxn0@hcu ][u=9PsIFZ[vZ5I#dC8j[xՁPŕMہA'` Ů;YjLonDY3Jb\m9:QqsϤv[c61~)f:03$ʇE&7 W & .HY:sycѤ=Q7Ÿo%,,3,2(ݏz~A W:Rj]LG}zYE2:Oз)<gx_!w$ C̽eweܫpqcQ'WJ3hX1{4%vH}ɹBG?<4zl R v 2gt &61Hb)p viw\O"XX#VLly _+<\Yg)m6"peN߳Whl4]* -= HWр!@MD h<" !|B#"hb3#C"ŸgS*%|c2&is:'!]_u." Jc 4GQ,i?[cyMIz r<2+"`Faol>#1~C#2lc3H~Vףz~`Z)Vj27ק-Kӈq@zkM}OA8N @e= >o'`(X3STRNup` Q\a h~ D֓qE7iXM_d"!؆4ch8c@@>ݐ|Wa_| y$e醌h>RGij^inj8TSD[bKڦEzPiAnY%ԓr 9^TZ@εl>дm+NԵmg?N"l7E$1IT"x  fh></4=]gav @`A_ w1;qoB)Lw r,$QMB%l9 4]k0lJB΄\ փOӐpڣ`3Xuo\u@S,mҝl:4=\_@@An`S3L[6?'p•)ty.M?N_y4B9lss`lK·*񌟞5SO8MX;@@z޻|o|{[URN!?L)U X %x/~oo~mdc+E^S?g @( pR b0ZKXƘ~?r *%A]d&2p :o(Q*)MJ /`/8xɝ?#oD1Lʉ(bq2hΈaFš< > 0Uxl*X6$ rC "$LR -؆="XiYؾc ?6 ѿ$$O hܪrVVИ)#Y5˻;P(.e|_2&LʙkJCɟ4&,&RVIfKATl`yf0~MyܗF4N9gUh- d?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfQw~6@SSW;w^oW`pX<& bqQ78j*|p`'ۙ6pRe޳}PVO|QO-_=_[w:~_ pm,0+.|[C5 Ð= Q,MLUd&pl0:4"1Y!^Gi:.1 Ȓ+̵-˒&qP2Q˟gj@& BJ? AДIBMEѐ{iHgb˞qz 10N`蠧#zmTIҴM'E_-+FOy: 0x' e q_o3MXNf|PBXL؈'pO0h8 )R}^~"DXaOX2cѸ' ͅ` uBjQXkLKp:SYg ]0/@h yQ>GԶ?"ɍ>O`M7P qRnN'eD84? i댥6>n0Dw4fmJ3)e8 }鄛qgL͙i}5ٛSl<z{Bf ^b@HIgsrzOY=Sbp8X~NY@9UgZ~9?G0'HƑ W1dITR6 CL*nL'.BESԺTZGU-GV,d-èbyf띠 xĂ2(ػ2c^Bi>g_[?ՎW_ڈ#aubtG |dͥY[,*MVmF0ImMu@-).>},&#sa:<6GR \۝s͞hA|eǸ=R@ AH3^[yE!< b|ѣ0f{x x@FνdK Ul0VU] N@{ps /=ÎDgc&5\H/\mͅ3bGn u]an]@P}ǨzOX(9@@π'ܠGY<ݛq#4^A[#PM1TAyBh] JևZ,5q#TPam_ mz0ZvJ37LSP3 pњ^kۡ0#${WTxVnRr FAVξ[O^hUHHXugbVÂͺe̸Yw/R6#IZ!S X!jN\/OX?Idx\`To!Wkr>MiH'TŌ!iŰ,%2y iM|yJ;(1F@{*=rx9HMGiP^@2Bn 2vg%8A?FܽC`BB22?>"2>n*X8΀i˖K6SwZLp ǹsqeaŠ.<0] ܏w>|Gwܰ#2. 7N2y|qv$z)=T`@] 럤%L$Vɐ~N0,4z'N*V:y`T Z>ŁL NT8) p0PY6)Сg< bЇ 0s3 pf^򘣔 #軭2d,ˆ(fp0dB|N|bR~4 th!&S %^AbG"ciTk Q-qY\7K Gp)*46_XQ)1F+} Ô+$ =]d9m~,X8* NV< Üꚮ:'հk~]r d滾*jqz~H6%Ko-5Ƨ~. $ L@+J'9u o=} p,YN3+h$܌Zϵp>pZ `8(_Ww' z0r B@,.C"PN AX,uI.N WT @^B\/P͙+5j?UW*ofRa*`8CHDIQ,-c ^ 8yNYK2FVc c4iJ`8O՗̛RBDZAHcv > Kq<H $ HY='RJThbŠTH]h 9@rR^K|'/DO` |6`~m  @tSnn G7g;x9i%Tu9˄QS~Og* c1J Y]R` I$ʟNQR7Eto@Cd⸨q<u’TΚSZmG|ƊJ 2 $? joSQ$TbUZH~)O(+˜sUqUΫdj+j5Nz #4kTҪXbH+qZ!Ȩ HlS>Z[Mijɴ7?بHQO?kQoQQn0TӤ bQiM*uٻNo"?"TҀ%-En^_pu|x9E¶cG] u d)`TEWv{]wjdᴘݹ401%HLgƅ *J@Llj  poʐB-$!LUől]e['<ݝF|KӈC>)Cƒl')ʈt*̵-ˎ7 p0ӂ+@+c3K;=ϓ?gp,B} @xR" P P=O EMSLG'!d°)) `C V-cMeٖlэX'Dݝ: ~ 1b<((g]mwW{ !zݜvyjn) lJƃbZ*P_8-5j)nGMejǪA uER+œ$xqj.[s] N69č*sdgrݝ担!R+ o C νHl?uMr-4 13XƂ77mpu; ǀIoz9lfF5S@œ J^>Zקoܹw?~K7g[Jٍ! D P.@԰p'°UW@t!P aD)k`?G CE 5r2Ma|TAQ"DXZ  NZi2JRJYM)Bp1 ,@DrR^K||S ʱ(LrZYNjMY5#Bļ9SDasbrNYff STr'Sx˦/3 $ (?E#$MAS@>E$ӦQbTG*uQI~y( 5T@QqS,NZYD(#jMOǰ'"e{XXX5JJ_l&HRefmS K6NY[,ޒcHAp?HF5IҠSVEYk浈72䜳ReW\Ux*="fg9>5ٻOR]#&2s M$$:|r3{+F~2Q:֌ `dTa!% .Y<]%&j ZtoahF Oj]sǹ/&dܜLւMju/ *~" :ՓFiY5f7Nl UVck :+%Y$};)1 tYf(=-lmfҡ2mW3Xc>59s?m ŹVuHl=eXݏq|n v>[n9>`tՕ'\[א?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfQ͸~Sx4r$@ H u:VWVkUv_XlV;%gZmVeo\nW~6R؃A-D`yWv{]wֿ[YMfxB,;A_? , <l|iȝ~vH)|`  `>* #eƑmu͡j&)-k 1 螦CG+̵-ˉ. 1̏}Rpv)z.nH Ĥb[ ̴ AД- CME V'硾 *DVS Q-MSMU2K]]W >F} A{H4$dYYmgiڔSԞ'R.>4 lHF/hIjݗmwbW{ 9uI'Az'k*bH>)7]☮-5WZ|~K`ܠ%ψyn]VYmif|L4*@:(dYƥꚮ9gI^f0nŠ H=nkC'f6ζ@ `R7@5'GR&v=HtlL,-vmq/Z=g=@Z\9]'<>Gu;ȀObRw_l)-`fL迈PM.1^ؚ'JTڝ@+JJ˂B\B߬/Pͪx( xw`8Xa@x(.&D؝⃿H -H`i1qs12FV c4iK5k?F'ipQIR)pRB@Fهp w`h+(Ă |j2NI8@Qqnw_yWv{]wx|Zi7n'Φ&@tp ,rD0@ , JT% ‰1tѶN/IC2@6&)a8Щ)0]eƑmtm+_0ˀ*80!9 r+̵-ˈ. 1̐qxѴK4# *P2ϓ? AД- 硽5 & LOܠT==O EQ2ISMUCƝ'R/Ǒ6ˠJ*  ((UvMeٖmg2npTH)}. 2 J 7(@եwyވMz}vKi[j8(ƀa *.~c5=䛜n<3 J"2 dvA}-/K {>*0 `Ȳs-kűͱt)]Ş 4&(ȊnӠcY&p\/ ¯+~0~GaO7;G=E xT3 yS~kHP=o=/} x^/1~lS {°> F i@!08J8HJPEj|RZMIѴڥ !<7ۊ!DX^1F~A!HY4H?ta1LYq9NAmƯ Bc0 @WJ 4IRX[5iZuq\[y^+X'r`~OޟŽsJqCz<8 ʸ5K*ENS?PT5GRT5OTU5UWVUr'=UgZVXfE]9xF$N/,*Ȉ"+ [Zl[6շn[p\7rTt]7U֚9qs9_M*@ *1Rva8Vavb8'b.7c,`ga:*e2PJ ldYӏg9wgh:h2hV9NaǐYqjAIpeݏd X;;V׶mv߸n;nBWo;qkevJg)Ǚ&Yhpd Z@t=Gt7Ou=WV=g_o4io憯硾"=c_Ҽ/!'全M>{>׷{Jw|0Ǒx m'v O)A@!B +8 z@s64f A9`?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS8ų8z7W肾 }B@@` uPHb UA'0Do\nW;w^oW`pX<& bqXf7drYT-K5MӔ=O EQԕ-MSQUՕm]WeY֕m[u]UUy_ aؖ-cMeٖm'W}iږk͵mۖoMpܗ-sMuݗmwqqW{}ߗ^ Nn%)พ-5=-Y.MNUn]I普mu}.NmIiڎꚮεű.ͳ>nݷwo Ooǥ/!-5<9E/MQo]e?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^g|~_?~_ | Ll% -  CP= Eđ,MLUőkeEьeƑmuǑ} a Ȓ,#L%ɒl'r+̵-˒/ 13L5͓l79Έ:=ϓ? AЍ,BMEєmG%I=)K5MӔ=O DRMSMUUՕm]W]KX֕m[u]ו}2uaؖ-cMeًgfiږke`Vo qܗ-Y=uݗmwyM{}ߗ. N%☮-f=E?O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%geo\nW;w^oW`pX<& bqXf7drY<>ՕfsYw=htZ=&MjuZf]lv[=m/[}px\>'ry\g7tz]9Vv{]wx|^?'z}^gU 4U4U$(=RSVćs HVM ' M d c / iD * L n!C!e#&)+.DZeqf}6zMΚ m Kz"%2.14p79<#>AECFgHKNPS< HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmapjanke-octave-tablicious-8a1b10f/dev-tools/000077500000000000000000000000001515050116100210515ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/dev-tools/runtests.sh000077500000000000000000000036431515050116100233050ustar00rootroot00000000000000#!/bin/bash # # Test wrapper for Octave tests. # # This exists because Octave's (o)runtests() does not return an error status, so # you can't detect within octave whether your tests have failed. This wrapper # script captures and parses the textual output of running the tests to detect # failures. # # Prerequisite: "make local" must have been run on this package. set -o errexit set -o nounset set -o pipefail if [[ "${TRACE-0}" == "1" ]]; then set -o xtrace; fi # Utility functions THIS_PROGRAM=$(basename $0) function info() { emit "$*"; } function error() { emit "ERROR: $*"; } function emit() { echo >&2 "${THIS_PROGRAM}: $*"; } # Main script code pkg_dir=$(dirname $(realpath $(dirname "$0"))) inst_dir="${pkg_dir}/inst" test_dir="$inst_dir" package='tablicious' #TODO: Should this pull in a defined $OCTAVE? Or will that cause problems with redundant # --norc --silent --no-gui from the Makefile? OCTAVE=(octave --norc --no-gui --path="$inst_dir") TIMESTAMP=$(date '+%Y-%m-%d_%H-%M-%S') outfile="octave-${package}-tests-${TIMESTAMP}.log" info "pkg_dir = ${pkg_dir}" info "inst_dir = ${inst_dir}" info "test_dir = ${test_dir}" # Main test run function run_main_tests() { local oct_test_code info "Running tests for package ${package}" # Run the tests oct_test_code="addpath('$test_dir'); tblish.internal.runtests;" "${OCTAVE[@]}" --eval="${oct_test_code}" 2>&1 | tee "$outfile" # Evaluate test output # The '! test failed' case is for BISTs run as individual files bc oruntests # doesn't discover them. if grep '[^X]FAIL\|! test failed' "$outfile" &>/dev/null; then STATUS=1 info "Some tests FAILED!" else STATUS=0 info "All tests passed." fi echo '' } run_main_tests if [[ $STATUS = 0 ]]; then extra_fail='' else extra_fail='SOME TESTS FAILED!' fi info "Done running tests. Exiting with status ${STATUS}. ${extra_fail}" info "Test output is in file: ${outfile}" echo '' exit "$STATUS" apjanke-octave-tablicious-8a1b10f/dev-tools/tblish_check_stats_overlap.m000066400000000000000000000040201515050116100266130ustar00rootroot00000000000000function tblish_check_stats_overlap (stats_pkg_path) # Check for overlap with the Statistics package's API. if nargin < 1; stats_pkg_path = []; end stats_src_subdirs = {'Classification', 'Clustering', 'datasets', 'dist_fit', 'dist_fun', ... 'dist_stat', 'Regression'}; # Use this Tablicious package tblish_pkg_path = fileparts (fileparts (mfilename ('fullpath'))); # Locate Statistics package for comparison if isempty (stats_pkg_path) # Default to Andrew's conventional repo location stats_pkg_path = fullfile ( getenv ('HOME'), 'repos', 'octave-statistics'); endif stats_probe_file = fullfile (stats_pkg_path, 'inst', 'anova2.m'); if ! isfile (stats_probe_file) error ('Could not find Statistics OF package at: %s', stats_pkg_path) endif stats_inst = fullfile (stats_pkg_path, 'inst'); stats_src_paths = {stats_inst}; for i = 1:numel (stats_src_subdirs) stats_src_paths{end+1} = fullfile (stats_inst, stats_src_subdirs{i}); endfor # Announce emit ('Comparing Tablicious and Statistics package APIs') emit (' Tablicious: %s', tblish_pkg_path) emit (' Statistics: %s', stats_pkg_path) emit ('') # Compare functions tblish_inst = fullfile (tblish_pkg_path, 'inst'); t_fcns = list_fcns_in_dirs (tblish_inst); s_fcns = list_fcns_in_dirs (stats_src_paths); emit('Found functions/classes: Tablicious: %d Statistics: %d', ... numel (t_fcns), numel (s_fcns)) dupe_fcns = intersect (t_fcns, s_fcns); emit ('Found %d duplicate functions', numel (dupe_fcns)) emit (' dupes: %s', strjoin (dupe_fcns, ', ')) emit ('') endfunction function emit (fmt, varargin) fprintf ([fmt '\n'], varargin{:}); endfunction function out = list_mfiles_in_dir (f) files = readdir (f); out = files (endsWith (files, '.m')); endfunction function out = list_fcns_in_dirs (dirs) # Lists functions (or classes) implied by M-files in a set of directories. dirs = cellstr (dirs); out = {}; for i = 1:numel (dirs) d = dirs{i}; mfiles = list_mfiles_in_dir (d); names = regexprep (mfiles, '\.m$', ''); out = [out; names]; endfor endfunction apjanke-octave-tablicious-8a1b10f/doc/000077500000000000000000000000001515050116100177025ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/doc/Makefile000066400000000000000000000144351515050116100213510ustar00rootroot00000000000000# Makefile for Tablicious Octave package documentation # # (Custom Tablicious modification of the standard OF docgen tools.) # # See README.md for more info. # # This setup uses the convention that "*-in.texi" files are the human-editable # input files, and corresponding "*.texi" files are processed intermediate # files, where feasible. # # This Makefile is generic enough that it could be dropped without modification # in the doc/ directory of any package that follows the Octave Forge conventions, # as modified by Tablicious. You need to include its dependencies: mktexi.pl, # OctTexiDoc.pm, and README.md. And then create a src/.qhcp modified for your # package. # # And make sure that your texinfo doc strings follow these conventions: # - each @node must be followed immediately by a @chapter/@section/@subsection/@subsubsection # # Notes: # - You need to have Qt 5.x or newer installed, and its tools available on the path. # - Mac: This requires a newer version of Texinfo that ships with macOS. 4.8 and 5.2 are too # old. 6.x or newer is required; I have tested on 6.6 and 7.0. You must get the new texinfo # tools on your path in front of the system Texinfo before running these make targets. # With Homebrew, you can do `brew install texinfo` and manually add # `$(brew --prefix texinfo)/bin` to the FRONT of your $PATH. I do this by running # `PATH="$(brew --prefix texinfo)/bin:$PATH" when I start working with this code. # - On Ubuntu, don't forget to `apt-get install qt5-defaults`! # - On Mac, `brew install findutils` # # This Makefile originates from the Tablicious package (https://github.com/apjanke/octave-tablicious) # and is based on the one from the Octave Forge communications package # (https://octave.sourceforge.io/communications/index.html). # TODO: # * I'd like to put the generated output files in a subdir, to keep them separated # from the toolchain files in this dir, but I don't know if that works with OF # conventions. ## Some basic tools (can be overriden using environment variables) SED ?= sed TAR ?= tar GREP ?= grep CUT ?= cut ## Note the use of ':=' (immediate set) and not '=' (lazy set). ## http://stackoverflow.com/a/448939/1609556 package := $(shell $(GREP) "^Name: " ../DESCRIPTION | $(CUT) -f2 -d" ") version := $(shell $(GREP) "^Version: " ../DESCRIPTION | $(CUT) -f2 -d" ") DVIPS = dvips LN_S = ln -s PERL = perl ifndef OCTAVE OCTAVE := octave endif OCTAVE := $(OCTAVE) --no-gui --silent --norc UNAME=$(shell uname) ifeq ($(UNAME),Darwin) FIND = gfind else FIND = find endif MAKEINFO = makeinfo TEXI2DVI = texi2dvi TEXI2HTML = makeinfo --html TEXI2PDF = texi2pdf # This discovery of the Qt tools is hacky BS. Help wanted with # a better way to do this. # As of 2023-ish, the plain "qt" brew formula is Qt 6, but Octave still # uses Qt 5, which the "qt@5" versioned formula will give. BREW=$(shell which brew 2>/dev/null) ifneq ($(BREW),) BREW_QT = $(shell brew --prefix qt@5) ifeq ($(wildcard $(BREW_QT)/bin/qhelpgenerator),) QHELPGENERATOR = $(BREW_QT)/bin/qcollectiongenerator else QHELPGENERATOR = $(BREW_QT)/bin/qhelpgenerator endif else ifneq ($(wildcard /usr/bin/qtchooser),) # Probe for actual qhelpgenerator implementation existence # Gotta do this because the /usr/bin/qt{help,collection}generator shim always # exists regardless of whether the installed Qts provide them ifneq ($(shell qhelpgenerator -qt5 2>/dev/null),) QHELPGENERATOR = qhelpgenerator -qt5 else QHELPGENERATOR = qcollectiongenerator -qt5 endif else ifneq ($(shell which qcollectiongenerator 2>/dev/null),) QHELPGENERATOR = qcollectiongenerator else QHELPGENERATOR = qhelpgenerator endif endif # We depend on all files in the input source directories SRCDIRS := ../inst SRCFILES := $(shell find $(SRCDIRS) -type f) INFODOC = $(package).info DVIDOC = $(patsubst %.info,%.dvi,$(INFODOC)) PSDOC = $(patsubst %.info,%.ps,$(INFODOC)) PDFDOC = $(patsubst %.info,%.pdf,$(INFODOC)) TEXIDOC = $(patsubst %.info,%.texi,$(INFODOC)) INDEX = ../INDEX default: all all: info html pdf qhelp info: $(INFODOC) dvi: $(DVIDOC) pdf: $(PDFDOC) ps: $(PSDOC) qhelp: $(package).qhc # TIMESTAMP holds the POSIX time of the last mtime of any source file TIMESTAMP: $(SRCFILES) $(FIND) $(SRCDIRS) -type f -printf '%T@\n' | cut -d '.' -f 1 | sort -n | tail -1 > TIMESTAMP # This target generates .texi and also .qhp as a side effect .PRECIOUS: tablicious.texi tablicious.texi : src/tablicious.texi mktexi.pl $(SRCFILES) TIMESTAMP export SOURCE_DATE_EPOCH=`cat TIMESTAMP`; \ $(PERL) ./mktexi.pl $< $(INDEX) $@ $(package).qhp $(SRCDIRS) check-texinfo-version: $(PERL) ./mktexi.pl --check-texinfo-version %.dvi: %.texi check-texinfo-version $(TEXI2DVI) --quiet --clean -o $@ $< %.info: %.texi check-texinfo-version $(MAKEINFO) --no-split -o $@ $< %.pdf: %.texi TIMESTAMP check-texinfo-version export SOURCE_DATE_EPOCH=`cat TIMESTAMP`; \ $(TEXI2PDF) --quiet --clean -o $@ $< %.ps: %.dvi $(DVIPS) -o $@ $< $(package).qhc: $(package).qhcp $(package).qhp TIMESTAMP $(QHELPGENERATOR) $(package).qhcp -o $(package).qhc $(package).html: $(package).texi $(TEXI2HTML) --no-split -o $(package).html $< # "html" is a phony target, not the actual html/ directory html: $(package).texi $(package).html check-texinfo-version rm -rf html $(TEXI2HTML) -o html $< # Auxiliary make file defines build rules for generated images for the manual -include images.mk images.mk: images.sh $(SHELL) $< > $@ $(DVIDOC): $(IMAGES_EPS) $(PDFDOC): $(IMAGES_PDF) HTMLDIR_IMAGES = $(addprefix $(HTMLDOC)/,$(IMAGES_PNG)) $(HTMLDIR_IMAGES): $(IMAGES_PNG) | $(HTMLDOC) cp $(@F) $@ html: $(HTMLDIR_IMAGES) # The images included in the HTML manual must be present before the makeinfo # command is invoked or it will fall back on incorrect file names. $(HTMLDOC): $(IMAGES_PNG) # The texi2dvi script (used to create both PDF and DVI output formats) # uses some fixed temporary file names. In order to avoid a race condition # the DVI and PDF builds are forced to run serially through a Makefile rule. $(PDFDOC): $(DVIDOC) maintainer-clean: rm -rf html *.dvi *.eps *.html *.info *.pdf *.ps *.png *.texi *.qhp *.qch *.qhc *.tmp images.mk TIMESTAMP # I like a plain "clean" target, bc I keep forgetting that maintainer-clean exists -apj clean: maintainer-clean .PHONY: default all clean maintainer-clean dvi html info pdf ps qhelp check-texinfo-version apjanke-octave-tablicious-8a1b10f/doc/OctTexiDoc.pm000066400000000000000000000567701515050116100222640ustar00rootroot00000000000000# This program is free software; you can 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, see . # This program is granted to the public domain. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # David Bateman Feb 02 2003 # Andrew Janke 2019, 2024 # OctTexiDoc module: common code for mk*.pl in Tablicious Octave package # # Note: In Octave, "package" can mean two different things: either an Octave Forge style # package of software managed by the `pkg` command (like the Tablicious library), or a # namespace in M-code defined by placing source code files in "+" directories # (like the +tblish namespace within Tablicious). For clarity, this code uses "package" # to mean a pkg-managed software package, and "namespace" to mean the "+" # namespacing mechanism. use strict; # A DocSet is a collection of Texinfo doco from Octave source files. # It knows how to read in source directories, accumulating the Texinfo # blocks as it goes. package OctTexiDoc::DocSet; use Moose; use File::Basename; # auto_namespace: whether to auto-prepend namespaces to node names # # Modes: # 'yes' - DocSet will automatically detect the namespace of a source file # based on its location in a "+namespace" directory hierarchy, and prefix the # generated node names with that namespace, prepending it to the identifiers found # in the texinfo items like @deftp and @deftypefn found in that file. # 'no' - the identifiers in those texinfo items are used unmodified as the node names, # and namespaces inferred from dir structure are ignored entirely. # Additional modes may be added later, like 'auto', to add namespaces only if it # looks like the item names in the texinfo look like they don't include it already. has 'auto_namespace' => ( is => 'rw', isa => 'Str', default => 'no' ); # include_internal: whether to include internal-use items. # Currently covers "+internal" namespaces and "____.m" files; can be expanded # to cover other categories like "____" methods/functions inside regular-named # files, etc. Does not consider private/protected access or scope access modifiers; # we consider that to be a different mechanism, where "private" is not a synonym for # "internal". has 'include_internal' => ( is => 'rw', isa => 'Bool', default => 0 ); # include_plain_subdirs: whether to include non-namespace subdirs has 'include_plain_subdirs' => ( is => 'rw', isa => 'Bool', default => 0 ); # docs: top-level hierarchical doc node index # # {$node => {node => $node, block => $block, file => $file, children => [...]}} # Children are also {node => $node, block => $block, file => $file} # where: # $node is the fully-namespace-qualified class or function name # $block is the stripped text of the texinfo block # $file is the path to the file where this block came from has 'docs' => ( is => 'rw', isa => 'HashRef', default => sub { {} } ); # nodes: flat index of all the nodes: {$node => {}} has 'nodes' => ( is => 'rw', isa => 'HashRef', default => sub { {} } ); sub topic_node_names { my $this = shift; return keys %{$this->docs}; } sub all_node_names { my $this = shift; return keys %{$this->nodes}; } sub add_thing { my $self = shift; my ($node_name, $block) = @_; die "Node name was undefined" unless $node_name; die "Node name cannot be empty or blank" if ($node_name eq "" or $node_name eq " "); my $file = $$block{file}; if ($self->docs->{$node_name}) { my $other_file = $self->docs->{$node_name}{file}; printf STDERR "Warning: Node $node_name from file $file is shadowed by previous file $other_file\n"; return; } $self->docs->{$node_name} = $block; $self->nodes->{$node_name} = $block; for my $child (@{$$block{children}}) { $self->nodes->{$$child{node}} = $child; } } sub add_sub_thing { my $self = shift; my ($node_name, $parent_thing_name, $block) = @_; die "Sub-thing node name was undefined" unless $node_name; die "Sub-thing node name cannot be empty or blank" if ($node_name eq "" or $node_name eq " "); my $file = $$block{file}; if ($self->nodes->{$node_name}) { my $other_file = $self->nodes->{$node_name}{file}; printf STDERR "Warning: Node $node_name from file $file is shadowed by previous file $other_file\n"; return; } my $parent_thing = $self->docs->{$parent_thing_name}; if ($parent_thing) { push @{$$parent_thing{children}}, $block; } else { printf STDERR "Warning: Parent thing $parent_thing_name for node $node_name from file $file does not exist\n"; } $self->nodes->{$node_name} = $block; } # Read texinfo from all source files in a directory, possibly recursively sub read_source_dir { my $self = shift; my ($dir, $namespace) = @_; my $eff_namespace; opendir my $dh, $dir or die "Unable to open directory $dir: $!\n"; while (my $file_name = readdir($dh)) { next if $file_name =~ /^\./; my $file = "$dir/$file_name"; if (-d $file) { if ($file_name =~ /^\+/) { # Only include +internal namespaces if asked; they're not part of the public API if ($file_name eq "+internal") { next unless $self->include_internal } $self->read_source_dir ($file, OctTexiDoc::prepend_namespace ($namespace, $file_name)); } elsif ($file_name =~ /^\@/) { $self->read_class_at_dir ($file, $namespace); } elsif ($file_name = "private") { # Always ignore private stuff, bc we don't have a convention for naming the nodes # inside them (identifiers in private dirs are local to the parent dir, but the texinfo # node namespace is a flat global one). } else { # Arbitrary subdirs are conditional. Handles the case where packages arrange their # code in some multi-dir hierarchy where nested dirs may be placed on the path. # May not work right if there are plain-named subdirs under a "+namespace" dir. $self->read_source_dir ($file, $namespace) if $self->include_plain_subdirs } } else { # switch ($self->auto_namespace) { # case 'yes' { $eff_namespace = $namespace } # case 'no' { $eff_namespace = "" } # else { die "Invalid value for DocSet.auto_namespace Must be 'yes' or 'no'." } # } $eff_namespace = $namespace; # "__foo__" functions are internal implementation items. Assume "__foo" is internal too. if ($file_name =~ /^__/) { next unless $self->include_internal } # Need to switch on file type because the manner of embedding texinfo differs between them, # e.g. with different comment-intro characters. if ($file_name =~ /\.m$/) { $self->read_m_source_file ($file, $eff_namespace); } elsif ($file_name =~ /\.cc$/) { $self->read_cxx_source_file ($file, $eff_namespace); } else { # Silently ignore any other type of file. } } } } # Read texinfo from a regular, top-level .m function or classdef source file in to $self sub read_m_source_file { my $self = shift; my ($file, $namespace) = @_; my $blocks = OctTexiDoc::extract_multiple_texinfo_blocks_from_mfile ($file, $namespace, $self->auto_namespace); my $n_blocks = scalar (@$blocks); my $ns_name = $namespace || ""; return unless (scalar (@$blocks)); my $first_block = shift @$blocks; my $node = $$first_block{node}; my $texi = $$first_block{block}; $$first_block{children} = $blocks; $$first_block{file} = $file; $self->add_thing($node, $first_block); } # Read texinfo from a top-level .cxx oct-file source file # # This assumes that oct-files are always in the base namespace/package, or have # fully-qualified names in their texinfo content. We do this because the conventional # OF package layout puts all its oct-files in the root of `src/` and doesn't have a # namespaced layout. sub read_cxx_source_file { my $self = shift; my ($file, $namespace) = @_; my $blocks = OctTexiDoc::extract_texinfo_from_cxxfile ($file); for my $block (@$blocks) { my $node = $$block{node}; my $texi = $$block{block}; $$block{file} = $file; $$block{children} = []; $self->add_thing($node, $block); } } # Read a @ class source directory sub read_class_at_dir { my $self = shift; my ($dir, $namespace) = @_; # Locate and read the main classdef file my $dir_base = basename ($dir); my $class_name = $dir_base; $class_name =~ s/^\@//; my $class_file_name = "$class_name.m"; my $class_file = "$dir/$class_file_name"; unless (-f $class_file) { printf STDERR "Warning: No classdef file found in dir $dir\n"; return; } my $main_blocks = OctTexiDoc::extract_multiple_texinfo_blocks_from_mfile ($class_file, $namespace, $self->auto_namespace); return unless (scalar (@$main_blocks)); my $class_block = shift @$main_blocks; $$class_block{file} = $class_file; $$class_block{children} = $main_blocks; # Then go through the other method files opendir my $dh, $dir or die "Unable to open directory $dir: $!\n"; while (my $file_name = readdir($dh)) { next if $file_name =~ /^\./; next unless $file_name =~ /\.m$/; next if $file_name eq $class_file_name; my $method_file = "$dir/$file_name"; my $blocks = OctTexiDoc::extract_multiple_texinfo_blocks_from_mfile ($method_file, $namespace, $self->auto_namespace); push @{$$class_block{children}}, @$blocks; } # Stash the docs my $node = OctTexiDoc::prepend_namespace($namespace, $class_name); $self->add_thing($node, $class_block); } # Get a given node's full doc text sub get_node_doco { my $self = shift; my ($node_name) = @_; my $block = $self->nodes->{$node_name}; return undef unless $block; my $block_text = $$block{block}; return OctTexiDoc::munge_texi_block_text($block_text); } sub get_node_summary { my $self = shift; my ($node_name) = @_; my $texi = $self->get_node_doco($node_name); return undef unless $texi; return OctTexiDoc::first_sentence($texi); } # Get the first sentence of a given node's doc text package OctTexiDoc; use File::Basename; use IO::File; use IPC::Open3; sub prepend_namespace { my ($namespace, $child) = @_; # convenience hack: strip the "+" used in dir names corresponding to namespaces $child =~ s/^\+//; if ($namespace and $namespace ne "") { return "$namespace.$child"; } else { return $child; } } # Munge texinfo doco blocks into actual texinfo, or whatever it is that # we put in the .texi file. sub munge_texi_block_text { my ($txt) = @_; my $texi = ""; my @lines = split ("\n", $txt); my $in_doctex = 0; for my $line (@lines) { if ($line =~ /\@tex/) { $in_doctex = 1; } if ($in_doctex) { $line =~ s/\\\\/\\/g; } if ($line =~ /\@end tex/) { $in_doctex = 0; } $texi .= "$line\n"; } $texi =~ s/\@seealso\{(.*[^}])\}/See also: $1/g; return $texi; } # Read an INDEX file. Returns hashref: # { # "name" => $toolbox_name, # "long_name" => $long_toolbox_name, # "categories" => \@category_names, # "by_category" => { $category_name => \@category_fcn_names }, # "functions" => \@all_fcn_names, # "descriptions" => { $function_name => $description } # } # # This is based on a really simple understanding of the INDEX file # format, with just a header line, category lines, and function/class # names. # # TODO: Implement full INDEX file format based on spec at # https://octave.org/doc/v4.2.1/The-INDEX-File.html#The-INDEX-File. sub read_index_file { # {{{1 my ($index_file # in path to INDEX file ) = @_; unless ( open(IND, $index_file) ) { die "Error: Could not open INDEX file $index_file: $!\n"; } my ($current_category, @all_functions, @categories, %by_category, %fcn_descrs); my $line = ; $line = while ($line =~ /^\s*(#.*)?$/); # First line is header chomp $line; unless ($line =~ /^\s*(\w+)\s+>>\s+(\S.*\S)\s*$/) { die "Error: Invalid header line in INDEX file $index_file: $line\n"; } my ($toolbox, $toolbox_long_name) = ($1, $2); while (my $line = ) { chomp $line; next if $line =~ /^\s*(#.*)?$/; if ($line =~ /^\S/) { $current_category = $line; push @categories, $current_category unless grep (/^$current_category$/, @categories); $by_category{$current_category} ||= []; } elsif ($line =~ /^(\S+)\s*=\s*(\S.*?)\s*$/) { my ($fcn, $descr) = ($1, $2); $fcn_descrs{$fcn} = $descr; push (@{$by_category{$current_category}}, $fcn); push @all_functions, $fcn; } else { my $txt = substr ($line, 1); my @functions = split /\s+/, $txt; push (@{$by_category{$current_category}}, @functions); push @all_functions, @functions; } } return { "name" => $toolbox, "long_name" => $toolbox_long_name, "categories" => \@categories, "by_category" => \%by_category, "functions" => \@all_functions, "descriptions" => \%fcn_descrs }; } # Extract the entire main documentation comment from an m-file. # This grabs the first comment block after an optional initial copyright block. # It ignores M-code syntax, so if you don't have a file-level comment block, # it may end up grabbing a comment block from inside one of your functions. sub extract_description_from_mfile { my ($mfile) = @_; my $retval = ''; unless (open (IN, $mfile)) { die "Error: Could not open file $mfile: $!\n"; } # Skip leading blank lines while () { last if /\S/; } # First block may be copyright statement; skip it if (m/\s*[%\#][\s\#%]* Copyright/) { while () { last unless /^\s*[%\#]/; } } # Skip everything until the next comment block while (!/^\s*[\#%]+\s/) { $_ = ; last if not defined $_; } # Next comment block is the documentation; strip it and return it while (/^\s*[\#%]+\s/) { s/^\s*[%\#]+\s//; # strip leading comment characters s/[\cM\s]*$//; # strip trailing spaces. $retval .= "$_\n"; $_ = ; last if not defined $_; } close(IN); return $retval; } # Extract all Octave Texinfo documentation comments from an m-file # Returns an arrayref of extracted blocks, with each block being # a hashref with keys "node" and "block". sub extract_multiple_texinfo_blocks_from_mfile { my ($mfile, $namespace, $auto_namespace) = @_; my $retval = ''; my $file_node_name = basename($mfile, ('.m')); my $fh = IO::File->new($mfile, "r") or die "Error: Could not open file $mfile: $!\n"; # Skip leading blank lines while (<$fh>) { last if /\S/; } # First block may be copyright statement; skip it if (m/\s*[%\#][\s\#%]* Copyright/) { while (<$fh>) { last unless /^\s*[%\#]/; } } # Okay, now detect all Texinfo comment blocks # # This is currently broken: I'm using @node lines in the Texinfo to indicate node # starts, but the @node and @section/@subsection/@subsubsection are emitted automatically # by mktexi.pl. my $do_prepend_ns = ($auto_namespace eq 'yes'); my @blocks; my $block; # the current block my $in_block = 0; my $line; my $node; while (<$fh>) { my $line_num = $fh->input_line_number(); if (/^\s*## -\*- texinfo -\*-/) { # block start if ($in_block) { push @blocks, { node => $node, block => $block}; } $block = ""; $in_block = 1; # Grab next line so we can detect node name $line = <$fh>; $line = strip_mfile_block_line ($line); if ($line =~ /^\s*\@node (\S*)/) { my $node_basename = $1; if ($do_prepend_ns) { $node = prepend_namespace($namespace, $node_basename); } else { $node = $node_basename; } } else { # For back-compatibility, the first block may take the file as its node name # Only the first block! Otherwise you'd have collisions. if ((scalar (@blocks)) == 0) { $node = prepend_namespace($namespace, $file_node_name); } else { die "Found non-first block with no \@node statement in file $mfile at line $line_num\n"; } $block .= "$line\n"; } } elsif (/^\s*##\s/) { if ($in_block) { $line = strip_mfile_block_line ($_); $block .= "$line\n"; } } else { if ($in_block) { push @blocks, { node => $node, block => $block}; $block = ""; $in_block = 0; } } } my $line_num = $fh->input_line_number(); if ($in_block) { push @blocks, { node => $node, block => $block}; $block = "-*- texinfo -*-"; $in_block = 0; } my $n_blocks = scalar @blocks; return \@blocks; } sub strip_mfile_block_line { my ($line) = @_; $line =~ s/^\s*##\s?//; # strip leading comment characters $line =~ s/[\cM\s]*$//; # strip trailing spaces. return $line; } # Extract all Octave Texinfo documentation comments from a C++ oct-file # source file. # Returns an arrayref of extracted blocks, with each block being # a hashref with keys "node" and "block". sub extract_texinfo_from_cxxfile { my ($file) = @_; open(IN, $file) or die "Error: Could not open file $file: $!\n"; my @blocks; while () { # skip to the next defined Octave function next unless /^DEFUN_DLD/; # extract function name /\DEFUN_DLD\s*\(\s*(\w+)\s*,/; my $function = $1; # Advance to the comment string in the DEFUN_DLD # The comment string in the DEFUN_DLD is the first line with "..." $_ = until /\"/; my $desc = $_; $desc =~ s/^[^\"]*\"//; # Slurp in C-style implicitly-concatenated strings while ($desc !~ /[^\\]\"\s*\S/ && $desc !~ /^\"/) { # if line ends in '\', chop it and the following '\n' $desc =~ s/\\\s*\n//; # join with the next line $desc .= ; # eliminate consecutive quotes, being careful to ignore # preceding slashes. XXX FIXME XXX what about \\" ? $desc =~ s/([^\\])\"\s*\"/$1/; } $desc = "" if $desc =~ /^\"/; # chop everything if it was "" $desc =~ s/\\n/\n/g; # insert fake line ends $desc =~ s/([^\"])\".*$/$1/; # chop everything after final '"' $desc =~ s/\\\"/\"/; # convert \"; XXX FIXME XXX \\" $desc =~ s/$//g; # chop trailing ... if (!($desc =~ /^\s*-\*- texinfo -\*-/m)) { printf STDERR ("Function %s (file %s) does not contain texinfo help:%s\n", $function, $file); } push @blocks, { node => $function, block => $desc}; } return \@blocks; } sub get_package_metadata_from_description_file { my $description_file = "../DESCRIPTION"; unless (open (IN, $description_file)) { die "Error: Could not open file $description_file: $!\n"; } my ($key, $value, %defn); while () { chomp; next if /^\s*(#.*)?$/; # skip comments if (/^ /) { die "Error: Failed parsing $description_file: found continuation line before any key line: \"$_\"" unless $key; # continuation line my $txt = $_; $txt =~ s/^\s+//; $value .= $txt; } elsif (/^(\S+)\s*:\s*(\S.*?)\s*$/) { $defn{$key} = $value if $key; ($key, $value) = ($1, $2); } else { die "Error: Failed parsing $description_file: Unparseable line: \"$_\""; } } $defn{$key} = $value if $key; return \%defn; } # extract the first "real sentence" from a function (or classdef?) doco texinfo block sub first_sentence { # {{{1 my ($desc) = @_; my $retval = ''; my $line; my $next; my @lines; my $trace = 0; # $trace = 1 if $desc =~ /Levenberg/; return "" unless defined $desc; # Run the texinfo through makeinfo to get plain text my $cmd = "makeinfo --fill-column 1600 --no-warn --no-validate " . "--no-headers --force --ifinfo"; open3(*Writer, *Reader, *Errer, $cmd) or die "Error: Could not run makeinfo: $!"; # I have no idea what this @macro seealso thing is doing -apj 2024-02-05 print Writer "\@macro seealso {args}\n\n\@noindent\nSee also: \\args\\.\n\@end macro\n"; print Writer "$desc"; close (Writer); @lines = ; close (Reader); my @err = ; close (Errer); # I think this &WNOHANG needs 'use POSIX ":sys_wait_h"' to work right? -apj 2020 # waitpid (-1, &WNOHANG); waitpid (-1, 0); # Display source and errors, if any if (@err) { my $n = 1; foreach $line ( split(/\n/,$desc) ) { printf "%2d: %s\n",$n++,$line; } print ">>> @err"; } # Skip prototype and blank lines while (1) { return "" unless @lines; $line = shift @lines; next if $line =~ /^\s*-/; next if $line =~ /^\s*$/; last; } # Try to make a complete sentence, including the '.' if ( "$line " !~ /[^.][.]\s/ && $#lines >= 0) { my $next = $lines[0]; $line =~ s/\s*$//; # trim trailing blanks on last $next =~ s/^\s*//; # trim leading blanks on next $line .= " $next" if "$next " =~ /[^.][.]\s/; # ends the sentence } # Tidy up the sentence. chomp $line; $line =~ s/^\s*//; # trim leading blanks on line $line =~ s/([^.][.])\s.*$/$1/; # trim everything after the sentence print "Skipping:\n$desc---\n" if $line eq ""; # And return it. return $line; } # 1}}} 1; apjanke-octave-tablicious-8a1b10f/doc/README.md000066400000000000000000000303431515050116100211640ustar00rootroot00000000000000# README - Tablicious documentation tools This is the README for the doco toolchain of this Octave package. It goes with the files `mktexi.pl`, `OctTexiDoc.pm`, and `Makefile`, all of which should be found in the `doc/` subdirectory of an Octave package. It is not documentation for the Tablicious Octave package itself. This is Andrew Janke’s summary of how the doco generation tools in this `doc/` directory work. The stuff in here is not the standard Octave Forge ("OF") doco toolchain. This is Andrew Janke’s enhancement of it to support classes and namespaces. It first appeared in Andrew’s Tablicious package in April 2019. Andrew took a copy of it from some other OF package and modified it. ## Requirements Texinfo 6.0+, Perl, and Perl CPAN modules as described below. This toolchain requires Texinfo version 6.0 or newer. Might even need 7.x as of 2023. Texinfo versions 5.x and older will result in a lot of errors complaining about node relationships and whatnot. If you're on macOS and installed the newer Texinfo using Homebrew on a system that also has Texinfo tools from another source (like maybe MacTeX/TeXLive?), you may need to do a `brew link --overwrite texinfo` to force-link them, uninstall the other Texinfo-providing program, or do something else to reconcile that conflict. Perl modules, which must be installed in your perl environment: * `Moose` * `Data::Dumper` * `Date::Parse` * `Text::Wrap` * `IPC::Open3` Sorry for the dependencies. To install these, run `perl -MCPAN -e shell` (you may need `sudo` on that, depending on your Perl installation's setup), and in that shell, run `install Moose Data::Dumper Date::Parse Text::Wrap IPC::Open3`. On macOS, you'll probably want to install a Perl via Homebrew or MacPorts instead of using the system Perl for this. ## How it works ### The files Here’s a list of the files involved in the doco toolchain. In this document, `` means the package name. E.g. `chrono` or `tablicious`. Human-maintained input files: * `../DESCRIPTION` * `../INDEX` * `src/` - human-maintained doco contents * `src/.texi` - texinfo manual parts that aren't generated from the code's inline helptext * `.qhcp` - control file for producing the QHelp files * `../inst/**/*.m` - source files with embedded documentation Doco toolchain script files: * `Makefile` * `mktexi.pl` * `OctTexiDoc.pm` - module with `mktexi.pl`'s implementation Generated intermediate files: * `.texi` - combined Texinfo source * `.log` * `.qhp` * `.dvi` * `TIMESTAMP` Generated final output (user-consumable) target files: * `.html` * `html/*` * `.info` * `.pdf` * `.(qch,qhc)` - QHelp files for Octave GUI's doc browser `html/*` is a final output file because it's used both for packaging up into `.qch` (the QHelp collection file), for optional use in package websites and other locations, and for local reading. Maybe `.texi` should be considered a final output file, so end users can render it to other non-provided formats if they want? The `.{html|info|pdf|qch|qhc}` files are checked in to source control so they are included in the package distribution. Technically, since they are entirely generated from the source and human-maintained index files, they could be re-generated as part of the `pkg install` step for this package. But that would require that users install heavyweight tools like Qt and TeX which are required for their generation, which is undesirable, and also run the doco build to make them usable. I'd rather you be able to run Tablicious and see all the doco directly from just a cloned repo, and not require a build/install step. So we just have the package maintainer generate them at package authoring time and include them in source control and the package distribution file. #### Developer note This toolchain used to have more steps, broken out into `mkdoc.pl`, `mktexi.pl`, and `mkqhp.pl`. `mkdoc.pl` would scan the source files and build a function index with the extracted texinfo blocks; `mktexi.pl` would take that function index and build `.texi`, and `mkqhp.pl` would take `.texi`, `../INDEX`, and the function index and build the `.qhp` file. I changed the code to unify these three steps into a single `mktexi.pl` because I needed to use a multi-level function/topic index that didn’t fit into the existing function index file format, and doing everything in-memory in a single process simplified the code and resulted in faster execution times. ### The process * You launch `make doc` using the `Makefile`. It causes the rest to happen. * `mktexi.pl`: * Scans the source files (in `../inst` and `../src`) and extracts their embedded texinfo blocks * Combines that with `src/.texi`, `../DESCRIPTION`, and `../INDEX` to produce the unified actual Texinfo document `.texi` * Does some substitutions on stuff in `src/.texi` * `@DOCSTRING(...)` gets special handling * `%%%%PACKAGE_VERSION%%%%` gets replaced with the version from `../DESCRIPTION` * Generates a `.qhcp` index file that can be used to build a QHelp collection from the generated HTML help files * The rest of `make doc` uses standard Texinfo and Qt tools to generate target help files in various formats * You check the resulting files in to source control if they’re good ## Writing Octave Texinfo documentation Here’s how to write the variant of Octave Texinfo doco that’s supported by this package’s doco toolchain. Octave Texinfo doco is a way of writing embedded user documentation as part of Octave `.m` or `.cc` source files. It’s like Perldoc or Javadoc. ### Texinfo doco format The Texinfo doco in a source file is comprised of one or more Texinfo comment blocks. A regular function file has exactly one Texinfo block. A classdef file can have multiple Texinfo blocks. A class method file has one Texinfo comment block. Each Texinfo block becomes one topic or subtopic in the generated Texinfo documentation. #### Texinfo in `.m` files In `.m` files, a Texinfo block is comprised of a contiguous run of comment lines each starting with “`## `” (that’s two octothorps (`#`) followed by a space), with optional spaces before the first “`#`”. The first line in a Texinfo block must be “`## -*- texinfo -*-`”; that’s how the parser knows it’s a Texinfo block instead of a regular comment. The Texinfo blocks contain Texinfo markup. Each block should contain the contents of a single node. In a regular function `.m` file, there is a single Texinfo block that documents the function. It should be placed between the initial Copyright header and the `function` line. There is no need to have a `@node` statement in this block; it is generated implicitly. In a classdef `.m` file, there is a main Texinfo block that documents the overall class, and then one or more additional Texinfo blocks that document individual methods, events, or other things within the class. The main (class-level) Texinfo block should precede the `classdef` line. It should not have a `@node` statement. The additional (method-level) Texinfo blocks may be placed anywhere throughout the file, but typically should immediately precede the definition of the method or other thing they are documenting. The additional Texinfo blocks _must_ have a `@node` statement as their first line. The node name must be the class-qualified method name in format `.`. For classes that are within a namespace (package), the node name must _not_ include the namespace as a qualification. For method definition files inside a `@` directory, there should be a single top-level Texinfo block, immediately preceding the method definition. As with a function definition file, it should not have a `@node` statement. Neither the top-level nor additional blocks should include `@section`, `@subsection`, or `@subsubsection` statements. Those are added implicitly by the doco generation tools. Currently, each top-level block is turned into a `@subsection` and each method-level block is turned into a `@subsubsection`, but that may change. #### Texinfo in `.cc` files Texinfo blocks in oct-file `.cc` source files are included in comment strings inside the `DEFUN_DLD` macro call. #### Formatting Texinfo elements These are the conventions that Andrew settled on while documenting the Tablicious package. They seem to work okay. Functions should be documented with `@deftypefn` and optionally `@deftypefnx` statements. Top-level class Texinfo blocks should contain: * a `@deftp {Class} ` that documents the overall class * `@deftypeivar ` items that document the user-visible properties Method-level Texinfo blocks should have `@deftypefn {} ` items that document the method, with optional `@deftypefnx {} ` items to document alternate calling forms. The `` should be: * `{Constructor}` for constructors * `{Method}` for instance methods * `{Static Method}` for static methods Use `@var{...}` for input and ouptut function parameters. Use `@code{...}` for class, method, and function names. For functions that take trailing name/value option pairs, use a `@deftypefnx` with the signature form `(@dots{}, @code{'Option'}, @var{Option})` to document them. The first thing in each function, class, or method doco block should be a one-sentence summary of what it does. This sentence will be extracted and used in other places in the final documentation. In class doco, use “`obj`” as the conventional name for the method dispatch object in the documentation, even though you might use “`this`” or something else as the parameter in the actual code. Documentation is viewed from the caller’s perspective, not the implementation’s perspective, so “`this`” makes less sense. ### Examples #### Example: Function documentation Here’s what documentation of the regular (global) function `foonly` should look like. ```octave ## Copyright (C) 2019 John Doe ## ## [...] ## -*- texinfo -*- ## @deftypefn {Function} {@var{out} =} foonly (@var{x}, @var{y}) ## @deftypefn {Function} {@var{out} =} foonly (@var{x}, @var{y}, @var{dim}) ## @deftypefn {Function} {@var{out} =} foonly (@dots{}, @code{'Format'}, @var{Format}) ## ## Do the foonly computation on given inputs. ## ## Peforms the foonly computation on inputs @var{x} and @var{y}, optionally along ## dimension @var{dim}. ## ## If the option @var{Format} is supplied, it controls the output format. ## ## @end deftypefn function out = foonly (x, y, varargin) % [...] endfunction ``` #### Example: Class documentation Here’s what documentation of a classdef class named `Example` should look like. ```octave ## Copyright (C) 2019 Jane Doe ## ## [...] ## -*- texinfo -*- ## @deftp {Class} datetime ## ## An example class that does nothing. ## ## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ## ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. ## Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt. ## ## @end deftp ## ## @deftypeivar Example @code{double} x ## ## The x property. Has no semantics. ## ## @end deftypeivar ## ## @deftypeivar Example @code{charvec} format ## ## The format to display @code{x} in. The name of the format this ## defined somewhere else. ## ## @end deftypeivar classdef Example properties x = NaN format = 'default' endproperties methods ## -*- texinfo -*- ## @node Example.Example ## @deftypefn {Constructor} {@var{obj} =} Example () ## ## Constructs a new scalar Example with the default values. ## ## @end deftypefn ## ## @deftypefn {Constructor} {@var{obj} =} Example (@var{x}) ## @deftypefnx {Constructor} {@var{obj} =} Example (@var{x}, @var{format}) ## ## Constructs a new Example with the given @var{x} and @var{format} ## values. ## ## @end deftypefn function this = Example (varargin) % ... endfunction ## -*- texinfo -*- ## @node Example.foo ## @deftypefn {Method} {[@var{a}, @var{b}] =} foo (@var{obj}) ## ## Performs a foo calculation. ## ## @end deftypefn function [a, b] = foo (this) % ... endfunction endmethods endclassdef ``` Note the use of a `@node` line in the method and constructor documentation but _not_ in the class-level documentation. This is required. apjanke-octave-tablicious-8a1b10f/doc/Tablicious.qch000066400000000000000000034500001515050116100224770ustar00rootroot00000000000000SQLite format 3@ .  oA $ 3 ? oX''qtableMetaDataTableMetaDataTableCREATE TABLE MetaDataTable(Name Text, Value BLOB )t ##/tableFolderTableFolderTableCREATE TABLE FolderTable(Id INTEGER PRIMARY KEY, Name Text, NamespaceID INTEGER )| ''7tableFileNameTableFileNameTable CREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER, Title TEXT )t ++tableFileFilterTableFileFilterTable CREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER )f '' tableFileDataTableFileDataTable CREATE TABLE FileDataTable (Id INTEGER PRIMARY KEY, Data BLOB ) 77#tableFileAttributeSetTableFileAttributeSetTable CREATE TABLE FileAttributeSetTable (Id INTEGER, FilterAttributeId INTEGER )33/tableContentsFilterTableContentsFilterTable CREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER ){''5tableContentsTableContentsTableCREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB )x--#tableIndexFilterTableIndexFilterTableCREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER ) !! tableIndexTableIndexTableCREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT )h##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )h)) tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY,Name TEXT ) Coctave.community.tablicious   hd- Q  U  T  K  s B tU8e>h; `?S,g@_0aN/#Y'' duration.charduration.charX durationdurationW dispstrsdispstrsV!! discretizediscretizeU daysdays'T++ datetime.ymdhmsdatetime.ymdhms!S%% datetime.ymddatetime.ymd#R'' datetime.weekdatetime.week-Q11 datetime.timeofdaydatetime.timeofday -P11 datetime.proxyKeysdatetime.proxyKeys -O11 datetime.posixtimedatetime.posixtime 5N99 datetime.posix2datenumdatetime.posix2datenum #M'' datetime.plusdatetime.plus 3L77 datetime.ofDatestructdatetime.ofDatestruct-K11 datetime.ofDatenumdatetime.ofDatenumJ## datetime.nedatetime.ne%I)) datetime.minusdatetime.minusH## datetime.ltdatetime.lt-G11 datetime.localtimedatetime.localtime+F// datetime.linspacedatetime.linspaceE## datetime.ledatetime.le%D)) datetime.isnatdatetime.isnat%C)) datetime.isnandatetime.isnan-B11 datetime.ismissingdatetime.ismissing-A11 datetime.isbetweendatetime.isbetween!@%% datetime.hmsdatetime.hms?## datetime.gtdatetime.gt'>++ datetime.gmtimedatetime.gmtime=## datetime.gedatetime.ge<## datetime.eqdatetime.eq+;// datetime.dispstrsdatetime.dispstrs #:'' datetime.diffdatetime.diff!)9-- datetime.datevecdatetime.datevec"+8// datetime.datetimedatetime.datetime#/733 datetime.datestructdatetime.datestruct$+6// datetime.datestrsdatetime.datestrs%)5-- datetime.datestrdatetime.datestr&5499 datetime.datenum2posixdatetime.datenum2posix')3-- datetime.datenumdatetime.datenum(G2KK datetime.convertDatenumTimeZonedatetime.convertDatenumTimeZone)%1)) datetime.colondatetime.colon*!0%% datetime.NaTdatetime.NaT/ datetimedatetime+".'' datasets.loaddatasets.load"-'' datasets.listdatasets.list0,55 datasets.descriptiondatasets.description+ containscontains,* colvecfuncolvecfun-)!! cell2tablecell2table.3(77 categorical.undefinedcategorical.undefined//'33 categorical.summarycategorical.summary0-&11 categorical.stringcategorical.string17%;; categorical.squeezecatscategorical.squeezecats2/$33 categorical.setcatscategorical.setcats37#;; categorical.reordercatscategorical.reordercats45"99 categorical.renamecatscategorical.renamecats55!99 categorical.removecatscategorical.removecats6/ 33 categorical.missingcategorical.missing7377 categorical.mergecatscategorical.mergecats87;; categorical.isundefinedcategorical.isundefined9377 categorical.isordinalcategorical.isordinal:/33 categorical.isnannycategorical.isnanny;377 categorical.ismissingcategorical.ismissing<599 categorical.iscategorycategorical.iscategory=-11 categorical.doublecategorical.double>155 categorical.dispstrscategorical.dispstrs?/33 categorical.cellstrcategorical.cellstr@599 categorical.categoriescategorical.categoriesA7;; categorical.categoricalcategorical.categoricalB/33 categorical.addcatscategorical.addcatsC## categoricalcategoricalD calyearscalyearsE calmonthscalmonthsF7;; calendarDuration.uminuscalendarDuration.uminusG599 calendarDuration.timescalendarDuration.timesH377 calendarDuration.pluscalendarDuration.plusI7 ;; calendarDuration.mtimescalendarDuration.mtimesJ5 99 calendarDuration.minuscalendarDuration.minusK5 99 calendarDuration.isnancalendarDuration.isnanL= AA calendarDuration.ismissingcalendarDuration.ismissingM; ?? calendarDuration.dispstrscalendarDuration.dispstrsN9== calendarDuration.dateveccalendarDuration.datevecOKOO calendarDuration.calendarDurationcalendarDuration.calendarDurationP)-- calendarDurationcalendarDurationQ caldayscaldaysR## array2tablearray2tableS NaTNaT NaSNaS >Y   V ,html/index.html2Tablicious for GNU Octave,html/Introduction.htmlIntroduction2html/Getting-Started.htmlGetting Started<html/Table-Representation.html(Table Representation8html/Table-Construction.html$Table Construction.html/Tables-vs-SQL.htmlTables vs SQLLhtml/Date-and-Time-Representation.html8Date and Time Representation0html/datetime-Class.htmldatetime Class>html/Datenum-Compatibility.html*Datenum Compatibility(html/Time-Zones.htmlTime Zones8html/Defined-Time-Zones.html$Defined Time Zones&html/Durations.htmlDurations0html/duration-Class.htmlduration Class@html/calendarDuration-Class.html,calendarDuration Class<html/Validation-Functions.html(Validation Functions6html/Example-Data-Se   c~ytoje`[VQLGB=83.)$ ysmga[UOIC=71+%  } w q k e _ Y S M G A ; 5 / ) #     { u o i c%L xr7(ǖǦDRwɌdfmGؘFkT]ծ F1v#f{Q$_fR@UjR9L$/ջ5[V(z!Ʉl|įvruxf˸(yU]-&Ov$WIVqV)y>4%y]3^I{Eqb?݅ټOqGX%%*EaWT9Y<)"GӸJVЊuK/`s]g/9HJfA(΄ʼԆqJ{=,"6|,(LH2Ygs^HyR ٸM+#<V"w 'sR- FbXg4:(fWP\qeXKdP)jK`':>{ez#t垘UR&{ k _y9+5"6&0j3~U9P}yiqhUb'^_-pݡ6i>7Vu7|?AO^ER֙韪tǩ[HdU Br[V@-۬,0=\HqB$v4Ij-9, +M|4tsdQ3"Ox6e *S{q/>b_dr[ɞ:G b%?}}ZlL@L@O9z%,Df͛H1/q?Ga >hXSK3Ma[?O'Uc3`lew6ݚBA'"g%GSpS=W''(".;:`ROLsR*v.wyTC% xa9XLGs|]gեE p5ߙM؈xr+[zɏخnߡìQ[G,`VA7߿_fܢ`=aiRߎ2Q^6NW"{+B$V?cF;wpu1Aڻ.zD?A@(O޾o~7[PNFL'pv`L<۪gAb c5K|Λ ?E^G%/Ax{ a@Wkh0C.rK;O25s`O6`|*Z`}=EH'JZ<6U-\ y%|?#%4̡b6W~Áv^E#z͊L FMnOl%D4ɢWz *2އJ~f[!7i͙N7c]yșߏ@!醩ZB4QshٝTtkI*Kςg΂f͂d̂b˂`ʂ^ɂ[ȂYǂWƂUłTĂRÂP‚NKHECA>;8641.,*)&#! |yvtroljhfda_\ZWTQNKHFDB@?=;9630-+)~'}%|"{!zyxwvutsr q ponmlk~j|izhxgufsepdnclbiag`e_d^b]`\^[\ZZYYXWWUVSUQTOSMRKQIPGOENCMAL?K=J;I9H7G5F3E1D/C-B,A+@)?'>&=%<$;":!9876543210 / .-,+ = ; C e  S CU9kWO!mkV0 [_html/tblish_002edataset_002erivers.html0tblish.dataset.rivers (Tablicious v0.4.7)R/ W[html/tblish_002edataset_002erock.html/tblish.dataset.rock (Tablicious v0.4.7)T. Y]html/tblish_002edataset_002esleep.html.tblish.dataset.sleep (Tablicious v0.4.7)\- aehtml/tblish_002edataset_002estackloss.html-tblish.dataset.stackloss (Tablicious v0.4.7)T, Y]html/tblish_002edataset_002estate.html,tblish.dataset.state (Tablicious v0.4.7)h+ qmhtml/tblish_002edataset_002esunspot_005fmonth.html+tblish.dataset.sunspot_month (Tablicious v0.4.7)f* okhtml/tblish_002edataset_002esunspot_005fyear.html*tblish.dataset.sunspot_year (Tablicious v0.4.7)Z) _chtml/tblish_002edataset_002esunspots.html)tblish.dataset.sunspots (Tablicious v0.4.7)T( Y]html/tblish_002edataset_002eswiss.html(tblish.dataset.swiss (Tablicious v0.4.7)V' [_html/tblish_002edataset_002eTheoph.html'tblish.dataset.Theoph (Tablicious v0.4.7)X& ]ahtml/tblish_002edataset_002eTitanic.html&tblish.dataset.Titanic (Tablicious v0.4.7)`% eihtml/tblish_002edataset_002eToothGrowth.html%tblish.dataset.ToothGrowth (Tablicious v0.4.7)Z$ _chtml/tblish_002edataset_002etreering.html$tblish.dataset.treering (Tablicious v0.4.7)T# Y]html/tblish_002edataset_002etrees.html#tblish.dataset.trees (Tablicious v0.4.7)d" imhtml/tblish_002edataset_002eUCBAdmissions.html"tblish.dataset.UCBAdmissions (Tablicious v0.4.7)f! kohtml/tblish_002edataset_002eUKDriverDeaths.html!tblish.dataset.UKDriverDeaths (Tablicious v0.4.7)T  Y]html/tblish_002edataset_002eUKgas.html tblish.dataset.UKgas (Tablicious v0.4.7)b gkhtml/tblish_002edataset_002eUKLungDeaths.htmltblish.dataset.UKLungDeaths (Tablicious v0.4.7)` eihtml/tblish_002edataset_002eUSAccDeaths.htmltblish.dataset.USAccDeaths (Tablicious v0.4.7)\ aehtml/tblish_002edataset_002eUSArrests.htmltblish.dataset.USArrests (Tablicious v0.4.7)f kohtml/tblish_002edataset_002eUSJudgeRatings.htmltblish.dataset.USJudgeRatings (Tablicious v0.4.7)t y}html/tblish_002edataset_002eUSPersonalExpenditure.htmltblish.dataset.USPersonalExpenditure (Tablicious v0.4.7)T Y]html/tblish_002edataset_002euspop.htmltblish.dataset.uspop (Tablicious v0.4.7)Z _chtml/tblish_002edataset_002eVADeaths.htmltblish.dataset.VADeaths (Tablicious v0.4.7)X ]ahtml/tblish_002edataset_002evolcano.htmltblish.dataset.volcano (Tablicious v0.4.7)^ cghtml/tblish_002edataset_002ewarpbreaks.htmltblish.dataset.warpbreaks (Tablicious v0.4.7)T Y]html/tblish_002edataset_002ewomen.htmltblish.dataset.women (Tablicious v0.4.7)` eihtml/tblish_002edataset_002eWorldPhones.htmltblish.dataset.WorldPhones (Tablicious v0.4.7)Z _chtml/tblish_002edataset_002eWWWusage.htmltblish.dataset.WWWusage (Tablicious v0.4.7)R W[html/tblish_002edataset_002ezCO2.htmltblish.dataset.zCO2 (Tablicious v0.4.7)F GShtml/tblish_002edatasets.htmltblish.datasets (Tablicious v0.4.7)P Q]html/datasets_002edescription.htmldatasets.description (Tablicious v0.4.7)B COhtml/datasets_002elist.htmldatasets.list (Tablicious v0.4.7)B COhtml/datasets_002eload.htmldatasets.load (Tablicious v0.4.7)X Yehtml/tblish_002eevalWithTableVars.htmltblish.evalWithTableVars (Tablicious v0.4.7)X  ]ahtml/tblish_002eexamples_002ecoplot.html tblish.examples.coplot (Tablicious v0.4.7)d  mihtml/tblish_002eexamples_002eplot_005fpairs.html tblish.examples.plot_pairs (Tablicious v0.4.7)T  Y]html/tblish_002eexamples_002eSpDb.html tblish.examples.SpDb (Tablicious v0.4.7)D  EQhtml/tblish_002esizeof2.html tblish.sizeof2 (Tablicious v0.4.7)V  [_html/tblish_002etable_002egrpstats.html tblish.table.grpstats (Tablicious v0.4.7)6 3Ghtml/timezones.htmltimezones (Tablicious v0.4.7)8 5Ihtml/todatetime.htmltodatetime (Tablicious v0.4.7)2 /Chtml/vartype.htmlvartype (Tablicious v0.4.7)0 -Ahtml/vecfun.htmlvecfun (Tablicious v0.4.7). +?html/years.htmlyears (Tablicious v0.4.7)2 /Chtml/Copying.htmlCopying (Tablicious v0.4.7)& +/tablicׂ7ւՁIԁ[0  doc !qchVersion1.0]=r KbzVRrECJS[TQ|bSTy=s[=QŢhpߠc?&o t,g?)B<i\8mf!GNGNUte!5DHR+YA8t1M }kjDХcibMI3i!5=ESV&cN"tFΌc~` c?ADjR0P# `v/ۦX4.IcRc "{S"dB6ূ!$8 ]firba}/^YM&f] >cȂД)ocYGHn6 thdBvA4YCnX[^M{Т;~Eb|ջX4.GxkLѥh'G%!X`j!Wh ,t[t k ȺV'U"vU+sG;4IwDt8 |}'BE頡ƘKC\eb}@QiF/̰uWkD" ȸT{ Ȓ4MJw΂Pt7t򱴳dEĤHE㈡u% )Q2Roo;72:юiJc |s#o!*޵U釨Ꮱ3c]`Ibf)0(aȟ2 ^g$"60:փ|DHR3)0sEya"C> "O~p<;,-},yAό-Kv/ =C 0GRE@ ?1b-Qt :!"d/2EM' Tw{)u2eCL``MPǭ`axȬaxqan_kx[hG!3?!}۝ 5w| (>f o=g ?W<6fU ~ʬAxsÁ3>{Y)I'Fg@aA{ZHO-GW&H2OYY$G[9qX¿ yb<5A͓lzyLVZW?E'lVR/u56Qz̏CH[Fe d45c&R@#vA5%YD ]aT-,V'EƁI#ē5q&rabYWkƽrDj̮h\0wK>F):4PCfN@xhxg/d"DvSR-Td#JFQ**Ћ&Ppoya!]OtP ,d^!iiJ 4?^" 4 = [ u)qb)pX+)BMH]6fU)=i(QtҴhp@;QըM8xOJ4%WD90ӭ"1NH94`H: %TF._3i4PC(ۊZi9l3"K4¤^2^hZK%YhY!#〳`c3"HQ9PTd23L2Z&NSJBd %qRE큢֔뵏Qi vʑ=!Y]W >@װzIy;59d;&ZSFN9psj#'RMN piGt&*Eg$?xim1ENjPS{Q<+/)QjȪq.Ji(2|c\C=A4' U b§ tV%1JO4@n[(}:DCr4eցIk|d&(Cg}$&E~D-$p̜Ԡ"lc=뀒Mwc(M:UjrO,rAmNQ)>(a :3c%%,(Q:D.T*Hьw]U( F*=$wM@y 9Ae$ x!ec㳀m'e*OlHxjRCݫmia;BudQ/ǟZG<àGP[w 8EinA@f%?"?hp'nMHV` җ`GvJ׳T`GvJm%v2,0LP͏#C myz֌|8Bʷ倗z9ā8ʷ.AF[`ː_NR-+(|X|5[Hen'rQCli8͐#Uȶ|8f$`5K5l~PG m#78O͍X͐#wMقg!\5)GP`ԶY,e|HNiyL[s?I(̓#yLAD0Gb˔A!4\94/',0HsQ*ߚ:+9pA/2rTМ9BUUp0H?G*P${IivI@f< p,o%8PG H83Rw i6Q+!#ϫefj~k@mSUpn]8bX\*tL#|[~89]˳ANl`͑#-9W_ZfCkylniiVKsmvqd 5['/g@ P͔# KTൠ$Ǒf{nTO mAkAmn`Y5^¬9%ͪ#ýr\0hN ͑#ǩ|[~|65sDٖ<`\ӌ8\Bly\?vqdv5C ͆#|[~ʋt2φ q5O?TΣ8bZl/cFHf,}M7:j8tB$rV$k.ɑx˛@f@[H4Ґ)S;hqh=O؄+?S(ovq4#v~_īuE#g:ͽ>0 dOoVutF`adKN֯Q.`a É|:HҒW~'\m:-ָEm J'+f$2+F2> l`Oڬ\@CX̼m' O9~x k]xYP2Zx+(}ՁVlYN*Տ ;OΚT0[t/*F7YUz&U)&8$.ыQ=c 7BGhr%9hx6eo+x B# $$d6}@@PK5Y%[ݬh/i~u/yVS*Ri/LHUA΃VG}79zQBw3;pk?I9i`_"~.𽸷<84}+0X H,X5 olDy=M7"ٸckp̘sj_"Wy} yJw&Ւ8lɵ\;x{"=ӵ9E~-Ye\ªx:+aģdd@{ e^E":5 ݌H[HsWLlWYL5Е#F]%; aBչ;VKЩD%d=' ;Q}1Ø OIS-qs9y>hz]#yG{yfov`-yf GWeT <[7;~J!39)g?1KP/0eKb'.<Ěs6ݘCMc>.fP ALruo.^: fpD4!o 020.֕l"p҄l1k=JhQ #.ٙ11OPD 5M3z yd8 g+1+D9)}2)>rEZ=od-_7*{v>zN83b TU.ݻw SO}Xݓ://ZӒgI?S×= uTDA*iuғ|QBB_3lܲ6LkМY  Qi6Ln0LxY ڠhʧ.~@UtE ҧPj=SAg& P6wYQ",? y[ |ZUԭ9V)*;-[Fb"G T :'[ c|.T@ N1) 6LVtU1K%^A=Nփ'':|Fy]-u}֨CU gBR4<Rm (VcD'hzSgD 9I@'rUrؑ& *VS0ۻ"uB Y76;F;|+1 L󄗰ȍޕ+qƭO dJq݃UJ=ɻלuK0O+EGڒVPw ,QhPt{P `BLN9NWGv,T ؁-!HJ~_ys&DUN b9QtV"Uޜ.Ŵ4q,pf\zXa.խ]=iX{3AG8Ԏ(Z h/B wh`8޻߆ UuKmLQO#(PTpoŪy \FjCQEis`o-z%Ee:"CIn4H. ҙ^ǃ<-הԇUϏ^T?:j9"Z:nuz,+|mV^@Ν߿SWO<Rl7:F>~߿>XpbY so޾}ݛ^&: |3y,>Q(7 wti/v^v=^+EX=sJ'BMŐ~߳?ً{Ϳg~/7'޼wz7x%?N\?p(Jx@<) & fOUs918WIw1%·X/є^Dl^cLh'ӏF}ݰ,CjtfLi\@X{4F=IUF(, ~?5w_ƉI̋J8;v -n͆F;{p ڍFH.z&TSrcpDʫW>Pb)L7xЩǞe}+`|3TT#Q 4gaoj}v3b%eQk3/.o&Gxi4?*yNug㤉 OuGq^ ^m@*L|nǥYCwT=ڵ7#'T精ɇW "6.v#:޲@#D X3O"O3]uVʰfO?W"^ b!ZSt gJɱБןl$4pgK-k[SSQ"%ҋ+]ְWCؼ6. aVt$"U42WB9K>>\B%1CLH~GF_pȔ16X8!Īn]E qh.8Hme]ΣBKʘ^* k;=({@JGMQHI\Cb+f1?G=@# ߘ/DaU]-!Asa&yOLܥSF f%EjsyYByT>L993WƮ#9Ëfb^C0ky`YL{lgJ`iRF ) F[ݹe_ %}yWOŜBvBzTK B ko!XWŞ ܌kywJ+;_ߟ?h2`OC>ԛgN7(^sƋ"/)gx kʱ5̼ww~.{ϻ~/o.3Z?|l|F62޶x urUzZsZ30y6db8ǡ 3[h1e-1mwA3mfl Xz%zM3ƃ{&Q5dܗr^(NKP¸b2J%UR>K.4\4]!bx19c"Ƶo@:o o>f,˲&|$szd9{udQw { )tY.mIUNۗR^ J`wީ7>o|̽[~?G;CoF;R/szGoif]glbpq0[]Q[jČXKށsŋJtx"/; .wÒ?{0h bL#!l>x1%7AgKy= fY"_:44'QniQChy~9cZ[%R$yq?zv>LiÄlXE l3HoG u%+urU7wܞb *,m4ǧӜɎ-/M Ca;Bށ9!ívQCދe7,4q¿\H֋k/ڑb8KoۼE4aȗ+ʵ៛ :5jՑPҠ?XBɑ8-s烹^LUt觸@7ً{#[M~Z΀QGb{m)nluP%\SV"󸐦y!}m7wU䑙eɚaRn!fShiHC̓9ѣY^ME`L*A t!0˝ t0jX~׋'n xq 4~̚y'8-bpt 3_3L%q)% ԎP-;t+4y_>fo@[YWt1pS(5I$D%DBQvE{i"ŽpPURE\&$QDѮS)#1Ω>)hj5S'r0bpzSq] Ujމ@ b}L>@)"J`#,bcAk!%2]άR'؂H\^<]$H#鮨B)ONyݑB#rOB8rT*3.gǾf䙼۔zbP5:,a 7;xjL*QsE_oj)bfa3dq%Cs؎L"IexMoF NB|dRƲ^bWt jpvɦCCPiY<[X+D"C6vycI;M%?!.O4-qo2vJ+FYAa\ np);NyWmXRSnwdGEz5'e !:Oʑ2;瑋I\'b"#"wٗO 鳨lhg@G;l#Z=Rdw҃$l;pvF170eT}%-fޘGd(elG4"b{UhL\ytNYbU݄EW?'+"\Roe m&=8/W!5&'4P3(l.N `G3XD##&BG6-g{8ްb"0*L|GSq+f7͆+E{cڹViih pE?{Q&wGQ,$r"hUP<ؓi&UQUw|EE^IS2!Bo3Fukg5fTy$FfGiIEĀqwRXpTtG5֕w?>9a*ɲ)bTs@^33A-_doûW0"mfbf58֓".؏C~8_o&GpݾgDώ߿F?f~~@wb @,"\Dm? ]w)~U/Hb^D zZC*xEd1oGiax)IW/Zfq2_%{kܰ~s]gLi%;Ƞ!ȅ)S3c ʗfs,~hO"|LP9nv,0Hcl ޟ88Ǿ>js(k,1JBøc&g'F|ot 䍠N+㖰!-LRqJx=S%)eC/b0+b%u5{_` S;ahK+@J~pn0:f髓6|D ]G}&zOiIvSĢԟ8BmMz F< mY1 >V1kzl ~ֹ.'vM szxu8 GV י-u&z*bxH<, =0=,)URBXj 0[Oe{鱽Tݦ>/Y/ɸp_j\p3mHڒ2CzyV$rm \]oMM lF韶aAm?2a?aC9mN *xO} v ]yǏ% CCLZDGQe#&ed&>NCe|Gw5~GuW]Q]yk bUe1fWXVeWBc({IŗEˁsove YUx#C;&oe"YI1jS&Z3"Wc85#+N2yhIQ<&jX*ht<Ӽ TGY򒉏?d maHhxXtojODdZiG(a- xIA0Mw ". 94gBc [&25jF 1+eVߐk%>G[i!c =d!k{oX4FJ S5ѐ}Rge7}a2K kby &c .o/jͤKji?({+ FЄF "P Q1q. [Jj}-~.Ps_ Î/Wgj%4h$ѣ'3dK/."mM@)Iȍ8"sXafxI~BGѽV!QbZuQL+Ls0~%NSӣ蘧)rcQj;m,dqqgɈj;m,]d4#Z;-]4ހ|GE;VX*N GSTTO'%hBNK\ uv]O?6(z;NJb4OޑCJVc"#=|9qEf 1;d0<mR1]Qa΅o+*;&terᅻfE~Nv<ɈqGX$HWG;F]zmό4UP^U|\q6Q:i^wk/`#>1Q.3DJ3Xe-0 b":38i~!ZACĸTnlq8!`XDv,؛$u`z !q%LՖVDtsTcBH|$lDSU[×s͞Csn\FM A~8*Qꦾ7o3ٲn&K00+6p uH=h*!#,qO9v: wGq)H:NZ^cYTw~U +Dmp[N֯ !v;WԊr=6s=K) ~b)Cf} X7W~xHǜ̉3͍nsŮD߭!B PFzu]VQHwF7t1EOCCgN|5kys__ʛQ_in' BvnzP=W|5ڗ4;ao뛻^]#Q a;1۸1L=5Gv}WFp޶;^H+ idhnދkLvna #ɜ/p -]ńF ,m8XlPmH3IvP_k'w^W2W:Y"h<1*c6jVDX=9qhElh< ul5w-.b |~Mr[-(l.9f]K*GV|heǪ#,RK@}0y+m,S' )XQ+GFjEAJdLtt#ig]#RWc:kϘw|oVa\vx H&W g\;Yw֢=KaxYA"wa}6B1)[ܻ[e6n##&X󬤷cu"Y%"r:&\tgq|>ό# D3nGK,EʬC_c pbsv3-pSfKݪuY~z(3YAi'f6jIwFB2]GxgoB\W>K0|y5Yl-2 bV.< J)ʗ: hqdf]OG:Ode/{[R3CV갫_sh/}-o[:ϽH{(.qo<-{vkK,|ֆ+tm1!ʑ}%*S'>]<+TY`hc o r{i|?= HeU^}Grhcx-Jh!+C5Ichbx8>ty,ر~d$rpճ/Y !/Sϗy;ByڌS>clÈ)dpph/v'Kd72Ÿř'ܨF'5᭜LƏ}^^exnk.ݧjϠOӗ!~#1x =$*yP ;1!tyFBWW sF=8 Z?!mK>g;')\iz3$!.!o@`D`U<̐i#X2!iǺ.yiu㥤 )- I0JNA[/i0+F>j &ŴQKǗ;FnVOؙrVxkL=[ c+w`ߟd2R^V9^"Mzhu9 4ɶD{hU4W]gjXRr]V:J7H1ФeNsh9]U\.+sW, "$LV݋bS.n8%!xt}1CA T˶8}ScSD7A Ĩ!r.Z?c\|N6p/*yX5t߁2GU~ɺdos*N_# 4yI?8%dR~&ćFVM&aB閽TI1p!"qĝ5,v}ao2S[ox ڧnO]峽),kDBK)7[![riYdލl:TM 6% C" /0XIXerΡShТp`&4tH!r67H 3FۙC -U(DG&D" kLݤfJޤ|MC>O'AR8 B79.8y=|uw;k}$el7IcZbCF# #0=F J2 ˧<א{tI 72ߜР@iuzvop( yZb$w@=63RDk2R Nbzu9ɢӤ&eV<3[K:iAFx<$>#eYي(NP~?ԣPݞf&WA, >+P9hTPԔc Zg)wM `M`T[w#O_\:hOMBq V@K;^RIPn*!qs+13 BE1 @|wEߪ)"jں`c0X%[1EbǾ0♬K*B }'S@Pj]¿)(~'gh~3^0*蜲T+ʇu*}DY ]z% "`\uUB)bX냐$[F:弐tx%ckI&wDKUT~Y䁹/}MxB>R"\9c0CXGQ *վR?2CԨI"ޞن Oz2PΑkh$y  >WIL8qtu6iJJi1&F2R֍mݽ2,d:A%<2o&J? .>d}va:CדOXI|6ƮkC[~}b[xCN`imޛm[8)yL{{"~ެylln>i̾*vR8{v1uƒ+9G[mL ᧜֣Iƣ.[XxW{8&>L{8&J^x`?לiQK>l}> < 1G\m3e'xJDH/?B;Bq⻼]Ӧ خvn㾶.=UnBL>Qiz?'E56a\Q8h KEerx4O=~C.[y^Z_n|zx{$3\p D"tD栫ӊB'Q&dRe$R 9+ 6/󌮔竤ԸN+c%?\aO>=CUWEu9v챞 y}S>hӹ5D:4S4UB+hpZTMDqNt tP79U fŹYGpa<g\=;qWA߽ ^{лrµ!ܔ߱5{#$~W`W?yrK$[KSJƚ^,aBIiu9 @~.н3{ e{|ekp_S3F9?S:N#PdY_ga䍎܅)=*\2aiy {P:QM{$W~TR /:(PPz)iZODdzDf=h1ݔ7)쇘Z63M#6O\^wJ/Ri/: .:̻숣vHe z˔"-@1+>5r)gFؗsΞJGL*RJBmhK`[THFtmS g^3ny~k\*)uK%>*&'VWWeEA\$ưާ֢+Ugq&CG4 FR#c|B[6S)i^ÐU!!O$AG}SͰc֡G*5>ǛLLCEc>J6 D̗ L9M j-#O$+VS}m_kmq R}e(LvݢmFq}Yg}li܌XC65,YyIv}# )K1pSCq1T̅iF!G#qOOp;Qjj6gil-FIa6Z1r%gsq p?R_ξl.JKkt>iiXQVʱs.g~4Z`Qd)y3fgrbSŐi8BDD犧J{T݉1`ŋe&{dA""UFxZ#.%a**|gL(9nu"rϘ7CsH=?kf|29䨘TڏM $dP. ~%J 6D;Fƴߋej蹜u3-Ik=v7q\6M҆]N}T/Í!5l.5VAϡ#zܼ()&$۠ЅަF-u]ڑq֊,B^l7"#&gh.L~zyf%g ?vƢʟσ e^CC>q._r%#գ[.6$wHA *QhN7<ݺz:kSc+Rv/dee6y!VTM7WYNrK|3Z&.ԴwE\0j3鴶[ Uf@=,7Cma"T6k椼 ic^fC=$.ԤTϱ+3r;;'l\nJv3uzxiqkin4Y̩װLi<RӞۑb+I-ޤUV0=wBG?lism7&k1og /Qj\FY |NJ+/W%-w/'1ūR?7&'}K[(1sd}IcMd9!o4V+8'S9~G@ܛڴ߼EK2Rqn yIXܧkˉ4iLk? j6f`kۘP9r;.XQ_4F2s? 0"㞕 *R]63jɀ N9Wqw/%6^쑚y 3P RNcEfdfS3>՘͢=WE|1Q4Z0hohzd<ԏ$1{S k;9nDw J6#njO(B/#WL (ڱ5?74x~ ~~uܩvKFᲗ5FN/wysdUz[ݛ`>L6_ͮ,3|J?[/4=--\V0A&r魗߿4NMPf~-f0=z̚A-eRK'5{zuFͽ'd]nmOy;w 㷸wWTW2dyC@.9Pr"ҤQ1#L 4!}LVqU$*^(y$wG"yǢHLWAےH"FFz2 0';W&)1ߐYۯ_5.uۯ ')Dx"JBc%^Sj#> t|z%!QR!+/R} -Xo鱟c>+YOm k!pmS3knZhKNYcsoiH\Sml!;4E^alZ/) P8zϚݍCRB.v5WxG>?OQsEH8*_; 5ƻ SKl>4 xY{~nERY$ˤzЧDt-sIgЙk ť{o*&4N^hS{O.D2<2P[%˘amՅ`{^,l xʴMkW7UAOv YABfŖnK̀{toNq{|r#Qd#" `\1I(vզDSVݙ-bWc@ !(AC?,t&)kMH:hUcrOF+bCȸ*} PA;23yXCKPNk6 P8PAyk69eUSR-wUi{jM_}ZXX*z6`_)m[Eq*9Əq#(uA+rl'K 㛂lDr.XV)Zv^ ]ŁD8wqS9P,z)j 06}Y&Y(g,!oVreqtA D,ʙd68|}Uw#8D{U*L)ͣeR _Lj#oP3JDbD 2N+ kJ} yAn,A_GL]ՑD;RJ izV7hպܺ57mL E &<6eq?h+"7M<[LsPÇc_B02ꡓgѿDEHɋl |WgD͍h7g՘S!/()qNI=MM8j׿ BYHPf˷/ EiXW~t1ȍY =؇о8GMb(_ X(Zj;YBߊ%)2rAPsf.C%cy,YnT G>M^ino7,QhCݯUB|`!Q:B}hcp20>p1 `0,[i r?rcճ Ӄ'-| YȞAyd0zzܬ+>?5AuNwW+!z~>za#\]\FRNyuyf1#rp;fժ[92iب1jOaY&llR493wPͷ B6m$#:: Cs0wZa}Ԛ%["3X Q߂0bo [3f57ZHn䏸1ƶ;=Y{߫͝{S;\n7 hn(ﺖ$7t.qPd˃߼7RPUz>fbXBl}xi,׶̈́s6[WL'T;qVV3/V:؇&.0Js#OaKhBᖕz.I7 CNpw"xLͪZ[5HgEO/y&ͩÞ:;:}x Nx/_lg1 &^ʼnuW[+A?C|Q]g0((ފ?D4rAB:y#DC@DL|ϤcЅT9ؘ/6d};LlW$ /in-HiREޜpK=:QZk V|1V/bzLA›AD,1S^7ϰ 8'+2~ >yRA˘rv g) K|WlQyУ#-G&]]1'd mf)>/a8+,.y%7i~w}40+HVFT\Ȕɩ)Oq S^,9hbA*HMQ-,bx*:+=5"w g2v'ìdOi"NJѿEGryc2+̤bK_:\v;ĵCr[eɱؐ3"zm~@dA]KزsZ++f#E o Un3m!^\"*JT 8lB(. H]huL P̈;@APFaAZГ' uj^ | ˴0zk0Y۟J K)WitSRz]ꨥCQz@{fMцg2 HБM=U2J5Aö8j"yN |u̱&d9#jB4$>ۚ7m)KZ[@UʰhCh,}&UhH-Kh\xCd ËĚ=Xf2tS7Jlk*NDxUA7De*]uiw{Ia*EWQ`gDbD }Bjݣ+}۴D騉GLЉ y^>DI:V%EKŮߏ2 ^4Rt] ͓ى.pIH墄xjK6c䨗ǎzAȯ[мALϦf7Jo,C*$2}Һft &/0P&Dbf(5EPF4&r{FE,Kg_(Iv$Y]ث{U[d*$Rcud>ӡp%)}rFL4u7 O0j}N,tmw,n뿝,&e/I6P,Q6AI&K>e ξ$wԷR,T(})~!=9Ȳ8WC U| ̈y2X=̷i~#amC] TK>E'aUowV=UPu̳eK8}f}{}{rhojfjo/]nOvOwlOw%Ok 7p"6:wIb\U/]|`yRtIFA[0 tUT鏻j DQOgAoqhA9 ~T AvePg3xi++a > D.tϿ>nnQ㔜 0a7pbjǎcjk߇p:O幫Et<?LMy_B\}<jGz}¶xh<_"pߛzٖG"zI\.{h)LԈSRK 35Dsb|;Bg,ȿ88G&ptTB)svp.1< Љbd}@^G* ,#ٽ'w…+mPn7s@wK[kS[;܉~#Q$Cw!j 0> -pќ} t#iZ EXME?W'kQ)N顿R [lּ=Tk00owz`:<˙6]u6nv7M{}ЋF= !za:.;b'r?2]ou(%Q9P-xbRM4 7UPEwA1W#5 G >*AKՉ 5@' ]]9mB;C9=īg-æ$}l]]kid5);T a横'y`Qa2懖iŷFAQ}U \vƳhļ꺅by/0f>/M.c!fi,7Hie#_Y7,C8f*^T|?3(hpc'j>>ܱ̭-uWit/vL:]k46mɲ&=<0F7RԱ٨E\h.lhwSF&W+yvة=GʛEsTcsW8^A۫%8~w/G%Ep(.wBN?T 4ݡ C[O/$>=Pحv7`qE> DSGOCCd,'Iv0Nl*`%$Q $HJ(lA+ Rj:"'_"kT?"PT"@S&ո ]Zn#ZZA ߚ:}*R žy(Z傥,K 86 *,LB4P'6"jT{Ai$Nbh5U.9Im˥{ `[%^1HoQ]%l-dՏ Y b dp4~Bqo:"1>HFIE$F${aU4crGь5ʸ9tHm΂|C͞hx$#F"\0נ<*6 U 6-]c/aZ.|',^B#u!j"[73U 2KOWh3qre k++j/)4>vK RL!rtݰeʷf˸ĮEuBO=r83 |^;I3D؈. Q1IpAÁdy0+OԚO.qAL;a6y\8]{%,Ri5>:>iZI?s29sW %.hޢ9v,"t^/·>oV/G|rh^x܈:`$@9 v`|UM^'Ύ4 cjӍ\UFw: W:vנgO m\?PoQx9_X3+p5K]̰nzFgZ4S)-<&.pz]+aqeOQ><ɮ^q+b-w+@l!Rdnk4/8 Ʒ.l;PH/AoNfZe?)bVvL/.vԸa/u=Ym:Lt}ۯq8o33  yL`7jO)IL5)Uv\S4QL0hdd:Mo˴2n4=nO. UOYMJ,NN1B0HR.e Ȫ0U n8m#iZR# <.܎95c/gP\?u ߕ~nuj&h fOej97 r>E!uDitأtOΜҽ 8K(,ʻ*?eKKC fWNMhC;QSZ#S>kѾ][43Um:r[í.g|T)F6$C_:w9!x/K™nKJ>Or+ UQ8 hi8` bǤ$;3d=Lįٹy'yDi(|rj!)G:0b{yDJ 7 X/sStDF~^y/26ZMY( +:N1鍑pڿf0>X o PG6R2q=1RSzd6@fYJJ K̊ؕ ꦑ'~NFi}[ m˙<Э+7`EW>]cfI!1>IqVniuyEۣSaCTٮ`>P) 5}u0שFl<dtɛ(\3_Xpզ}lN'0;!5 ҏ \=̪)`qah|C87?)݀قOEb5Fԭz` WϿ{3>OVpqVmDX~+ov4>wq~:bG7u9{P}X.w|ob]iY"9%73^ь\'Q(ާN~o+^k| f{/eV>dF0TH2pH*8A7ڮ868p>7 G^sP)Ym=pz.I&b+PDVG֖ ';5ZR$ ::@`ɅC,r8L@nZ ~k$+`3i&w:v;7gkf- qv5n*Xc{&Yy0%u^q~J+Zyr ̼w*<{k"`tc:Wi @D}hjh*IC0V~F MvUiʨ= 74su2@/Qoas/^zAT#PhcQ {s$ߋj׊e e6O/ ԽS&'F>hj:3~\cvR?1nXl*OM*pՋ3پ!}lP4o p6O,x݋UH}(vAI e#?Z'_[O@p3e݇T vy!`y!Zp'̆"OC"8X,0>$5lK+У5 d&UOZ8dLRBK-3>~i[6 vSӸ>̈́zn-͜g7`0+eӸ.2\@ VyduUxؘA정'%FPzK9<(Vl@׺9f+EO`KwU朓cTۇbhX*UNG<"/HxM)0Sq$s>jT7ee/ EH@7z| qH{r=hK@geלHnW! }{tFюлDQr~l*C@pu|%ֹf#:c9!Tm˛{hx[}:2+e5(=i5|<9yZd/#UpP'CBo(dnHc8Vm0~lBw0SOArN|s["W[vɕ'ޘ#25ϫ3:Ċ55.KZ (X\`4XRJ[N{[9f[L*w pABؔ>e %8k.!h 6@uu6$7?{4&*>Sb+h/ݽ-\G>@UJkVrjxՁdC3tizAOXfwݵm&}W?̓1t3 _U ^pRv:>qLDL j\ecRWDeq/hSO+dU-;y&Beʷ^l%ʉVx葳f3itf] #Kl%!=HEx!* lU`G51s >B} lEix^tlDmxD-O؀c:(+gI5$DD?Sd/o]Bjupt/f^z~z׈\zw0E{SìOYU,Mtcv)VG&+j7;Vɻgb% F嘤&(U~461MYQɀɠc035@80!k,84wa(ҧv};-gIЩR;<ӡN6঩N l6YXMA0VNGu;0=(T$Х5au19\+}!FcD/ҳT,;\c<@+ŮS:x\ ,~ԃQ[Is LguHM\(2B4. 쎌@@b|^c Gwˮ~wxl,H< ,?=x ZE<>d` i.U`M@"u-*9ɥa#`6(Y7T?m&ir!2oID(aĸrfe\~'2*uFQVQHL\4`U$ f nUU'*ʈgk]Xѓ]NG|>'GS_E&ֳL@TP:޻ƿ+6Eӹʒ\V *6!8jNBVD\襻"|Z8g4GLC <ě_U?=GHG$V-U!s>~~"=Pqvl1Cz&7 ŐVkJ ϡy<XKs7>Uh.(AC\ Y"A݈@,*qʧOjz.\݀.^dᫌ&,,p炎OuL]ds@;naa_$u¨ݜۅ M ږ ~l䁩!`ARCkrWY 5t5[T-}nYeE=0;a#fNt4 j "V{*bai WqҮ2 m;g띇}N?>6͡oP>Dް%(o>|,䃶a+wƄ<9V_{Tj/.2c8O?Gђb6bCOṃ"x&w| yk3u"p#bz2Qϟ[3s?`XD b38ѵڣs#!DZ)M/+m?g[iQFጢU$;jf%^FWd'$q8޽k"W[QJ5?1RKa7k,o/7JOU9jaV]83I9^_J>X0lGE9݈FeU_fbeЈAc'wCVd6[cnq]Ap ʂ^jnj_Ԍ廐/!*̱( K9E01ߠzp|', ;G=oIr@,G4+8hrMဴ&gzͬc.aŸz_.D7TH؃k1-;s1'dp>OMY *8\+Щ -,ʓ[@J8zeJm:NYo.YJ iʂt Z'_;G5jjǙ_X$ri Yx YNNY|-*ڂT^-A+N@~AlR+ R3G+5~Pn; k׻;@6?[1qE|jPt8Ay?P~H.\JpGE$fKjtgǨztq.VEo-q+Z&:TEƯv]̢!,$_QU_dU5.4:K6Zl{&7Ŋ;Ş;Z-eG!+8{3$)O ;tʓP>^j5J_(j YAV9@Q÷&lԅ Mč ?1j?`5{:-*'!i6ɳwQ:a.unDׇa|8g ^ P4"}_7",X1Ů(Q7{XPf+&B c VCq>Ly@c4{bkɭOX*YN5 j׹)3FDWW|tzkUsR|J$̭pvIq TGrߘ^BR9DmEb`V< ^Fr;k|}mw|iW?in,hiMi%6ՄSP6pM>ɞ5u݃P3§O EL^* 8ٮ. fkWlzv 5y]{jVP%Err~ƨpKnDdȁn]$qVqa-6 xSN؛+fB4xqH hѾuqsʫG?kP6^DyK'p*o%<֩ee6bs `929`(4Ycc*ℽʰLr%T ۧ Kܐڵ_xPWO|`VyvUEmܵyM.>TuI4E{]^TJ1?Ѐ G>ZO՟ؤ(!i:jWꙚKXS~tg ">B~囟(̨կs669D*N螨r Dg +"vpx"7؃ =bXFoݲʌKQ-Trr}L(GuYzh9h-1 ᡹4WC2^cWW Unjٗq ..Y!i@Bϯh-" pn.0̺dV4=Kc.2}OTU=;2Pg|RYuS*<J('QOzXK}X }=-M5wcYeg qm~I jP֝C5ixVK1eyTu2qbc<*ts(v7%: 1r0Aa%kXhVnTXjvIMrG"s"22hͺ+(DO_+r d3Z15VUlZV,TsکB&-ՌZV3ZP<6)|Q4|RC],(T :7g#eO=UI"coc]kX'J{E7>)+)ڣ+;!ZWCgtkUMKwF9PPJX? |a-a_2ȳ z׍&CU홺;8TR3V="<`n|T3d}8љ%h=Xi)S`j 5dy)gɷ}HҖVQG[ MW5FE'8=fgSpbo`^ Nl_Ef~o>zLivMhPZA#Uz[ê'}ъWT"=aV-m ^w^~TT*aMUQ܇xao}7*WۜT/ +wxKz8@B< 8F̘Ӭۛ$?YS醗C< 1]7s1-Qr?hlmVaqFhIt_ '9b5*dj 'mcf^\eo o}qky?.rA,;D. pf~\I3 NلPN.ulfH˞2b2MyL2&LMڝed=& v.nShht f#6=yČՋ${.$qz oXK܋ og_&1b9k:d4qw9s6<"UNs^pdM:9nd:N:Ƀe3)n{\_p33 t^WX͜f2DIrXL7R,uRt D|+2bPu%1+w<-# ]yNЁbޏ:*X= SbWyX]9NJP/4vtEK) ע5T*åT,"#,ǘ]h>e!V sgހzl]6 c~*ݷ]mZ4Oϴ_l;ί>iŏa9]P%l![4*-zI&CQCM/b=z@Cnm+/hKxf?^Xbhf'/'k 3M$ cAnhf%'. J+ ^|kΆL+Nr_5yV"1-ί jU]sjp =n*k2SضS9=>~?=9x @tޟ!BXvW6l/X7jr^H,U |;KҺ'>}<'Clxon!Fܟ{QkOL^%qVI[a}S .wDp@0H{dxl|rrk paq|])E"rbr<_@USp)Qe$)ASؕ6?T[ jR7͡fGG'A~ݫ{>2XȶFwT{?c|`o̞ྡ\l|0q1}lө]m0'lvUN6}sM{KbB8n<֫Há"*&ypNчD8AqFq!r停".D VBj{U kf\{pvWL 1I&UUZq W=qWyNcՀwS*~%kQ~ZVε<32Ex(R;e06.+.&}% R!$*17N X dcңc>MqkyΟAFD\lkPuG4ʮkq (KE\Lu|ѣ穉X鯨365יҏVl y* t8CJv4>=GsK^_Y]H?zt'8 $[]aJ* ,8zK>]MxH҃ Y ^Ckqnf{r7Ԇ}D@+i_ |7("Y9<"yBȬq͝)#X -˞~*glʝ' `dBH ǧ#6!HhcUW,:\ƒB0 b#J8>xUk{7z훫Nr`{v˶KU#ڇ~٪ %8تEgȈ찊" κʋjW إ$T(QE6>eWK8w)Cu%WX{%`,w8>%m 'z;a94@N   j FCK XZt UPqpxgPUT؃=A×.ToЧJ)@ 4 x8 wX2 Cfb?K3qI8eש?TN9ꖈc 1^:ZwI\qms`b$7z S]0R@o)5Y^p~TؾY]Αh#uPjb/Z̘< 6qڥtz &c0Ć׀Dy4e d_{Up/أV2(Cr&z>1D2"}9RܫCO8\ee}||aƝY׬hhևӏ %LtTǴy0+%]w,+YH95uLN9&|K}F+eHؑ(u,8`zrd[*cB,7-9_rIEVߓC"fCu^JT\bt,]s4X&otcq]vNSVh}Y%O*K=`G"y&˕EGvb>|5r^rp|}tQ8l|r Y58H9+0gF-l'ֲHPަ2Dgu+C8̅ib O`K 7%{Io89BLEˎp l$?h:UzZ,T!˫l@s9573J!3[ e5=ۍcZ>SQ2:%?Yt4'k0Z /J 'u"HY}G,K[."0*fĶLTsoHǣ2,ʢEýEuͱD 1!+A$nJ#XEAHEs@|g:tlT+-2^cŝ( 絚O j?t9=o WTT 0eRG*)Mu@l0%7>pJke~ƹ#KD!-Nn03/_S3NUt Nwo̩5@vԁHe7 oxk#iGihvhWI2ӈoOT6R]׳%jvDG*N/@tf$|SOuJRCV12<׃mâw*uh]7tt6TQo}\|Hw۰Ac}Vh-庐c؎Vxcl5%t51̩)~vb$hѿӿ.˝`#ueNtJ~vBS\ruTE(cRR B[`x:t+#Н@gCX]Td\qs咽d!X&R9}Ys{0gYAr&A$Tkފ?d2EuPUDCމ^ؙ,-U|^4ɝQysJXJ$w"mMu¬mcVԁV%hq叶 `}@]C(e6-B^t6q1u{Ҁ3(1smf H赀 Y2#\I8Ɍ l@<tYXADRj}.)܆SU g\ui (}d9$(tjoTۖ4}^Bkt:GKԛ #S,1aD\͠%F"qpO iv.V#8i ɺp82 3ND 7(5ץ/°6q U3YyrX\/CΟ^i NrPya(Juɞ6=n:^}TӚ=8uP9;3aWMqPn*[~5E㍬_|W }8me1䅳^%!X B5=s셬&`O]e2Wxz|Q-}M &GWI[o9gP䤆ϒ%TFlbklFI5|@%$Y]JQ 3@UngC{o ?ClE]8<6 ^AR<K| d6bv㴱mÎ:SBSQ:qZć$' o ˦5)\j7%fI<_s(թRheUhN߮p 5+(ꃯvg$[&Q:;J$tr+vd^=1V+JS8.ZݛbrZMRځp+ۓ5}AkX戵H nj{ J'$C f;*"PSU7IiB%fPX az+hIw:I"'1FH֤!yE\:b| wKgg|xYkG5(\ l :T({N-U]=e'4!Ed=1uZok鷣A6SʂgfUu Ds5c̊2ZVDqˉq[O]<7z?V2!ow HA 1/r^H#Qk~x"&^<ܐLKx h0o 3>3fm!$:@3-avyGb7ao[V\r-&3m0aۃiCU!Q[`l=:dm0I"(̶ek4i(sBtz}Bai6I<$Q}&4{E7е7~#v\"Ń놽6[O˳@ce(t Ͽ{3>OVp6$ٷ`VRy)1@]IPD 0(0^*n]+#4v %瀌z;ݱVR8+!9SMEd.VrHg\@ x,\~ua/Pe{\QP~s«U[o[˫o\d'ɏ?%[e[%\s Km&VmkQz. MhCIt&Q7 PhEab" iO)8j(]$)'9s%|k8st˂[ ;.+C";+L2bU_:_D)W@-,pYc/DN Lqnzq:,ܴ+H~f@2):JA״OSN>HqNUIC<F[YݚzolGə_Op!h-:w#GҧBQ~{u3Ĉc):Wŷ?e8f*IũELWLÜqhz, 踡nO-}C75skbe{*ݴ<ԢLҡk4|l xb?QTb7Esk"$BjYְ1P>31bUpJѿx6K1uӥ?=ƕ!mb1f\~E{%< k$;,{8yF=~린N!@ ?7Љ_c$׭ N=&AB?1Xbaz׍ bbGHeTXcbV {zm٪Q+'6}WXW{1ʰQbSy=Wb@r۪UG-qt_g9X[@-\f_Z˃m/`_sg.K;o٤c>qH(uLL-V48;s+;nwK<ߺlDͨiQg3Q(Tw5qMs}5>E@q>-4;n;W#*99<=xۯ<64#8(Ov HV^ْeL@`o*oCjy̹bXeJJ0ࢥd(c{8R],mt&q/'{ɾ𙬠Q+|x0abΉI& jZ&m,r>%l.S@IM=fU[YDo{RH_JZ)c;0L "J 5 TN*\P By~+] P&Ƣccr\Bq63 P@<6TyS̘(ϳ8}l'%ޏQ2WN >B5z0G6dQD*9DKVlNPS-ú 뚅; &C3Bp%+-*Jqv:3%%:bdBbc.nr7^P] Ƅ+L.+@Mb2U[k:dI M!+HN5mEVq<@f]` 紴7:gBU´.W咲0)3Ao0f_sIe|n"̔Ԥ)͠:W{@r# ]Lj@/CP2 aS5!fȥeC]J*wizWjVWU pʆfຳݝM!-s5}+X8_XІfGKAMqr۶RhAx+Põh -2{ky/jj-Q|mPRT'W)Qg48F|BTJ^kmGY a,EndB7uѧPg Kh_w'rÂTB_IXV)k16]Oq՝ ʮRz*zhkU%byFlME#%~ummp8ouůސ,LE[d&{Qн}7ܙ+PnFйXa?df Xf%+LvyNhrteXWQ_)칬meH4M3rsVhݥ](nЅ V VCkZV?ciMn0}|w]f9byBw=`6o]UTR!+C$QCAI&VUUr{TUV-38%3CMNlVB3 fZ;-cGmu&X:nҚ al]%ٲ' #JaĥjkbXd)!, /l(V)GoQM,$p@MV)= gXڎhB;-_3 w6EKG ,uƫVvђv0[&8Z*VڽbPyG{iL7UǵQOpI^m{^\9wvKG2w|o o3A6aٻQŁeGq?ncBxYEF("*Mztݢ' TGsl5ĥPmh')ϏX)Vlhn /^X5_+" Y+ 5(5$xQ4Cb8V[2m*t|(ć9:1!K(Վu1nθsү-馋h,4tBNuἷz #8j5"*u7lTe]n6 uCu>tVQbY|BK2o(gSfIrmo2t:1Vw)uFS pf\plrXY@ p9ۯxw?2 S0C)s:RQTV{pPJ+Z=>2Ɩ0KUYHvu)pR؉(V:7ŢLg ;İr ⊉E؍(>cU}(6(gLl-rV>a]R2*j^i7oq%zZ׍% 4y 9!HdĠ6km-@SflXd'* )h,Cd=#K7I3u/$wƸ/,w܍.΍]v2_O|S S {T˪Βj=i=:I:\}D[ X+FVeoDqvU;ǡ:T_>f v4U;1˫F϶*ij|IXījb.\f~\hTlnzßq3ZKhQ<݄VnՍm+Uu:&#aq8ʜMepOYUABMuH(Omo*>}h`jY 8!6*kW!վ^!S\n] IYV `xf[Bw:#U9״Qqt<+c($R8aG2~gKl8Y)kc](+tk+ıN :ѯ9O+lݨ,ň7֨.tQ&>env2`af5ɀ33@Le˼ZW#S$E]"13uLl#*%g U-嵌a JzE*6S0PSo@l#oV *CW+2ԱU z˕&aa)Ku Wq1wDe^ FvS@A6ew5_F!?¨a92)r4&DIcЯȷCy |@!V /WYaU}fY\ՖE=uMk!df&/`&h0< ?sF́Y_(qG$Tv:ی#7?}ڰJtgBeTYV{.^13)aGZD`Uڐ0d\@լRf #w=TmG 6S[̶B' Ʒ!:9ٸןf GPUۥTnB ?b5_r~7v$*teڍQCrM(.-͸hgg%n:vԗe>'8!2jKb/kY1@0G<Ԍ}\U=+ĴR*?|bŐ.\^MF";=;Z؇ }0/NO:]^f |2hF8,B~5hD+$n 89BO3t8ܺhx!nF]75j*z|AlFmdH}D7@Wt:}M?b(U]J98 ErIHcT8rzCQؤ5tZQ1*60J6(#sn*%Ef{T+uP5S oH1sAI",u2ޡֶs_)\*g4-0DeDtw rN䴦':wW @{+(z?k %+ؠ} Hcj5~>~v-^~ȪF_!z]tY)KXeߐʞxH+0J968 s/}%Fܽ?iә*[okdH$nSPC %Z5B P0T?B.qV5yw̑G ೪}i$5FTDÇ`b*TqH-`/;h"_傯mTBm tk'N%z>tDFr¾jU{J((3#uC T_]n׃Q߯"2Tp5LnqYvb1»bBWk/KBVY X4ee5K5[ua)Gbيyn8G׀n =bb? os aܴ¤ W y~`A;XǏwĪj9wZ 6M Y,2[6ϚrWtFLUX5ӱk}G;#nCb"52d#Z/tlzߛTw#Vh:J;tϒւ@ Ɇ5Ǡw>JI9ybN5F2Q om}TziIPML ӘRD /R(~VZdvj)PYQ_j$lUۑF֭{iDǢDRXd;A2f(/X:EojC^PWؚ^MY=[m;*NqBqlnlAgͭzq=bfP̍ ީ{n U"a!9Ŏ]+"rB˚ʤǁFѹr)*9DȏS(w(q6 `NIsEQa229.d鯠"'r 4&"P#daC &v*E,1D#Φ\Є^~a8hݹyS-&zȨҁ(6kNa_Du(f#Q8! i0)nTXΥ{~gA!}|D#( _'q\솈sy #G3ڂ6"\3,#?uoDAy?c` )  %/O@5:YwȲpKMϷ'%be ⼸ 1y0y_Kr@8UEG/#/]<>H_jl?*m: 1cB.xRҥ(Gsl{$7G܎BkoT@P?& ޷G*)-@@4h).\"BB 6"~a ƻ}г?2O[qKW \/ b3G\BsD,q+rȳlg:0Yf@EBhE.v00Pt$Q YER>/}]wElDK΋MHV[Eא߰7aKe/QǴ~O~*;V0 G$уE,]"u#/(]KGSFeyJT-h)Oʺm,/WUh'+ E.WFjo^F6X TgO{͹&ƍ #~~SCƇsPAƧ6T B+  tS췱Z>ʇP+Op{]U:cHHbZD:\m~{Kthd+7/ѾxW m[**L9QԌ~BvORh[#ҶY$pO ?rN͝ZW@IfԒR9O7i:TSr=^WƊyXUo8AW뛑Rj6Y's#9W*q3EU߼ +%n\d.~d{$Bj%G1IАu|aJq& 2<|O#OI0^xE-x4v!,Mv+bz\oHWP2EGit0x.JMsIj'YHh/|V̢DlYADfIIN&D3̻EaV6!v[Mhg+3Wx%ߺKQx*W]Qi[\r6," !l~%Ǹ:PesZf_Lqذ笵/aۏEN,71X%<%[*x6QW [|Ue 6FY2eHB SxT uPX"\ާz$%@DҴZ霡* (D %ߺ!ŴH)3~D$~e5 #\,45uHg$v]YiKUgN&#nޅh('m: 8T8kb.b̰\lzx904-23(J9E'z`XSYuЏUL(PZ} ;$J&HIOi9`A[žO|b&dE+;G?MX-ENR WE$XMHIJ"[k C[&; ptˢPĄ9OͩR!\MDN:%>ZEy e¸P'hdʣR)ze\v̞X ꫷S| /tT@ //uy.fC{ 7 Zv 5X]#i}g>u~k-obmj0jnBn}MCE-C(+;P2E-K=ISE"l&)[RFF^nQٺ3WkDMp&ǵ,#- ]L9b ߧ#ͺE@}4th (@;g-8c7pdw#jqvm 6N6wH̦9|^ȓh'%}(9H?RdS*Itb'KzhֈTDRz$#BdKY+YmeWšOw^{e !FVDNy#aS[. SƘց5>C %_>&̝cW$ArZ;w| S#\%g8-Kڑɠ7.{ʣ،7nI[}۲{«}WSu>}Pپdsrc aujp)P_pwWZBL ,7|6MjԚMif;%n_Od(xJJe &H*3X0A_͸"aS0."7F$uhr p`4[%nS\HYҽ~Dؗ4nA\lu^mf*I]~jp s{)08*˫Ok5PEq6_0IV$l!Hs:mΎ8X`Tu6fq^y;gbDcARӘ/: fx~qsg`ޥE4=yL~"&$W`j$H(Ȅvz}9'6Ɂ=҉FZb0f/'Rq$DկKshsǡc"iC1f5IfL18Y x" VEA)xQd@Au3%խPި[ZR<ӆ 6[^pfwՑk66acjl%,-),.JuK =7[\lPLvڪ5˻ ϙ5˾܆VTufyktMͺ8wZe}r]2%&o.FnѽF Jjz]"Ս/.׮Iɩ_|n=3[^[o8(qfi?SwOe_v=l:b;5K3ƪ;W[~>7,>$W#[ +2ub>lqzc(X*%.-+EmrͲiY,qfYoM++Eb::ejHLJ>Rzfs:Uި[ރ7BxfImңdKLݭ[;]p=]쉞W$\]uL1Ya,+6WTOswjC8֝Wlvo@8!|$ O>UK!lgYIDWkAS7jwZdkzto6~_|nͳ艮,`㛩M{uK)5wxb asM%U]xƤ6;wm{N۬{?نH/ox&ϩyT֊'`qB.rPSr77HQ!3@j" N3TįwZ/4*DU?U^%^Dvrzof<]_>ǡwwY vs8m_RAf6 :tyF)kTˉ b^jgaĭZkvkNf/T݄AQk~I_bU܂~١ߌ鄜~Ax3>u՟XK~Y˺;g&pal?Ydrp3[|q."/SAE/ȗ񥹼$G"mݗ7^8F8D*"Q1qMvD'z\Af5XKԷ/'{Z=wafmK.ZB^dU9)k=Z6FXYVeՔ9(irl3* %+Գh>%,>lL5]JI.}T̼!@DF+tEL?Ф;eUW]믨-IQ0+ȑK6ǽ9Vxܐ~ qe.kQHt=1iE 5.^Ju*b\OI{^c w55Le وʊc5wTQ aGw\uKjOS2>{OI?>Hva3K 0XS8`&^9'ϫ_;s8SӃϝx~Q<DeR meNGzdM6]4:N;g"Btoꪏڬw׭k=C9P1;6q]Ĭ66 2nYLgDyIWѕ9\y,_ Wwv?ʿP LC.^R . [?R~oa`GCԀP']-q}xxuWBp#`<|:}\t`0~( {T i ɗhi8bԂZFdmvǖƒ* Js+GsWy#Jh*ZR&PAG9:iyPAqu5W|(1mAFL3Oߙw]c]zKLs8.y'ZŚKD9-4 }d{OI_ ƴ2]wpouA^2;vJ kL$U%@G8I{j>HUwFe̟0-RcjOF HiʀA H[䟮1uhk-/'!A(dmBaҲv󙋇e\ F֝](F;ŹZAFzQ  A:mvyab_O碃8 1uA16M]_fk ][ gv7\oxp+D³=t` 0++-;q@d=::x{~ZWꭤ{Q/c+'x$ ;#Tp{fzǦF&:cMlBvZr(!7};:([Ez`a45縞6hN֦T:;e,|C_!9Q"znO@c h)kP ~$53J)A9AgܲQ"rϨn].@z xM]1E1NQ<M߇9[@xmBp9galvV)~|CߍSz#~"_|5QN&wذu='eX\G;G' LZ,NM-Dwɨ 7VǪܣ(\{@\NOT0n>- UW*?{@`[V̄aCr]z,}β! D V EzW=!y)Ul$sy2uBQ?WҩeGG\uF:Eɒ>Ӗ(%><0MȉJy>ܙCCI٬sx|{|Z1-5zY=[ APYQE0KdCֽy| fq3VaAn,Aʌ;{t¡DxڢyxTɵ`[&̍; -aO FW%2.-&qu#<:ƀD%m`otϘaD:F8آRd-C8K;ǫr0DhSṡ3{E~?scP{8~$ ǡ.0-͚b6#d$ >g;ln ;dFdLsNf@1>7OB³{%KWDS4 yr %](D: N$}aLIlsΉf9bΉ]s%cSÃD9uъ *$*퉊H KzA4M~]%` k0|ti.2pn}=ݡ3ѷNuS%aN\x!](wӓoS}.>wmHr^_geXa@!i/B}QPQ}-vExEw\,R_bKCT.[6[ǪB斦TS,97s] feSs̊( O&=w'dػzU;:i"oks:j6 ًݙdndžx5;zN֝Ë/b: Wr,\Kѯ O4[55nM[[[ίfv?V3vKkЋ8 }ɣ!JFPߠ[ͬPpE{p&vߔ"nIT?)3WevyBo>"KA"OQP'NΧ8QkƖMטr6=' /|My"<)RyG c0C0\$eǠy9ЃIQx["%cH2Oa$$1MJ~S0I4"7|LRan2jUyKrTi\ Gu;ND>DH@YmL]P<*k7OźrUcsMf1(['-3! cx6ԣ/;3)Ѻze @$pid*N~cEQ C5щ1_Bڤ1~cT< 1ROcv>4fN%/y8%QD壒C;\v](審jdڣv;=TF` @z0S\vJ br3=2T䪂KwV':~b %=|f6ÿ$Y3o "^ڂ{m`t[^LI[ x~=S,!c@oV 2vB > 1Y!*5S5!5}x7?_F甩Rو%PvʈA%BF0Rf?"dH={X.O{"@Hi*C&ukM*|eqHGsdz=LȚ>>q ^qjPyS萎dϺVu:XUXZZBRO *\z|#O-EP7ďHLXOظORWL-5T- >L7j ua%%;m6PX9A sH@Z<@sǍJXT=aNZ=eGK* C8H7Xgv@†mnYPyt;5:2%QKTKD!jrCjk5D-THͥ N/΍ls\*2S红1xi>{\R`{sqfjjw+D.!߂ Jp (B,5*[D4EPv=n6^f"/D3j\83.MZ_ڞ=OJƬQˠ0y\bw+4H|fֶ<5Yh $1#t hWv-"hxlKi<\֜M@DwRwmLag\%@q( tAvL=z,ԍP&9N W'nrXw{yDS'2`a8skz34gփU%T75FҿuKx'Oי0csї 1bB>*zV&+ -;ȌQܪSVs[6BbAnx6!9&aMxh>s q/a&]1h,ǿUoOGIGkn)cdǖtWƟe9!.W8~v" !KYQ)V6l@<;w:e~8e!v&: ѵ({=-LJ഻dO"7zIخ?]||A KE ꏐp7$ L?#"1Y$)~Ylޱ HꞜ;fæJhŀ햼uAC5"*4rW 2kچ*.LR șژYLؕ-qIgLi!xv)* YKd'{G^-YP*<Tz٦+-UloLu-a&׈\;$?W`FpL*M6E떄ȹE T;rizml+G*B{&$l`!,xrc\ײ);w{X#΍h>clFau&,ٸ_ZkC[mD0-&~?__ɥzJ_Km5:K\lœq}rEap?v-qbng^DPob`~=A83 5CR AÙ 2RP/=@Mէ(vc:jt;R;es7wA , cDsTaizl C oJW1;zvoEޗ*ƥ3Ƭ6fʔ"2uD[E=S9p:F/$L'۟-L֙}=q>OF C#> mѓؽ@Quqe%%i1sH[ÐE&!U!ILKtáيdT56SR9Iy8l'Tu kGzötOAyG{܀k-L&nWf+P -15r@>Hr+"7J=뗿! 3< eHZke1t-}{~"`‹q-k.t|d0pzkSijdl]ʩpF02&zOtF7.`.Y<Ù6ɵ`@:'2_XYJ%3H'C#x%Rdj5Z2nj8S_Eb[ LHdu@2:z0 >KJD[A2:N܄):OLѰZ|kXelgmhUv6) T< sh3CdI1a)dOc /-ψ]Tp96 yPGe嶥3庼|ha7їO^j9]|"c+! LER+Cm4E"r!ێzBn8:{cL HA8rvѱajb(D };̜ΤSĵB3 d%;Ag1ڐXwrCH!W+*TD pH#_1(ElG;8o]̵7"n™Բ]UsCWF.MZ;@cudTjGN9ipԅR8 7 P3LK'2XmH'BF_VIٺZQOu&l'ltU LJf8%!oE$XiuBǼߵz{@\;{~ 5t1v$=){?-h%cY #?HˆH2~ (Gl#)n^#,lYk?@/O\P3~SSUZKK=0۬{Er㜝 wN(N|\4v-j2En=:Zz ^0+6Dz,')~I0SCf%AMsetkum߀Bb#=ѸU7&^oE(6&}AP o l wgTS)E{cA2kםXHHB](7A,ˤLfhl{[CdPYJ2K5 ,|Y$lpTAت)j*  =Z aJK 2mٮt<>.Y4%|U@M8hYttd?|cupW4%O٩enoW] z6}|q]JŒOy\K/䕌NnxΙ(*.۝ekAxwg Q^ư  leRy E !:l KAiު VMT^&W'4ƝʝQ;8jx*ۢ 3FDa%BhkQ8di8E#*AYZ#].io`2X"|IdlGʑ_uGEGZ('RM<gG֓T͞!Ks%E ʈ.Ojz/IA{K|iQ<>sM(> ZDjCϭiڐ6k- 34YM*f06`OJmlS0V64vv(2ܩkw pеӒvWMD_ 'ifJd1f W|?qXdM!fLKL.U,|;v kQL[$7׻ 33=Rzw_wDMupKHĔ)+N> 7-@yܷ )AEިٱ5G8RjXb':g]ɒ<~W Ui# PlWwO^KF76n+p tqA[H LEe]_Ʉ(y=r \R81`ZJ1p V!ACLP4/5!bִZW3Jؼ!@_>I!)6CR*O nA&;=<)krJj2ɘGuNsMh5k5 F3*Cܼqb"u) #ّkF#&0gyP \?kݮ%[Y8ay5%(̶7|.?X HE+]`W`Hsp2.+Q.޸'#I0>;( u=?IpchL1T&aqkbU[{=ѽ;vq͆Ps 3TrxƠMOѠjSYԫPԕGN.᭫@kצmv>r{pz"߻. zdOE4NBm.p)V|^4*R:l'E׆c(MM f8EU4g[Frʂ5TÂ<>(y"jO̠4fz%z+e"#s7{YsO= K^c`DB_s ԥjT"-nƔ I{21+~2>$S5ȩĔZCVH#2puc߫ ,LL߬ɟg b>1uA(TDԆ8lx87S=ǡZ[8YU(iK d"m, d @;{'B0 nSuA "  iϖT u{ @ ǘ;4J~]kanDKsZJvEqXK=jHWGY_@u*$Ow"D9\O핤=02r\E`D -~tIV.D' ߙF\#7&] 0zx#+uOυFGRra) $II4CKff#wR+ظ]ˤTk#ظLiW 12; 'B؆()< kGVKJnn +n[bp! ☡ئY^ `4'SʚP%lj;}f?q6ƚ yZv44Io?͑Ά@D{=B*ɂ S ¢aBo [H|< &4^A"}&<@ 0m#ks/3>׹}CIxy]#$ߦ}{21;_UKTsZ6o/LĺG'zŚ,* [aQyI:SSұIF4Exr->ķqp[QjMbUŪ &5|O'Lc lS4nv}g+4@9F߽UmIOPIaʼn{,',aQp4X< !3'u8{K%͠>%ikzWg3h]^lA*|>1+15T2t) y:Atsx <*J0w (ZKqِ[Z>@w|-i >F2oƦcM6sqW1ukv,!z7ME'. _ 8̴hX䉬xOɂ2i8ם:@/Y~)^&jHL#LSc3SNh, 9`ʮ4˞+"V2y\bS2 h=+47q<j7Ycd"G7/L*R#&jL7FeF>;b&n:ɦɝO&4O֝I}umAtTRy{L%oG#)8< ඘yj-j1 @&gX7eX+@kTOߡc4tj2)0zcki Q4AĥFI讅! H8R>*pk2DN{˝&AEU2-ܖ+ &9n:@'F!CEe땤*JC2ǝ?7݅C߻ f{=8{A(#v IL>d<cO@A.fi)&*O1Yan{_hImm&~@Mg1;eBɀ=zJ 湦VSDKlg^tu:c鯆f(ٍe-JOm|N W]kTo4=gP%g @,LU O-C9~G6&9 jCUsdIe7`deB->Y>8fJ!OGz#4EZR.L0̒R 5KYX/u,#[ĺ 8IRKK^\/5O-Y-K=-%59PJPREI4jm_>'G12]n8 Lɏz[7;mj2t TǺV_ßsi2 快K*,b] /s}2-+Lߚ"7 Ex<8 6RHyiUc{tD%eo![f"OkF6yAC'K)a]$0h"wo-f{%9~|@wq=;S=D7} E8NףL>]o&Het,fYϝƆq`=kځz.] f 6hog𿁴}SB5Py}^#1K4,X?fg>gg?Qj̀gN5uTԦ jr༢L u{3u8Bcv:u!誉˄ȍYqSjNp$MDA<" )}мDTW-d,dq2A$ .}2 HLcDB|(¹ 夡*vG݃>ϥZA %bbgNrrD*g./=kZ% 0L~rVYT*?^U'fLHu\!]}g.(v(nYEx;lQvwqn(̴mN64K+*Nr}{b E‘H>wtnt?aA]yދ=]O,Z?avP>~+[rǞ5=>]瘬 a|d @|rLP>g1S5$Ekrr>!pVT7gUN6 _i]HJfe|kUS,ʞTIu%>ZA8ᇠ (*~,ı34Qi㚔2Ȝ(Y'*CН#kpe;에qF1PBK;-Evڑoƭɭϓ3-=yGgAMJ3&EL6* LP~CIYrL಑(/w?m/J]>T lK̶%vE3a8YIU~a{VTOf acTjnBi {3# Q(>p6ꯚL*+* `09 R,g0C*&&n62o[t;<#~E!$m>ЍʿA_(oAf)%LiEaúgLhuLp϶h7p"`2:K\)6G`ޙ3Az=E ,glg'=M$C?jA蓈mR{0]ǵ1s+lab. w`H쨍vu'\,$i#tPLA(*'d 1컋pcށڣ*Ց|C;4{zò @k[wԹ8$vC cY;8znÆr!Z &Ar r<ُw %nZ-Z!qT8 E<$.T\V kuc,5hhj GMsvjٺ2E{Git#H16 KxJvxMb`}b3\<ry߈ hY]wЫWkt1JZJp\e#.f+խA)ע)e+N=q{H|_vO,qjBkZ;1 c𸚗OțP*,{.Z891D>/a7&/9NCA{8 \t 2,!Q6A, | W ZH[ŲDN&ixԤ7laJN§%2&q;F=mžX5?Bgz',$g3 Nb>!t6ak p;^b㣃]PR{˪Y֩BCi2Lrs\ШZYR`Ne]Q\ u4G+K8QqmE1NJg.USâIUý4bn\.BZb\3~n&]2E=8f_ڼsC0@-Y ق 3+4겚r YeAF!up-f9tpֆ]&*mZq81U(+ѪiܪJ߀lӁ13"H+4 ۺlp^ך*ZBKO z%R(~c,+P`œL,JsRnYzNOI{Lb>tjz֤7O\Z|ziFxgr툍 tT^.k*POt{E\†cYxFQX5(kCV8YI -L9_ޞ)3b2PNt(B9w}& hhլe,ɮˊ: ;"k9DT熦_FǪlP35.;ɬ{K'TOxL̺ ?W8:RxfCv }flœXO`*E/)[e)L><ݘ2j@,4F?7h5\Eg>캀,ܙ C'!9L1X^-}ل޾7eL0dK=)XmҊ_W3cn2h̕bt-= - C0ӓ5Ek% ֎ gCkٹT-XQDc SJS:w`yZCq8\J,M$@:"bI!=O ?0} }1's@He 'xSbIUsL%~tf!a,h kWuc 8!}D?OU]ݛ.;$9^8@y' hB6OX h^S $[Q|ui}..EqU5O)dq \Ç@PH]d/Uǟ'G:e E:wCE/)xD~J]dؘB5L{-&w سWM"T&f:0)|-EYyRURN\3fxE$-BUJ|:P|BjDNء{^ C%Sj"bM;e_1DXJ%:Wf@duFKJ)c KKϼ,9t= ˲skKs~=zUt:g}J,bpkk T JVYgܸXژ 'uDfdZwpT/5>A-c]$P> PLCy{4OZ,Y]$fg|42.Ԅ -wkղ!تaD3}IjESC.=N)AvR=7שE"b\wtLȮ-x d=uw'ډ&*ٲm:r>:f߾(C8GPEt DVhYf)J:c*'c&lȧ_L)Ff-]x5W }$BC(&UMLtʆh W'h8DW&m5]4g+ kM +3K*{wHſk&tn lu*޽B r>bhm'AlC^ YVA>GVghfs&T^+[Cj>! Mh24"b5v( ۜHt5 渒'c u' &D~,:W 3iY<zt!.~_^_(3* FNVD;g8cֺܶh]dS@{W%b*h|L+uP|Tq暔CGMb?Ydo캸 -dc?Æ~UaNU<3S KoB/,zDv LvC<-,noMZtA>M_aJPlfL$й EP(gQ>Ä:W@θ;2-tX =M;OK$[:{ElyA|]L_i}?ހ؃ʋgVv&[V~lm.m#tǷMB3 CE?2YrAX'd/Ӻ7*(D*o݀Ǣmꍢ{.^,OtAsmZ;>: Wt__=_<0'!Pu /4@ED_:=⹁)ڬ hj;OD!Ԁw}Y t c ?iW9RMǰB?ČMÎdz7ؿh)@hPy\jDoQEʓw~G Y>*agi Ec/V)43΂bGFN[j<\1T.ZԮ +]t}+{4Ur%%F3reIek*OHRFM\ɥWȃ5=}BBOR {DNmkՄqer0:!kԀ6ҡl J Ri3X: # ښ88PTM@Heg,k\hXT=6I11%YۭdIHyP@!|oz;!<!Wd5ϧԧ=n<{\b_Z9;xy1UC7 wm8 }] /:P7*,Քi^=<Uy IOha~j9 Uc|H vn9g,,3LN?ė A({S77meˡ0pG*~IqCm$jjR"JUГ<ۘM]6? -k4)ϸNȎ1s;!J N.1k["T疎pⲥ,pX|{#

 ,$ΤQM!o 0M'4M鼮(C0W:þ鱡ԏ#[5cd=]oDI3Ď?e6٢Ri/VFEВ=HlRt.jAfi)-Zxw4=(v9=F`zV!jbfN[eX* wǬN2kQ 4f7(axc:8VqG'&0oC>cB1YShJ(\VKO v&jG;щрG;mvG˃^M\W8>Hj9)РҐyc/lʛsyņ֦w?lf0y]u7ơ?,eX+7J0o _Qc<^:]Mw./E3u9yneP#OeI i3ߣG}K?SQ>aOLCrW"w"wP]R´x8Y047ڱU\VIXZxHZ CNig  91sՙ57pI)W2]roBbe7( ɡ35l|9)@1ӜhzZqOFi$qǬ/qD!e J"x7R1؁*u0+I׍8ο/{;;`98\1ޛHWfCc&S91B6&fLouJ&B%xJQn6G p $HCpTo룖vs-e:`} f@kx+9_2!I+\47\S(91*#Ī^;*^j[.4?mM+Y^{A;ٟ|/)&8uya=b=S[Np23.W)i>d Tl$M`JL+ 0Bg} ֗g \ Ԃ!Pc嚬ɗ:%ӵ8;DzoUW t;i6u`#q& ,+~#)},I鳁eFp^yN)~# Ҏ:b DTKFӭVDO3C<:H6T7Llqڏ_CȝT5Di*=ݽ:ŋt@ DZ׊YBA/c%Bd*r3[DO)ʶFPFmDQz>-$%GDSU% Syf}R[,KCUus"ڠ<-HMєU"4U:ݡ*U# fbso>;oKUGulrl,%S;6ˣ~n Ƥl9S& cP H\M& wQ^̌ffQF W0`3LsipM"QԠxJ'hh^lLmx||*= lQѳ+qX?71Z߭ Ϥ{AuՓiIvV/Rg 4ʯ\i n6hLYhs gjqVմV< Yrg{|˥N^QcFrƠvY~˙n03 nr<3׏=~Gà r.ݣ0ݹ5Ў. ](5c:QZ2.x,kQT|"nGFJs̘oa =p6rѪ`r 3X qvu&7ŇÊ',> Vq  zqlr@-`6{vk(ât%8/}6{nA5\o33@zb@-̺罗-'p mRQbS9(s1GEb} 4Ҳ:y-ʥ£ŠF5₳H|~sZ| eD`Gf)  q|`ban1d. az911 \M=DcX5SBNJ+ e]q Hz|WJ.)@De1zqecq޲ 1բ$V p;1,em2ZOHS*ǒTDũ 5/k,q-KU"ž+f?z;;;؋ֹx)~?L~ 8{N̈́]g9c媸UYUKIlL1#^+bY{#9q[K(ۥ--ZV",ѨP-Ө0 \0׭ENKW4~=~18v $2}B‡Kkp2Β갞C7@ 7K"˒Ua}!1, s|a5ҡ'L 럯>B,~( aֆע׭Ĉvv~(+ĝF>k:o|o- ,k+0T8Cf"f$)I9kQ ;w}%mۂqt('`< cKXACu2ց́30#lQ"Uθ_K6S OqsOp?v?޿vwrMIXֈ)켱MFbOz/HXvw$p9Lc1c<00t#AAE8p6ñySӅZ=$\ xE@RhCZT/ĭ9V"n-I%pյE .W`XL!]$G4RUt#ew6؛ލCzR~w)֒yO<]D(uY~8titWYvttWFm +Y˝'wM%SQo™UAKyKqvB:#y>F@xuXx‘ɸʷg[_"[ r83(hl? ~i>S/ȞKji\ g+59|f uJ["YP0!GCD*,)PҎreȵK NYې@MʦCrM ħDqXmHޱhױΏIy*n;Kl`kCxNqc{>:Bpҭs;rt6ݶ&7uZJ_#lo9++^a:>#6*& S "U&msau'XMr#V; […4//LØR*Y0J??h5vm؞nmBY\e'R\"٘ĒElyN]jhb;>xT}*#R|xH m, CARP&cR*Tz~AB8iB%bu0_08%Ȋx83ջDtU*hI&v:a}Mڎj⢪ ^RC%C;PrSRJa3:5|+FPƍ,mczD-vdQ;NxFUGWlT]3v,Vgi< D ق/] OgPp98C^Xމ48rBGh1 =Պֽݎ8}_l,0jȱldΆ#"HuIںÎiYJW|ߎx{|p2Aؠq2y^N۞}kY:N'lPw ˠr )oP ?& Z+u/gK)aL{4ܜu ;$bL܊j%ҪHҝ2ܠr%@qxxpObWOn;.B>~x_Mw>7Baz! R\$I}5?=l Bl`6 PN{iTV3n(}-J+o =XӘkNumm|x9?;~2?fx~F}iQ JFqp"]Ĭr< G4 5M x+Т{D2wn`[&.p ji(]sOK"$3D9̦r. Xk_8@'U+#[c Kzv yx %bqhP+]"6=Jܴ[M$v|*ٮI8yܥ.:&gN!DH̔qMv+w+&`D ;%r`gK׹Eh EQt0O?[SH7),Bȝ؃8 Uxo #Uwr(aU~pDd+]"_*qbd.g$6A';WE!?a@ ko>}{p:ɿ1A(!L؃?ktf;z]5?.F+N6$3$dB1V8hf;YQ8 =CҸXgRba$ЩOʚC~z1t*d5%˒rV]L'\ujaa?B }%>t^7Kiix`W;i(Ni19m5::+n2a<+"hOAxVn+~H 6t¡s =U Y_1SyaSsAU(X$%s7O4CQ)ʕxA6B)Zy0UA<ʂ9rQ:UfΑR2u-ac:#2t;4p²&9sb8EVc\:ևx>%rţa/pe|Mv!:^C.Ļ`!9Jo <[Uܙ0}ޯЦx( kKw:w fmd&xڷ4;,-F,/giQU~uR<߾bxz.o_Z's!{U; k} Azz }EN@ ^0_wb7"۞zw8Đ}5Ŝ"v4,NYP; 99tUV3N*+qNzfIlN&åQx Sڔgp/_Qb[;QcHP,GoX4iù#2 u`,zbٝ% 'i&1x+j7d10N\1X"˻$%F$ .8RJp nd67`!VY{Lu.jqSc1L=Ѫh\;"RN`7AT# ɤYب9Kɿv%[ Xj u vvAWUqaAm?S;_d|0mKWQ_,Z:=J)9jzǻȔQIV-#d呍)\ 5H'Q7M`lm@OWe׎'loi§E28 v]f֙MqrC7&N6bƎ{9VX 51LvGL;(Q]RIw54sXXZ(%@T-.Ih',gMZVK JXr|9vB5#N}ƂU4'L# &%H^4eAVue봏إ~xrEm{7SHǟx255pzr{@bh~ٹe^Tal?PSYv=P'1RiWFI<:9H}IBSrav0RzzUCFY#\V9~L5fA2 hcթיܩ3sj.llٗ fi*^vtȅ^h҅5.2@皷)eIM4$g(38锧9ʝB%[$MQ[Z4bp쎑aף,@ { ioeN8п&X%=Ȉ=3(`zePb )Ҙ>2o9D[vH<˶aAS ^߄*<. a%}1<0/):X|1" ~j-k~ ,D+ H dήnh `o>m:7)/'V\Ǯ+^v6]w{D.ħߤpdMe҉%w0Nmuf,N1#;p6X$VG j{'sN})]`Ǖ;8 ͡5[>Dg(2O`| ԦxB?`տ{ȿ՝P۟nv NaPډ d<XlIٺ|$C2C٧L=l6۳.F5hHEVi͊mX׫Cl& %BiKR;OnQl/P*IK=g}ZOIrWGU+itqz +XX_NtdGO^772Miob F:AFDo_[·tsd]B0,mBG>nCG0:h7%#ҁH2ңbk٘A6\eLD}*Uy-ˌQVTzGUI =Pڐ3L e=}8E}(ϴ}#^he/U<Zr:AZMni֛ a[iHd//{ WX$hag=䀡5IHS/'ۇo0۷f|P,㐐 v}8vYNvpz@vo>A㩤3őv??&U R qd$p(FR:+yрg:.JM2耻G#CR=؟lI/2r}mh*z#{^da`a..%:UCjT#.fF.7 p71ybm;K9`:xB9 JarYJD}:-.7%7?=ݎic{a[C y qC~H#h2lY4ZTDK\hGULHlUmm,4vck|a4,܋]/PXڑV'}#VᑭvdRGş4Naox1y)ECEY;(K+Lcd{rpaU*A'$rB9:co1Vݍ`w\xd9s>qb\D`!]uUs*z%`#R7d+7~!֧^Sv&ͽ;fj͚alQD@kFsK7EwS4Z j`%$ Zj9- §!_t"~JzShU._iϰpA.O76N|,} n]XA{vQGNbͨC-%=1h]8cKYv*p]BNJs^>K+5$R^u!Ngԝ7 /X+vϺ ;#karwߦ1+sMATQ˃,z d#cգH̦wn>U\" < ղxQTjɈ"+qaGlZJNhmjhv͛7ː>I͎octȫ3e`rP~wP&Jœ~m:߇@Rð~+ Rb>kw|@]m̮|--fMk}B<; gݮ @C:ܡ|hG'Ѳ `+c'vw 0.6m{4zBAvHB|8Ŗ ʮbD$ptre`짠~0" Z~Z~*H;ёD>s|o]CM.:(bx!fhMc׷Gv FvH'wPHGO cՇ{ӏ:>\lWl["\ΓQ$-L="wq߽ʸ=jۻ;񶑤O@ ϑ8vhBfl%c߰D.R:{L[#˹!>+Hv*ח>R(b\|,B n\TwT f`EРθhBG#7&>j@K $P., fPx,:M"w.k(?q#~/jXR1lrDCGhA~SnF3ZV\PM1^e}V+Ed+IQIkur;Z ˫)S|D?b@(W=~IUHm"ݷT}C?N|N: 9>Le@,O+15vefCŚr>2/S2؞vzZi5Uߢ|_fc7.o"㸭^a>l/)N+sQb-?So‡[_zlA)u?rX$_< -&@A=;F7lLa‘+ vOz*,r69W '/@@4yNwwTaBJ 2WF8Ă8wxrqHrV7|# Ms8KGL0YYP [kz![f$mQׂ>t9a`b K;=%қ=DF ,JOpS!bj+`B&stC5a0*Mhhc[ɥQQ; &=\8>^N88SGc+ pA,0 ̺4 [dsNFRN}%NˆF1]۽^?rK-Ciî>i5yuEn$bp9ùY.DKP$)eDϣ3CP%_@tx D. ;l7B+%YLgǒ% 38,tp)bnjG sAǠ}dOR?eڎd4yktqbDdYFfiPFG uOqH$Ho$^h8wtlx^U -C_ѯ90D{ Vv\'z2 j@4PG- Ԭ9iӳLq~qX-|׸Fe.'L0*hx}'8@L3wO?5FZ"#%0 aĝ:OFۤbJ}> hzX -[.>]LZJLs{ęsUbM--Cn8#5!^zalhI[Haî vam1 1[veq-\Ҁ2V3m|;Q]Gҕ%fەoS^TUb7BWD1H '-Pa>LMtv!DH)l=5;_FU"sXv ]S< m:nCšwi}";``n;F~2cnU {(JDOxZQY%s`\{z0.;)֚2'+B?{EA2 ]s1Gݶv̪۞.b{[#u Px>F!"qYbeޫ.||Ej?&#G`(,]DdAsO:b"9E8E;8XÁ2㐣, r9?z@M>4#z#ӎ⾪M@Qa.JDOن1guҧD&~ԺO8]aiK9@FI (voSv$6ȡprDe=7S{2yLmkJy?\i.-eX{%0>'>l[ ^4o= ^2E^ .9mX#/]O ̗ʰK ګk ܗ ؋济*?pDЗqfF }ߎbrM8?k؇"d(@:07aX|t+weS$Ppc`stc`{@bX_#!pt*vs q{(Kgv3E v)۱UDPg Owa%CW6WĒ~Lo1Bq{W>t|B,/n}2 dOeM(; y$669#GN w =j~>m٧h8srO",߲,^:'B~BQRe+vLjϨI~ n1=ѲUx*rW2adMDKt4AMzp_3֎>^,IFLw,R~PZ]֎"E,Ih Seqي V){bzW~F&+9wAXn!1twŨ9-驆YLdcەt҆ =l h;o;NN t ^EPir5pǡdy^=&2(Ud$rc֐D)4)W&嶜sLQs2,=@Qx(UY1p]RiB H=IG/!r/GPGla0c6sB9\.t'TiFi{m!aۺ1rMGy%W?TW_!H0JMk6P f4ͥzȅ9|YNo;O: 9 7NWDïwyڏԹo_ ; 2S o%;6n\$\x>-~X|x8v4F$JᠨH"hvx #oͷBo}=o5S|Mj`r(H*4rt(?&w0Y,P~2 P#fFopk7zcX[v^jsjgjY-q!_ֆnͥ)=5^ se2/+ kq/}'o]I~F:y&}$M,/S爮>v*M ElmXUoJ|OeN @A׿3DaxbLm'aÈrF`$՝|lPƟV~w; sұQG mOڶ2[|jx:jξ\ݗql{fzb w|MKCgEs\;/̙`ecb@nf /pL}kCϹ0tN|,$|0}@]ߝЗ$fUWǜ7 E.p:u٠ rpp} ( õX0@k Cgsi9JE'z㗋O9~@u!uī4 'nGu ßw85|5*()!{L=hsJpkqW|F6Kus6ˁÊOL[|\8H 1vj΍xj%׳w#3|1*<] YKC̨i}L/ܧʴhLw 7eɻ*/y$ 4`ߠ$p2pd+c*^tTW,Ovş),ю;4zF}/(p2ȁ6vwv}ޚr=wO`b̟I*T/q|vp=ńۜ~suStHo#o`ߢku#\׿X#tMFz`@SqS;99. %ǜ0M+VY-NgN',( :kѿc0bޔc~")0lhT k3ahX [` <mZyA ҷfYڰҌjеndx?zc$JՈ4Ab2#&[LBߍ(W!L!ھdo\q{P}(9RTMj=`3pwED)؎i\x&w/wQx9v0E"Ώv4n W-3݅`.rȎ1PCG0P ߅>1EĵQ{bpGV;>Ux>zPDo/1&a \^{s">_S)[?]@vYs]`B2 7&gc6r-atl TJ_&zر 2^:'#fs!#*~ظ3'g31H.4Ab"\8)ńKpDb,lKDy%+n|f.\pC=C7oR_9eK Mb3.5xUQj㼲gW $tp޿f[I}σ&թ1ᩁk]ϕgRS_a@;͎}ϟͅav$yc:{v{t}U_˖|>YtFAP7ZfyNű{sƃÙyOHzZs@ӑ ܊p BP7c f wɬo;:a ')&C=܃ߑ 2Ƞ6XZ{ Z^0p8 +czU6{vK[WY(o26]9pu[7}ln]\=9ڞ8F!6?ƕϧq[%Drg7~J+bыR_K# e$R$0z#VY8SyOF,J?<!`1ęN)4Td t_.<Wv@cb9GU쐳E-y{4bYj)D^r/a8EF}%|i%K\uИoCZL64(')2G: ^@QdO)B#xUezA`xtLSfÇ-2LElû0`׬Ԓ6/l J]bQC2!3S޼]fQ -ΎO,6Qy{$ ٜMjUV/Ws ѐ73Zwb}e?zsf4˄8LafmH&(%J([Tr1) .V}B,BcDYkߦ#Zt\gw݄к܌:Q썼!j*cwW7v곯hIq&w-12jcWra`'؀##Xj$-ı89Oi΋BPEKS жuUW:|?W'|dб篺~(~r'ʜX}5 2.+BqX sfv]yRk.~lɌZc5TJ5Аt#rHYFs;#-H EUK=I/]ObR"\҆Jtv)Y+:lM3RV]P*9Aokg/HP |F?Ph.+Y (Y\]>uW4S$$GYQY rDtOh^hYoJp"3)ƿqIwZ!wr(ޯy*JC{O/͔n04mZ7Q2l̓I#=I:n X=H)bZĦrgZ2,}B^TYgXOo]q(˖A.ע-ac g _%,cje:MQ& jP޼،PU$4p75  ,YK2p6gDR/B{lēA5Na" :qcn=*>'MXoP>gs5+7g^jԍg0# 8,hƙ-K \_JBdziH.5ȁ9 0#Y:W^O" b¿l%g[";F亦[ G`CaBÙH%Gn)-]F1:M|U2Q]6s3ip%쨖i&zl>PX5؆Spb?7~sQP. 7,΀ Mp^}xa@^OJZ%Szd*&(|ѡH R)%Ǣ, sa)XW|c_\O?nڼi.(sMFVP=P', P0{)[ U8MNcu)g[=69MD~oGrev5wG@z~$̱Rע9Uw)I(3s&UHdi%qGs͇#r0]YU.f5 vӘ:D\ela5]-r zR|bnc3B^#0S\ƴ `ܹ.W|1-eTL0/+`Lq?|ͭ0-ý~l^MSzP#x8SC.Vp߾*ړ|8LYÉns~=DW lT>׊gF,@d#gsij#M8.Mu|0vRs[l*[Zz4VRxG:H5!*'Z> եySO\0ؾ.jon`֐~ W:c;*I?TFO:oǝ{>6^'{4geOV'l9R9#;kwhB]Vf bDDM/ y) 3X8e1:(%H;D0ڏ Ff,nl/q>^_XEX97#pGc 5ƆJmoT!_§#%ؿ_X;2gt}V͈xdF$/)W:0-@4PhʽA^wK{ޗ #+2,E,OU$lH̪WV>u*4:_CW"=-REy6^(^Nah7ϯTgy<$ZrW&a"S9G_rݦ>'3P>P~zBՆ ;?KS?E힆)a1GB,Z]9I#(k#ꐍn6]`;aD>Sxv{O2u:jHl ގMCwm*aT[Bi~H4؀_7@Θ,eeߗA9U#?`{ yOW4RkB]z/x*RWrm>5A3Pd ՙE e h{3y,YP?jKn.G:XO"xsZ{`胈Ci6Zd+SX+6~{/Hv#*n|'T{Qb?c{<63mq܄0HR gxw~Z9nbWD䆬,{ |&\ dn(#") ;=Rj\c Rx[kM-#Qfߒ=D^@)Z49%cDJwJ#{2"94T)VVTˆ/ąvͰYdzonФK=^kh&@KtG3EfI^#zgɑ0^"6Hb,'r}ygc4j܃( ^_24>;I@\؎[w0Eͽ.QNU舮td'tB둝s @^G@wc肌6q[z`^7H$=QA,J|yHV 1Ollݚl7;D- ~nؘB `a|5V6f~ہsi;d6;Q&Wk@\K0zj&=XPXO,)2H- ku9j9ڞ '/p =|~}"4Ǹ%erUnjxM,[D?sHM̽v,&8Vu43 1 CQuALS *oЌS8=EbwtD$ב,*1EGYLT_b0:%UĹ-J 23H2J%U҇xIW5GvAZLXCJ!\0demp\8a_ɴMG Q! _0Rs5$\\XM+W[G:9Rٝ0uS 7Bro. NDn.<= 2aØfa8\[rj8ߢ/Fz%qD% '>g ҆ Pc1p !ڳP\$}-YbEMiΟd!ǩ/5&g&30ej38#X`g~Eq•7M SfDE2k6D`C_mTē_e \kB$4YRlxa eyyU&!4=t9LեM3İidTzKҀ}o"&# tww];0pu*HJ>,m"a Y?JJ vgorK?sTn&qcC9N^ .͇O{dwf sÖ]#'BTu_"uY/٬FH0K-_yvyNAǿr+sJ8{3Dc[REﱵudl4w#3_,\1AN:=>{(NAދ֕E0=}ke'h0Iɡsq3"le RhX/Ent@^boO*%yb7c_/:RipLr`cؒm6N-ϳbqJ~Fl`yd1n0(æl|įvruxf˸(yU]-&Ov$WIVqV)y>4%y]3^I{Eqb?݅ټOqGX%%*EaWT9Y<)"GӸJVЊuK/`s]g/9HJfA(΄ʼԆqJ{=,"6|,(LH2Ygs^HyR ٸM+#<V"w 'sR- FbXg4:(fWP\qeXKdP)jK`':>{ez#t垘UR&{ k _y9+5"6&0j3~U9P}yiqhUb'^_-pݡ6i>7Vu7|?AO^ER֙韪tǩ[HdU Br[V@-۬,0=\HqB$v4Ij-9, +M|4tsdQ3"Ox6e *S{q/>b_dr[ɞ:G b%?}}ZlL@L@O9z%,Df͛H1/q?Ga >hXSK3Ma[?O'Uc3`lew6ݚBA'"g%GSpS=W''(".;:`ROLsR*v.wyTC% xa9XLGs|]gեE p5ߙM؈xr+[zɏخnߡìQ[G,`VA7߿_fܢ`=aiRߎ2Q^6NW"{+B$V?cF;wpu1Aڻ.zD?A@(O޾o~7[PNFL'pv`L<۪gAb c5K|Λ ?E^G%/Ax{ a@Wkh0C.rK;O25s`O6`|*Z`}=EH'JZ<6U-\ y%|?#%4̡b6W~Áv^E#z͊L FMnOl%D4ɢWz *2އJ~f[!7i͙N7c]yșߏ@!醩ZB4QshٝTtkI*K[x Nrd94|.R+RwrHjzsE8GE =NɁ3,m43+aĬhM!RvI* -SZJ/cm>xXְ>e1tS{-dr\EIߐ&jӰFKoB9R-w*dz7֨CzeܿC ^7%{> cM3>JIf\f$Ė<$ܦnʆ\@c#)WBрIFhm9⁉"@$}@vWIVԩ|Kꕥe`$O1NZO8oG:V˟/:`kk ޱo4C<y"Ƕ4=Gaù?]Ѹ>>V`ؓsF:nF?ze+xw IK>h)P} :,ttEh  >Ȏ{-ymqŒ#&@[-* B~ҢۈA!g}Y*܂h^̓g%7JoQ[pC(-b4+^^@(i̳,۷׶m˰` 1@^([ab~xb@CU/uU(ۂMs/n(h3 s@[kEk6Q8dc[rebM:,v` Nq6h"mt1>1Nːuf/ &0*8_S~Q{ΩPϚK ؖI`_=*=-\/*ylxE 90Al.*YQaC[mE`E/I ?p M[H>IX>|9  || 6xWmo6_@[@E P0 -,"4/)۲t幻ϟ/^c_" ?]Z[çl7RWO'(w>n6|ԙoSed5x2<4ڃ٢o ee|진ₕ5U&P-jؚ+XK%KiZ7aX'f'Y:OKVj@$FJ!A2M`ZHd(zWq< VyahK捱ׄnDfoUS%~ mvP Y꠬Z=YgqGHTa| 29 œ:R*sVKMvH)P:珆 @ꜝ{kg?4 P[W*of-Z*[mdf4J [N؝v{lŲ2.liDzxBȉ+w .Xai0C)he(*7Eri9g3~WmxYs~Xq(5b¾6#{I22)S eO5췝{|L[lP15t[z(HRO',"A2N=iLfgTPI눫ѽҌT5[C"rDb݁؞V{[FmAKc+-'YϓHצXt?И/+ ܷD=!j JހWN"`}e~zv ;FjJ菒t}87aZ,'ηPnw`3i6,ktMeK e n 9< h'i^z(MIҺ;Sx}`{ շߪI;u仠%.a/4 ߣȑVvp)xXn6`]XKJn]@Ev1Z6 -ۄ)R%)kv%˲ Gspu=4~.à_yld;Ht^p&QfO^]nx^GsUDcgn ĮYE)q‡BV ':,)Tv1`ɂ nPYmB5Y2 .ʹa>"]cV$z=`cz'Ϻx_a*5fs ɄpET8JY*3bZ8 SDXgk̍^@" HJ[^:߹,_H&*BmKY@$mNL B`**mwΫ`䄁ҡ C[0Y <8|PjH vJ'J-j^9t,%!DwIJWd+q)TՠME n0qx833 چ#pZ<]B_N Z5ROlɾ;mTG%Z+\א\-)0+B Ceh1=`p!JPK00tcDM A:N&=DwGd+~@.ҩ\eȏ8 ZXZX-E  V4k& WŠmBXZm|}cQpPP:g'} lBcO/m9T_j(K$Y^B(a2Dlsn+ dˇ٢>g}~Y$`-V yGp?.ƚAm)v!fYd=RS__Xle];͒;qU!hGhZb)g maT64٣~A1d.J:?Op̓%v۰{J#4Ҳ; :A;q!SBBp o%zZ5)}p{AϨsbBZn4ՙ{a=sPo\ $,eV?qvꓲ=V ^yW3ib82:&!i!$Mt-q.7DYh}f?-iKrُ釡rJN<=#3ʦ%86T2rǧ܂7I< b]iz_eqЀS=(sF*xJ._9M{+|5vnkp`p~yV<.9$@薛Հoe89)v{rB$ ;߽bgHDyJ}1e33r2[6aS2\:y+/BzehESV]o[x[-3涃^\uaן9h/ǷWib*uPhWGxyvm~7k[?ޥezU_oY*촫//@=9  ]%N VxWێ6}W0 `v^[@}HCQ%lfiR!)9nOoS%([n苬˜3W^?5[*ye Xeo]K$umdҾqtK.~-L}/9eYF YVvhgRVO~J,Xց_^J:]m,䥒4F'ic/a?p} Irv-]PVk 7hׂ 鼕e끌5zHpԉl H$˪SD08=W*H&)1@D2M"V ع3'-$HUeyc53#K=D$- K!@Fug{ӒH VHGql&#ze^Aq뱢٣}U.TIb7hԿHʆL >aiqpFzsVÆjxw$ !2%WGoAؑ M#N¦1֏$7RB@UԘ2)TI}VE*1r")T/KӐ[z}[M.c TN;Cu//^fKc2mSPHSU1Z|GomXpt;^oJ{sq&m(ucZ),]No& '΅9U\"?ɟ`=R L##8{pψ ’9\AG- SkFZ*S]ءuF5)UQ໣Y[%iU]Z#+YT*x)l1``jt8èSH%sMNգzdq_q? m*BS Nԅkъ#$+)OsL_c*|.",  \"tB>PڞѢ,q׫&pugB>[w4FN$<ݧt|y(wqcF_o<@)Lp(\$HJ-qX­|T[lj w1"iq+&1\gɇy֠bP}0wimC.#ݤ6bEGF}͜ D xWn6S*P%Ydm]^ 0PM&5}ƞlP-;q(yw˓>_zZϾ ><_K-,lO\B\]KrMMZ0!l=ђ{F/ :#5t79%LTCm+mP$FZy  fHldA;vz9}PI RmGX8o%v{&bdɣ9ĸDd4_=;㘖DjThmt˖/a2 |ȽPC{Tu}Q.tHb3h_\eeCF]s-+;zp#lt1ud5B|H{LՑG`7v$H]D3Hi#ɍ~aMdc"5&aqUJUR߲zJL]N#$e"ud"1 Y}P/EjXNR5+^B_Տɴ١R8N=it)&psrG7+ʹ8dӔ!?NRIJ l FJ_3Z.*@q3p=[l(pxW ZcB!+~D[Q"_0ÞKߒН/ WR2/C/R仐w-TX8muy)O1cs@2yUsد5NmS^L5vqH3u/di}+@3]=A-SbBϧ e cKSSo;6A٥ӽ2{p/< aSQZ3*R6ԁߊ P7 DCm;rg- <->jdxVF09f{+i|o[̧SPce4^Vt6;6 w=susv䉐E_:C B]6YIj %Zp[JlKHy a܁; L \z{iIgK\}u&= ң٧lg/@l6.VH8?@tj;ZD#w#m.jTHXV+A2rak nZtt# v1;c@ȱV*Pi#M>767Dlh7<]'@S[ fv d5\Sa7x_x s stl xXn6`UhKN[@vE. P0 %,"5dd[v۷})xG^aUMGI-pkíԥa/JMj.t;S0% Y.σZr9ύ}2_7ŨDŽe*Q+XuUi,\B֍F$}FѹiV.*=a$\L +7E`k)\S(A7LH[4^ָFcfcR RDz@xYttsٽ0 9W~"8X!K6AZj!}7z1"*2 mI¼2퐈';@`QV [ 2=vDRGoQ\/Z^4x;L;{d)H{%[>>;fWXِA!|op{Ux4LC.ܰ@hZ[@Rqu >29WoA؁ uѥUcHLԘ󘂪arKLmJ$f,vɐY<7 yW7zb{1VpErXC0m5l_70qhAc؉b]Ëja wCsf;sA+ F,;M9F]87戧ԙH% >/Tү'R"06;S T@mqŽIeW TE*LEsyIJ^KbM+<_rDO0>``DaH,\vX4͍Xn1Aޅ\Bqbm% -U A(iLp ɢKT)((9,tTr!IN<kL)7a`#ɃXnwu-2ʞ5췭 "J7ۨߧR!n"r`7Wq۾A[=I-?%H22;!^RZGRRse@:`%[Hkg?qFOw(d%3WMǤiWCe*xw:Rm08?Ξ 6E!R;qE\'0ņ5Y7 DsqÈCF]6YxwvCiXޘ:\]GsQϚ+IކQgy%"/؜Xt FwͳҚfW 4n>H& e)C`< ad2mZ+d0 wC.ne[71 ϑeMy'fq,x&KqPTkF PR[xF`>pNE uJ8bW)sFiMzN|v]o|hg[ɡJ P w!BP^/ 'T9!S])np?sx wm/a~~UxBr.BPb#a[-FU> 7Nfs 7#o)f*%xWF)N`M,mATV򣪪jb8ӵg! 'cq@Uiǽ97{?'UF߽$W\vw>(6|i_lnn3g~+-|'9Iˆ$sˠFhO'7buO~,.E֑_6~<{V7D%u#KFJ)Ӹh:ex4>FѕwV/[?z"\'-mRR] PRX9- s+Z5JzUZfښV嬾! iUa`!P&G6˲mLAMRL 1`6I6:'3ԹA;vnt1#}PA攥TCFK1筱$Y #>. RJi R,h2du N(]{KJ5m(ȇY' ab2j2w<<ͼliGPCs7o2:G Mc3Jq[&k*ܝ>^f%ٗJoHgʼnhh[G[2H,"㘣Z*}+6X!-&Xg↕5NEIBu_+Z{0UƲ{jTLl+SFȲ[Zמ_?Nq<\{;'72H*TrM7q-P[$+U /:%3UG0;kJZHWe)C0X:iXi=9U)|O"l@ZHj|莝+>,A攕 .EwnY #XRcdJcp=_I4x ȣP^F.=©_.#96|%Tf!]iUGFhtJCV剪#ꃨt iy S-!?n̊7gI--ƎgnuN _/܂#yx*&w \|66JoXme($2aV6T,,&#O.7?F8(@,% xMW |nc0}wPAv*x)fNjKFvpȻR&zPrVoFz5Vn=W<,(H:G@8ΥAɃ_ʩj_Z  EraX ZRf-s׵A!*o^BV91Z!gy[@5@e [.ZFWTAv-oYYmʈ})P[V69Я_9Ycy#-U:I"R|k[fwX}#(R:.mc,d|ƗSv83ԍ|:лnd)|\A+ݰ>[%]>Sa |%w,]gXsb⊝6kNN>I|B<WDfPW)*J3*UcM`N#!S| @c\'C巽.cI4B ]g9r;diz?nYy,bFLUJrXpnstאڗ>De<)"TՃj3FlZgJcCNOs}G;dEv0 54zVҀܛw,#!UJV,Pƿ\c֫ff (.^4J8($țR=0g9^IAw2 5J`L_k.̎lcO8N)K@ӫ68z DlIp,lga>#p!ΜY&rKLU|yA4ڿg3zrKEV3A{B=NGHj;WUPMbluV1K%8Ԉvi@䢫!fyd)+n,YI[uQ ˖\5\2<ڰ >"#ւB+v(:ugĢrуFx=_O>bOUa`~RX/ , W Q%0 V댘7H;D/j2r3k[Q{Dy*`"3X0-rs.e#bĥ.D)} 2ҫz#U-Tp;tj1Ýg H4 e y%Yhr7iVn;|m%wCDB!Gm#Z4|y/wC@2 @wIbVCLB0uYvoQzlޟC׆BmQAQCѴx&w4vD]B/참njܞ(LnL-BO{zzKP`f@H5Fdqʕ(\5+E$f$"t` K.Ye93rc HO,5i=p}۲=w] 6➞JʺsИBBK' k`Mءs#bCa<nEd$Ǻ$ :oO;Qk+ )\7a(O1%`Spʐ 5N,EjRi,3],jP&$%_ dK4Qu͵,G{Y{Dx h:E;,Ee"K$ *N} Ӻ)&Sgk4aS~MyX9B!y6b]0Y"~WD^f*I(>e7r-˯)lB?L5ND w )5{9CN ?%AyBkɥ0ʫ -bK_zx5.^8NWpH\hӑ8{Ѩ9>ސ]白fCn "!K"iy3/qcxFUՙrGs& R<mxCROC:MC`r6u-i夳#P"k{C5Mբ*hCX WE$"L71v|cD BFaRXOgPj{U,~)bcwFKXc#wxKp"#'T< Ұn{Dq%65T[Pj{Pm\kIΡQ67RaGxE(AP؈3S(,ephy\;& [kڛwŌ8yPP501Ÿh@) z z $xXێ6}W0HPK޺K}M"("őE,E*$eP-{>Ejsfw翟b/,4qN-pۏ. { HK7 VUUbbLWה$[>Wr9A|]B۴~@VYsO+{UtSf,;s%Si*gKN͎YE\[=o6<>^?I> קVW/ QeaPx/q-[9<9@/J ,3KkR{Di-+P[.׹RIž2 F` >Ptέ^pX0sBV# CYl^{Am-M=QԀRS4 ] 2NqIK$52qԖ9Ex ^ I t/G,"ZH>K=_Bқ툺5@n=ybSb[¤UO{T캲Pfk`7CHFdt)aU;+)|>D/5&!`c`lړ˄ZMYPӞDL{$W2ӌkLzp[]8gׅkRޛRn55:FԻl]T6|d@<36F!X;<ȼclaEW nKwU2:K!Mi!"q~볃A{]O~QJrM8)"gሥ:(ET 2w]ӣBψэpKh[c4;F4aZ=K3 t!{5N6waj^SLVUnN ],@4hPkg\Ie ))8Ee7^Ƃ^W5R\B J8'ɹ ç#E6<gIf`NQyIr 6@ҧ)4}JFu,QUznjfyHT+H;q+d2X03.z.6~ d0tN< ntЏtebq\ݝ'ga >D0 %߆p weID%jtGP9m=,mֲAcBRG;Lr9F ӕ(E,P`4IS4\{{ XiC tu >I65%dnU*W1bC H0)dž\+zs\=f0Cde%"q`$\ސ@5N96%%8zPqzzW_e;r\'Jpmv&tM 3^ Y@rxx :#I+n%/‹Y)7iTP *ގu LM7KkAO2,m-/nqBjΰOWʄ>(ᔠd51zBXMI%Z*84gPe_[*pb !Kw %XO 3= `E2~Q"Lq Zk ,0ap.o Ig$y8'dD -KB3YghH'reC~3Lښw?ɝ ԃoiGSi71&Ky4ԞX#2q] ynO^GAtkO?dijw)!}=jF|/W)*oRl]wi 1d71C@9UfM׭,c/R1虎ߧhF_\Y1rBƣWQl FiT43C,?,Dʁr٪i,f+qY%,jdxWj\\֎X n>OH7+#cv|7So;T% 0 , W 0 V댘;Qctѝ(HRډ<`yda2Q,="vօ(~DNzQd 0PvZpUr@ҡ C,A>/ =)F>/hQst C 6lnq_H(ThBw$W/`4pz#<$F*@t'!mB;*&{%#Q ? 瑼dOkRK=ZRQ̥/<ZlS83eU .Y8Uy k5 L+vܬmwMǤih2|N]Mmp@pA#v\6&|R9O2o+iVǨbq1bM/P<1|w7k 뷨|`[l'ѕ'U -.TQo^pF:}c.hk5%ASO0d?*ˑO JriY]܌(%C{mG[oNqk6+ wZв-P~WEk ~dpQ~a3Fjq?' 16h >Q36cۇirOk moAd+Pv S\*]GS Snޟ_RE_ +@Cw?gjV7 rQxY6`] <@AwmP%Q12=nQ`aG'-_&,!3~7w/o?gWhy/ٍ܉+N+ VUڱ Hƒx88M5iU `6 [ m^ۺYHnL&b]Κ9v)vcVW;_ % wʨ.XڸR殜bP*$Wxɀ"\IuJ#@" 3 $gc25i=?m\?; ]~_WuS]4Z6Ꭴ͟/DQrKcZ.ǀ{jZOx)~őPHb?- ;+ q< % =cuۍ O'pÇ#j%Q "oRh?%U"- ŨJg#& ǯBwv Ϋ3mVt0QYh\mxMi!g?d<"S6/:~}9z0ZDc4,g{!mx]\ZN (C`ab1mp^(]fT)E&_l$:`Y3 cF_bs1 t}ِeKu2"n _%[ G0k% {X#13].ЀD@Nw>W0%YXC |[4Ӿ]vmsH C}.lxWb !S tX/(xŚO{=9yc](&jm4Bl-"Sga!{Yd, ƵFS !,7s/hC`Ohv/mͯڞ-?GyEW[<):a4 rM0>$bm 869uCr>mޞͥǻxWw>tE_F]^  1f ZxWmo6_@f8!+XZɇa Z`_<^$ ;=ذ+v 7RO'(k7Ͳz.u̜)[|'$!DlO.75ĬV}F^ց7LޫJ:[i, % i7a-X'fQ>3So\V7;]IrMTxq-[h<rQ3enִRz$;E[ݧDep`[}To#}E2YJDNQdC-200 fNZFya%統ݭ'b`c>>yA ZkR ha{ÈDRGk^6| {Fl;T]{{ER&UDYJ,䣾54AO\ali\a4GPװA<׷=$Lil0E·= ,ړ= {ca4?D[ X?\K᫹% Ԙ,1񫤾frKLMJ%fJ,] kܖYW_^酫O;܋"ߪ Mt/8ǩNgT\qz;I߲&Fcj/c{<{UsOk 2sD#Q#KfT eP ~+6. &dk'}x;4vCǶ+د+#zga w;Hf] ev#foH;Gcc&WD8IËi|?(=y!Z'8©ꞛ`y0"̬s ox׊ohxo6^uܽGdX]$n< ^ƂD2-R ^x=B ǃFϤ'sa4co}ƶrw7ptF6 ‡q pЩB_PʢÊA hxWn6`UKNtm[ņ- V0 -,5dd[vۗLw#3{wʢY$IإA喽a 0U:t'߆yx ZXذ^C] PheeTxLH\6{YaL5^iea`ۊ0 l+H"8u2Bl;hP ewVhA+'-Dj<0Ē5ywD ,y 8G}^d4۰=n;0,ԨZ(W _hQ6x;L;{d{uB/7Y8l F}Oh2ʚ Kc18;Z.QN 9$9ɛ W'{RfՉ{`7v H=EDɍ h!IxI*qH)J5+-Xb9oS(1 Cd^]~ǔs D1TUx{N2I>$eh{CQk( pwEL6ѣٹsxJ3ӟ[R*SVJ}H)s3OCHJ9egP}\4la5z }.2I+P2 dMoki?9'Lq"/Qq@fK#anc9e!ɚ%AN% ZP L>' {,B)GCjdGy6bXfer%$zp+ Ccd'A^G}_O4 >To],=Lp͈t|NE{#.}4Odjn9T$p9P\!*) ͈Keu߉ Pu4&{72vKqcgXޛ:o`)4`nf0--XxFҷ\ }/Em=Dx68 4٬vqf26gc*[LOtQ7ݖ {bx˫o'lF\JE<ԍ[]7[xpyKgGf׍ZR+=(Fa Bf\4em1[^H].=o4umj*skn!eƒ S-?[ =h,6 Ĭ1:XցLNբ\\1+e Tuցuhv(0U?g דp}?f?s} Qt .@a嚤C_Z0!rzKeY43eG4k:)Ƚ2iec6d)B1=Wj>BBR@D2`ZHlHqrWq>!Vya%kbwD"y ARÔ@FMgg<%8FzLF wLF+֥p^&BOea4̄(X+l(h.4a 7yҴ0E[݁N}+e\~ {cG4S1L; X?\K᫹;$ <\%[cVI}* U#"HB/]s~ߡ>^<0օe cɽ?sJR-{x0"ǹKꈴ~u؊ :Aj+'RW͌9-TLbI)E?9K'QtiʵU܋GO>t<}g.<ҙQ; (h[ oԙȔVM+Ot*ZRf5KxIc6^ܩ?Eɑ]b7eQ4:Ld&.Lf Ƞ6jtFPgʇ5n۹nDNY`jUx敱lΒÃ`l95@0 .?gWH K46IhaN!ssrI^$^"w/.C2da^5kȥVU\zz3@kvi}iTSٔb_IF˷0/Tk?&+\_=.Jc}kJe>eDᥫ4B%!mhtax Dni6(1Qy"C(F)Y^__ڴ,N8Ͷ ?MZTV~J ϟ?W|FhYҝ_ppӀS皆Ʉ;{#.SSU(>P7ƆZ;Gt!✸ݝ>-~2LQ.Jvt\ &R%^aFϓf1:L.Te D0&̯cȚ)9- {0ϯh85:Q4WDZHGՔgIE D:Ǟ W$-1P*8C8P4%l8lPmÞwŧEE]@2 +/߷2Jf ǰWr 3 ˏ'r41Őo:C[ƮYtg|Q! AoɨnR,eb4UzW,;1J0)7c} 3jYKi W<] =9G ]Taq1ڝl8cV x>/Td/t4T9(LXr Cբ>a̚> zR vDjW0*p"jD̯+)eb{J4/ `*bBxvV=q ֶ1:+/Uӓ]6SN'ԣ(C2x)!"nWJ$8IWYK0ksĂɋBȂ:tM_eQG;4Xn]Q=RuL j6#*qnp=q ֶ3~tW\&]YKW$$`:+ÇDpLw8ԲX;@K)s B.ZX3E5 !peXbKe};nK0U~Ww)+YNIW|߿}roJ&Ye.k ^%~{Bɍz, '7[*OW_p);#d)5esn:彭/;,Ƙ9c"^9xY}%"d<2(\1k3>h7_qxQh;A?Lည!F 7xWێ6}W0 %o6&m("űE"U A~Yg(ٖ&}u9s;3Of;VReѴy$ bcsziثrҾrx٤+]Ʈ,[Vr̒ )_lfO bwfy?2yw^ XuëlJnN.ҫUE7Z*<vy pjaa~z Qt .@R ^Z0!rQ{ eQT3ܬi HsH/+HW6ϹRK9F`;>Pvm^pTrBʣ C,I>o]wODϒ#|- jaH!AF kGܕ%8Z++s<orʴ%^A摋Hwv&hg pǣcۏ qv-&^~[}ݭ670y]@|cW,Ⱦ {c{W45MeInL@,IHj,WCyLURYaa9%>3 j; 2aMEVTx˻Oݨrv`.<{{SVU_@`= cR[O WI_cj{Ԯ' ;q5CNpb *ϝFvSYd5 >7ɅTo'R" 76tgk @s.IaأZ*xk*LS,y)FVxl-#' N% >"EӅ0Gf1h]Ȇ;r ,QЀJ0Z!r% 5o B#UY'lʿ<9 Hv1FN3ac4陨Ad}M= W]?gxطv*t\Q.X:N | Υ)7{^/߰LF;#V]0O@gY8:s}@vO!yuz>/xi b:~ |n/v_kD9Li,v9ufyύ26N 0$ä('i xHxt x&4u(j3B1!DS@!vI '  ȀZ%b-/Jz&dC_}"0%LaG5u`04 )&6Hy!r$+T(2Fc1f2 k]D&.3MUrh샤+,ι1jJ#B5'MEQWe}BQC6c1eeQ]"V<.Z6-g|T]ն @\NMy|5YHߣnILq|/JzoDha?|=':Ԩ)qk~B~ I+"pkІ8FJF%5UV|;oWkv2n_0(S, 8sdULqkC"뱎( hԪegn( ۠^BHCM`_{Zo=BϵH\ sd]]TK:GoObn5;e|}$hlnD0L #vi47h p+ujDcUZzMhB9D">6aRNr xXn6_Oqs!,9M%ulNҭ&h]0 tHFRrbؓ펒mىche}ws{=zf.KA. ڠpx?} #|j<:mmәT6ӎ7;@D dg BֵV G[Wo1[q L_IxѪͤLB@60TR %+,:Z #3'/ߴy?C/BcܡɤHšpT#@"3r\8dcdF^-IfF2a2ImNƕ,OUV &1ES74uDϘ*Mt"'b#ڠ6P BHi8MRMM,9i0 S ,6ϵg֖$ MTuZI 5- 6!< eT.ŁZ(NPFѺNyTLA4[ Ȝ636޿NqA)Hl[(01niWdHhBF8mk$[ykPefKп4TB Rߒ懈~:"}BY />/[sǫץ%rɭ7UihS+A+ů皲єUwH@DiЛVe*ݢ 3\3 nF*bp ]8 e"I߷LTa*:e ՝i^xV_H h5\mB) '")eZi1~^3iRoYv b߁$-2u@oU !W NTŘaΓ?%!E{rw!{KeHq@߆ @ºוc52O#mZatٯhfm*eg<]{oK0 JN@FxT ,,^'纠dqdLxHZ\Dvb?9UhVꋃ0ⒽfTg\I?rO & Ʃ}}%&7y嵏yجjxX,XAkTL'T M3 6U'ڠW ܥek >ug  A#{HHK踖/]*މ8&G4|(1UUuK_/(J ۮ8F&Zf='j`[zayjR50iLVp$\r0afjaAKNQD>ܖXP$C|QLjc Cñ6 T_ZbY%cE#Bh4 ^Wn]SaϯOPCچmxwe<ȊfCX'Iy [w7>Ћ"Uc=MvUGC2xHߵWZ'㟪Abƾ7؞-o\~]|8"nKZ#gJzoC Ä2_в}eچxVt0Am;4nȾRۀ־n>% |gpk7'<@lph^;0]|Qr{##nu) _ ^_nҊ`PaO@xXn64HKNtM@v7`]ah"LI}`GJe73p(ǏG~۟޼bq4l|$ dž~;sÞ=2*5vw&Knk>K\9xQ|mU 1QʾOQ\ցU>O.&B:6*7򉒙4X'f'y _+-,,w\ ހKLJ Z0!rRy (%8fw,YHAH6^f ]n\֯",&*@mJ5>B$!΍M(6jDAMn%͇" ReڒEDtD ab]+.ߖ:z9; {'d?m]0ɸU! %F{p 0?HOgBT[g"n_Rn>'\ ZΥuts"\3:ReYoŶi"' CNqb"#Gd{&73:m<\p2 ;1 3fÚ_~r.9nMlqcPͷSD8Wh8ɰo05k8eX;ۅqru_nb w H9>!!H1ޤUtZޗV=֠`g'?y"}L_;>8i7Q{ =YQ AZ:bYn#tkg]cGMܶP x.KNO6 ;Q|=/K/@ >tYn~rzh~ORsµ0FT\a?^i{)}Q|SmoC=ԙa&dG13W9{jRm;8!vW4`&"~ NNExXknHS( DJVlˑ%3b1h%f7)Y 0wS5({jRؖfU*?_}ѰCÕE1 >| w @?鵉n,dYǙ_ _Qv Y"E`R.F+=j߭ lAZ=Z;lsaQyn.BB(JS6,:i4tDѕ)VVu߶&{: }Qm.]EZfVh7A 2鼕#+/sL#0f!3f#ieZ Ve*`3: {T#yDVobn29FL@m:zn#|`IZ*O4@$ۼ4Z54y "Gu\HIM4r)hn{zMDR ms2G =+ w!|ʤ^<Ʉk["hةX:42tlWOS/;qE \^nޞ0J)m-̤eN=Mv)3jj :.G, ʥ|PԔ2bGqC%) 7XTEtZw`2}wKݺ\͝n(pKu"ƔFnJ Q))QSO}BfRLv S4%SwZ<%9\WMSv+-_ `.3jLq5^1`aDgj-|*r jb(d5.wovEspnc83cW,5 R~n2AmQ xv}Kؔu:a40Uh2s3h7TDc$_R"y` 9 Á'>~{=*kUG?_q{}Ocm nwn:K,ol.|﯍.`{KřGXj>Y6,%HC%M,hzgm$1OQ)p(4$IEEvps8k[pG#qo'9 WZ7).\Vw[ -mb(ƹ8Sд\nښ; 3|CL.5̵; Ң ScSNO@kߜߜMo'ƅpa)P48{WZtxDTu8JUƱBJ&^ ^QZ93RhzUO-/m57.\?(ʇ6=iyn=ᵋ *?k9ErE:nBMi4 I~طX81%ǔHRLȤ[˜K+о,,7ȫP 7/ ͏Ozn/EwP6\'pp/4$XA5}ᲆNfp ?ӎ=H9k!'wXoaִw4`ZΊ֟(zw? m~W.$a\NHBQ(\҉k?rgRxXn88ڤm ۤ) b1%Z""Z)GG'Pr,IYyxO\ ?+Ѱ)鍕ˌ&Kz+][N="u}c(E"򟵚zoRzYͷQ¾^QZ~Z h&t-JXRn:e4'IEoL*/6YK<· ņ~!%Rj>u%H$l88}R ΈLƆ)<#ȸLڗ?Ly+f} +rC*Aӣ{)!yi`S7*mf΄EĔYrD2!!'^s2NL t4IA(9 L9x3ep/,Y[ʴH X4i*@cnLx>3L8Mn!coJ1zЏuCnif~AئDX?z eq|/ R$8dďOirz@56gϕ⌃&}ʕxT0M5)Mz W67p7Twݹ57v{+H֡晚LvL5Gx8vԨ84YfLÆ *fvn18 (] 4gӗv1f0U')No@0oGDsA+DMQm1AakJpS+tuVwaT㮏?xY0Ԉ^SGJ niJ# ne40cVu!S`#ȭʒmP,TG$c>u 9~BNOȚ RY4nPa,&g_G9p:>ZŸ^cѻ.bFq!O^H{o|0\BbkQ.P)S K }^֔ ]*sX&T%d!8g Y{ƿ 1g3_:޽>݀K 廕?ѕ2Gt@WEߤ-E;>8~R/u8pz끭gøfjpaj ,OzJ8 L`VIknӌr9*St{Eaбbyg42 Ϻu6G8ƃ0@Ϳ!_  obexXn8 ,9$qIg0zA(-DdQCRv<<м>~mMt@s| P,S4t`5 Zj5?Jy3@*kp;NJ@J]/}[O確ź` `ʹ/C;ƾV7e?'\vp(FXzOs=_o4XGz+RyMN_BxXn6_O@i8" h4Ɇb Zܦ z[zo6 󵄷,'|a_lF8E5s{A6D- հz {Z405D(bc.XfSw.`O* 9ti3)JRea`Ӄw?r^7Th=BYappgy'opҭrB!La-vEN?u5cNܪ]da1=<~TYup3`D7xO,~KI.OwM&sX<oöڕ#X]qnekX$xg.X#s1Ѫ\b~plŗR3"Xk_n똭UƳ3z%i6qE_jžH  }~ xXnODTvvP\I S\fw)E c5(y~KJ"ۺD.|3Q7?_b;MA. ٹ܊ ǫ;v+>litM՚8+"-FvεhYObaHO5;P/8W oh`-ŽҪۉ4lʳ W#-20M6HvtFApe7;jl _2@ҦoE3n9 4b _<-AakZ]AnĖD诉 d 1mH*t,B^)6ȗiXwd!O7h*]#J>A:b+mksI/3&t7M!i< $z q*{6bkH$CDmH{ c9t5nUNZ2ͤCJ谉L 1vUA'm H|>M,LGGD`ru& USU61 G|*SMU 21|^3TiRQtzX_DZ. @+.3Up 8ŐELßHCDY0Wy?oca :u3w[d5]To"7qKg8һQu_/V!lh3{fӈ. 0MY>b7$h](:y~zYRZ4JG\3r'@1=I+# U(cTjT"['.5;c+ cv)D%BiU"j ߝq]W2>u[g]$+U,[j>DwpoWP}*_9-؉ &&U %jS,Fq&Ah}/VcKxz\avћHw[A[^Ąf(y& 1. Kvn76*ʸҍMYlZh}M7?j bS"s(f_>"M:ң")n"?A PRBW"Us'r.3 SZM([#R^jϲ=N|:ЍNO*,Tc{PҮRF' /wQr2sho-M-bàDVF&ˣv; zA - g\vH*&NHT? ᄉJSgDc=$,GFY);% -2qJ$o?h_5MvHB|z-y+\ ެ삺 H*g;'NdjIukMWTYnb4Ƚ8,}b_]}{dG*t&5K5Îtl1۔ag j`r6\˘Ûz7 ᪭|pphS7@{v/`%yv"r/QmFXJ6Wm@.dD8wa| #f"vgP4NJJ8ah~ $}vw/@r! bqpH Le?UlgwXdDDR-mc J* 1~Q3SYT2w Kyi f*Z:v@Rq0fdp9R2+B}eӚ*)Zkb#` C0 lQA[0=> d.hG]G7 =3S_o0M5 ʄ # b.G, b(ѳ0x,8>f[Lv@:;{e e=A`?Q7DE,ޏI>bɨg jf'to8QzIN:E!{6U* \mgJdލp#T:4&96J۫֡/zQEy9mG{ jYi_,M/#T`0!Tu5a=U,d&)Trz;OVl/MŸ\~ߞKK2/ιVyT/KaK'XBXDGp>]1f'12iWK K>s%a aӪUhUJh%pkY^]޵0q׵%6Cqm"~?::u2z4F0cJif/UaGncy9HnW:\VOSk-?.sYJ:g.1ERm|ecTp#>B.bU>VRE%dY|LXlf.*d}0Q+Y"YF)1s]n?ۍ| | 6qٞd7i"J9AJΣ? (#v=DF|AI3;gi bA}[ɘ'#qC=J{멫ۄUt]UqWp$=Qs[__72m=!y$kd\B0W4Jz|N}mpBO7D@:u;w~F_OwҎX?!r R]g2ŨNo350uR!&z;=88$?Ϲ G"Ԋrź?3b^J KˤE._fvlN0>îQS'3SDbƹ\.h${1slO U],Tƀ[Wr==;=Ͽ,~kSqnjxc đu`,4Nytf{E]3p-?3aql1^Qe#wEIqޛv=}NpP{l>f?Xtygӳ[t[Gq&3BG9{R=GME48X Gwx71a/gvf*^o=uG7n[ ̦ dU.cT؁#r81w>|hh|rܖ|җji-+4ov -bfv{ޗLΧ bʢ9^Yo⊦V*HA JxXn6`UhKέs+Эɏb Z<ȤJRrؓJe'qRP(=xyyϳ(bK oRe JbTk3[7wdEY.j|d=/r\t,!di6Q)sXpeiFuK\U`ʴa|ZTX JA| Yó>?_/B  [O`zSefR8oq%9)wrY,Y:aFRz$icKͧ`Ԩ(Zns-d&{[ һ +%*!v[J5uΫIZeڒB[nxrwںbh/Vi;l HJNլ3u³|U N)NXy,frWHe/7@eQ Qr %yt `m׏5aexv;"ܱG+BV贚jG|}۩ =Ŏ[P`Ӧ#HF\#ZKXڸB ԈȿƒEdD0> ʅT,7C-& bZɤ?qxKzɛ/-V;] `-@6ל×#XE'\>G5rkS!>`5^+<Tj~EGXZOmi>1U0|SYH\ $sFJTCM  ʁHv`#TQ~>H\ szPf,"Hr,PlF)m0S]v`cf`~@ R\6f0j4AQq0Zk5RO E.DUT;LhmFEA]Cިϓ!yû,H㳣ڸ):k4u2^-_k.MIR!%AOf+C{T DH#růOkiζ$l}4E ?Bx~&Έ 2ŨզNo=hJl[ZIܗ=ºr>ζ3m!L&$eZ ڠgt5W_2Y2LtUƣ>$lDW"L7B(#db/_;{Q)ov0 n&lp4hз8"+_mhpVgw < '#gᓢFvyĹ3jfMb')͜hpʩx,S`Bm:L|^++>4#.ɔ~3KI EŃ6EûF/vke/ }o&ʹ88Yxh}A>X@Qw8=g.bU%&m\5!g3ğdzX-`w̐MJy\44jTfssÍ Fy/%x I{+=&h4!4e?  !4xYnۺ_O)`ɉ6c{M M2` Zl]@anأIv)۲$.aP8|!7or??10:hA}'wP&I ]a{|>OƪLwܜqaf1j;bR W.[E6hg$Pc.OZWwaINUI%LrGGRBMfXO$.t0bϵwkOX͒xGhmQZSp e;l%uWi! &j\1oܳ4߈ y$ '$aQnru0PKKX%3їNQ`ubܦFhV%6_SGgOQ/笪 VGׅЎu  Bڊ# abΗb$ppFP(f]f1 <̝ιpLKI(=UKZӉ d}YWz>p2 GuJ?l(0hPRO{kIEBe ФA3K"l֥r;8&b0zFv0dl}lj7yT'c,p`8yc֤0|;hUj]l3`ѽo_!-Xk\>߾cOyA {Jz9n <ˠS 7(~PORm8ڷ0ĞS369O. CṅSjuL]i$wކvQX2qD,ŽHl #W>p3 ):8ﯺ}4#}o.x^wʅ.-<3\ ڕןa#0mpre16S8h6i=O$A7ƇMz=:wCQ%"~v!Eu1A33]=roP>dPXwrdܘyr;}nou*[T^6mrpt ?'ǀnxMgVw9\7D8ե?5Phg w12 cVY wח=reO~!5p w`~XVY" G^>~Up$W,Dr hxXn6_O@iƶ" 4K?a Z:ل%R%);^kvGI$v 2Ex~yf6"oTBɊ}tn^TpEj[^o\SYJO{Fv5lEcA@'-X %-Hܮ Y\}d=b츴ipV΄a9%R-d"4]m]btfAmWy➯ {' K9xй0Njj.)V90.cH[TٖV  6H*+J.6*#`@/y:=&]sTy 2ҩj#K-vn%[ǂ<4,0%sncIdgo9qA (5F% %Wݶxl2niD&fhNS3<ߊ at+lE,Ypَ6e ΨW{uiHT60k"6~%j+~bڵLv$aZUcv&*.s\퐯ÿ4S~ [[Ta?vHҶEX ^ų p`|S|3!l!{R{lIؿUi}ou25w~m`,&We[?& -cb-h;U^bמX- aZ.C=تOis&cW*Tcc&2pX#&"vuf"0d$+!Cf@-!%b= #z*dAǯB^n2X4L GR r%,α)蟞k=+.;MTri샤+,θ1rB#BsOwDI0ળO(眍/Í1e+nXG=u}-E+w^5rݑOK91Ődm%jXHߣ^Aptq(( 9"Gg |}b]J`:t|H#IbdThCRKH%d*;چlr9|ZST"f`g*TX%RT]xhuK?R%fWzQ_:F]`p7)~ԩEÏ8ĕZM:io}D)s7hxvAD=G*$8]{]O#64cYUΎ߾=ٛ8 ɰf9F9tmpo69b{-I 3ZV 4y_'n%&-YCIwE~ uNK2raontĮ8>\z"d} XTCp݄u4;!VqGowg+S?~RwCWs(B=_v'튮&3ƩRg+A[9y/Oh9y,ӪfPX u3 ԣ4:W^l1"Se#K2yg+v9;zTvx_tO k5G=Hn(ݖJEPC Z c " ^xYnO!)˲ϲ- /II|mEQ+r%nL2K!EߡOI͒(%EP@;˫?|Rg`T" م܉MWoٍjItnWس^o\FsUF{Vܒs C(x?p܋R.Ɲ P.Yi܁,NK7 ګTZsUn LRX;(.t2r:ÃiÁ뱿aoUbĒ}NGari*X(N`\%,9- SdSRXgkY )d\򻋍, ue ĮNL:@7N*P%=VRͻpE9iDWa.I>/#6$-K':.1\Ñ|?یRAZ w2%n=h* 268^{Z*[xz\Pq'66 ڸPm?^Ŏ/Dԙl+d!>hDuibMt\پNa晞lgB Ý6Tq';[R, m\kR&.'b+dzHbP3XjlܑH}DtaFduT;7  ~cMb׏RUP4h9SkE){V%UXdQmK̒3Blk-37^VښQBoBZ9t3pH(LD3 "L;/A"y{rnRAtHlYqle 8鲏kY,8ܵe*Cœ&>W\nJsG-)d/k.Aď0ɤ!  2Fуpx9B?F0:鳧^8ZmpN:_&{]pX@>IXIcgD3ŨܦL*?=TV}"7%|M]fģZx.-'a"5WlӓόFoӒbcS16Y{O :z\-3p!wYæU]Dtߙ\58Z.ARIclJՆCCe__R{e.=m%p\f`(| ~@u# ,g+VZ/Tyazmϥ> ݉B  C)G-) T 2%4!ؿPl** aђ.oNr*.)Y@o:d{GG(ui.eĎ7t德4z M# :I,M&iGAĐ@ɔe-RpEL4x?(6C OEGܿz0q.H>ͨmk{ 6BAD<蘁*k|E^WASbs{jPꝾgsA;I4 jUTx_ X] Cߊ.)VN 7+z1m,MָFͪma!%zd#Hʈ+\n/u&QH 5mSQxA>D] sz|2#&04`ۇ)ZsuBHVn֥Q2Qi"bm GK/ڽyb7WWg6Tm9"ӎ8E1TN)\{ۣ2n:Q \A+#)/Q" $xXnz.`I3I6M EQ,hФJRx[c;˞G@s΅}qwoYj_1{ن=M]&.}t^' ]%.Rg~ͭH}M8&Xqh/RtXV;`)Yqò['xiұ%W lgJfTV:i4%o$LrQxAspo<|x1|%dOԓ k;f"Zbu@}?̸:}ZXmRQ9 ]I.-ʵ}1 YWCqC+Xa|ܑ񇄚LY9 w$eMr w,3Ᾰ:?z D˘|RšB4: CO[SJyf틶tK[, `i|\#P_#`Ǖtr&kVSPZ00TYO,rJ,ۅԱs|>KDJ fG5`EyL>xΗRli Ƅuc̨rq6c@X֧d4|Ѹ#4WXsjF"#JP[Mib B1f#Y&Cv}Q']B=洢Oӭl'ߡg}yTݧ]%'+=s ˳a?^h- (-);+,=|6^oD>&|\\N8Ԩ+N旯ľ*7"Pfj+|.:S+kFE5S&{ dT䵿xg1.ݐѣQd{ # gfrUkъ.u&l[ \M,y}C7& Oea,كgr'u\ޡ`;.q?(T\=usU@<֓pCq Q(utwrf݄SQPYKd2`n"^/6:njNK;1zQ}vo|zsW8Ϟey cH3@,7vzT^5!f Yf).l08DykA.åsҋڌf?4 zu^:=#n>l0Zqck#.8↦[PO^qB&Q4?A/^Y7#rxXo6_EXrIҤak0 CAK'Lj$eoO;ReωS %~>|xJo͊aԯc6(f0^‡w0r gq]i/zbLTh3Y0sAqQd3C'ZVr>\kPx,ixtH8KHXtyj4fBU˵2]R+8JN$u4r2up|mǯ_)\~y =Pd:#ǕCv:N(RGfi\f>ER4ex͜i]E#y"DvLg2n:JehU&at-tUhB G2@$Ǽ枣[G<9"ZG5.䁬 5mGm!\;z["HI)S5m! 2 Dw8tE;M2q7qkS Q] :ȒjАi6ubIga~f۵ض,ѶʤRtZnK|fBE%i rqK\ڸBfn:pN|CW*,QĖWƷAG>$^:`tlŠ3%{ݩ/uӲvzl D[ n ;]hS+C[׊~wյavG,'Jü1TmԦ揹hٺuKTںG">siX-/`*3jJq6/W*RxX/gE' f%:f"U\`N_',`K. $g4ea3%kNb& idJEXYdZ+M!m8)XgKߐT i!%VcÔ|XĄW!u'nRbkFŷL)ZK ) 7t=1' XY9ZpwW>迶uinYfRmy l>/DH'6*l~dЮ$er w?fgϓyrvJvQ:|Rq1y\Us#pI {FlSK=k 0o=,[%Y|DƮ(E0yGh t:^! yQ<&c{]~mk՘Fi ד9 ʧo} TY .%SY^ z{vzPn w~9YϮ,ZD$3LzWTt>[,9TtrƯW4]/`K)ܽTVSW \\S%30-pnܹꤣ"} i[MYpVcZ 92N0y_FQ.'ԧmnR : MrZK>vI(wE8xgݥnƫм^bQAND폭'Z'*ȱ 2?rU,\_]Qy v%pxxXnFϧ*@`"[ޠ1EX#H59 h}>>~gHZ[&sPo._zs%ѰM KS&&+OJO8MKw6,d_JK_8f$3+ ZzF{>]i4A؋sΥuGozWsD!u%sVNr*SXuh%I]rel{oQVg(nU2Rs*;Rg"S[5<щ@"'47Kk*c9!mJk]aw6YL#4e76'\d.&SSM`6jtFPgʇ=np+gn<TNYj{Х祱wړc#5yhMB 26l.qSHiIXÝ\Y%gd Y'T&5н9=I&v[YYU,@wZ*jD䨗K*j3>-6aߧ^.(7T 5\þ-}(lJl̤U e̷#MVzc;ۘK.-Kc}gRe~>hᡯ4 'D4qstS(',壞Uzd pu[C`N[%17n8S6 p-RZQ_VyUUZ<κ_!) SjdY ʩʕ_@炅RcCW+5 P<'&3GQ }E { igJ9M09 lnI>'xkь1P|T*Ƕh) ƙɳfɩOh81*ҨGPDKjrgAyp1/غɷj Xkh;CUiJ΁k m6lņ9@ysxX+{kI3_֍zs{6ƸaJ*3у xic1?~$o7a56:eRZyl(?bgy㎞2)L& @ u!Ccb Hŏ& kj2ꘫp!mT@b4X kj 3C݌MؽmcB8AFsUx RyNet 0FJ .ьX|W!Rܨj8nCP`>ͶSYE<򼖓se2wb'+a=l.IKPiWh 4=#_c#pMWLHذ 0T2N7 vo0 }|rܖ^xrg u{Ue6=vQXω{$ u@ؑ= K.NSRS7L -,爟Lz>9mS]/ery_z&~Q9@J!W%X9b+>jF.KJʡ=ɹGA߯Qi[3cu~K\W [G;ǻ}qvxEueסv鹚m>iik54 >1y5/i|n}sf]An.0wJܾ|&n)np7iynfRG憆EPP {{&xYn?OU hF8, `S`Q jY#E CG}>JiȶmQ G#{w7?bS7+ .Mم܉ۏF|jٳ츋ծ^oXdUgLzV݂sae)ip܋Z;Z9\zDy®G^|ʍvy'zu3͸y4ֆQ)skesaԊe'ٳ,I.t4r2u_dG_tyϧT [$IUpEpo`Qq'gE%ezsYTВNA_]M 346{\$.t!lU!LP5RMpE9iDWa .I>/%֞-K;XaK>@Z߻mm]{1-T6;%WOD峍hoB;J1tfwnJ` R6<DCy67" 4pڄ.w|.pCխX"mWmBjumrr-t^|mLJ=WB Ý6Te![KR,*m\kBnz^90/]0^;R[65b|ޑH(Ì(;qRq޹Y)H\6J端RV 7Յrtt,6z35\Y{gLJK1OcZ`+S fZϥ3ZMBS"Nv` }<;Ξ>NlTD'nv76tM p]4xLD0VJjT56PP+LF:fI;kᦺC3ׅh p0yP8|#!*h #tM{aVn)HaTP6+̅k3s @\BtmMTm#\IO68j}mwΞŀɴ3`<~Ag7<^ mH! c~GzC] e'3`CktzH76F;'?'M0Ë/P5Ep9;I Q xpch6u|TSߌ>a (_p-[Mv*#G,4Tc,}`]/M񬰏<*fؐ,*v->c(fKTe G(vzgZZzEIMKؿy|ׂ.%RRc}XCE0jůrlGh'IUcjqee WKe*PЗ;<`؂~[KZ$_h;Sz x4Fe7kF]3[`Gr ø.AYD ÖlEf({KV8j(^.6pONyYRIh`00)As\<H$pHpwjU,\SA' (Fm0?P:&-;B(RCv_jֻ@&ziTHXmڧucKa㉑6$h`5(|} >+%>P<E?b%bIɅSƕʗy+QHXkS6%ھ-E95ps:%xPZb%_X{M /jK7"W K*KJAs ϝkBs[D ;GЋ:b'KW1iuhbP \WHjFM0Zm 9ٷI;#yG>"DиQ]uv`fwy( z ӯJ]xQ$e]pF֫p`[=l!n3ެxj#ަxYdۙ5,Iw=Ee-U%X.k."'TN.ssB74n0ΙOr?> tDo]%  'xYn8_OuEXr&iڤC4Aޢ8DYȤx׸'o(ٖ]'-p@ K7{IaȮN$l4g>}aC(U٫褍ݮl6ƪwN݌q C(xpܓRN{+P. bqkuHKgXzK׭Za&-pU.Ն (ԥm0VjŎUW96'/_U3L el"W8 qDZgtXQHaNP0z*"mRɸw+իLAu経IĦT} Rҋ j%KSknӸTv< "'j;a%I6J!o~pLJQ^ۜuX@!-:9W㒏E5o!߹2E68 30ʦNEԹ J,H`#) 4#?ŎOE꯱zs?W V.M,B 6/n8#o 0iH9FdcTYkeDL?BxZ@G[\Z}ye'>P$u+_ekx`_ r:*EʔŒzvrC鸒qB=}gToߏ!뚜QOqus`SZG)xDzߦʑ̥_L&(D,@mT⒁@Bz H>~ .XL8֢]aս6RYCTфܦ(OS R<+{*6Cmbe !v bDKᅫN9ZaL-b- Z/vJa?Kx&)!9Si,mJ*FI4u17PRWz? {J)k3',VL'~Ouu"ӫߝrXmKDw}vϺU7 ;{lܔA!2ޟasMđ'<pv ZprOiRy(o$zY갊-V>fÅ/T ohG*r"X ڔŬLOQO;6Ԯ&"@T&U„?II=!:+7YsIV(]B3ySyаЃbȅ͌OU%p`=>"8Mᐺvr2 FvQ|dfo4M\|^sLyꃤA䭳Cv/|itJT '9gnqLWvlQOE,qx`E~ł6T@ "  ϗ vaAɕ‰#q> -9aF=(D>@587rd3udijy⤲F%Z0DRF3 7V$$g _..oo#1ZwD]LshtVݧ>^C쯨яXh_?]hV<21?bie-Rnj֪,ۮVTR^T_T> nR್0FѫW ʿkggY;>=j-ϣj]H6ήUXV#nHBTH x[$a?ys(Wöm􎋥]\#}Zͮd'W#6VC,C0ȱ2^¦\WV+4TU-?[}eFtקrss'?_}ONhM=m >-)^hxXn6_O@i:"m: tC7 -l"5d#%[v~w>SJWn >)PpEpU*gΈI퀔N%zQ LY=9πHv" ELd fܸϥltH*M,u. ߛ^mYLcʅ4ݮsK?y̜0tHP ܐukK&xCx j@.imqH(dmH5BcF4xȝPN8 cX4#vS[+[igly8Fq63" hy!s|i<uKL@n嵿y[06$n`s%WIc*-ڷpMꌺ\u("wQsDM_zBaʸL,FOc  X`oSj213 GuDtk]֟2!M-18glOQob"p[9#$L_ 2@2jv(nyY%7S ~~41W_K@g9 }/0IK!J Ƙye7`1S0?"6> P\2Nt-i+,Zj=?yg2Pb|(}vK$qE ؐ1e`-EܝNH<>G u=tU;^PW]*@DMluZ*{C[_F0c4Jz {%?V8$ԏYzzvPf0{hbO*n9('w.[0P(F5:8u-&zG;Yc;2ש6K79(<3CGW8971ѰONt 8aB4 6"Dӣ }]뛥f|t_O.)KNW6 Omq$!&iK `ȆaQ$NkL0ErLL@K!K^IYP;lA+Sv+/`xyw);@,=?Ċn\U 3FkZK29t~+7?zx2q}ƭ L;ɧ{Mul6ۭzsC3Wn[3!l9BLk;V6;p!0ov0|Ae*[}%gtK-Miݸ9߀p?(XxYnFOUpA8cKR'h>P;(EPȑ0ewRԠ@ ^%OrYؖp@ ˝l<{s~El ?߄87$%b߽~'.*Zh C5 Z>LMXUHBZ u2Y*9~G=+ o!_2hEFt؍{k4Q@ب*Y^''-6_N)7X]Ol7mª+S6S5qikF2= #6a\?-Jm\gB%.%4^BW%84:3U\tSKOF=$.uR%shن:^ Kb6n#Q(S+F?_˴˰@1eTޏ [jgQ7n3wp C)M1dՌ}z%>ΕU)<JP <>Eu,L”5KK3SEDG8M5V*?ggt1 BqS r]h__4Lt4KVF(.fFwpl ,} `gZ ?x3,G8P#o'BC|5 X8&kQ[ W ro./Em#"ېޕ wN-P-&<?xX@|C$pP2,' _QIt=<=}Ȃ^c]2Ry,X>f$'Yy弝rO I4t|Am8k3ަJg,wo|Pb\QuBA6ΥiW Xa]bqAE{|'#Twa_ı~A۞ Ce9mK'+NÓ"`!m短{уP]l3-%HIP'1]ٓcv+0n~H)"NC[&Erd] ҅Zw n<˳h* ?20rE;8b7v2=*+=Dz_PBN66"'ڸD$4Z=/!D]v= f]B^ Wt;3zkP`ӦEHGdȵq-ʅH|@ KW(LE pCqB]t3 89v.tNZodx49k#c Ẹ*]h2WSvnK-ZaE sOMOxZ≘Z[[G(zWVLny"p̈)L WM  5#ևk2 >\AT̴Yh 1{nImZu-a84%O] *p5bAxFlP563h= 7U{ß'Okw ܔQ`\IN0]{/hsU&0xXez  Zwy)v];lcU[4`GQx}89GIMO@%q+K6V䉿K-=^3b]`)^xz IF d܅/Uwvzs$uӺ31Zn&MT./t\CVMFn'5D[6փU6[m>ɛ.h<^"S=!L=zY)l>: LY,#6&.$+VUsg>\N&o'Q0.A5ߵ;tV$q46MC~ լe[ul5-8WO+6vCJ=fíڱgTJl&3^-*^xXn6`UHKv40]aK Q C@G6TIʎW{CɶvEGW?݌~ȓ`yEw x>~a#x*">+m۝DU6ՙs]WKvYEW[%gF+EE !KaʮKQ\tʍ7\]MT9U q.S+a30VjzY|.FN/;\u=9E s;WzSebR8q%91w,J ,p0KgRH Hi'ږ..W6#z [~6$w׭)}ZOy2ި-_+;)d3,U߃nIUO"0DH2>]oٞSk\n Mؤ^ٛ~M$P8g4"_:ɤ4F8ǰ[m 5'Jm&LRK7DVZ@g}.&  ]Iؠ揶2Hl[K'z;8:n,jȮQU(/]c3;׋N./$;a]MtBYkPvf1^hL2 9)xvd4]UEN;ԯEe>ơTZjρ# 57AG0RմieLCI⚖Z5mt`WުeCUko1l\]HNarY3xx7 P6 ʠ~fd#޲~YP6l ˭Cinn66V_KxR>BLN*+s#n1cћovׄzu,64daonƣ,z$D5Yn<$a5 88E, xXn6_O",k@q]l:Aq8 ZY%R%);t' %ٲvtE"盿xûǏ%6KGޠﳱn!b=³bymnn{rd(=%г%e>I ,wl>^Ű3V҂* ˯amcaµ;,lt*aXeSoOS U.[6BI.*_i1K,?yភyea>q9 :ƉB-3%*T=e"a)r+2"`=03j!"bOH*",e9|0 qi#8b"51SW"#Z2B h(MVBκMu,xrBEټTzNm,,z *.h$n[6)McD&4'rVtmE.A t+l #X4IqCdQp<JzJ ʆLEN9 xshhKV4sm;XUCvF*,2|!_ۉY<ݡ4J7)è~.,smr)" #X ^|ACMDC<dzX̳}˸ Lm0Q=dZYA0ٷ<)a 4n?=W:z. U|-Ko0Uʕa$]aaʍASGEŽ(>\f# ʹeA!7]Yl"n."BJ&⒯TUb;I {%&cZa]%t,T+vego/[Ij?rpb!pDe^O)6J̇}7(Np㣅|]mE }>8>xrd+ڐ'Wo6 S>厫sf 4 p[٠sw.WmсcraKQ'Q*I8*\Y$6 >hef5*lD|eRkYa4M¦%54g>ƺ#v)],vz˶^R=Z'zկKwRnzIجBXeޢ/1HS!>[]MLȮ0 ~?^{o/;~kXҮj7γ sPSԁF@bܲuKK&!|P 5ipH{vlSi T& mc|TYDCVʨS.8JndoSmYTL<Bcj)!O|"Pf*Ys 1ژNzɪ)-m<NfZspSi-Yyߡ8y *ȭÌ;nU_.O RM x'E`@σ`>ILV34^%ȇM 2VIc?hI=T-lr Kн ;~n_(Cs,rXzo_y5i`ht&噟8:ع|}n`7Kufưi,)chiQ6( AK5&.A(!}JEbg6"VR'< ٔ3 ;W@hb3gXt?3Aw|h"yGqj걂㩿pc&խG܈Z1o9Os~PATuO?3+'|c>AX>[z֞PA9nXeGXܹ0SF쩋TT=:,ϸrLs؝{أwT#2튌aPi@!&N*,zt2/jaSM7+eU)/P&{'ϐ<hYS3..P8;LS=ycP!2 ~$.i*>is{*>f(H}wҭdX 8?+oɴ{T[\e6@H {}2s!]ebڸxaL Wv.tJѢ/=WwnFV#\ƷU<-2'yze.XqJef+'6ZPy{%wDwX oW Fr[yR; miVuO`TL&Hs\mW,mg&>rfZΥRCka؂0ރcY<7W/N lQ >I'lex ~=+7sEs2#?zV_Gη R qf 44(/TCxXn6`UHKNݤ@f6 0 -,"5dd[rRYxg>]ysrWq0l~E2l`?~aw Tٛxݮ|>ܜzgE!OǽX*1WZ9P.[~(d%Krn,QLp=(0iHEccLƵvEQ 3dKzBa,F/C Q(015:N>Nu뫯M˲tz\`,h؅d$P7S{QeOa'͇݁R!Ɩ4\&d "Mk&E+ +&B `H/ E)$D9P `'P R1%Qp3*W6ؒ\eI^ 84N!~G 2^ 4B&h_7LL%+633L .|(8 K$YMr0"Tqw zIY_~80lO[ ٵ̰=v$_Q`-MenU})TZW.jbK sgجdG/Ea$>`h<2t9ݚ xёCq E $ۑŤ |JM8RfTbT:[nnR}jzV:fAa+HpN155)x8fXWeѰO2c6-Le}[ܶ#qb}o-\?f@s$TL{6II$j48A~.KV >=g~వ,3sқzć6wҍza-CXfp_tq>ˌruj81X)@b4*Gog j"ݩ cMN$̺b\>^@ 损{q I.E7\]Ww] ܉Y!+ۃ%+A"~.Fs{t=;:חFWP7hzUdenb(&BJ댜UL8(JtKxqHi'Z]nM֯ѢY4hlď&]\Tf7l8YMJ{npkngﶞK"NA Y F!y?׶q@*d-'w 敘c4D WP5ѝtNqq* ƶ@,<ASMmbd:5ВiCpׄ~jD4QZuen:t}nBD;ThӦ+֥U\ė?d"Do!=I()cn/!,&uU\L;]ݾiZN6h 8a3UQZ=ŒڮNEx#4F']ԚT^jݚa4=Q+D̽/KiLҭG˔%PbF@ȍt\rg(ޗ0s3z}[ 55U-ة 1m)dlyLUqg fERn%]A6.D:fͺ魣:7D1T0*݆S]Qn qe0 +Nkkڷo#vUT??iT|'N½uF[ <5=t _ts_a.Sv VLr^sb `5}iJ 5s:sX4rͣ$zAAOQOP )Upe}p,SXC]"}8iˋMb :xw]GB/Ӄ*FWCZ J𭞠iyw0;Zi!p~8ٶ펈u!,If#)")OQy#:e⚎3E)YA_-hٿg5Fɛ{oizxR/ã#Wպob!DRfۥ积Óc/!2'WaKZFwM+ gHC")Rp4T@ 5>?pp/O-4h3'#?!I^)^ls34hm'X.nZ~P5G<|}r7%X2{\':NS~Rov:~t,Gvlp?a[h)N4n2݇#w336?rjPHwc0dru QL)B+si4} +Y퀌θ%FQILgYs !L6&ë`,PyQ46{\$.ZL&A75NJiS hVҵbT!Lai2NsmVݛ~pR\|NMᚎܴMu')3eP]e4o^ܮ zr_η-Q/(KvQ3,1|@RMM*{* $%B73G<:n.,!e۴l3!4Մ~V Q@o짷/1(/'3R4x % 'mJQytG!U!T6=iOh>rL/D0bX ĝx7A m`O/l J";. lHwxxyQV9Xq8V_Y&]H`/.Q.o׃QDf}|%;4m]o\/$h*T3#" tmPePM/sL24h5N&[~f#=@]Ls$;Q1u`m [rWao~~"vf;Hh\\+*8> +m۝NXU6ՙr]WSvYD)gJLVf%,!2.Yq’ nP,z6V]²KLvGR$BW&`ЊŇqg1vσgyG {0^j(N`\,1w@/J,p-3K'"%1Hi'Z.*`LIźNE& J4T8OCm;7jiÝg ZI4 e y Y$mir7iVvxl%wmB!Gm9#W| y+u@20tE)wSe;Kn[3Mm(6S%)l5B`UwከaS.m[ՕI rŚ*pFHcG\Ѿ;mZTcAH'6E9)L12`) dP`zocj0!3 uDd +]{\:ܴ-p'׹%|;yZTBj6Jk81n)jŞ4yP,\fLk&E*L#!X.R,FLQ 6~{0d(j= nyQ/7c" ?\r`gjk V8,"/&3x!$Zi1~32mzTG:3AQpHn-$<3aDڰ7>,_kDW c}5xQPV|a#QPӂWKO=S+.UqWp5$=U#[_2l<s[[0;4zޛ-a{/E|tLbaⓍZӒ~B I#0ʹLKQgQdfR7'[%r=qn-At͌K !ao:7DTX..á0۸AKo(H o;4%(Kc?6^V86mZpzcSZlԇ# u-KYd#xf#0D)IӠnk?-EG}'sM>Kz?nGmdN%αT~f0V_wg 1~ #ԧͱWN+Jzjh= Q_> >>>}3~XxXn۶_O@ɚ&,ɂ k4aZl"}w(ɖ8ND;+6uy6 ]Hx?~f# Uٻ jW^o>GUFLzVn΍蹊$ O.lAB+' GBtX\ :`v=SnpҥIj4\d,uil&Z(z.FN.>#y?g*1b~^0^L W ^0HN1w24p-3 g2! +YX L0 + 8YV눞1TlD"#ڠ6T0*Pt-tpY9iDŚA$ܓu+K&!|P 5ipH+n;|m3i )ɸ|"-,ע< eTI4Jnt[/b lU.H .k#%Ẹ* &-cb)h=];JDζ*4-"e҈lͶnIu S7ں %;2uhWXqkrLDLßBDrkʖ!NY0_0YϿZ<^HkmVLv-B-f mm*k*ug=]JpC2 dg̭}a[:ưa!{AyѓxYC4>}xF'vZZEtjG_D{]pG$kXZA8k +}K1NYΡSpSIgRV]j.y< ٠#!WL]3\ŲWvS Dk񧂝8 bK*WIK+"i( vPaj* XNwٿ)`;VZi`Bas~..`_XzfϤlF#i jEa4Cs~jXјFn3Ocjڰ y\f%/]R豉G c9Z-R]o/1MeCxQU>.؞CK*ḵgg%=s@!PB_pر跘aZ,/tcDIB%<{_zd$_O"Eu c6<|D{u+E,]v}9A3#> saa%AO:]Ft;p#Qoܟ/2J;mru'FBZ)si:#$tʝ,`E)ez {&QHi'S,s獌IĮNL{ Rҋ %+ hR< ykJQ< "'j;0`Iyi$Hr+;_  TIAZjgs׵ K 8eP'j^8gy ^;ODw"vEE)w^!_,{Q|ԯ6{% W@M_"[Pwb[\*$"tŚ*C\OyC^(aӦCH5Fdt!Ųu(2u8 dL_BxZTw,3b6I{D nj=8A`{]{^]ִ-p'jkm: ' CG\mj/FUO>ypo*U"Ui[%:M{Omy#gЫc!\Րe2E8g"WQsf DGE$󢄼7s\EtBjiT.{TjbR35B +ҀL?_6Lu6GVG ^\?(!K<ַc0tи'` Krn-2?g!C|0huu`)˰?N.7l+dYsٌdPn>QV{r3tg/y( &+'bsL~ʻv|@H@:3{:w4D`ON d2K`J d>Ra<~4:) NZ/a;*!܋1ɲ6rU74P{pRQ>K@)}I;W^>U1kЂi|DiNS!]o26{-|nU&-1J^%k%hp7I|%*zLouH$3v /&T%n(Ki8(<᧩`Ú8fn43*[=uvAw[ogg}=W8O|So\=zw(DQwq.M>Lhfk4RD$e2GkA_"vC8=y:es1;9}Į"vw9N\yyMMO$f[,Ϸ [4:G;̅ /9ًWJ}^RKFc8'mHČv{&>6wCv[ Lwar>ڝv\\Ѿm>rlf;!f^r"OzJh[+ I7(R;mzd{'ZXy0?a  PF5xXn6_OX& h5 b Z:ل)R%);^Q`GkQ$$[v8~w"<ßl|l^h@fQBm"g,pc +G/ƪ*׆Е+bQ|.F';8LDMa)l qH+B֋6iUj|uORܠ} wt֨lKm\r.27f0CD'"`< Klb |S 9 $'d蒴ŧ}ن;]0@[Ttʥ|הT[TX[GKOEٕ;d#5In!!4m>iQ"ob$pS6"SAS 2@4jA&f1D}_ nBEr">$[ru:XA~-jgGB%ǴF9/DB+"S4cFZf͖)35 e}J CPt[F)9@F; y"R, .l4w3(! <3R[GYم=ʐVu[>[ժ7@Lly~_6;Ae$- c/ ' =E#aޓa|2>>d[tQVaGicJny'͈#Bw&[0j9v+F5:zl <"ۻ4ױ6 R&Eނ T?SAG[}%7..DW}\%l8OuO2SkN85 o?7F|}1k'`%n8@|4Du'cO\]l ؎29lw>hr[:T|nq, $|]mV>ut\ϛ]xQ jcSo K1HB]-(u`yB%0X2i#Gtj$re[ߪ$3IBZۅ*_nXl+d?^źԁ0HK%ĝ+.V`%$fWxwSxvX5u5m5󨟵 lR?}c± gA1RA)c{TŪ*؞#b1h O){$l1~Y}[B?t$P4+uCVY^c-4^xXn8}W*P8%4c(.4h-ŢM"U-Ae;CIN@PypWW_/_(ER6YivuQ-xXi-${,"W{)p墫e!KaʮGQdƍ7,]=먮f²KLv'R$B`Њ'Yc],vtEGy⟧TkK0zNk`\,1) w", ,p0 "%HN$-/]]V,&*3GmR>=!sL@wA*SGR URiw^ON0R:ahKP m)u$i˓ | |P=CÔ|_Mg+kg\K *q6p$WӒO |*ȭRНpFhgqGt|sQ^ݡ0L&F 61_?$!Gav{=<-c(K@66IjK|uyLp%i Rl, m\Kr!R70GD+EiH%B]l <⛘H&d0IJNǟ^ekdZm%i:oGD+X<{eitLjTȪ;+'޴m;`A[bqD5'؍@~̅![Lh䜑RB>s ̀!b #f*T$! ؂LcZ*84N!Ge<r4L0h[V }$33AⲺ+DKOI`*,Zj9PdD{l[GX-Y 4gkI֑n`ql.48;Ǣ R\~.:m\wm2Ȟ-ٟ+;b$2jT_^AQN$<#~<>OǧlǍ n6#|OI ?<~BNec<R7gDbZkS׈m PWjGklV:fI'tf:EUDUqfHxG:#68LVU(#wj;*:`w&[u#ރIJ7Wt\PopDR8Uj=D+tvKenW4i8æ& cVPCܗ)[uP9\ 4pc!exM]tzTڸ/Cő16!KkuPk,`yظ ҝF0mqNwMsTR{(OU._[ec6 Ҙu8;>[p2ڏm3i|~N\ΖV$H$8Bc/}68A PxDGϚכe/ebʞ>;1wK%_q}EHX>(e[lݗꞞXO0[đo2† Ĕhڱ[ekF Hy> nAa4~6hV(>ݍrEJ=]b'8O+4+QK&h"&R?Gi c c;7zxXn6_O@:"Ik,.a Z;8qyf*hacMzCiWAX,ҩjRm} .HYE*pܫ%w#T+%e 1(Feק(NX>Ƃ5H6LZVqІԍ9+bQ&S]/_vxm__O#WE`*i)25\Nk`\ &uFNt0Ze\'>iRo ۨ QLyBRiw^ON0Ԧt(Ж\StHDǓ | |jaJ Gvؖu3n% 8za8%WӆO j e+!sE;Kw^a腛5QtZQ[ ]b67&s;Zn'ag=vvxXwYqC78R?f][ {&>a-Cd+װ_Mh2t9 O=␸jZg>?憟PBxl?"reRe Ũ&ί=aJlS>$aO6x gک6KgWG>ih \ l8f8 2W ah]eqEPz'~I>ȅ#(/̆#NCG1IiX nӎ|},ms7tXz)V 43 5ej8dZܗeˢwӧ^ 6# h6L8+^RaMyʊFY}4 Ho닒b0w]6jcR1e{/O2[g8{/DnKLMĆoOxLWqz<?Ĕ0N1K|CGvJ O@7 =8l|qv1`8W֜T#43%,Xm& G06J\6<xXn6_O@ɒ:" h4b Z0@P{ \WiSsS_SucBg+iBq^̟Sa!-1@٧6=1u7`M>VNd!rr)sFLT_ 2@;ُ@y D}gL l Xlf.j "$add34LhB4[Vl6f GFQ -%BPtZMRrCaD gn,|QIple᜛va+66'aút)I~ 7u{=F殰T _nKKUwYzKJ됤u")xaLO B~iXRPK&/ {knI X+`mb(VN)o[_Oxa$ 8pE PxDGǭC]NmosSz˘}Zx' rW{/^\y.fWxC|9vjƎf(C]joLluznRv,U^_hBڤ9<ހ[&Ԉ y y9 qxXn8_OU",9q6MlݤC&A88H]==>PR,;?= P$37G?\\Oȓ`!ع@ٚ}Ʀp+Uxݮj窊܊zgEi._{Y8<ʁrt]Bi3.ƕˢA5]H *3˴aS>e*ue{l JQhPk% Ϻ͹zܤ% 8Z[ y؊r/qMt']C.E, ́l8ʖ~-48`S#K2)oHMیWKdK 1vvTabueRv VlK\x#(0iH5FdgRªuvp%2&=0]<,R!8- dPbzocj0!3C8S]^L>ܴ-Hw%6nS4tT坢\ L1) _ۮ^]4J_U<8-cز/I[cЈ\ iQT#RZ9tS#H@}TC@AK 2[^h{\( _\.46{Ҳj ")a⣌2mVUƯ03f)6 3K[I3ʹX65AQpZp5?Hyg y>]wt)0 LKTtF3)XmvyxGvdG}5R~ÏRcs}5o[65cjf3;6N>rVc/9I ]mx>'o:Ә*q^+e ?#d?$UIc3jbTj\7ݶJ9jݺ\5)ʾLp -0 jK0-iW6LtƻG}Iب]aja҄_Ǎ69¾࿱F羰oP _^15vID':i%i9YtWt(E3N~-j]v:~hSp _}`;bϡ# 5ECaBAnyt=kXg_$35LQ ;kWo܏+؝0d􀣮T),=VU2:jC< F;6!ցNޜDǃ3 0}Tu3! |}xNOv$ ՀUނ9%IfM1yeVY*`Q6`8"?['3 ԍăocv5s۠`хT2A~)5pm@V&oщ>GxDg~It *UZ <0?gWhrkfq_wğA]kBA5H;HR6|0y_9ϫ1kD=xA×b?YMFp &`_!)kFاx~Ća{"f_Prptt0/DYe_rK `]6i! $0mؓpm;߃vi_ND谛Yj`g5¥̷lG26~x9 lzuquʮtI#QǬ՛ןr@L\Hmi"Nݣe~s8jxXnFOU Dvر%9'M[\#vP!XKq%]J)5Q$f(ŖH$r5y旫7pG8fFp'26Y>q'\jW`>'ӪIݜ1pr$ {X٨w+'*,jcixdK npYꦐjbxʵa7|d*ucl&bqrDѥFN /vtpϣU1g?VDѕ0^L (NC`X&3r8AJ'^RXu̬Ɍ A$Av2 j 4+n;lw]۴D(^M>y! _2 @w)1v-;& 8 _Xt U6}6- JGLȚvj#&Hz Qb,d[c_iDY7&,LM-U:6*=jN!U-ҙZסL̀ؿeq[I{g%[VzɾKjԳHQFפ^o\~jmRb)x+Mq!2cz%h3e{+ڽ5z Iq:ޣ+ k@M[ 0ֶ-> 8\ Le+ؚWF5`pFW$yLPds$7y)J]iLa?L#+.rT#<> @'Í ':[4ꉊWXi3"%LCܑNo,F(zs6_ 2ZBn5v8>+ ~諻SPީKͺ$@`n dd!j E{hC,9JNΒlZ5k:ٓ~An?&gj!Ru QMNo=dݒlJ?oarT药zH~њ>Sp鍇3nxu$iF04.3x3@mUK[.<}֊ޗ{p_3G|_i-]([NXmQ¬Bz=ǧKduN-aWw%Ņ1є֤ -([?k?ӀԢ isj#+b-1Ţt_1i<&@iSrX& K1HB(Msof[k*=SjK_Rzț_v0x]ak@ldKe~xv!,حhOAdfЖ6\.Jp1xngV(kX]4QaSdh*K5)XTFo^6I5]6ppxp@ɋ ^bFF9O1@}j,9`|e9&x(7,KLͰyȭZ AW \ I9;_ ^N0zsNt#j!F"jV`Ն(k7_| a ٪RZYOs{?14O aY&v/f=O Es@ôi{Lٲ*dgcž<>}n=_=ZXI]]FfSAxC}Nmr;;vc?`4C#{AK߉9EsTb(G߄ v.>'7Xw\rM]biߚpα"ڟ[~JO5 ʞgA.e3ǫ{YN߬~qՠ r r ;xXn6_O[@E6 tC1 -,"]5d#e[v>@ K>)^~8ty [I0j"v[d^_|dE\gImm|>k[/gQD3r3%-H]/jY!*>yq҂kvϕ!֞dK#pNA)!) 5lMm7v[!Q)6| {W>!R{[aKH,rq-GƲak#弄0$Tu*#JtwRg ,0V^mF2TTx%JfRMx%$hnRuQ Jێ\dg0CD'$n/#qH-a| /1i(ǡ NkU;]}nis D&磣XAǙ^mnNwҴyyemL\bS>E, U }V4!4f6(sL1!+D-ᔑRAzR)C :dGPdb^hkTȨ_?OH\ uK@}qWDJI):3Uf+pm\[V%C %7YLR AaFg޿].$@!I4` Dn#ycjD]`^lF씼Fn#7"%@¼sl,UQ&<2aSIy#72]`=[xο%xM!=8 \O"`$MguN^x ,j *N8ʒ`S|#ÙVs[P}ՀCpMj9vӂkq"SIF[2pq x{,{d2~aW;j%_`0qiYrrE+ܞ_ r1MO}X(݋wqaJ3;8r뺤LLr0s fVov.[Œ="%MxKb~27g%A"^YdIDMEUu[V_12T*O}*g1but:֋R_@>fט]Cg~˘)xcvx&q7d/%dp2\`F$f0 }o!5F ztzriWJ6Th+9ak5¥)8<iaI0h<"v[h}̮F\Ҷ2nw6cYJFv5t("33˝Zb: ϕ mt5 dl)K am$l*a.k^2*E*Tm:l %^܋ 8W\qaٿWk]%;{5'a)2\Vk`\f,j1-bYT Sy`[aVZMEFHTVޖV.O`@OQl|H.6CLo ۠ &B dvrs!ǝv>:`uiQ-A1ϔVd-O3pVA z@))9mgSrθ)K $*qV`8%㚏 r  [Bb3n9r7ViZW?//-a;+땃O$zT[ `:Ej0Y3u s,Efڍ0WN!MiC|YƥrCH*ޣɲ!:0-əl1`LMGH,#/#~H`B^BC> &2 04IWax*z7_qfty0XQp)nΗ,J Պ;_`mP☽dgYVm8EQi 4>5iRsu*Ry"ÑpH) UѵR)C g{0db T뱐Q 9| =ٝK@Q}ͱQ'D M{>k2k'q1o]] F*4 A8 KKn ?H)yg eP̼P{î׈U|D}6O`OS0g Zkls(zA' CfZ~66wzm6ABLu~]ڼwlvzϘH*dA"f`uhtY'<±7 ''A|t&ٸ^kIDS$q>+nr uxNC"mTԍ.=]|w/v }[ 毩ʠտS<xJp% h+@0w,*mg{b;mY7sa>}i[2 BK\M4eWjzG neLs9\R3')p*qeVW\ ~&odƣA6;HH!?JOz,6DZjq&I4G'*_7~ Ȥ ['Z)] ";B܋ɰɮǂS\5J>piW`-p}T{x:~K)JNgDgƨTxR xհOF[O+C(]A0y!Lbרq)/9|yaG?utt(ɴuhkinа4G#;~svu4`uIX͐@%knqL`Olv C CY=6xXn8 ,9vi.6`bb1Xh Kzw5Q$Je73@ SԹ_>f_?f Wq0i~ Cvew"e {#4{v u4WU|`u܈), I)~ g ſ*rBvSKin@V\dnZ,<5V.eWV6rH]>[ cV$G/ ±F'>SsTkzQ27\Q(`\,9 3d/J),Y:fFdJ A$AJ;ԲۜMZġmsr~<ˋh: ߄2 Iء"J;V([< j ]^*lbdI:-n+QKASm'IՕIDv5IU`G~]湞|PpMct%źu(2ui*VпBxZ{\%[M{g'>ޭ.I n^_@mVb)w d$$t;A:(ůQN] PȨ~HˮdAɞ$[A8lXOm`<+|^I+g2ns2E_2b Sh;%@􂝈 H|E } nR4-Xht,{T_ h5RTs/dB+ Ƙf {bIJ>L>ӞP’[f'rD""s@E}'IU߀e 6xk*֭}& !TuK7uz :fC{$g:EkgSSYdMe/U̦lRw| @!ܟq#PQR߰?z]/" ň/hpZ0ANxVJg.2Yp[#њU=t<0w0̏/>$Son+ _T'_nx 3. j.Ji)<Ͼ~#8ҳώ!fh4>?awC=iId|i݋7p-@%Wx >(}P%>a/;9:J 4' M=+O۠a{+3F~IsqDu4:9GQ鶞c݋o%\Jp;{xbK`":D<KP@}TnCԿu2y ]q/1ofZ/c(>LC?F@T G'mȷ¾X_|ѻ:?EQ%مhVG>&-@umq4Bq܌?J8K ?U^<@xXn8}W*P%'{c h hb>,hԒo/3nn 2E͜h߾c+$?l>}eSq%\iWQZⅪcm}nōFϢS ǽZ$rjrt]$',͹Mj7^W\ZVrUa5׆MԵ0Vja2S]\p_ ZeFG.E|CpEp/*cYq'KDQIafeRf iRɴd(@2,0KhcEk#E2b39x&fZe´L:/CjÝWI#Z2 X|^isIm=:"NAXj OVu#n% JrSpB:Y^d7 )qCt']!.<θn x'JtQ|67 A[ &a&ljdE;EذiMO*/" aH .dI(qW15QLB8AØS]_;ֶ-j׷Rծw#vp0c8SW@gu/_겋Ko!03Y.(6P%THm詵mxLyߗʙ,[X.3 #(6vGJ0((>G@?L.cq , 1x@jk*Ӳ_ h31vy) Zi@pZgf-+#4G[C'LIJy־LB(9g'R ,E!#Ti苷=,ŗr |UIp2P]^q'=^r:V.Jckuqm {f:a_cZ 1W E.Gɫx?{;iMP?lC||↟P`1Y߬@ϥTs*bT:Bdn#+@DmúvB5ɅC3Hgr[k3ѱԼ.ak6V qS]e*0iSoCpGsy?}bޗݐoq(w/h^Mg)/֘ˊޙ5^ p0tAtx|t4|u66цR-uvIƏȳ?v_:olQrk7`!;$haF048`k!xM]4lo6q.Qi&sن:GB*|4G^>hJyS n㫠AL| 1SҲz3A;1[sOp|Xc6={>>Jd3dJ-uDe;9o^_^s<7a(. IGċW5ݪbœ贋ծrEi3Y=sKi=H2BRqR ^JꈸwX Xr§FTYˢLq-lW,X яѓ(.u2j:Ygw/CK,n(ސɕP27`W8 7$dDYgԴrBҩVг,^K T\cUgb3Y2 seYĮNL} Vҋ %"!hX$5ݶq+U̻m{[9e(UFKKmnX;M$ "e|C5 f;tm& i)d1䜺-̷!k|ʨ&S.m%Ip7] w ͓Q4Q@ڸ*Y`+)ރk6m3߾\PԙlA Ol;Un Օ)tɚq|m+晞lg *HMk!W ERZTK -tUp,vp; ὍtlܱN2ƸsKwãw/mʖmvǛ5|ILm:CKm .RGy,PN!dj#0-CW3u+iӔڦ2Z ʪʔ[T%(7 ,>Gm,B`)q!=}V%}ʥ"hg)/,SJa3G B&4CHÙUe.4 c(/e:KGV}s3'{D;e}2NV;Ts`3i-YMlI @b$d,@k3l՛F=97 זâHU)UjQ|\.o-/{nz 2 Ĉ%?ý?"!J݈9>yF=bo1$4&>:(E|[J#/%CfrgXDL7nl{'umsf7k4ҹ6+L9X$ocPKR}zMF iOqٙ DG=3:ۛt& {{,ܕ!2ޟIy&qwOޗq`ٓQoLЧ[gYl⊃]kx~^kS&DadmZކQߡˏD yiE{=VAYl\C*Y5k4hG촵}8_=e$:Ə?0 Ϟ]X?8ֶc1Bz)b,>6%%]1JdPSyZhwR|qBD./I<Ɗ\/8)su(tpZAvK8C; #qݎ ŗZ?k9N0/ZǦ1=MGf/D%Fc\Zag ram.͊7peǘa ߼gA}%㿼KqVy5$,*K0.NH1)Q f@{D #WYrJ T.o,C2[ሉ|1]=7xkH|_).<cR0A|* ݊rwɀ{1bstgO'p08|^]G»1chiGwh/:Gs?GDye/܂>i<+8믣S8} >^xXn6_O@ 蒴[En(MD"U{eO;Je7=P(w_;>z{9maQK B̦+#ba67v{\3YJF%v5m)fA@cN-/XK%-HLV9,*F>*6y1`ќkvT$xW^M°˂ Wl§*L-@$; {yy*_i1[߬{ֹh={=`/da^sy t&B+3%*4} ˘X-2:VdE.0xfBĤ>ʊrdd2 }ĮE"{ rҙ*' 5r Db !#t/+g*-#>=s|ey*zéWn| E)7YLD<Ƴ4Pt[w$_p헏!?O<)d#a[fa3[kʛt5T*>.'rjmwv}gdy#i mgjD2ji[G[m PC<5]Xk2:SzEő7`*WHаTZzXXm\h&1}TU wܵAv;'桴o|_cK] NWx)r:> <o?]@z%viEcge6wfQc 'xɥ؍x 3 K Eǩ 2ֹt׹8R۠wVZnvLXB(پDZfƺ*hyC92+;P2ދX{7{}z;N)Su ˍC)l=đ_xqbCvA@M~ V{'&ẊRJox>;W{9C<}CJ&qD<-FwIFM6݇OjvP^L6S.HYE9Y^-J#(m Y1*6Ecٜ nPirWQͅeKJ.>Maw|"E&ti[l IM(bclf'߮}`*7fZ@}֛B/3A4^*gΈI逜NK̢`FfaJ>Rډ,Ń)B0Q,j:>"qs1n*R`U.!tmpUp焁C-CżfA=D7<9G.f m?[]3j["P9#|Fx/woLѝphiGrC3QU } lfDA% Psip6~n dBuV.iO| n3'\ɾ;mT_=DWօ6!rX![ "m`Љ ^)Ԃ LÒq2b邼>תeJ;۾K mwͅ MhS[C;uЊ^j#a4>a2 /,Ʈzt%N DgV<)u2B,!|] +&B bsc)%9dΨP9Pb'#*{,%73 S|-kYg,D Q}&SŖZi4a0~}]32?""d%>s1Otg"p0In-?(yg2AD?>aX{_%,4s_pgX}5R͇-yB尫]5|M}^Vpxͷˇ3L+5Ed;دF1U8Dc;plu}b"=M__HD*;W}{Up{;2!\ֆX)T1*bT!GpL c c7:M Ρ'[z.qi6 Y?|SJ?z+{ܟGǕC7} j/kW<Ot||S8pYֹ8$˳nhO%j7(`~0g$g5w745r9CNC ?P!K⨳ŦF/ h RFu./;ǭ0ءA+ #Ρ8cZ'M͌PX0-/Gm%g5rah # lvIMp4a>xr!'ʟ4~v v sIq? 8Lg5`a` e7){KGݦ:Xb 9>;g8Єp n1Q/جIt A>} pظ0&McG^'/-L ϦȇCP? d ͹/!w,[!qSubuC'>Uͫz i 52ŰPma(Lƍ]q 9`-_5Hᘢ]4Umn{]VDllJ^F0YT+죈Go_ƍ0:6QuXu'-YEy^!>Ӎ&j󣁽e)6xlEQ!cG.%k^t/9>;z[]ZXxOOԻ mh+BX߹hW^UcFmX?Hnt|@|{xXNHOћV N0HrB:NUn'-now;!7Zi{{{y$N&VBn\7w׏eSg`P! ٵ܉OQHjvڠvty4Qeͤcu܈(;, I qJ9rBqQa ̮CV\xʍnX4jҲg W6쑏3K]6 cVDgQ\badzݣ6~{ߏJ%F\= &֋B4T? Ui R:N2afaL&>DRq%Skգse IŶNd*J-Tttn!դ;ςI#Zf4 $<晬[[449x :.1LK>@Z?cqNK 8MaNդngy ^PFНt9`N;F6X5FcpЩ6 [)l D&]LDцg@,% եE65qj|M/&l'N!u-ҙBנM1iKt,(TljD:lI%bFdÖuDd [ ;><^Z-[sǫۥRV2 cb%h3W{hM QE>BmD mi\%- Lck6*ʿ̤cI`S/1|% H𼀾/97Lx|\]L5*_g h5>%E:Ô2YymXgI}d?ڊ{DxeV c,|gZ ӟy3YP;_[WtDZ]ҚyA0_U` EEnۊRT{޶@}%&]+ad!t CYGC{ԏzi?:9b;!'Rt*MSŨƙ=ݒl 9\"ػ2D oZB> 7 _S: M[k4q4 ! Qma;"⇾(/1KWAcj6߾ 4s6^q6tۂQvw ]y;?vc61FI۟ɹ ˌU`{O٢*pKTP4Se´YjtΎh4?|S5D- \|x_.. $X-efÏKjV5 bgމ^D:Sm&oGL$u`ZvUnH?v5F=9JbgcQv+Vbog"@5Mh]dZk赀}BexvH[Z@#aaKcEZZ'ߡeO.礻eu/ 7c~_x#GJ֡u 6I 磈&dM®t ا=8 )8;͌1e#ĈMi)J!B߽vfGo_u=GAVDÕUQ߃]Ԑ> HGjg/,4&F] +PEv! bb6#iwؿЁ8b1"3/WVq4ڹm$z_?x/AlȏFl8Jk14̆ n.=p*31YZ7!hסNZ}c? C4axXn8_OU,ٵ6ulc6:c8,hqdD-I ;Skܣ %9'Y )j7a?=[\%!؅@Ŗ}]í,2^ǣ>RNf/*f9:sn`j"\O{~z^Am !KYn@Vtō7\U+iY΋+LvJRW`Ƨ8.t5rrc7}|y/{[/n zQeixApU`BZgr@J(%Xu,^KA+ ƠB;ֲW?`"841Bf7"#ڠ1*BHi(]網XpY0s@V! CYlhsCY":z &.h n;lw]@&VhŲKw̳<ߋ](N:C,U,^(ԖP'A4QY(FS_-1_/Sɞb;ՕI!r+tZ: %aߏ h?B;m:TgEH66C­fֈȿe)*)J7le S|S 5 $ҧc^뒴lⷦuن;ݽ0@pp86cr'h?[JkmWb≠!O2m`X涫C>fD`j~jmS(FިokiB*[9#H@ v2@j6@u ƽs;q]j%a2w6RJ AcQLKkn]\0Jl: Me&@j $=Bb{'ǂ}"(|y4zVPb q\AC\QOºnHƯZuvPqlE3|?E㗭c6w؞eGjaRQmwAVf̝>!8* 'ףmRO4}VO~;٥i!56JLl-r~+*o3c sMXX:lj>ǘ^9{uKdO4K+%2 ,(H98.XEaret󧅳C\輬y1ȇc"蒿VO?}6>Om ɕ,0FO1.fp8<DYX,fIJ0>}7 ^ބK'z(n==ni&@?8؍p+南I<9xnD{.51WڝGoErres+FIp"5'o鴄"Z]?$}3I5y{LIm+#w}$J7=CS&hfC[B:xXn8SpThK_2i@I6E1X, Z< Szz;s^kIJrd׉@ S?9;*Ȱa}κ|u;:3sn+.K\O~+_AnQ@̲#,pK?JNڪt,jd,C%3iJa3NuEXX9x>8<_+v9{l.]ZƖk 7z kta達9zQHp̌"2f&OHj2dAe)`"383}T#}DRnbnI^ jR ZHh(mR;m,9i!BSK呆,I6ύu&Cx j@. ?;}:-QQ\K>NO*QvPxkI {8g]|H4,$onAѬdq1d;f#NIzt6|tVRqz[~NN I',T#{$Q4BdeKߐPaWΆP'K$ϖfl:6vAG!c RUaތfq\ X%U L} 4QVHp:b_BE~Ma'B _Wb0;Ho0{Qu`Qa#9zu\,Y1c&̀RTfMk{ZDV>Si>csW6/[l' WqHx+bUN Vyģ"~A)6LbpXrq`o7E[ G3ֈ2;2 ޔiln6iaGjUͭ)VI-c/V,f!h ;h)fs0dq|f8mb{ߥsʮ{)޿/ ˥C 8oZ^8&)+ ^Mn{RX:Ct%.rfxU L&";?Ovj,`4)9Xчm1\c*?C6a0xi]N8u4\?K5ō0''{C 1/uPM+p̅ ؉֘^;Eju4[ۢD}t"̹vNAIQݽ]W A-7 Z°xXn6`UHKNM}Х]k1 CAE"U}ƞlP-+ (:w~qO|>q䮐I0m<"rn8uņP&/HҎz/UkZ55|j!")?wԫE[%V\+Ǖ曒$f!(!F1!iNnV,: 湰*ӆBTȊ+"Gi2s]nX799:~5?O 3|M>PuŃBXo , UX 'T1„uF,*:Q@,p0KWzQ Hi'ږ.w.OfڰOl|.!L@w4AVqDp^Mn#r͇:''  J:!`K`km0]$A>I>hj AJ@ZVR͸9@(P-p$Uˊ.^5h]k;$O`1vc>p:/xԈu }ϩ+ɞ+3m3+7)iU'-~KTdq ut9z+ץ6#3Wȿ c2>;R+Bz#p9 h,ު׆ln_[PK 脷G *A+~Qd|J~IW~kZa<=hu&zkAA˘,BhvBH+`2` f%k@6f 6f!ETH*jxC>+.#v#p杇&EW}cI ɔ/4.tWi2 dGAVvMծO{ y?6$>[wJҪxxQ'xܸ ^KMjON F FOS4L! d`;-Nr݀(elml NK'0*eY:+3QP u0-S Ñ yxSjc+.Bՠ~ph>6q&u-bCTU,-0,{Nٝ7~+ R=C&1{+xYϏm덇*Q@񇘼%WG1tpQ2r}6Iar'Qteʥ³$|ϳՙ D}v&]-S5ey+'t½R L5s{!1H/ZV.U_E&vns&Mg&MȠ6jt&lcΤ4ݮsK?dNZJy0Ȓd;ޒÃ`85qHMa\ 2ZI[BMǬPDz$2ywG\Ý^[ X S+AY)%<7eZvEj4-B~?Eo  4>uiOQ\:9J+dpɈ)Djl J-.D\jP29O7>+۩Ա9>I\_U̞FOL1}ϑ83@63@d c1fbT9OqVc1XߔpbehHRŝ2 ?sbD s;6{Cq"/ؐ? Y 'KY)89{lԮGq34Kn%̓)=S\ZGS{5BTһVߒPqY"=8r#%o_ i,?SܶxMTiFٰ]fjjJlj"ܥA#}WR d"KFqgDp G547H 4u\tCQ4ZmhћW׿ޜ&3`} IB uso܄*?#8a4~**dNhvFclҔGgI`NULGg ?p#;+cZфS^J ji\Rf&Evc5!35LLvRSQ`w5*GQ駡ۊ*%mIN(Ô/?cJ h$ײOBZ|ɷѮWIz,xV*HJSPL-NhF)fZYCL1KQ GRpmSenfUS;l ݨ~BgP'f8-잋I2TaRLk7Uތj7w`} x!ಙ:53PNe*BHAZGo^h-E+o%7pZt~~_Dc4h.7؟򾵮Z-Ek$*Xr5ӢU;̙U{t+Beru&! {tBg_Ia*}s~]%b'wc.oz;s1=5'.YÂci<^dhh|E/Oag!OKix͂ bhq3+u6B'_gٷj 0 0VG0xXn6`UHKvM[@d-fC1 -l](wS5({Q#LQ~we|mEްy\隽x&UTaԶ0nwZ3YJϺFv5tmEeA@'-/Xs%-HL,F>2.Yq9쨴ipVM°˒g Wl§*M-A$'Ub6Xw{K|DÊ}rw :ƉB-3%*Tea)r+r`J=0j)bIeE\rŭ꓇Df0ȍ596va!-?6nQg·0b*2a6 63FLAҮ3%1d``w/@}rgB8)V3۫٭3@ }K1As!YB1W1S%[uAl:1T%kטF>+,θ1rJ#BބVzKc$lȟ1` 6D\3n]u5: wAPW4!VWsUnj~]cK0 d/g{D+hBv .T'w"  i_'l﹀*wį]~hE5?#dbdІ;JF6Tp]**.Aݭx)&%~4Fb عJ]3V 44V^4\rťр]ذMfj~ mC.zSsqqpX~(w'btf\Kʹ{)\ ^`=۾^6 !{Lpற3mCl\8HTqƐ3ͫ} OJR6Z$.iGXl61]d}nT\C^%wUn;bIFN޸CoWm<>e-dC7JSvq^0Ě\D>!gksxoPBM BgO8 ظ2]אQMf6[iunO~ RZdg=g$syԂH,Xm,Nx'p4 ]PaTxJЫ1ݐl-#tFl[xXn6_O@&ql]u+6X?a(hdIxEÞbGٓ쎒ٱd>\\|r7-`E€py]íTf'Ԯ~>󉪸6ՙ }WSYD)L JFV%,F!2>YqΒ\ nT,: siTJ W6Z H]R+Ǐ  ].;???_*50go 3֋B-#iT}L:#ǕR:NNыRe: \L="i Rɤ;`̐EQ4:&u:MH6hT Pyn׹T^< fNԪpHP$ܐuwM=AԀR4 ] mm!\&-T$P[BM*1^<++u@@w;Ģy*@w+<" Z@޿~HQ7 [_aߚ4LL[-T'Wk4:2)Xko@N!U5ҙyPeQ 3M_zRaDYCq! dPbo9(FuD|k]֍ Ϯ^_|nmk+c %᪸: Dǘ\ ZMףRȻ6-x?M[+UӕiM*ina!4>i(n7LZ9teSBvJ  ʁ[[1-Qש02|B r5 *Ⱦf(SY T+"4cƺH-+63--e}NñNBACWXRk՘ !џFj-|M8xl(/$`-z,a_=vX򸊍x+[W\X>@\my~_Bs- c/ + =6iy )?ǧm;ХFJUϞ=/ b"iJϤTL1*qRגP.Gd{:fAaHدr"gS(x8e 3}ٰn ]f a|~Mj=^ONLn#s|SSGAL}Y6A#V'AP#m]ԌpCn [$uv3y]vxKG)[7`T,p .W?i3.:F$Hl's+dẪGã6\c=  L%go_ <|{7^rv˱a|-8^St ǦJ1G23=g /)vUd[Q/7v||ꩆl/ AZM7K77c 8/Dd;en=7]4㗟- FRl@:Ў8Nc8QwB ϿTڝSԫ`e -?4dKG58W*hM\FTZ  $ILxXn6_OzEXrl'ı IY!MD"u$eoQЧkQ$!e[:EfQO7lbt߅!-$l8g>G,HӨUGjN1͢," Fv54l0$-bګ])iAqCWCf +.X<ڀvJ'°˂ W##"0u6m(:N R\IJ?~gy[m{~O;v) 3#3a(2\R(BLX"bXX CnE^ SV̵'@$ARY{Y:_ &2=EniZ^1TlD/DF:Aid!Х2Ptͅ׫pX0sBCE_ s ~bi01vP6ȗ_a!O7h߃ͭB/S\i[Nz L-{ ih6k(laԫ L爚KiH{5c9tUNZ2\=-˔q!c %8,P1ȗ3S[ ĹLLU^̨$O4A|M6K <9@T6ؘi9ފv Er #b١͹d;! I<P$R*~vش u*mpZWԱs],vLziU=ug]_Ufj ^ÿEM bͻs-?8,% xmM,E-q70=nD/3m )48>R5ÛKa -jExa^GK]l x*ZJB1[13nf >$x^F4U}eʤRS†@w2owْ5@6- )0D¡k5ެj.WAN[nHRr{x.U^+B fq:DE,"HF6ʪ1[M,ا>4H<=.7)d4"Dp=#OȻ'wvJ0Ju!b;hFj0h ZFhY/v61"RJDc:;&Κa,(ҍ]LsOhEkEHg?d?uv FKQśFE76:Ŏnl$r{"7]s#Dڭ}`>)a+J7fcGi3la3bZͳ J xc߲.i7JM2ƳwRN\(?{ϱEiouE[LJsF? ; }~N:n c*GbkWQrr`r#Fl o}=@?,ƭV@# r;l}{qt ՌXH4xX8?Oa@j,tH.C."N'ƓƷl5nI۴l۽Vo/_M$4?]/؛OlRevw<*fҵ:ssnj."\j|l^h@h(!di6 Qu)sXpejK˦\U`8ʴa#>.d*ue;lJX/> I?ы>O?3R s`zSebT8oq%91wr(J ,p0KgRz$imKk`PyQ4>=!ZL&Aw4AVJi"TB:/Cm[H5pUp夁C 2 mIy ED<9D-AVS !i϶஍Y@*T-p &@Ӎl:!?2+ qEǂ;܍%zW²k'APn %ylU'Nש3d ,0¶m¥ՕI!r*tZMq%ZMBy%i RQIڸ\ ̐3H Ƌ"y`xR nXn 620IpKzÏ.66uis Dহz zǰ\V0U2X[+U60ojϓ4ҶcOdպ(4ڦvJ  ʁj`#r-TQ~>I\s5zP&,"2.o,PlF)M0c]fʿL| ?qX`·a~) K n-2̠0#T/w/U][EX&Zi bAmmwMA'yCZ6~jRTuj][V {ƶъ*l )\5$<)\KZ6&e2_*? D@b칰Wy.Ӝm x<;uz^V6Se=q`K>%BMM&8LNKbֵI~5j\((v|2H:{s+ ²72ġ$dJƇ4g/ <(_~)UŽJ<޳{d`@=]bZOµۻ da1ٓ݁W- ‹^7X^,\g >".U}h*_NG f#|Q`6ܱgC6x9`B;GjD,44*&/'qD/xqg s sK*xXn8SpT`i&n-fi $X,-Q2Ԓ]o1@aow`_cOߡdGvs@P?9<䧷7w]U&Sk#؝"U٫x<p\.B56-CRYD3-ob^krݪ!K۷if7$+X: 7m\]UwsiYUKU RR7vX8u2;s<QK+W"> SIEAKaP8 qLZgqθLYt)dS`YXa>/NG|DRkb3K|DFzAgd2a: U&[IU pY9iDSҁA$ܓud=MxCx 4@j V⏺ٖ=H&msSrU4yW[m@~eIWvgq`7F!Fct2l6MLȚ F6MBa%^XvD!1vf:m*v7 (;;mzTcAvHR,km\r)37fbDe :bzRK܈|JKL &dF:N"}2ᝮI^g?wmvu- ᶸ6GXgLSomI)~"u+TyՒie׀6x\CKOҭ[!<էv=16_Vd)epň)DKJ%D4X/HT\ jZqSH"l\A~] 08Ug"kG9d J+ )Θ.nKS{Ų=)Lg+ߐPҒ[ 63CdȓP9Fz*>Tٲ>(y$fb|Yv6YH&Ú0 eq G$?B+擋xt*"\|s "olr-:R rŨfN=Fݚl9Zڻ1Ck͊ɭCHoΐΞL4[2Yp2LtlcdH< L-!L A:?7NSavy_3G|1|c<Ǡnk N{~'rT"kvb]~([CF GnRB{Kjc7գZm{^n}`SWI0h~D;36^n4;{vw<*fҵ:ssnj."\O{Tr6 ϴr\4Z~)KXpeID5J *3˴a#>e*ue;lJ~|Ap˅cz:x둿חgn >)pEP8oq%91w,J ,p0KgRH Hi'ږ.W.W`Py7>-! -d&}M`RM:|*s@VC$<憢[E"ZfVS Si?6箝q-TɹT|Vxkhk;rHrNcG]/,{b*y ZTBPM,m4>"ZJA&kn` l~, ɺ2)DnpN66c=I<ߐ} wڴިl$Km\Kr.̐=H["`x̹T7lj 6f20I%pKz닳M vz4XNp\{܌V0Uygh}陋mNac}`L;ZU0Aɲu (Ӵڦ3iX-l*6SFJT_} N*@4j}ŷ@Y (ׂTQ>{$`KS˶z93ZMbYDc_3(QJ&Edc&`Yt= GO`0b0E`*,͹jLX<3]ް,B$ah|gV4k66[ <H,;iӬl;G^v{ժ6ALmy~`+ج&,UnI޽y#lwzr'1ZIMOwȞS 9NޑGn/dXA8g[ P׹{ufDu͂\ɵÆZ )kgZ2q\06tI'a+9Z 7=scq_.)|q_dgsPj&&-,W~Hޫ%ZiaOBJ_'F8bVG šQ|~|(OtS1kN5IwL^x,ǖ.uBu&}Xڜ%)Jx:'pgaf+r w+N$xĩ^x 6鰷q=?xuۋ>>PG@ eF! p)='8RV}K#o8+xz3Ę_s pj1D6Է>DŽ޽Ióp_yxtcv~9,v򢞫l,pMuKuf㉁j`͆ xFWW4ݖvW2Z4դ9J"ќFR  oosMjxXn8}W*P%'Ӵ-Ho@`<,iLjIڎ[7 %;)`(593fYge ?OZɽlb\Kyİܠ].TSc]g&~ɭ˒$J.g&=lgh/O.WY^b0.Yq['h'븱P͸a51]qre:e4;HqEZY5-<_;8|2j|mWrrolzBeeoQ.HH/aLQ.fQ蛔ZM̬,GDKS;^?40p׵R6<|=8u.Zֿ̫ia-R#4]?NzK`jq p~;״(zI0B95V+@c8aĔ qZ00Ȥ`@~DB-Ryg}q;U:)_="p׃ كú`i*$!8$8*A63@dc1flJl9MrTQh Čc#V1b)8p%wX'sr,d "T{}G*,i639kn+ن]u9`C-gqXQxwҫAu?pȞ鱫N_vG5 {ح&T;'hC~:Gxf pQU!qc*n 9ēnOXZDYG=0ьl\:֯ɶ kCؓ-/7c" qv=rX4h>.qf@V ēa")nM]E;@x/ w8WȅPP51{tPۅu%vuN(IH} U%bQcDqCʭ”fZy<5 #/h.B#.B1DbfL s;+'S~t(`X`D|0OzGbb{LxP6VigYQIxf/ ѕwvL^@Kq+68jIEyU|%U l 7]ڲ+J̃):%ƾBh]D)7ǯ^ko=:>xcŕ+(C [+cI9`WZK_-OKH}Ѧ]+$}Ab}E3ʝ[}\9C3;ـcgDX~hz9'镀dV3tL4$xXnFSLU Rvے֩Q;E(F855ÝJ{}Å],;cS!Xhcm3WSt_ XD4R wE:,Uu[AΚ[JG5ŭCZ8j>fQ/)cy*0^Ƴ⹱]J* =ϟZ~)^~cǃk|k=%j+z M*S3b[ v}j&d6@3S`f_*y- \WdR.3;xr4.W Kn)\iTnS׹޼ #hR.>5l< C|#pM~NK4<,+kݩ$X^ڝz1oZlyRxkUgn.*v2 o_Fy"=xxr|\R#蒤,q;;=.<粄*L|k:5'8™ Dl̽R5].ůmͽT)i: lLFYJt_}zc{Zp?ץֽR٦a$̪'cU&ڌ;Vܜqag1q<ßpܓc)gKP.]u/Y: w^QUiu;M*y6҆a.SKf3aԊuyEX98^഍g??O؅ʌQ^ W !N02IN!wr + ),ӣ5,Ɍ'T )dxJd)3A,03Pcy%#١"Tq39r)Fʄ4Tt~yiBqiwFDP0\;nI֐`W7*@P &yi%lm]*,T 6:9W㒏E5o{LНt8`N;&?qiR|B*y>wYTeV&ljdAb@1{.u|&`՝X mطA֥IE7i9e0mz󍽯;m)ߨllI1/qsy&f@O?R!t<-`$Z\;61btޒM҇u U u`ܸ.n'`4)%X4*& !Ԣj8[c@UO |p+y&\ e%#8P*/D<T^XWL29K'>- 󔛱Tq.F0[pu6eSjdbT6Je eRfZ7qc:˨?—PҜ[ COd<왉=4-Xh nG7@QiDC^87*^[]x~hjDJEkN؅훒;F})Yy_ #of>io@BdzX8ⵤVFأz/jոĽd}l2x3ZΓ,/+>1iٕU*yY?jT+k>cd# %T#R/MXex@հY.aI zWt𕈣]j P7O v&j5F31O\ԑa[9ev9Pj*!6orp&=醠6>\e_؟eK/m>bj%&L~]+hc˱ QSh 4ބjR,UYV5luX ^1 $K/v_jVE'/{Oۿk!OҖM']@A5'u[U?|kQ+Z /lXN4xXn6ThKNI[@- 0 -l"2(#5({ݑr,;qBQ~w_K(Uv/tTi- }$$?spܳ%G-q|e18Ff'+NX>Ƃ׮H֪˙lUKBv'̥m5`ԊQEZ99?lM}`"6q,$~oDFzQkdB%4ݮsK?y̜4u鐆,I6/&֖&xCx j@9.i?϶qH*dm\Mk>^<! wB;JbRGAu_З~Qr iT`M8u Ḱ ! aumrHf s\mߦbӕi'ܢ wtڨl66CN_zRaxX_Rk63PcI@9$gd_ꊴ׶ٖ;}] XpS\׽r1nm&Q)~ztYJU]wM;,O!Nu[V[ɚX ֟[۶(7[#Rͤqˆ)F*bTpP=lR }s3*)lpكdpFi*H[N >%͵(2Gc5fKnY' )o"}D*.&Z,}Ǡ(8 Kn-brriL0"TA/-7 |uVY و(x~Pd|7H9.=Ԁ:Z.j]WՃ ʯׅ%jbۭ̝c];Jb!3G3x*l#88b tUQ)q쳧c+n 9'݈¼(W i,UxAMPmR׭6 >޽;fI.OfZ Z3:nV3]#pO<Veg݈Ro+?a/^=r(| fgmQ6;n=$:Y-`72- '"0np|eli8nk>f4<4ep gŞW?Oq@dp6lPpEpUJ0!3r8 Kd^,yzfF 5Hi' S{SDf`ȍ,[Iš2 F`Z PtmZpY0s@6C$ټ掬["zz =6.fh|?ےmZ")Z5|yWh/B;JX8Ģ-RG?hSR@NHek8Em(9ȚJ&s| i-&A~}1ɺ1$nXBgM]2J폠pMꍺZ¦(7Rb.`IH*L/0\Ju mav%vCq!MKFϘ fI)~ TZgJySecZ?*'m1$gֶ=)6YV.e)v )!\0bJdbTpNTGBSU>WܬJJtBjZhbvT_ hJ }1I+Y"YF71K]vʿ`Ƭ1A\2l7y "B%AFΣ?k(vGS֯ԋMٌxiPZk00|1b0ej/lAݧ/e7*ѝ8Ʈْxa/ -Ui<vq/t(ՂgcYY}fjbqBCM`gg(䴕T"r GȯF/| %P٣CQw.j?$ISV x'MĹNYGIa){AMTa7e ~D©./;4q>_*䘷a3)hȌn3Ti ޺hLﻗbBIx\7Lhhl* tEIOK&Ot$!Bh/ ƢCg%]]BSMCZԌC2/q_c(*O!Kg- þ/j,J  uT{lp=(΍uޥUg~[Jd'{s~b7n36gw/o>RET6؅;^v }@Eʮ>_ +`k&κ7 ],G*eoOx%v+"]C~K!_#n0-a(,'ߺkn[WK%1Vwi1eRRTMQiZk4"CZ<źp[~lmq8ޘo3eP-ND%h g„bm|ugt&@ᄸc~5 I3Vy_D]&O',)F!S|!Hf*Ys 1ژNz˪)Z=ͣbYAooL"TZ ԖC?3JCDkU%+1 _ A'k2Zl"o)6Y{9hk@~;P[4Z\<{N@qmq&`medau rǃND<!Zc?xux;8S(V⳽ZA!ޭb,Xxkp.bD'H~mOuB Mi7ͤYbj  D Mfn AN:=D'(}xTMw8q{Ow`RYq$.B6 a{K%p0&`n}<~)qHI(rkB ^-&'[ ݥ+>/l?*b*C(*TPA9+#nOa*cȨjFi_qLCe¨Bskt ں o0x/Zu4~{MոMKЮ?yPbeE]]\ y2G C:]>^9o|t_ke߾C#.EKG{]&m~ ĽyFT}U'[~Ov'Ib=YVrl+-F2~(BWn0-7pb&OwK1Wn"Ⱥh\3>;B>ȡw!! /yRfOh74"C9&d_oc1yGL[DK[Od6M-~T:>j7>j_'C}^#=0P&,Bw)L3ZOm#=)2oYn#czo~6bkG H=q-3(jZT0DdF8vmqݝqVG`VY"I3>[8~jkM:Vwx0P~Jt_\| c^S@zxXnFOU m"K\ r)PJ{&wݥ5kܓ7KJG"3v8wեXE8L7퇏>+c2CWn<dܯo$"d j1^մwa'ME=6O8RZG~Z<~kY*'JkYƊ9/TLbE)IrDх6V-^bt2|u"\OpAZ][+r VVjN70}KBLdy'6:^R#qf2V_iU`d*B2L XEHpMXL l:YlΔ2npn<TNYj]x`)ym-{wIֱApDvڼPSBo +Fܖ%RJ֖pzQ;9YeC6 K*^f\t$^e}Mz^[NqUG'F1ji/#ZU*lYs劒l6(C溛[˲/ r~XURY?(tOܫG5JO/-?۳);q3uogXGZ5oW'xn1i&Y!Q_yrlbx,j6 Y;4/h":!as!T&⟶͞?+j L ?[K1"x)SR8ixXnϧ*@`#hbvPEQȡ0.%+AΟF&}Z 0hr98D,Tizl %qPjK.@J?ukqJK $2qԶ@s2.%Cay+o|[a3ZEn9nraimY;$t0l{,5/c˗u-Q$^7oG&W:ж6Qq& m?晚l H* >#!] XJJ$v1I`U2&:L[АN:S|tl1HIF^'gTe*xX Xۆ-'ԉhSAlV:YuMu8-U[o>=m.dCE%UAlL(3R1![bĈ)L VuSˆ! c s=2 'рLpك}`(4dSLw\dH+PdƸUeLeIud'"9_"}W_`+,Bj-Y^APn;vG> dO#F^ōxLk_P`hty~o]<B1h @*56Tn>y&yҊ=jІz;%xH%Fe5W&kP{]m;6h;WzM;k`*",X%o;SUbn&>L#D3)tW = ۊ?VR"X`2K4hc_^%EvV i2vW(?4[, lv 貨3_?Ita!22?읓CV|_F5Ch=?,IЮRL7 gv E#ttkH앹9Ob+=8Yo~?ڏAHp( +*bd)hڞ!Uلug_?FnsZ݅B~B%+k- 91c4;q?V6 ̠kߋOm=v~Jpp-h)˔e&tOokiQdB952NpE?yGOuQ&ѡXTn@ҰsQwR d'tOA _V|RB՝nuh 16=> d#|P]> bE s}e;ND0WKUU%ac3S8Rɩo0 Yyn9dTK .w 2>I~,@_tuPnO7+.x.6.yo_͌.\ǔ@͊LY"kc]S15UBxa\+~j{! lk:R;짹 +0By_ʟf M M UxXn۸SpUhKMl H۠q.-,"2ot^<ΐ-Ex7E1Ϳ_iR6[wl Bf{HmKsue+=ٚk[OgQDo;Wb9 ϔ m4]?Bd}%9쨲Y>l°/eJ)"2=m(~L+-e;>|u_7Qj78QePXqTŬ@Jg܊zQ 0LeYj)@$ARYxYܨ &2Dnߌ} !w<-ynػ9Ņ np>ݎA@\+fXmҹ6:dATX8չaTk)'4 @MۻC^%Z!U4ȉC6c Y1EJTY")EԀR& O Jz\&:ޔ;8\kP$l ׉=Dr;ӁC%`w1+Z(>V4}$EA8ߡC }r .q“O7ɧE˱3< !QsvqtdZވ㫤eW亲 mBsv53# EW]V%o ռr6I*v3q=_* \PT: zl{2p-{JҦ/nljUI~#\[R >@a;y/U-[K֎k8ָжz+̿G[H?T*("ÕYOXq=:Yd36>WiGXH 6r.$_} pJB?ZYLj*A7@Y96@L=i=@lHvvŕ#TJjxXn6_O@d8q k 0x KFRv@d{O;Je7ނ@}Deh-\%M@醽yw&Af/JzUk3Z=skn*."B.O{~/jr\4KXp͢Wad!-˹*yp5ӆM4ԥ+b,~H# N;x=_~~PL.B+si4ƕ`BZgt@F($XgkY@"CJ;VX^ؚLT fڸϳ?"w1B$>DNzAdC%2vpv5E0$ ࿆͸kG\% 8Z[;Wϡr|'JW+;2Hr.bGPM-KʳxЭT;ljdA&[mq$hy{:8LvnҤ݆:-s\a7y<ۓ} wڴh쉮$ m\Kr-[ 5H%Yd>0< )řTK00K!!20/0肬ޫf~&t}H?\V/`0b0E biƭE"Sb2XAa^85ߊ$xP}6@y/rPmf-:gXb nŁ'3b4ZuF>Sk!95ŔUI3]puu2w"7?|tI,9ooC*Zc#jRmvK{C-I?o- `pg}Vꚭ`dC5 \.sտgE  3W*xXn8@ɴEnlsA,Zm"!)ޢO!eGv8g@s?9<𧋛o/̕E ☝x>^aT&']P{bLUh3Y=q nDc(xR8bg-ιVN(/+aYxuzdŀe3npMwƪj BfR׶X;JNIjitNwE&fnht$ϘH*M,u.'ߛ^mY\BKi(mRMm,Ȝ4"u@ K mȺGK&!| 5ipH+ܵ=nI&m3Sp5Tt[Y^nD$IWvq`7;x({h{>jJCA٨ YVM|V`nzKD?zm[V]LnTs%V[o:1-[;mZTa?HR,*m\r!s7b+ŋ8btܡR=QG"_j/fD1XIŨs+ҺMӲ w~] @,mM).dB˘Z L^)~4U<^L.iNK::)-aa!4 >iOQboʷr, }69SL_}tH% " j}v$Q. L 17 ؊lcjBI.&1} 񄗲Y EcXyeD LV6 c4|Ш#DFß(bDj}%4JDK;(F4.tVdTMAim2ө6KI:CƮo L碥(dpjNkd=I0@' ϠVA1jޟHa#r_7Qr_`b湢mPhz8g?g嶀PcǑTLg "(:~T>4XC#A/Raȣa0N2,p0LFu_)Vކ}^vG7aGNV+̜40 1SΟԏ֓2J/ gl:j+(mqs%S]پt>r˒*Л7U"l¸zv갱/-ۏˮ(C v =Nz P;WMϢ7 *D\i>BSWpW\9Z=UŽߜ6%QRaB2~KyPg6J~y,&+;ŷܭw쮢Euy5Jjk_6X cn/w$#<4Q\-#N91dah$Z0 ؁ jӔ&-7 4B$k|0S":|y 6J)&V4R}@=RDJVxXn6_O@dݚ:Ɇ [R4aZ:YD(R#)^kvGʉ&q6 P$_ߝHO8UY4}$ln;(b;nPfӓJNj.Uj[]70vAr̒ǽZs(ܬYf1*1yq nֺ29{n*aYU%ûRvRBv:0VhŎW4Yovrtfד/~_0b?pu QL-B+Ki4} :#2NE#2]Fnfct' RDzv"X^7^ELT Cm\R6'\$.ֺ}Io6lUPy0P0 VNV:a%6ݽ'#||- jaH>AZ k+Fܗ% 8ZղK ܳ ,i NB搋J 8r7SuqPhl`s#7Ȁ r;Hl ֘{뙾 aYukrHv:okKvK\~ w h~vV6n ftȗ?bqX$̎cʯUY,S/13 gu }-fn //Cs D;mPߏN`S3ms](Zp G#)>o8`0ZDa[ۏ4(S7V,n=a()%LTpP hNER}Y H( ؆I[ٓTpFeZ@اj4B__,,%+ W'وMX3AQr0Kn-]<ӁL0#m8]){M]"΄MyXCj}6Pe:وC@ofȮfȵ];^'wF#XitiPKtߺ́>0r}/.g!9rdľ5.}NjSs., l;B&ǙpPopWJL%U ;XmCH(Sp%,@)fW#v79_oߜHAܙ~p RS.g4M^Za<^\[9symmѳ]}#߾Xq>(4nMpkpaei,Kmwy~#c`g51:wxf>?G:324{u_FjGINO֖㗉dˆ*WtD&mCgkJ8ϵ+!%";ej)S)bDY[G"~O"6~  i~YZxXn6_OX$NC~$aTIʎWlأIvGQq heO/ߟ_~eE\Ɋyw.ZȩbRҜu2*Vz5jj\C֔]E$x?X"\(s#DRmbR1tjod%SB h(mVB:mu,9!@S" CYl^*='n,I[,z -ԀR4 ]rR~mMmc@Hd-Csr.gAeF4x[k[as[Ģ[؍L17 e a|qHT7 S0%ilUb&xCVԴmԪJ'rMUR"_`ӍY&<ߢ}4Jʨl.,Kmr)RRX f" x`tRs!,0|S |I(T%iūOqϝ_K 79C1UR0B`RhIUwȍ[,Ӂ,,cZI+ A7SgE΄/ aD®X&RlFLQ ҮϰSJ0d(jg yQ/3!$>&Sry^n2X,Naٗ)7BHV(PdƸ7fo'a3_2. O\d0t(IAWXscՄABΣ? # |Kq%!Q$c٠6ܶ[as_&Z 6nޚVvUޫ @XNL9`em!? c- /4=w!  q|<>z> d&Bzk> 'ߤ'dy#{*:R+JFE5U2w &y uFlm6ά3W$=_X { 6S)T?BKU} ]\cUaq5faxlX763pD[ zS~pw9ԕf :X ;v47/<\);{F6ިAlW͘tv-`7l[,,_:&O}5jhO_+]p4Nk=",Iѿ LZu܄-3}~X0r!}Syۢ_oBۇwrn<ěM\Fد &xX,xXkn8SpUHKhtM6EQ,-l"oQwؿkQzd[r$= r 6u(bg{v7Bev=vyL #&SvyO3߸ x&֋B-iT} :#ƥR:NE!2afaL>" Rډ婋SDf`fȍ\ZG|b\"JT8OCm:jiÝg ZJ4 e y5Y$mhr77긠iVn;l%wMB!GmS4Gr5): ,[U@~e\ 'avqn$ ;k[qu(T9 SimT{Rm׉3QK5,0mVOY!SK@eqAJEەc.7h_Ý6 B6%3BנM);2"BM dP`obj5!3 uD +][8T70[s'ץ%VmqU>2 cb%{%.-cO0IY$dPmkrmA|bmSWxEބ/3aXHl*Rl}FLQ 6OK*3dh RO_TbyL$d '[pu:%г;5dpFIBٗ Se<r4L?k[V db :]V4 AQpHn-$<3aDWnMX7*>0( Áœš0lg{`r6&6U\ŝj~]oC0 d}J֎-bd! sDsh#lzB$ޏN1ѭZY&G>9'݈CBw*3a,rF S k,ur!dm*ql|[',HC8z_$NQ3)4Uh0fpKDFl8ψ dVDH#Dvvkeo y(/\2Bx|;_ *mbtUףI;Z{å]F$߿Äx2l"5<7dɓ={Oq69wQpkq # ۘu8"XeNln[[QJ7Ŧn*ɋ;{O6 _. ־:L32O<>~|DC{oAz'B[nls󘽍~[ljA'αI㵖˅Kcv܏x-;eŃܼ)r>[wz.G7?؍p+󵅷><ԎaF1Hs]JPvl. QKKfu [QR؍/D:镊.&h$Z1?r( 9ZvxY?O([Hw{ ( Hΐ#Y ?ko'wșH{Mxsӯ}vûl| 3#)7߲ ILxjWp\3ŬVgnɍr(x?p܋ ď\irU)z, zvC%snpgګ9S \&RWXۋ8relؿ~eQs>dQNBZ Vf+J0})W)KuFN+';Y R t \В!L.\ ?EH&fiy^ۈoqLlXTf "'٨vR0*ίv[I5w΋`\r5 $撼[{v,9D:/ \CH>AZ6q-T6;9WDF6xHȕTN\Lhqv)Y-<8wOA"CY/2%YTŷ@Mo"M6T]nuۻ-]Z]D f: ek(@.].ǽhLU67N-9jT`t{^0FzL:[!kk"xLLFx?/SK:fsO RX6J0\=QrO(a炛T\da<xQV9pFYl@c?gA cYڙ?c K)b<1T+O?g=(9%9ȬO$! ,Z< ^Mdžtﭲ eob uKT 4'QKn^,[Y3MQҊ*jUP<`1kKG;WbcdCh'c%'6zp*Ѕ)ahO3ݹqdh xF a]= 4_XY9OvfyXTj CF^>Nؐxƣ뎉h) mt`NSnR_Stg˹L E Oj6WWYFGl×u=LpȓBB"R²;QW@Ǭ/n^.O;r5DQW}CnN.q=b~[|H[| 2gUJѤЯis 6Hz4lM* pK!T~KuM$.ڎwͣ}뒪LRDUO./V0.}3jPhzz^6*!u8)<6DMѴ;n(U2@}@x+FfS] `D]#m16;b$Y{?G?'!v~dB~r$M=fgiUZ+؍ۍX;u l'nsǞoThmLŪTx(T%:Sl=7%z4Bg+gM|MԔY&d|S`1#YjeqT; /-٢.| UQf"_{IEjqlXJ7|]uh9ËmZMeF̏r*Rr1WZ q\+!C*<_.-~џԄ'X{մa|jY"&_7l&yt/Sͫ!zMVtwjFl~Kzo;m\ <@A&zFyv9yyބ im\^1xXn8_OU^ Xr׮c =ܶ6EX,4 SqA^fHɖ8"==oޱ-eLE-dle?}na#\7xԶ6h^EJ#rFSXD+r_XkUYlt!dlGdK\۰v! +yp-WPh#TMתjQ,,!>ǯ=_Uaɫ%'Х0Nj)4(V%0^e,j1o,9D/j<=3kV"#IkPH,G]U`@׹IűD.p Mn-2a EVTŰ3'4hj#-0%KnoIdg9qA (5E% Um#{ܦ%2qԶ@s$0gxy M(ct+""θ8]tQVȳmuTof`R-jR+/OwSWɁ%l1;UN!)|C? \hnRQ9"] XJZdv1`PT2.#EH!Z| L&&2 rIK,U5i}w˴ێPOŸc3wq_ZI'`mecoZc!n1$ŧƴ-=14YL[ #B Ȱ\1b2Nj`!D fΡ2aݕ\$*y5Y(^f.VUgGBvcZB"Y*"S4ƭ[cJf ]\ .՟tkD* RɍA6sGV #v`hHZWF\!IEMؔ?Y350r)X }GY֟ ZO"Y`ٕTW=Bsv!v +j@80bS 8 :bOPT',F9UeM7*asqsK8L Vk`xvz1)N>Znγ%}րpT8|݈hĆ65:>/GA`bbл#bʀlIT4,3zuۛ=w0Fb<;+ʁ) ~߅@(d݋q1Tzl^Uے/_ Gpb3\]V/._u~)?s9d715&w޼Gl #xrki3,B'쫐}gzꖞ|vtSrW0#E5w(~.rǰ fN x~TZ*K ޷\,n!{WUmns?|`7\VY!sXm<`L7~yRWTN*60 k9Hxqc/{;tI+N7&,i-Ѷnh*g~[,xXn6_O1uEXrd?mѽfq^q8 ZYD(R%);t' %9"{~3fݻ˛~/,?1\Z3O_ NC;VUubbLW7#c"l1VtpiGuH逘֡> Zn  h 7bd*M톰Dp&(4ElHIx|oufq(."- +4R} tty푕΅%yQIt`̬Yʌ d mLYWELbFvIܴ/ju$O*vM,M&sImȠ6juPgn߹ԋa eNZZy%敱lݽ%YO'!|ƅ4ԔL#Bƿ붧c{ܦ%i+% s܊h It/™',"Ʉ$5c8(,0':j C CZY^E|wPچ{xJXb2m5>sze;r()~L3%v7va\Q!WҥUeQdiKJ^RS t )w XTӁELL7bdmr-wyP,A!ף1v9SWAۉ+% 7DMIKLمLoWS[Z>*gί)( ε< 2ZNΥ~}̨\3Ɔ*>ިD\&x'ʊ}-]H+$3>/ U-<9F/ a_sJlR*"+6$2%c5fnTn9;Sk DIB@ldnuh@jF9aΓ?KT1E+:)3AZ,c *f'rw`%B {H̆ ʶqVQ@[֨R=w$@x箺ld>v@Hu,,QŰLdqwL oI7)w/=LJ<߲qdd %Pgt+M2n)H{tl 9f& ᣰio++) .;#j #%ӅmeAt҄%pѯo]G,Xwʞf&?>lNw$8Kal>>'C}°_HG7XGT92\|pR(Ik)F)Z—p6>:;.UVu:L4A%$B% U|TrTFpwݼ$|g%矘^\޾ms?0 RvK P:9L/(g`R3m&A Bh범6fv= v[b}lW;1m塕ҷ8~cJt]c$Ë-6;%樺߻0/v\|gSlPpl<+ض{v w#r +^ZxXnFO1e@DJVK=;-zF(XKiar]JV>н=ʖ  j쬧]]_z,`|Ep9<~ 7Զ2`^ YJ/Fv4XO9("eSr[Ŀb5 /\nSR6 Ȋ K ۰n) L֬\J"6}Xqm0/7q\jbi]Wyឯ4_ÿApu)ZI UdX-tά(ыJp*lJȈ}ɉ1H*+R/QW;SDfn^!7htOH*M,U&rߛNmYˌB h(]6B.]u,9yօE@Yl^+}O,:,z a&.h$n[l f7i D&ږhNf gX PV؂'hq,C)Bz;!l:ASuŒTuJ>ujيa'o0L;IUNyd 5Si]|}G.fV!uҕJiۡ\.g_!Z"SŊ l<BR| LCL%͋Yh,#.NU(Ë5-4-8߆o13uR[_.Ez ҕ*>"7֢\&1pA\ҟtk@K iAs)9xaDC>(I"wEX%G3)biʍ";|%}AP9t Ce|g@x)禚G[aHiIBLDܟLwnJOƣt|tWaދe4e҆8 gE+8PT*y{HےPA{]#``GJoHtZl)|v2Lzc*=J+]\1˸J`6OS_]f*0qHv#tw&彳F⩀w=R2Wǹf[&+

    h&oM60Zy_k Q)-ڨB/YA?[?7NE/!WóKH؝_Jctg>^X1ˏ ^~ū~< ?D.Zw{~G.ӫ~vξysٟ A{?N&ۭS>>L[n`7­^h0;v"MpzwWc>j3R,s@ʚ Ţ|+lj6"˯&C漀]K}5u5gyk]ڳ=4ia%dv<\@SԙZ 3Qܨb#UW,l  -1+͖a:(y_Ȭv3=}7fg$#"|Ӈ>"8BQCbEF}D>zju~M\%ZqM]xXn6`]`dm6 e- .YEq(hilI-Iq}{{m'Y )i87a߼b(4?ߤ$=b?Qу#N{e6uf/}d9yVahOڧw:"w6>LZG~XIziP͔skY &Ɗ;9.ULzbA)qv}%ɕVVMg^mzo;Ng)InΕ `ejPx$.Dj\{bc^T0ķ`V,Tg" mʣ ]mMW .eY66' }sS&@ 2M.6u|趝[)=>lA攥PCF@bKcIѲA"['M\`Zs@K!@F׺ڕҷ=nҒ(MfSJ=z-xNw!c@e/iE7 %]T~;m*A?J09r*ڪR^.(vT 9(\¾ >6maz՞&LK3쏤JolK{ɞBѲ2ַ$aA p' 7=8Y$I\*}/f&ÎB2n5av2ddع3[}t÷jkv۵Ēt]u1:-0uQguY]zVZ(/Ԏ֌&8i|\qWxrjJWb K҂rcC=_Kj@,BP伂siJ%MuvbfPIa]6xk4+h2 RN\m2|ـh97]).! $ ƦXV49֩+z\\h@kn j`!)Fb8Ħ̽)mE oS󏅼"vuyvL9*K YK" = ]ΥO߮xV '^wF&1h.D" FZP3]qk)BM,]AwjN_ko\!WN81ގ3fdNՖ b)yF-p ţ>d-φ'U/Eeqqv,1O5%qƠkxT#E,Q<\[9:ajaJRyL*K̹6}R04&UG%c nI@뽢|y,D=NO !X_3A8(NdK#K9gN(OVmO6;>xZT5fhub.=>G'ow3'º3z Spy 2 G<]d kO~93؛ui*hcaa1ﺽǐX'am|]nGHQDwQĻt Fif鉟3qQ awCuH 3N\V xܦ7|]p0|!n+KBsDM8hiiGпALGb$$ͻf)4c>_r#Xςθ^ fB[.঺&eZ=o8 | Z|[`:?xXn8_OU,:I/mo)jaMD&$eWϾ=͐-I;,P(=͐o-46~Jvi@8l}ʦMBҮ~^󹪹6Յ[ }$,I", \K(L7, _]`B nT"y7QMҲP(ڰ2=cV섟<.u1rp?ӗ=|=s|+XB]C}֛B/s#A4&Tri9 'E%2]DfeJ椾iR,e)B0Q,j(#DrqR粐{FM4\:/CvH5uΫ`夁CK2 mIy5E$xrDt\Z04Li;ٖu3nIJ-0Ry-gr J+!uEp_DJ<ڑ<9A#jCQ͌c+"Z:S^eN鞩k v׽;յ q^ہiK=;P`Ӧ#H]F3@t%a]i:k(r&=`L,F1!\JuQ,8(GuLj⩮ &o.kmgk"Vp\o''g֡L]m jܵpbl@ջvq*nۈm6Q왵 IFX%>+iLml!sl FJI68\0Td4FD\q&f.URB??g$`+ ;=P<"!3)R(J &.f##A>kL?~F1(SaY)Ef3%L7 1%V 4l(K(e`-4ե#j<싴>#Ihwϰ˷CGVp͏]&졚kk)p-!mU~EƲߧ !1<}%yc6wVˆ L.DlmXjۂ:PzhV3ҵb!Wt%Ol6IlzN}9ֿ (<3CUعJv_TXp|Kh' Cwiib?N?z=A7;/;k-&tO+mQ !A.=ޝ5p,@vjMf)\ 5|ru:2xO!zSC{Qt[g*`8c b'RJ&k->nh,%rN?/);Asߖ;X1Eh0ƀgz^o!n=k'G/?{ 9+^z 6vEv1֦l#+h&xZj.pdB^sQ\lTGt2ЏS!()yb[;]#=7}ԠW?-L=NhB6V6dڋh3D&R[efzG$PXl88{ygpXCY(!X/ѽ<=݀! =&^41:>ؤ2`J1񝟞߫~o:]9V#jwkg`5<6_ 2UIHQ/m$I"iG+W-#_JxXnFOeLvƑ% 8š(VHZewՠ@^~,JW]f8wgW~z+*h|$̒TJY\эS#^G2&5v6pf$,d l Ѩ8>3ړժXn؊ϥuǍ&qg\9QIR`55V\Ire/d2Z/Wizel#_y}x GFEVQ2Rs(kRP[5i<҉"'4=3kk`91Ig6^孬@]oT".sYYŮ)T} 62:#],ԅ򁆣wnlS"ڔ4ۼ4XR4yx =..9LK!@F?u+{ܥ%RL0zsڊlM(^2,yZH/\m*/F: CC8.VլW5 JlK5+IAJMcsJv&o*voC¬4Yо#MVzc{\];vHGT Z+I+D2q cn[cޤZbaK21LZdxva;ݮ %#ZgLS NԣR:GhLiRO;rK0>9v~`0h;׵H8ZI0B95Q򫡘"))(76T=QӉ%s:TjҍjZI;S:)iߧGLjsjjѳi_Hh2*AVm 21|31e9' R_Qh &X3IspKLrv,L8tvq#HEP:>BP$C?>v;2n)WOSG7=j}TfSp;Yx'>yo-YXoAp@x6xygs7blgQqzx mpsZZy† }-ʵܩ+u>ՂfR:ѯɶ [Cxͭ=gƮXr]zt\| ?7>sSPOMF iקXƙia21 '\qƑ/A ;|ǢsCVB=U&SՌ8'LE"h5T0yA= 5Lzٹ? n0Mz"$ !1aՂlB_Y"V}8}?[IZj\{bxb+xm>o'M $]cQ"y!WE x{eqKAޫfr[(٥#yNw iEr4NW\i˿H]*_HQ[o:> 0QaxgA?{kLdH3KG\~ŕc(ޛ_TI+ :xsiZ]F\5P| 9h3Z˷(VtT K@~ak#:Ň2Oq%VW|>("amT+omr>y,}*f3ktcX4,&8 }-Ξ8΀%pdݧ\ׇX`os  Xb4xXnHO R촥Pȇ%p( ' mqkvIs׸'8i o~3aw,Eyϓ `MW6[!S.³J rd*=%зd!OO;Wb1/ m0Y೸~lŐ츲iod°ˊ Wl§L-@$; Ë.UbY߿ug=_KF&skЅ0 4  KZL+ dtʭ(0Ra*lRHH=iʊrdd2 }獍ĮJD*{ rҙ'+nӐ}c9Aj* Oo]~kik "Zp3hq*@:SD.ĉ3l-T tq<-n BiF|lL3=LΉ aT®, !# Xi  Ȁꀝ@K"[^hGL ??H\2q-u`04 )6Hy!r+T3n83Uyl p蟞}d&.MUrh샤`(,ι1jJ 1f:' &"$2iFWp]FkQ]#[h6õ˼;Q})4t42grj!kw2쎂ẍZ{/X)7izK<7"G³ū?1V3MOaJb@bI$9Q:[ThC H%n*;nVl[e:Xv3WG7D>ToJc>͢тv~*,8"6I'bz tiQ~-F=w%:t܀N9\=^M]"Zܷ;GeMg;PFWU1q@=qs=7 eZ#qN__U}{}>&ߕ. CQmoK5iFk?΁a>&ͥ))]]P< N>lMk-~S料QJF!>q,!pه]r<{{sބ8Ķv=-Tn$-&OWZsCH0? }_%vSj:igbһba6hw6tsqGROgWʲ#rYC6ql٭w)JG"g<ַ-;ϝ#I!jN;z%6tl7qE"i ֍gaRxXn8_OuEXm.IpX&"Z+wا׸G'P-Z PHi7á?\X"Gq,,IOŻ/bB_*9ڗnVdyϙ_IK=_SDDe`J-G+=iO%uDZF0[q!҅ujPNRW2X͌9ULbI)E?9O^%QteʵU8퟼yz2<љx/E'rA̭ oԙȔVM+Ot**E 3|Қʘ}ALWi-+P;39KpFG򈉬dj F6L@m;Vzm#}`A攥V,6cvd-MCd 4@j Rgr7iɥWrNݖyN{ѐu@ eR+ndK`7d2qXp{5GQ'#ZUVU|6pڇ|~L=$;Z#kW׳;ԚʦrLZXoS<7Sо#MVzc[\eCHVER_2Z3qtFd;F'pXX: pKd!Ĕ^o~mkv#$ۖp_\_SeLUn'I)a}iזQ4ϓ-+$u_6! 9v~0t:4H&8fq0R95UX mB0SQjl: t TejWYvt ϒS&pԃţ:'0xk{ծ@񣞺Bc+px9 g&ˏ{hzCFur|w~x+N㋧ՈKiXJ@3e;L inһL!'ڮ} `mƈ:7v;[/L7dRUdR[,;cS!Xhc=̭3DWP c~8$aq#8}_3B_rPQQZanFQ1YqYˉj"[:׻$~QS?h2ֆCݍs ˍ)sw\Ag5j8Mzفr͉0S&P.N819%VgОy?kJ:9߿89GuDN#topgzxz\ 6duve B!?g, O$ ! 864^QTDw\ާoS/Mp #e]wOI/9"URB܎D|$ 8?ե-׮:EqZ3N qn.U$k6;xHo9ߍ>$vy >Go3o5N9Wی^*r87u{@7 -rZt9.7OHf 1^B?3~!&?,6C&B:=6WfM!>Om.<2~n^bIf?  pddGxXnϧ2@a"e+N$ ݠRs9ewRԠ@ߡOI:$J%0d^v}3;77w07"6(0^?~jMjWnw>SULVO\zeQ@'X?Wr6r\(1$l$0ݠr@Z?uk IK  Җ9PJL2ϊb#Wk;r:T8A܍#ZWp(<7Z hjCAM,Ya(>ldKa7qAOm5n +`65IUU6z,QNB1 [Kg6r.S Rc"ӑ%upprs!389|Z''c>蒵>)bt{SӶl#nKdn)䤇4fkJtUmHE x@te]7Щ=͞Eo3u ӧiMKD=y#̤cKLm|5_RTx$QP/_Tb,})J8//Pꅝu$V8ID/Jm4iY&Ȅ1c#+Kj1f7q.2uh+Zbi5?LygyDڣNT[XJ"R,t }%Cxm=X+'p9@&Z6R׈>;}]p [5wls3mca%srŃ៳'p@#j}}<ůWd'_ 6ث-WњϘiHc|'& ƹN=5rQhIfhQ,<u>tJobKS 3aO2ꊒMWC,3~ ann os_7]~*Ʃإ FwZxKZsŃ[/;&Pa۬Dc[-9z-Qog`Z9peZ():`3=ٲDk6z/aӦ.-=9:jJoҍ!򷊃q M))9FcT:Ff qxہeR'G//x?S\^79E;1g}XKbx]w.M!H1^L 8:8?=S,F{NhDԭ'*wr$y.|9xs|_Љd)qiUZc4z?|'i'38F/_Ϫ\<ۃ#N ޮKql_7wG#r:.QZ&,S0ԑK%]wa:S6,!^-5I7z/ww~Pn֮|/jmml=!6 n=ķE:xpwsw4÷/cϺ N患3d;2i'.R=i[Bq\?w-DWy 2Թr޷& ̑`_YE<"a|sn4MY>+չ䷓_ccJaxXn8_OUEXr~ul٤)PF&$e[kܓo(ٖ8LQ=3q4l~HqeIzd%~YW #ӳ}rLN)RZ/%3'/[Bj1}r(Y6lŅf:۸nK]R`U+T2Y<+Sμw=<^|oĥ--?(Hv\-S+5'!u.rU+HR)"1frfiU Ve)B0LؗeH1U87*b#ڨ59B+h8]VJO{],ȜԺ楱l֒Ã`8qH`\ 2])}6-`69ZN1N4dB6@ʗ4MvxEXt KVQˬXe,>kd^.(;i[^Ǜ' 5(cGI®LdG i!:.GPʥlIKOiL|h"Jߋb+kM&Qd!TAgﯾ˵u-$ۆpW\/gNDǘ֓RZ<DGFO= 3mɏN8(:PdWmsmCd#-SU*.3%9eƆZCj`dFNEZU+6vtRR/3&pԃAG5uI`iS0ŷIM 9W%F`L_LL[NI4;%WZE?IJ9ІF1i\Y)> Qß "U>XBuIr ʰG j Jf9q]}a_{#e]utU]=kԨ\={@񣞸B{#`Kفf1^ YՃ?* Zސ>~ߦoāZ-;^>;BV^6+_1r-Pq -&4lq7;91SǷ""?390Z<3n9Å],㱩tb43X 6en77 ?HVSwH#Jr52%-Q#c{ƶ&$yQg)ã_N5s Sb͊0\cM7Rg8#?V!=ɟK\׼?ږ{|z| D",78xo(@GL %O:br Ӽ*iJʿ6H hpqNĖ %I≯L9?!J6S"&hgZGl½!wd`Il>qKF٣mM6O{XnKOܦLO/ޝho]:"zsmԲ\9\&+PSWpiD;+m=ozo )O݋䘚oum`;OHoGv [odiCQ~h9]_*T<'QL\ ĵrgH;\=~iE|JzǬ |X. aVvHplxs,OOGR  exXnϧU@.DʲuImNbaȡ40afy*>@_'wD)i8<3g4W¦?>Ђ[Y޾nZfbI67~Zkѷe>IZ6QaT~Tb[{I {L>bldl <8 u O I8Oe":Ϟ=Ϲ#r&;JԆ8Ngjj6dT㕻.ηXJ$3! Ew"UkfTH:VS6gU3h3SOL7W B>;2Q-}_#K\=)~a+p K?4/auɟ_xAqλƫ`=jT\\ngYk1'97ƭ%Q憭2\f(1b{ HXh"xoNݖR{[>Z\=;-]0ITIVfX;2KTuZwvԖ-yRj%t$G%$~P,Lu5}n`V=?-׃)(buk>;xQv'ߥAR<҄ CM0R5 /b!瀰sј'apivﱀr?ܢBGSڮ64 *0.ɛ~csdHF<EXڜYi&ݬޮ*㸊v'NY{ƮdxJE]Sim?Qx߮! ֿN)Yʬ{cXpU\?З}K19׀x5luF,Ίr^h1|M wNc7/N9.KWyӈ0Z=kyqEO`^tO^ѨzoKAG]'|&5YBOQ؈p2q4{챊DW? YPS _ %u;8nxS)of;htG:lbE՟' g"xWn8}W PE'izc &im}X,-,o/Je7qR P(z:y}rWq0l="vn@8Hdp+Uk~CiWAX,T\i-k$,"W{-\+Ee!KQʮOQ$Ƃ.ބmT\ZV U*ӆŤԵ9+bApܱeLJG=||韯[XB zSejR8gJY*3rR; dYT,Y:aVFeJ9HN&-/]m\6?XLT fڸ/H.vC,u*3 ۠ V)6BJeRM{|*xr@օC$żfFm"I;f䃶.& np݌c B%r jZ):YQnUC4!mSbZX jl!|oE:)Ȋvz+"am׫ĉ9025%Bj=1XcֵI rۭ.q#>dbG=(0i#>KXTڸB.0GD'("@QHu.@6 %-' bZ'Ȥ?Q8yS[KbN֯+XK 5'V ֆA+~-Pn5`17P٨c kǾ'-4k['E>siDR`጑RB3 @;`P R9p+ (J/1 JA^~]*8ՔEF#2ɡXF m0]햕I` <}}Al`8S(ETXR`"R ABc>s("rG;&GX ]Yg7`C0I".vq8싸Ǯ9D;r]aEZkѯM[X&쩚y/WCr+_Lh28 ? qHcl݀$l=xKFQV{r?!C&Έ!2Ũ&Nfn%-@dkݧN۩6K7I$a:E\a5Dq{p.jakb6I'fÆ)Da]~#=B+ykw>uTw'[^,Q)Z} MG'à.plb3l|(aS-=E?cA$Mnm>JVY:DB(`֕iȤcriFuCo% {.9U~#,~뜳gG_=/u%_78 bK+;m dJ10f2ډxс.Ēi1Eln/v*\Wslv 7p.o0>8`㫋A%@j  E]/pdM`( XowV@5fnxX{o8_bzΝ%ѽmv&פ(C@KF"U k'e7Լ7á?\~f,0~c8ќYd ?|+~+derCj[AX,}r`CD22󯵘:'JZ.m|xR6 ǐΘ6܎jǯ:0P2Y)WؤPk#E2U-,p#w}?4_L(ƉB-S$*T}Á 2arR:aVE%Gef\d>D ʊrZa0ȍ(IŶD.{FZf\ e&趝[ 9aֱ`Zie y Y$ki3B\PJM4tHIn[l fDB"Cm34`rZ)3܈.cX4$c!v&WT&ksoLQGT  A&yjٜ'd]`?b8LucYJWdZ +hs5J֨l_TJBdv66V!G r! 4GiMt@b1HQJU^goOC2;]60 "pțT|=)=#SUNx[ФM/1\N*WRDz]bHƄ&E0vͅA(Ld⌧J`ה3N-veb[VVdz*d\?%D`*&3 jvG&c$8g(TRq`DYX2>1">. R|{f4lZӨ%]8"^ xJΣ?s^BCcU[$ GP쇐Ҕ]q][ l>qC]iuAjq[WzT u}n'\NLu \|ilwv2nXHYJŽx1!*9L~~4mTH'xl'eb3xR`APϊF|.Ω7&Jo`mCI@Uv!0wǙvtƗ{G gTX6k27pt14ѰO4Hcl nKEtܧR;Ux 3LV%~yymZN|>%>lZ|ʁ-ROZ@__ʶBB[ؒK^YMG;]ztl{ʉg[b=w$8}~nUMSH=(R> |.8;HxOCf;ȸeu Zy ݌O5sջa'}A|pSO.S.YGYA}R~^ TkNJbU8r$TadrN>ox4':]"=ź8}sUDv*<#LMz)ۼy}2cTx5'nBz9K\=%q^ո >w5feE)o0PK#pc&qp 3 l(өYYy*FmGz 4Zq)w 8y zxv븢ת#\7\8Kg@3TFjP󯵲Ǯo\kj6Wq~?|;uP,q-Ko{Q.ht_0͗%CFeϽ脬{2'P_ =N3v mAs_ |MN|[/./alu y^ZU!=~ J}ZOp|,iP)AdW$ƚ9 g}{AݸռYM K6ȣs)A#(+RA{̽&}#ZnubC2lЙV?hF H 4HiiV)xn7S*P^q&ɥqv.8;%7$WZd7䮤tnE^i3áony Wqr&Mٵ g{{BM5{9<9BmWٳh\gj3Y=uKn`KSORTZ+ʥ ,k]py/YVpc]n^=²KOSm#H ]#cVxx:|9Lk]Ovr#|=y^O=R%{L)l@/hz:#&ot(q4q7+" *CJ;5]mM691|EobRb*P.w2MZ'ki=TpAǯnwr+fGp  ZK: Yfzw,9Apw&k8@ZuVrםq-P8ݑ\j>{;9XaN8 chae'[ŨLڤPhr͌N6|_nw ;9psͪ/zԵ u.iO}Ϥp(5cOu!`Yi:K2H ej1Xj ˁ <%e ˁu#.\u׶PvtyZ.Mz%O ij\u ٮ_OIE),丐ݡXeۡ(֭pb>ڲYۖ}3Ob"p3VAi6!ϰ)8g8|ŵOJ4"3>_&ZGVgf$(C+|j{.,Z zb!K%,@8[Xjog aqG ŭYb#{^4{aUH{ rTo{|ʾS[mьO,Ũ_Nw-Q)V WÓWlwav*w7ܻd>$7tHCԸVs@X/$6b/7f rqc[WאT[!i!-FL x^d:QY$GXhiI'B&T&k,+:'0iBOm]>.|'& x`h3< c |Y|6GohBmK;doob6  t2b-$e%0^LRlѰiR7jw]Ӹzn=.5PM xNgq1~g.Sop:/ WܣgN9903f =4ͧ&ZQp6NmD Ka}qdp7AhsC*?荦WVIU%nFzQ^Bc]c V?@\'>!(.GhH Cb#zZ@d; 4{|gΪV8Ki/!ݻ:4cc3e?y-1Ҧ2bGAU ~#vZjOjP8Ku<7 _C~yrPߨ\>ҘBMDQ}U$#D_0ȲGp(Jm52";FFAY/4/!rTF| 2"G`՜F6U.wudGhv [t?Qy?zS}GFǚ^p2H622φnEa+smm";WrȩӨjBC e%@$Hsk~&֢ Ax:ļ;~- Qa/Ǜ7U!q7 p*SK h?ͭ=B3"JP("y&p23B ak ې4dsXN"]:BNﯾ64qwl`,D)NaBƀ\!3uH:Bӽw+c|_5BySFm6p67]=qG8IvO~>;o4y7Cz0Vs/;|nh}O,FK;1Kq0Fq>\*.rY 4!rDAd1B-244 VNZ0NyahKR[c7]$bc!>I>qAh0xӌDzDRGo5^w| Ix7Gh{Pѽ rdt+;f>0"Ģ#4X\ieKn&ps}yiAnRtbh:[BSkpw"~82W'oA؉ M^¶5O$CK=# 34\%i˗1ްB%SJ$f2vPe2-y}Poo?#ʍqo%Z OwA7=$Z~?NG)C#tnOifF}T欖튑R"46tg+ @kΠym7{p+@o^j>WVRF*k6hD_vU%WN sP% |ܸ.hQ }ASBT9,|WJ-QJ0a3)X'ښ f m`)lQ:^6%pZ3v۞oc`T3]q*O[~^Z! r `c.6`椅]mGX|^ ﶞ%G - jaH ߆S#IJz99^;BLB+T(Vm2G[53J(8ċMfFŒƠ)v![+X3sS`TRZpO^68!-_ Zys1,l71FJ-?>Z zX*z|Ͷ'PT\}~f̏tmV!'㚲0۴%8]&Tً"}KtW)ϸwZ=d @.Q[YfT3eE\ $]}7767vEqytk?kn Lt?ܮm 26I'c{q8{+[-)c7׸2?Ld^n|YWޏUzǼ5xγ5nMZJ'g֮ɍW}I:cAipz}ZSK1=XINh vr3b秧k(tbYħ&dn܈8\4qM*PL-;u#]ET3ti@9 6$_0YYWp,|0&Ӷ /^֕NFqFNNP˔c c;8&(0X탹,e^anJw2[ h}0 - wz?j_ s }sn 6xWn6`UhKNd[, 60 -l5ddGVvCw={Ϸڗ*fݿgI®,p-w-^°7dҾrxݦ+]Ʈ~-}+9fIB+lO bOd[~^"yw^-ұ+XK%sij7b X'fgy&+S\=O69{Wa=EXfjaa˾zQt .@R Z0!rY{ KeQT3E{nV4RHsH/+HW&ۣ6R3.x% fZ ZHd(vRFx*X9i!BWkQ!$nȻODϒ#|- jaH!AFÿ S#IJ+s<o(iKt/#!mըr&lJF]S<r++;FTsHj;̻pW ,m?nOa@cW,^˽=A*F¶2$R\@IHj,WCuLURoB1%>3 j; 2Ta/LEVO*<ՇnPN;?<(D1\:膳S&9}]X;FᶨugJ3 Báw8wOiBL}lKMZ lKFJwSf.*@}SvU\Og{ѫT@?3 J Bh+vF{ݮ~B׎CHܶh4b&<!+^[F*%pd my`ڢʢԞBysڈBvD٘g#v> ۧC#볢p1^襫./'lQUٸBbai9?Y*̘$H/&xbO.1ً[~IN"9vN jWH] B3"R|hbKm0!B_2vGqXΕv͍vg3DܿmgcجmǾ29g[ Z0|K헏 .k }LJz"gy>{tMk࿗Nh!>}jWӫGYJaLpa[+%)`J_2M:䚢&m'J2N۟G#m xWn6_O@9!+X[`a J:D(R%)^kvGʶ&-$}wݏ\~~{Kq̣Q[AŊ{=['j͞3vgvMתKYgVn d.Hf,Ixpܫ%2ʁrjBQe +7Xpɋxj5\u\2|a+^HQ XHivgzؿˋ?|+^ l/\ApET8qUJXgD9 w(Z:r#7[{QHdpHi'ʀۣp! LK9H"8uѕl48٩ ࡪ28P8 fNN:a%6wѓjda> >xA Zk'H+a;qCZ"P #Zw| {76x +*PN8 b\k&YPheW`K#Z24j}M+ݿ-! ʎ{N@`"ugJHܴ9+]v >zD(0i3q" ضڸVTn IL(LRӘBݱz L秔J el'He-YWo/o? cu@Rip=?\\\op4NuS/ B 1i 8OXp((.FoS=xs{aE!p9ۈ RRA927  9Kd[Eɾ %3Z ekdE{ɥF6iQ)(ݱ' `6T@{kGv Cսz A Nb"Lgl2.nR{ٓ~Cb:UW%p0Zn..|͸T(DyLec8xZ6lQ/0s r\dEı2J˂JT}e*=l~/ 'dG(W ,*JYFZ@mK+p?X YM9jVml،h}bBs# ]"r俜75DCMgpXT4TqL\zpC&?з]`Kݴ6#A/Tk1 jVi'~͐}vvj < u3|" nǶ`a!>݆} 1 1Wp2 xWn6_O@9$+ XCQxHJRrؓ펒G2 dIw'f׋?o޲Ŭ'QĮ pek-[w ^ǧv&jY&Vn $LX"p?58"n^k@hn dy4%%7ܼuE&X-JiYU+w6lJRv:0VjNu׺Y,ovz ^O_뙿/R +;Ww7`ji=FY(Nc;`\ &uFf q'kE#2]nD1K N=nCK&bďPk-d!q}Hadyxsk~.X9i @mІ!$+m=1pm>5Gj% nᲭx(K :qV"e˗0ѳrʸԡ!n{~LyE%Y0tP͍l(̨n ?~ ;Xc҅59Dn1̷徬tƫ=wpȐŞi'ahF+)\9С:"0 KëȢL`2VRݱ@1%{L$dyh'H_y E=Èw}PbIV[]>mk쿞BMѪ¹FbSN1NnilJx֭qc$a 81M r|2t)+` ȵ7ʼnD%jZjl%(j ("R Q`ײBZ+9WCLWbxe_0~7K0?߹/oU0˴X0XȎef9-* Ss7ݞ]MG)EF$ұf O' L ~*FX#8>!R{/\3}z?q-?Ћƅ̒٦Ѫ-TdFLħy|~FIP;B <=ƞ5 *#dTKTBKRPJw^7nck@g0oYm͚pXG͵Q~觟gk,HR/}aYBR6w8L '2]>_y1:dX߾1oTdCD٥Jbb@g#([)bZDZ2/<G/D5Nv,bo4V,7KgF}}^.73FJjd!!!!7BP+j~XO3VI|؊rohxXmo6_@_KJd[@)t0 -,.4\/%;$ۊ~X^ɽoO/~~s*Py4% ;=6[W߲ x/uiسpҾv,[.\7̙/wKB.g~od;O}r!fEw5Qg +*niy{uQI\7\1ܕƲ >Sq#ւuhv(:5y_Ã'_p=|֣+B K=חEo. PhenTx/q-[9k<rQ3enִRz$;E+ݣRĮ #d)y r2z'-j!}[I= > sB6ʣ C,I>/$<K#AQ! 6l~qOK$5*qV;y0b+KȵT]{Җ۲Ui6IE}Kh42ʚ z-2.B-qu +̺pÞç4o0Eݎ&ϕq# 4XRGѼm%,kc@r)Z$\FrJ LĔW%%,X"S'1 duNCr @nuonxO! [7T8ӵ؍8FZ 8P Cί0ąsxJ`C+I%j*)]O)% cCύqi8aI4#Ws= 8FSeB%f<)B*[m@[53Jvc:6 b{ME0 1ٲBqxAA% ZP L-j=uÆuF1Ea_#İd<7H/^a1 Pai䃚 ֻ`!H=3W_67n?74^V!_'YM4bCr$8/&T0=>ND{ `cjn EX[GTYBJiIIVjFE=S bC]!Ioa)~͍]|2]|>A]ƹi$]Φtr6pL}²9 ڠ/AG̍̕uWfuEn"t."G <2d}2ږ}?I  n=9sv xVێ6}W0 $%on @& PE@#5M$% A~Yg(+_v̙9#͞v[VʢY,IحA喽pY°t2Bk_xlR7ؙo,,I5x<5ڃb[CjS7,u/7qբnbxV|d.MF"L(5ʲ쟿#F }ZHlRa=ahKRcWC&bc!>(>5԰ S+INUlx Az2Wy$#8-{O^;ׅHX˭)@8.?枷 z/@McsHHɛ5XA̒#wroEȴˍ h)IIc*qHJ,XX?XbfAc9AAㅩ)Y翼ԯ+{5(7>5Ҟ!X_˹sxJ{,K+\J%v*)P7ASkn:@R-)\O+bOse*H#K]O F1Vc--')ޖ`FAP/OV4[ aڅlYsHfI?ȩDA *IN'Dwy`&Vg6 xssR";l̳9?ŭv1)D@l^襫oo{Gv,f;}6igt<;'/7$J/ z}YEf/jn e(ȹKbP;BZG)HfD2*p H[]UI/h2~ݕn)D 2'ڧs#`{d]<3l;gl>Gf@Ӟ}>8B8t8[$Y},Gd$il֦7JÐhGBAF2+$_.r` xWmo6_@fɚ9! X[la J N?B*7sVK|H)PqSN%CHj8g'|\6^QZ*xk*P%*$oBh&KG_Qb|0`W`D//OX(؄IASBT9$TW[`&8ʎ+@=x`B>!\˂X_yzv+18z]_T @ZuJucP [}!dJ/n}+c7 _ giL _|s}q^.2rFCNUc>B 6i`]94şǯ8@xJmdPqZ<}Pva׼BΘai؀pYXZ8Tඁηa [MsOmִlQvNk6|gi{dkGwM[Țus<+ ?OvHw03L.x>f4p_)]q"xWێ6}W0 IK޸&E@Mhh(JRBRr um}*`В9svfHO|z+ʢi IصA|^yIa}zNN]Y50% !UA-lfO bVobŭ?"yw^Wұ+O cٜJnN.ӫyEצX\yןlt7a 볰~˾š-D RVkJ7hׂ 鼕y큌$8fYYHA+ !m,Z ]M[&mPJu6{\$.Fȅ.Ad0uNZj\IzDi1qug!Z9JF2V\e ez7kN-Ni$WZqz,\'.-m/RP#*LJͥoHH]R9oղNҫYt0UGav֬U56^Vn]O erd{4q)U}(&C.R 'Uz5#}PA甥-1on#)G<2QPx!P 5ҏ3ڒ( % o5i^rEQxNՐ _2@7{2׷[b0x>0^\aUǎFߡm嚲I~`ꆶ({CLp8KS-?~՘ld_&+#A)GkEX?ܨ׋@HJ=IB'.l-UB;?eP&R8/dhbrm:zƒ^^}֔<4K?w{.''j<T, "n 熥Ȍ˧rjV%FRRZRal l1M +BP%q{ ѫ*edjVU Z Lo_KӔ+ ̸]i|#*/M `1!͹j-F:KsKZS"a1;r"o (_(9 4 Gݟd>Y;Mq02ٍQM}muFdme'kSCLCz%!{w2Bp+~~$X"δ"sʶa1##YlRy҆T{ϦY$% Dc]8?* "o٠*f3ΗН iHn8Lő,ZA(PS"E 9*&C eTGZq #*f˰iS-j.WP 2Zlv&q  :f|k [˅,De" x=Jǭ@`+K`iaO"p꿮BCD PClj67~kZ]Cw$Ӽm~DE, O1/ ABhqoXiȂb6 DX4t 裡y >~ CMZ]g\^xXmo6_@!-t0 %d./Eْ8]B̻ޞ#wDA &Ѣ"3Vxo9|Xh0A]nKvij@h.mG|yb^Ⱦ [;O[.*mGr%RDvc($AɀZy@`)#LLC1 ҕ`:TYݫݫߢN6-K)j#؇k߱_W]O~~|<6ZuW_G:,!ᶲARb# 91oh"FĢv}"Ŷ=c(zw4 g  \mρ<](l%vؽ V+G)d!1}0aKQXBmWVdG8~9ρܑɃqLbݮ0SdIA1b XBbmݨ㎶,@S6_@$` 8t)1Ɉφ-VZ}/|ˑY j&H|AHƦ:cooKnYBLFMު-T;Ȅ9{gϢ笓YtC:<܃Ǝ*,#dd +-ZLhC͒QeB%W7 P'51 h8J {NpyggRivdu+f*s2·NF3cԕ7(kCAw`=w%ҖČ78AY5{t̴Zl̘ǾAKЊX}a OsCoq.-(Du_nk|hLM|9rˈodzs78;V5i-s4 `*tymUݰ[1(qY۠5V5ѧBY<~3 +˕ 7֓1LnZ8▍;8ThLknH蝠uvj<+AwpLΛӪcόSՓn>~|M4= \ 8o 4p!&#-}= pnэ1~8vAa9s!,ǵGRT[_h/rܽ'Ԅ݃[hOUE)ͼ96/LpZJ4k\Kwz( owZXذ(z.@R Ƶ`B:o@F %8fܬi 5H6^VoLv"L&*ۢ6>J6;\$c+#d)} r2z'-j!}J >`夅]mGX|{Ex"/hQ t C 2i_;0,ԨQ\=ǫl.!L;{-җ=a'k+ͳN4BE,Vdjo\wߞLk>ji/u; ׵pc a9ŰX.pSC[RvR`1RJƆ\pP5>Ez6PNV J },1I+P2 dMoki9fvS7 "up}҈m 4.d ŝC5KAA% ZP L v##u]gh&G!)=63O+,25q1/%z {PC!U@/]}~iq+nZg5UsM;KӣuT N92N'O) Qtܣl܇tT斟9|;% u XJuJR3"R*0_ P_ul&څHvne'k#/ݵ0V@>G맸sy-lPZ4ou"(;6C 6e -.,> ~ 8}HlQozGW']ZLõxd}6al_ql~6dz7Tj,eUU5>dIUt(j*MN^нK}ƣÓz׋ ~('\_-ܳO 7n(B <.ѱlA&/|Q ]bw$ xVmo6_@9! Xlɇa Jz7GQ ܃`Ŏ}wͮVʰ|Ҿq,nZ̙oKB.o>[F{>5[Ũ3✕5U*c[^UƲ+^(YJӺ:i4;IOӗi]fg3(,QJ#duokK߲#̰ wlE{L? !(]Ȗe%,Ba8FfV0j]Q9؜Xpb̉xl0,jDа4憟o.BFfD˥$9YQzY/n+6bzyw^J a -pݚi ݐO-7ۻ Sݸy- luP1L\%1훠?=nZ[Ygqɗ2JСw8|JD_wkP@YtXaϹps{V^(om k?++uCk5V?7Ί> jz[ֽ3 qJ|izo^_<% ;=Vwn {G(k7ɲju;Ϝ[|'$![A-?s=h\kY=bT8c[~*y.ұ% W wJ4nZNNeE^[9_xןl|za`Sen&*A7LH,^.1ZcfmM+/Dz@xYvtsEH&*ۢ6J> CK#d%'@QlP ; n-|4"(2 mI¼2퐈' ||j0@OxÈDRGo 7|<Ǘ{l;T]{R'?{+Lֆ|6:o.fWZYA'\b7%_}y i5r.ܰDt)4-!m)L,qw z\ٷro@fŁh+aU+)b&HHjL W"XUR߰jKLmJ$f,vɐY|ajzT?qcx xon8;&d VV롺ɸo o C;8QC;Al8Ơ((.GoS=W[d!zR`Þ1RJƆ,pPX~\da؃^*xk<P%T%s'_JbK ,Wx}F;~Bf!^,vhZ`؅lYsXBMAPRlTSc(k&4ƨjNؔ=,9m42 GfzaA ȇuݵ*@.\}Ʈ6ag`Q!ӬT"tݰMر%87TtxDȽ @ߵŞ3EvNتu$YtLy o}IW`#Ʈt~a&ѭ0p|ry8wnr6fiC]jC%s=>w|ٳXpox,":ۺ^݉X.{vG8~Ğ,@)Y}Y?3o>KWp\ : @m|e61Ubʱ[{x2wF7tK3ޔx=?xXÅuPqQ44]'" ʊTy,[xWmF_Q $`wI}\C ;h!#k{]uw% AeYɶ]R¡[I<3.>JRY4=Hva{la^+"ualҾrx^K].~-}+9fIB σZԲF{>TǨDŽ%E"P]ұ5W O/̥݈5`4yEX,=/vvrgOu'57E rM]Z0!rQ{ $8f`V4Rz $˼UDep`\GzDrqqe,$D ۨYkCAn#rԏI BG$a^{CHDϓ >j0 ߆S#hF%J^| Kڃա0.ĸ[\]nV0ym)^ Nd7?Y  B|xWn6`UhKNt[, t0 %,.5d#e[wOE~w.o~~*Y4=Jvi;,_W IUj*=kt\.ӅRmSK.HNY"ppܫ%G'y|咛U 1+cP=+jn-R -:!p}Lh Qٌ/ ƌTMy6aXe@cdcn>!Fey@ UD嶽`nl*hlBͦ-3L+ٽER3f:=M_L_fOQ e0xqI 瑅dxFR3ԏbDŭ'[ P }C"6ηfEf'pXp-MfH~zͦxlJ:+SA2AUsM;CS>R}%RZH:_#=oxOX?(W0T;7ĝ>J;_= e7CEoAH7?aouM8)xpic8"`x)xgᡢ!Hzm4Bv9{Rae{13 iDRe&4Aw|-(+&Pk5,,k734g/lp/dz{x hxWn6_O@:$+ XR( J/hQst C om0,TZT\-=W;!!R;*;$#H[}zGMzJ>\ԷB#X͍Π>b7$%o!;P7Ƭ ;쩟eԍ!q)tެnO|]痕x'RGѼm%t6n IʙTX^%1嵒ꆕY,)fu } fBdo.Cq@%bmwBz9::+QT8wUSyXHz|!ΔvkOp[cpD~,c8)!Oo2t +=cȵ8$%#X}lդPTpFe*H-[O -me+,||}H hia؅lY^qkJMFSlI-T L ky{ꊷ Eyt6?bs;Շb:{? xzHaC}њ;,ReOTf3i`Z@S7*y:qZB ]Np%SUz/^E{}0'57C62x& Z!) ňYO a$&~6fMwpXޑp͵l^-fz:_>g6ҜMC#MR?>psHX̝?E8y{RP1ͫĮߧQ`b\ոذ\뤅Qt: ׊Ec-QP`AD _`FwU])mGT81vM-Ч(X1IJ\cD~:{2}r4ceie=*pѧs]lxV#loBt\^+0ÐÐ!/!7F*j0mtb   ~ qxWmo6_@[ 0 %,.\/%;xВxsGf_.߱7*ϣ$a {]W+^3gzNWK]eT~-d~X"p? x20ڃզ2Fe第u7U-kbTˮxd)Mf$=K_Qtaڍڳb'z"ga}WG-,o .6(\S*A7LH,:d^6E+1SE~fkM/@"CxYXA59lELTGmΕmG\$.6FJ r2F';-j!}NHM>`夅]GX|^{Cz"&JroDz&ǁh/a'k)|#S2U2|Sr7P-ce` LKVUxŗq\Qܽn(D>ܐ醽俜b۩B0J5 # /Oo0D8KƱ&otJ͜R`33RJƆpPh( 4#r= 6; FRUBa*BRF*k6Y}=*''9N= xF8bѢ0bf2M ٳRqP]APRlTS0;ƶ 04Byl%8=SSn,2%֚!{Y2o `=4rmT]~|K Z/'{xp N4/_/^;#aHa=~=i- ψBm!+iSEYiF/)oVl_zm*4٣bg1^VnB6 :z303ٶ"ç-l1tT7Χ!>4D 6k8wm6gΞiпUlW#)"4g̚u86.|vzۣXǤ讄!RSl5/0%3)pb7t뉎8W]hƍ"F'LI(o}bxWFO1 ;qzXT@pT mx{];k:v';Z䳽3fR7$'zx|{ag{P׸K7t@e41)Mtw M,Du 5Z rG8cHr/;G&JSqD8" ǜJk(-XQ1oil̦ ٍv ͙4{OOxƒ{!7FXqxwƬPq ܅&2u ߈ pa$&~Ҧ4vq H*H͍đ2 )e0MY'Yߠce85I?'ԖCU|xlngonGgtyUUn?7Lz ]=#s-oAPzK3ZK )iWDঢe6+Ovy@ {y#dL*ڼ>ZDd2^(pkV;ċ6UrCTYgvNrJ'os{/\/x*EZՆU\gmmIu]M:1*אX/("DT`SK#yxi妆iMȋK\jY*.^2˕fK*E*Tc&m,Ap²fg^Sw]LC~-JV֚KJUh˄Z dtŭ0Za*ZVd^IeE걜t7L&*ݢ6eۈ"8tR "'٠wC d(6B'xu*X9!@WҢ C,A>wJߒw{O%8G Z@]Ð\cSr;/K $*qV;%놯a2pj r ["!FڢPZG }OH23054,Ec7-bu L{fM3 )DvܜJ w {.ՊAV MV@W+ml1ϠEDa"$AqH-e| ,טJ4XNpjzRWן1eztvc8麳SαK&`BEG?@ğJ! ΙЋ ЏԘ~$HXG?yԻT2KE\H4WOyXո\n)$\(EAt BiӪc-/ l9J˄/lt[6ZiE8~AV -;";nW*|%dZ6"6kZ74{/s+mxXmoD_RB %; @T4ykvw9 gN⻼H/Hc{}⣯<7mJ㿏L;(v]iSYE~<u|nssoa,c$dd^o5L.v)Ü8e-C=OG.jE+M/:q!F~&6伶F'yn?ѧ_p=,^OY~.2V|/%%KrQ4`4J(E2^tU&fvnbd4ؠAVnUG f6{4YšU8FFhdoBt4ݩs;mֳ?2DdN;J`jlֺK5A4DNOƸ@0 .YCc0xLK $0f5&yEC|zСU)l->1^||Rd1X: "_:ݱIYct'vHp!w%ea`-{ 7IcB6ߒ!'uB3"Mκ0jꥢ PŇ6Hl2ӔChs)jG2HUM&ed1v^'93.?r78 }qC&7G d1eS~/!P>& Pn6w%1Kac.s"sL̑Eeo7B7:NEL0S.):3jx*}Nڢģ}C`Κu)mglu %tQWa5:EpkrX/3, v[,S2Q6{/J-khCM8"_dJV 9 eIޣ!e \,r5/q.O2M uw(fOM3 wXnufa. 7i:˂zϞ=4X83s:=ZN:y+#Ɩ[l+o3F91۱t*$ziVDX-6]m}XqŜyVb1T񔙋9]ݍ| ϡ:~P?m<w O?z_}YSl\tan@IP S-as C=>]j-rq@̀GZL=XIR<<2.PBKjk!+YcftMB5ۓoEA<6:g0L~mDUb[0τǕ(l0SWڔ+,O@f+w>ȝ%V4ycwH!aYq9 Ƿ;i,4L){O_:'2w0/)d0'QK" ja7P 3豺Z/iBć9p~'y-l=mO*}uH:)Rb!BS5QkyGob# K^(0fW`N7J:%~X(`#WaEo `;[I8H54E&84ȧï*   > 1fxXn6_O@?KNt[,)t0 -l6\(`G쎔ɉ?(x}QGOo==;93t̢iVAk;B=N'#v=WUPMbluV1KB^ j ڈvh@|]C4Qٍ1˗XpƕɓcuU\5\2+a|.E.tcGcV =LQtc&u_~žQ `*a=ZY(N `\1o9wB/j2r=ѭ(H} $Rډ<`ydX0 LKHoH&v)V.@Dқ:*t U![ Ϋ`愁6ҡ C,AW\K&EϒC<s>5GjVn;\]Z"P%ґ\-Q <J(PN8 b蕝XeuW8F]W(3 5+Lr[Hluk |amiZ; Lݘ7lBMw;۠/s# R_Ѯ# XڸJn9+*IH(LrكB+`K,ҷ)m*13 gu }f _>;ymUη .Vp߳[]v냃 ~%h wȡzۋ/ +J" %ېsk 8)@xSZa\HGl) lcFJI6pGSpP%wzٚVb7{ V2 aJyRJH-~ٚkYt wEsMX]aI!ZKn-O3?ɷDB 2A)pډ{h=uOs! `:وS_ <lݯ_U w,@쎚emlBL5LSۛw)Ud$'lgDXΥ{Pٝ~L<V!Y!70+K_quTG3dG6k-u츄k Y 6E[3ݸ26I'cЕ}ej88zNWy߻jq&XTͫ"ޖ+#ƆtgwƇڗ~Fq+pHQ.uӿ8w )w|{Cr_M*Fa1uMB#}=(uτ%m~)F~` <~^o R8eC_g Sa?ڱs6+}ڰ82P/Ek3<9 堩>~c%YR4\M>O(pF֐OдCʖxhgXz0WL(99 OW'xmǮTq9B2zԵ=m}EvpL*xl>`r`A`FĊjG/$(E`F!4@Ϯ4jo/>xWmF_ qK,] LJ !9!Eά%G+EyWOf~y}Wp2 f׃(b[Gv_5{OPUv$&^:fX 7V2aQD~qlVn,k!*X\Ƃ.^BZ%û\v×̤5`Ԋ8u5rU8? }?+% ln!>YKpEpMJ0!3rY; K$XhVF7Rz$Rɬd{`0Q,w^dbLq%w"lБ1TB:/C;j5ÝWIRK2 $qhsKLDϒC<s>5CjVvxlKwi B% Sr &=zm@2n IWB!hCqYJ]S(43Ȋ,#~WFR3tu [!R& S^H|!Uɾ;mzU43FMInp\@5T ^FOCl)-+ PbB4RBfqY7"GK7lw[*}~]u1/ggK-*C:bƞ78J88V^ۢSn$gv#81 ҉or)KSVH{H)io3M%C 8eg؊iؽTpFU, Jط|-K[k2C[MgkKd_0Ŏ7+0߻ oV0[jsa"߅lXVrk%} #ߢ(#t0mύo"t|sTilPT{ BZ}klqwe'0ݩYRQ:1Ҵz\Mک,!.)'E=d$sMWX'XOǰUP YBq=\E6xd'.N:Nvq?!a ӆ:vd]G)$ ]ɗm%09?$1&KIK[:m U JxYOQ)b7$n 6s(9GK _@}>3$E(( :JǮ_|o_ܗ<6cqmAzb+^~/nN_'cL6Mubjo$dJbsֳѵoDF'dŕHsiY7ƪ\9QJ]BXq#JX:exw7~U,h_+=B(kXߣܨ ֈ"v=Q\ oEna9)L]Bd$,DrfSA/߽iRN,#"_W/ɓ l56>ϟtt%'}AUև2ݢ7 9uiLK~Z+P~{)ra^ b3HڻĎJ 9PO9rԗR'sѫ$eL8?-1R@h"Sſo] SdON. WEcWta-w4H ^?Hɷ51:Lm XsZct8yy/T~2M9,pG Ӊ[1U}P$W}EޗRdx踏a}G q޲?N'cMgIScJ\$ϟ'_=މf7:jrHxTI+<F=#eE+mrYR- p/ 2p|KO@ Ƙx;ى- Ϳ >SAOE)kԘ~|tBJH@;;-|h (p9LsRLq~Wܸeҳ͵7E+X{>jyG^5WB|:e9y1G).p [JHg<xcBa-IO\ߚZ@Aܽʿؚc7`KYs/I ‰D8.h)l`pSl0Hv8qK˸sT]E/D:|֛2o dVj:R]2Uo*u)gj)*7|܁<%5ig@7x&۾%uEM'3΂9IK1bcQ@$)p= ħ-Dbrt5wΧЍrԈqFG7U"!Vk$5d{9U+,uYÙ{bZAgA5Vw"ŃxHH^Zk쯹؛y24NTS wv@1ݶPk5]] \m ܄2&0V;wot:"r6ㇿzkh`sOㇿ{ U'#w"%&$ WkvÍJã_X0zh0AzUaV+bH{PƝ]< @+SQ=av0;1 P@3bJIp*!_kDwM.{q#3h֊V# S""q;a)Y{&*%?=o..xɢA KS)xk+#3H-vu;S4\$ #,gC^>t_F{>ܵbxZPs\U";UƊK7Ps3ѓuhq(0Ϊuſӓ/g~g,\?V"E[Ԝ o`ԥ(V'6K6U䄩"?qW%"CxU XA59|L(#Ceӌ6ү&]ܘRU l4:.2ip;׳i<TNYjx`)yk{wI9ApDNƼP BgH?x,K4$pz5&99Ȇr'^2fRAn߶CK>Yh #$WXղ,CMtMeOi@]Y/th:[PG4EݑM_7&͑+d7v"HWmɭ*}*G$a4#ġQh46J_Ry:f;/2`_ޫ.ޏKʍ3ˍu#x7d~bkot÷ߟ~ӽWpZjh3J)Fq~2.o$S>czTw Q#{.X))06Lӹ%5[|\+6#Up5zT%#S'ܨb ﷣4ʩ5Qymᨊ)wa#b{zQ494P[POMy,2y;RײO6h5tb)UYfn`9LEy[6L]&V9db9 T1t͇< /#s3q8|z2:&辊3]YZɒ0]V ^ ]x \dQs*HcrKv@QjZ>,d-g"I˦ v- ĠjdbǴZt:߁f 槞ƪ4c&ׁɒ>p^ hDC䣩7oJ}@\Mݒa'ՀLDŽ_*rZlGay3 +QP4O]U_-NK;,p\1_ɍiVxXn6`U KINt|0Ebm%]1EAKG6JTIJWk{=!e[vt d<\ug?~涔i0~1;-ld_ap-BIԶ6`X$I *kXO9`qLS-h'ᙪ,T6\̿MBdB1bٜkv"~v.°W WOȄjLZF'$Tb6?o"|ѭR z!dn.)OtEQIɴIS`Wi<$LD]~U}Վ $U 噫)qCv6TS.whC[{TU3vH[Ziۣ\'9#{D26,0yg\C1 :2 rI$T5ipهQ;[o)ք{z8>>ESY+̉']%}Q]dDc(]+ΌZo=;UZaTHaC69SC! F  5!;s6k^֨SLT&'D`j^ ݩ٭% ժ%91T`@ₗB"Y*"3yeį0Vg?!Q_`aB@R/ ZYle(;c'BEm o]%x]oEcƒvBJ;9#B~.8hx3YtNW 5 ` ѪRz!<z>dO![%&ڍ7./7;S ~ISQ ^=f,/z?n6CsTMb>`jn,Ѱ[̄0}g:2{tNnrQ?Jbb3n%uľz2v0 {pqĐ"+3%?BG_9iH/smss#NkS~\ʿ3k L^i#'DuhE$ ae L UL YxWn6`UhKJd[ 60 %l6\5dXt~w'f͇o7o*fϓ$a {-ԕa JMl^Kݦ.3g*2Kf,I<j n_Adi fe4Qg+W:Wxj\\1UƲ/,i݄u`44Mr쟿&֋^{' n(\S*AwLH,Zd^E#1SE~fcM'D챂t3ELTCm|ϕlH&]!Ad0 NZ,):},Ǝhnv֍~$¯:I&RcJ/cʭ,TXbQ?4VbfAc9A:i O}{qVn.]"ؽ>\ g<;; X]Hw`qH=F!b# tnOiJ}餓Tol%6#D@il)6 W  Y );k+deTe*J(r'Bh% ׃(1r/b%دQ,ċmf01ٱRqFmAPRlTSs 4 B4ylƿ^:yb|n'1nD6(=gp^dYy! 1**f."KwZ Βq3)^g)?6zz =kW*2l .sBm+i5PE=XiFt/)Vl_)$4/s/n@ ~esp_K#`d3D۾m2l>H'gED8.eP='؜[??6Y|MNYN/wUT=T)"/Ap/5^Ft -׏8C|g1oXWp´OZY:gJ"O^+Y+lMe=.xڷV4&_fCrh xWn6_O@f9!+ t0 %-.\5dh[Zw2۫޽doTσ,cW {=R/ {OPڷn6|ԙ_s S?HNY"p? x2"2ڃU"Ee?%/.YUs/:^ѫZ:pqji,楒4F"'ɕi7Vj=n7p~˾š $;t ,ה o 0y+- FJp,?rk 6^VVn&W &Qs .c#R r2M`ZHd(6R&x*X9i!AW;Q!$ސw{OȒ#||B0 S܏#eIF%jtGq &#o2WPx$#4*_xOOZ>O$.R%[~xmyyZ@3/ܸ¯#,l?lQa#]X)Sru$ 4X Rg8%[cHr-zIn&RcOSʭTbQ?4VRfA-R9A:,kӒ[CV.jW-e<?ߵ;6gg`XW<ΣPӇp'@[Ar~aQ`89M"RʂOtJ͌R`^2RTƆdpPh 4r=Ѵe_ P[WeFń*S{Dr;Iq̏}{ {9?*{K^wwqUw4cU!?ӖJ%qqkUsdN,^gsv˴0O`t 6tL~(uA}3S埃 ;y7xAIR" O] cwHd V1-YѮr Cd%wH o[ܱ(`}T!GtVnsVRX$ƭ [K_piXgEUI\niMK!'4ه1 $Dӿ2eU3ZqqCJu_vc`-TRp%@FMv&J}Bpt(H )8ѐkÐ1f xWmo6_@z9!+ XSta Z<\(R#)9^_;Rvdm@Hsoϝ΋G?\_5Zɢ(عAՎy]µԕa/}v׺͍]O[(9eYF.w O8c[~*{^]nc5-W *c%_)YJӺ :i4;Oyfgz_&x}"\ekaar}Il-]B+k54}ktU끌5FHpTXIA !m,#VnnLƣvRYI<DNIdC-2ap;דa<(K[cȻO#||- jaH!AFÿ S#˒HJmk s> <KHF-4fOoɺgiLhe p 4G,ELiqu;LpæS#,im ?nNaʶƻ!ޯYq5},hbD; X?J7K2$ <\e)%VI}6e*9 YPyN4dN?>ԏ)k=u<on8K \5CUX9B`P*;C)- a9à@.ps@;J*wsR&46'3 mߜ@%q Vb{\@sy*^Kb!Ko{[+D?`n`$s!^$UX Sa؅XsHvEPRlTScՐZnyaz)w{ŎF':Q5y|'"{pCd#NcB*i5LE=WiF^)S^رuS$1;-p;BOoki lı_,xE~])lqLlI}ƦQ%F96 _,VE{vCq@%p]pvv8G#PY{q 6=B>G@9Br~aQќ;׏∧4H' ɵTfxH)pMÜ$% 3FzVl*(pW I })0I+P2 dmokm_9̰(4ċk#va>,c9e!5AN% ZP LlAah&;؂<9t"a1ل]cO3c\yA4w@H=kW{1۫iM5\brqr+I nf2=`F)Îa=}=sGVw:Z.,4#¯o^l,@Er9xKY_F`A{okhqq6L"7`#k|r83돋)ex2tT*Wu{fݧMjz,C>̀kQ`VpHltNҨ`mñm)2qБ\':iGrE%OTq[nҎLqF,*TsdpyG@^tԾ9IF f}\8S& PxXnF}WLHr\IeA \h[SR,)8n>h9s;3;޳7W}I0l܋"87(f0^wp7RG=v<:fҷ:wsa>D#j~lkPjQaikXtѓꪐBբ˵+1.e*um{0CcVpǏ 8I?w=}z™ PoLPdebT8M 9ѱprJQT-ϵf֞dK"NA@)F!i4lGm)\7,T$ZABMj1^=+MBvR7Dwҕ8"#:oZ*x&'<)d6"30CYN7/iIuM 0ـ=ݮӫ- *MlLW)tR(d_B#6A*[3Jב gđIEed,8zrfK0BIy` UWb{c;l~.8L&\Zw?ጦ`W]фׂbqTKCXGѬ[PxLv8ֶ81O#֊3iX-PȌZX)0ဦS  Q8C~ l%Ԡ@ |ߗH h53# |ΩQ.$V S[[c]f#+.xBt]pǞT[T ˈYͦE860wA)ZKN ]n$ۤE҃TjW]$;,iU@V5)_iڀҚR? rVfʐٙ<ⓓ6'*n6l*a);Ic|13.+x4'0ǥN=RlS{ Ƨ2ZSχ6  Q[Wk3i΃x|Lakvۼa6ۅUJn#jZQX<՗͛wn;JHYPRV`ӿm d?S%i4w< `%v@CDxuofTT -_r*A2{1p197͌`im J[^^Pd>+hU[W0/dZ@AK \iA"EbyM Jrm%kWH+Ÿ"AFfOeMcﴰ"љÒpaoЏ?_䣽#YO;pQ}݁)T6N.Ҭ ]1  'ⳍğRg>\%,UsP7sn<3L8{f    &xWn6`UhKJd[ 0 -,64T5dd[vt~wGfWݼa_<?O]Y[n;v . {N'(k7˲ҕnRcW3︅KB.g ld}r!fEQg%+*nEuG~*Ƣ1 % ? ¹aGΞKGy;>,5#/)VP:-d69"`j5^VnF 2 ;ӯ0vqfrgyߩcej ;a֋)zNMi?hub0ɩZO913f(@z29W翀o,]zNj@7C:Aב 2К2Zm"Qۚuq{ͭ}蒲w2*@Bł?t7pQD]G_`5o bxWn6`UhKNt@ )P--.5d#eGv> 0dJq|^Wj{Y.-pVn,? h8\.B73s>RY"px2$4ڃm"(u'gNR:Vqpp57]󙒅4F,'ɥWV.JI%62 j: 2a^d˫O]rwy]s)6p=M {?VG[>&(ϥR-W-!:B#)&]85ԕ/ ?əTүFKS&06s @-qNQiWZ2xk"0(k9!J*$6Y}ɚ%ON#vKyDe<’̈U4.d ŝÔjfl24 [^w4o3B-ؘGR"ӽtaʒ3Ewr@虫ه j-HN,q<)yN,=Fh20c44?}v,*An%pڙt*{PsIO@wF'p.BS-5)S܄|kmhOfK`F[Ʈ?4Гq3.)qٰ'oWfq#$mƱbԃH {-L{"/*"<V\{(mUQ;I |JPJ#Zc% B4 "vtfXhVP oK9I$6X. ؉q[PF("/xtYz *aRQ1*HQ [B ?$(HI8nWME5Ulr83$NXJ_ZqZ8Y}j^vS"3a ڍM`:&x(^2ڙtb嚢0MA7]Y % %.'xWmFί)o2pw4FJQԪyQ{PUU޲Kv7/̂mENؙgޞf~|w}WlJ^kAv*4{_LPUv$:^:fX]57V2aQDs)qZ4Z+E7 BO]B^\lō7]=;nV²Kw6/Ȅ5`Њŗ8u1br ^/K}߳*7f?su AL)B+Ki4} :#2NE%2]fet#rR_t)Dbyjo= 0 LKوpL],u. ]Io6蜬UPyn?PI? VNZ:a%6ޓga >5C0$ Jwe B%VjY%LzY^ۄ2n:$#ĥnAG{rƓ,i%)9̈,~K!0@~W}ӫR& 3Y]H|K\d_Ý6=A*#F$"wy r$@\F2+e+<X1:N FWd^]rK Nןxvvȼ5ǡneN"`})e'GHm0 *|73kDFXR͔DM{H)!w療+ ߔA5WҰ;TpFeCCؗsJ4Bfh˿_wZ++)v;ko/oۏU0[|g<Ea"}AFELMCkF714xS6w֟gX}6=N{,/uQ1!zU-j zSYނ*{bO6ٸnUYRQ)1˴r\-ةE87fy|?}`éw]@c7D>8-^!) ň [O P7TF{0vfCaJXΕzFڙmoTn]泄tR6kL}%s'CZvpւ8D3?|Nȁ.oyc-%7 2\Ǯenu}pQCahE dN˺v IdfP%Ӈ?p[s>&un+tY98JZ\R|ڻHC۱$#jSBpҝnMZQb'dF,Q7IqZjX0 6uDakVtٹ+ZZVCqJx4?ޱob xVnF}Wl tTIe@\uTy("Xr]vwIE A~YgM*̙33g\>yflkGI ܃`ŞIʰ|־q,vF̙︅KB.σ[[7F{>YY_btf[~*y[XuóX慒4F2}FэiVn7_윴!Vya%;bD"y 䣡.QK) 7m~ЖHjtmtכo`6x= U)^^zG1B>ك2Yyzh1VWZP(|44y|WzA;cх㔎%$~:”mgGŞr(Spud4X<Ѷ82$cr'߮t$\̤p8 TV%ZVV~JîZs -XkPԓOy}qXQn./TXս/(~g?^\AcSZ9]=Cmpܰv#!$I' /V kFN0q c:@Zz v5\/ڲGùtM*JHsO*^Kf!KXQb_)_0Y%K*ZF.XŠ)w!;V*-%(@%0.IhԎ5̺XG`KhyYs8?B>R2P<+#JC~>Ȼ WLf{sǩ}5E1}eX:\$-e:O-J$=@M<=ƞ5k"d%JX%h*HЅ2]P?M h~BA^=KT'8l?F(B%pOܴ~YVˌ|roLc}1.9ъ?hCj. [&Qs)W\$.nt%jCIo6TfPUy8P8 VNN:a%6݃'Ȓ#||4- jaH>AZ ᶕ܍# J5j5FYd|4 '!wHFHUɞ>0g,ECG(+-[,CS8@^qK}ݥ#,L 6fKDPHk .d_Ý6#A'GmInEe=#/34\&iˋ*gz ,凔I el'H_e-Y=7eS=S/A#yM-카cqNd,LpGH^a`Da 8)M ORݜ5¶fTPj{oM5CH7gٖyWTpFuZASs|#$mY-};*OV sw)x<hQj2EWg"~PRldSsؚdH[>6ޠ-"/KqƔOpa|'MY1nGoc!ReOTakAwbz1߫zbah:YJp,2},`NPC(O'-7|C22U=X-fjňڅۋMB >@4Kv 7RW0~8G^-2|rNԐqrm;6A ?MO?V -y(ovxpC'LPm]cgi8?[M-L%d"t1 cwڲ;n%Z-if7wP '4ݖK [huFHo-PwfPJD>ӨW!6Jt=pRFihR;ɋ}2.:Ls,S@ O O.` :xVnF}Wl H];Ie@ 41P(`Q,)e^眹1}ǛX6uY܁`pǖER7 ]cInjcmVեr-E\i{X[7Z9P.ZY-BfEōh] lUkW6lZRv:0VjM7vqv ??^k`6z*2\Q)Fk`\ &uFrs'7E#2]nfct'+ ! ,z.oܻ_XL!|OH.!nC(H6l3Dtކ;Nn'j6·;ImrIy͚D<9GC] ߴ5w㌇R! éZ|Qxo<(e IWCPctf/:WiL(Ȇ[Wѱ0;Z.xԄ@䎇SPWy=} wڌ ihcLL; F7J᪅T^G [KfrJl痘J ԋ@ pzw75etqt}GN:;Z1PfG{|[Zɴe Xa_eYaJMz/t;3knae!WA-O\ =h]nHYf)*18gՒ[~y8X].c5-W ƲK^*YIӺ[uhv$0ҳf'~p= ׇ{5+H`kZYXޠ+`\ &V2Zr/kE#13O|fcJ R_tXAٛK :]6Ju6oP$k#\z "&V C-26R/FpT0rBT[Q!$kcݞY@6t~A Z!5RpwaIF%֖HGqhF=zokc{ߍ}bUH8J%]Ah41Kʆ*-}B4*W 6sMFB 2?,Kaƻ񝫇ʔ\> {c{TM+DW֍'/gVYxI*s$0{WWlia>K%sN$e,ud,4 YQg:j RRp=m k7<99VP?݊9d euIkŕs]MxN$`J:YJ%f–R`3RTƆ`/pP%P㛰&z4XD^*xk"0(Kؗ9=Z*6Y~*+' V::~MB͎~1q6Tɴ4b,M{r*ŝjKAE{@ea* lX}S(kp )9aS~gyUsXڈφ c^k 0UÄ7(ya6A};UvKל;[ [Jت鸡Piܰt91`7(þ1\,ÇGl1r4дXᖟ1.:j5Q̩QJTW!aVl(@7ܗ wq^[!x~i3|~}1Vd>tLpRE8ءqzΰтaᚱ'xW;wEﴛb$;_";\?dĎlο?4P m% Śc;C"~ñ}МRѤS'g4E(v5{T1eZ~l! [t' {p*БQ-Dng%)?8βc ^D74[!P%Kڑծάd]Z/-Y/3ϼ<όߜ_%|h>|Kvn{la.ޱK(uiسt:Ak߸YtULB{ˌ% !U-Z-s=h\nY_-bteqƊ[~2yY]Vұ+g/,i݄u`44MrUylz ߄i8> o -,\_A[K0rMC_Z0!rzKeU43eGi6tR{d2$EvRC)a|h%FC` >Pwm^Mp\9i!T[ц!^QvיQ$Dh F@SÒBZNq?x%8F0+sri/t/ܣ!CGd]Py֛FThʆBѾ8߃ 6^X}9$Ӵ0E[فYru` 4X\80$cr-:TI.&R#E\%'1VI}* "HǔJ,E<'@"4 E=pǗUbw撼vp}Gfr2t nn`cV0Ȅ`1D '!̧N:J͌URȞ1rJƆ6p h ԟ#p=0u [W2!uO%;)y-F,0Vb--':NB(<_U|i&lE 'BvP9NT[`4]C&.}Kpb,|_ > $fV 0JHe(Rmx*X9i @Wʡ C,I>ﴹ%<#K#Q9!i7lǶnP@*ThDw*-b$OȽT=ѝtP7n^quVI/ =:`s#24j,ESǏa:=]qS=  [C)tָ>~[W3pHz&Lkq#ɝ\ !XHUd*> )T4PC@ jZ antCVTx뻫OØv~|<PjZG)\9?58Ub_8Gs7±́rdâ#9viN ~餕/Y)6%#H@%4  *@5 WRc3o}VX@Oؗ3Ziіle++%vقM|H`isa؅X^qkDmF?LUAa8UM7W0nѤT^/.l2>nBpE $k<;'WHce B1"xVsĦO}$>ёn>xj'0\p_s-`da[R^%Uߑcej0=d,Prn#lDURo/j0Tgyx(QFo Xv%[7Z'S[_WaNb(>L7_#TK-I 6zgi3: # :KED)'M&:/ r(T ^xWn6_O@f94 X[CQxPFRRؓ펒Q dɺ..|UVy?% =ڰ7o%|4Ez2Ck߸y}uΜ)}-d~X"p5x20ڃ妁2Fg3VT:֗xduYIj[ޕƲKRu3ցuhv/(0uٿg?zCpkagq} Ql-](k5 } ktU끂5fHp̔l d$ŀëvs)!YJ|?HHP UwFl;'-DHUmbI{MnI$"||4# j0P SO3INUHGqnfz{CAn2W{#P8YDyh aWXP4\a2ڗzx|WxA{Pװ 7:Vhk;0ߕ|ZWo@؉!MNB'Z P#IxI *q(X>JkVY(Ć~IîZs ]XƗw:<]T[pn$~|û?So r?=u7S\,-`E(o0)j vy$!N:J͜UR1rJƆNp h1"p= {8+@o D@J랔 j B+|ߏVF+'9N]B(~ʈM 4.d ŝC +rKtLAh%8h-zقW(9qĘ*"?"&Ӕ=J${io>@+{W9cwtau!OvbarzgScA_'S=xLݘI-?#6G΄:Ԍ$R[}!PFp!W<˭|28R0 2v5b;E7([[.2b)2 n* hzH~z+\^ oFa fx6غJ6i4HA Ǭ$:ʍ$W7ov`[h 2pPۏQ1 !xQr6?b=VQ{u Jqc+"R{@іwE"v'Lz;K="xW]nF~)6 ؀H9D pӠPE5z^GI:$}+`$wo~9=o^T]Y嫷>H]4=tZ҅nRcSgJ$!DUyPKFh'bVtOX\bɭ?o|<{VKXuûXvs% i7a-X'f'Y4+S\,=vz ^O׳p='V[o ހ PheaPxoq-[7hνЋZcfmM+/DzBxYtXAޙ" &*ۢ6J6{(1YJ<D$٨'hgA;tn-b2"(2 $q^{CvLG>p>@jRoxCDRGkK^4|=ǫh. BvWy,FH 1Gdmٴhg p5[Lk=<.\ꆳCNNN:8 ^ J{ #ɅsxJ3T`c+̥~}R`^2RJƆᒡ$KxN닥fb{ыT@P%F=)y%UF,VxmFv]ޝl`E܈u 4.d ŝjr|Kt(]ˍ4oBoY /،xQs0,lfSML15{51FCFivm9G:w%i}g[ <֔M3m.gsvg3Yzhx"r\ޥwG5xb346ڦ+5"ϕ)nBؾTOfz 5Y/Tlka t?nmϦxlJ:u9T]䦝ʎs--֣p r ~-*p?_{n㸙%} a.~:l\5v])6߭/;;roJJ kZជ+Cܰz/3 bmq|l.sS"Tƹ|v1riR $G t5$şb },|κ&KK2Sfvn-_#]ZNƧ)/Fc7wtD\  1fxW]nF~)& $HٮӤ$q PAĭ]vw)Y  z%'̒)YJڢ |/G;O//&?zh$paQx0k'=2:5vwfb7}HFD!j Z(0ڣdUa y4I䅰qܲ\Z@wSca"RԮ N Gi( SNp= ׇ-kiq }Q \EVfVh7d Ah R9oUV{djN^T i;4+kJz,ƫ Ս(`2: Ҧ,[(]s#Ty &F-ZK-C-2ݮs+g?ʜպ$+fwDv,y 6.dPsF.mOǮqHiRd :гZ̰ס|+ ȭPM{K{*FLh1JE~#](r*6iהumzx̽X`pEV_B41 *M^nG|mdܑ}DCxc;W<5vD #T# $<2qT.8:9WPXbE)Ny` iSս wzvU7k.Fp ~~]mt>wGG'jkF Ra\lhYRC9w‘Hy F}X(2U*@$R"176߀3 L 8#\%0NEp_")xk,8MJÔL\$67dNek+3l_9vc¡ 3#Wa2bT KP|KJ\`4s6<8zIst0%1ީa_{mz*:UF[vo7@*әF`W~k;WO4o/{v0Q M!Wqz>|%-VƭKw½JXq<U)ך,׀Se7Δ{o<+M~ǯŶB4NO6libxHJd˥FbJ.]xljjuβ-}6a]$x!]P3[&yҜLަ+,Uu? z֤eTꅙg_K4_4,ԎwUU@l5ګ*Z!]Xiބ` QwS,0G>Ö]F (3 -5dxʷg58|z9B&,~D_[Ny!}ϫǼeWyXS!dwh>K* r|d7~l?“/9%f܇7)}]> QxW80AB 5ɲ\N:@P~BN5Cj% n-/K :qV UW0гrʸC1BظcZ'3 Pg 5,VGZo2[l0F XLݘ "ߠBgMw#]Jrd R_ֵ6n`s-$D,OCJm)+ PbI4TBfqeK]Sԣ߿܏*{g-%3܇?;_v9H U6C_r;N(_Z!v#$6)*~?3k!D>VZR͔R`^1rdTSphNT[s5-4!/j #R cޣWDJ+}Te0Ş7+0߽/ oOV0K0DȖe%%Ԥ􇽄{Jhp87A6zF)񟈀gX-CI,0KbbŏÎT1YAǠ0ͽ;reTj+q}핝օ?͒ꉙӇѪ,TdF\9 P$C 6*{Tsï'*".HkXjz/Wd:q[}n?>@t~';x[i!pB ,dϥfZ JX|l_-f}/j`EKig EZYÐhvҙ=GRx|$nIOg5=j GU߃c;s\tڬQUCHYNnxX09V۟yR_<5ky YvHEDp;"؆q{1Nv,bםI_Nٰ1kNjcCt-{*+:"q4!r;QշnXGVik  6 xVmo6_@f:! X`ɇa J `MgKH5) ^ߧ{|LՁ`7v"HE@mɭY IYH*qHX?)J[Xֱb~HîZs 5Xצ%G8ܨ](D{9ܘ]{rr w%S]qR_Db7ERtnOiF}쥓TR"46tg \|\1DZ*xkt bXaΓoB!KoG[Qb|,m Sz6 "irPEˆ]4.dJŝCt=5_y`ڢͣd+簱aʅ|FURoaNɑX1޴t H=хk/_lÞ*|^\e-LˆhW("./<}ŦfXcOZny#h$QK=Z%>*͈Յ2m`ߋ(B=ǂ~V#8|cntd8K#`bbv/tH*zNVCN|LW6GCt`O抿sFkJ< .YeA0zBu\-hШb,2߾.! -17לA`!ug Hܴ9K]t ^ď zzL%(0i31ZmHr'JWK!Y2HXǔX)- TX`9ߧ4Pbf@c8A"ݒ;0]oZQp 7dk].0#PcmqEJ? BaC㸰vOiBM}!/Y-Jl+FJI 68\1T$Y3h>EjYkl$E`-jP%¬'oDF+wȊn7[0"߷ic6=+$ m -ЃL0`j Z+'7h*/ي(Zlo!`|`0bێ@߶s1Gjc+Q>7VqOsTK3;+vO+cMdl܄;٣~E"9vI +RTqbDŭ;MB$>ɑj>mz%p$.ad#|ssxq;^lH'gЍcej8?d, (97B 6`)f|Od&O_+,wtޏڈ"Nkl)?(ЩE5L \ G%a&pkh'vΆV8\1t;WoXaNF%"F'yp67uƯ ,TgA)םC5TW{ERL Dק|<4$?f&sف*50[0M Fэ>C  I ZOm6qN  'R {xWmo6_@9! Xt釡 J6߭bTs5e&ck[>Ʋ+YHӺ:i4;JOi]fkeU{?'zֳ~†ZV*54} ktʼ@Fsh$8fȏl HdpH/+H7w&vR ġk#d)|H9F`>Pvmfx*X9i!BW[Q!$7ޒww%G(h Z@]ÐBcG<%8Zu f#_OKeK HFH+pMN\{h VVWXِQ3|X4ezؾ/< -l1{N@`!Mk H9)5>>R&@ 4X RO8$lcHr#W:dH63<\%erK,痔J,U<'PU|c./>c ~S>#m g>::ʚɷc]qRApt A0b8Ta 7)RHt2JR`Þ3RJƆ[,pPh-EzQl"$pxV ]ʄkPlmAmVn^97,m[zvEc0V1h]Ȏ;isbKt Z}ͻMC[8c*d,vH0?^YdsI'-Pkي:Pl%r?KmL; gUIxʾyu\mq1c*K(;`c=IGZ,hp@3k^v>om) –aև.썊Qqm04[{AC",4 ;@\0`ii?K@KxWnF}Wl pr\Ie@\~Xq.F3Er(^f 9zynYeѴ{$w |^fWYBg]m'zNKդڔc .HY"pKpܫ%𩑫Y|咫M 1,Fe7&/XƂ5HǭWW iْW mW2#cV8=MQt덑±f'O~<ǧ#Y k;WE`z(R(N[`\ &uFdtΝ\bt+)H}$:ydxa2Q,j}^U.}ZB6A7N6Ji=TB:/CΫ`夁]m*2 $於y"zF6/hQst C kۊ~mY"PSqU6Q=˗l;LѝtdiitScV =,`s#k2kk,EC7+Hlu LS{XHݘ7lNfg{]‡ޗjO(0i'q=ɵn1B$b$WEILe ,X) fu }fA.o1e[PjZ.g;] ,D_Ul*A^ hj"6ŹxJ4oJZ9t [H {H)knLCHv ˯,46&?ѪL })0IBV!s[[s];ݔ`Fg>^ U4k`؅\"y9 ؒ VP%0AC+J0n]QgkT)vyЧBt̳RcZ H`} ͎T#5i_ yV?N5sLjS'Ɣ=OOҧOl0-mѸA@憟H1GzD+)5[z^SmņF!ƤcR +p -~'k=agXm<3 ,f1ielZNgۜJ;пFGw G3Xy/K|q/'E 噗L&8hu]mXѨ< e/ުek+j(VK˒ILy=hwKӔx.mM󽌲 7b Kdd,^Y(Ӗׅ5¶"0|%և l 95J |08*P#_ԠeKDQ}"WCK]hQA#-& 4p _MhPCT ;-t}Z=өFvvwuiǰĒ`(/?z->Nay݆;K2oiZGuEGزwH*\%c{>@0 )eIF%Vjy{1!'#ѽ y)iɺ@ˇqMhh p Hd ; l0 :Brhk;ߥ0J%WG/@؁ u͍#Nº1$RL@*bowwqw4|BJ%] Ȕ9痗%;}y@ڴ]~-"Ovd)wAjXJ{JjR3R&pobD!ِy!Un@:eLFLNaprY<{f14Z8:2(|=gصA=8iF{ULV)"w(ZVY?5kqҞyU%{8 3K4r4Hp crq[_[z$wF|-q6@AH޹VINKe0-FO8q)+JkS]y۬GPLv4:40mvC!yt=+Z xWm6S0 4%o6zm6ZIn~APHf&UzQzΐWHdμy3f}7/үṪ?]Y+7w>J],?ol:]yfLG)2B. <n~^AzBʪHO%:t`ubxWˮyd%M&,ȟIreڍҳfgq^p}ʾš $+Fi,T o0 0y+-+̢?ZKAK 6^V+X!QDgp`{߹RC+)!ŕx>H@P UwFf2·)6 $q^{CnQ$"||2# j0P )mIF'іHGqtɈ㫽jXRQ^zG1BހeJAh #1"*+[3w_W lgNF 2?T w'(Sru`4XDѾ80%[cr-_.,mXkt8ٴ}pI<$ƵE֞P!؃[~IPf Eu4-5 \iT [}Eaq&~5n;-~4[7E;x?WsP|w3x 㜎*-4mt69 ouLdxpsWJxeS+DחYU?ZA<ɓ(ɶ*O;'x t9,H87xЩj\ .&owVYŽ2ϿGP4|:SX؁ N+8a?^%bE k (k9vxW6`]HKN;cH'E ɏEQxeq-ZyF璲-{f]`q'柽~swߋ:2>sqHRb?N{m*+)v]6}azmv,$əsHR_KAFbrgM }GQa(nEYK),PNT]eF~*伶F\/o,uğ/1x}/k(G;/i6eoɵGSvp* iPW} vA䅭09ՊkbAVN.ӫ Ʉ2yr[hw4o KUx?$AF7܀( gw^t Qӎ2@[105A"GgC^VK@CH1Avk0x(K $ՀH嚦#x^gِ)!RYF:4 hF*Jy-xvN]|>K0~EtcWqx2-噩 xciXFPLۻp>ʖ} cͅd`H犷ƅVӮ.$wZzh.TH6G f#jGbQ/p,&>H6˰ێ>6*?hǃN.Q\Ju&B-X`I[(FOZèXmƦ_blLJ=BVs3Y.b<^tFZao+ 87mn(፸c;inj  A!8kօ*^*d?dX,+|ln0nMcgxE6\|e>ńbNފޣQɱ m0Y%wam)H~dYvX7AGgr9oQjG_v7y$KO6XU|aVQ+A:u\U䛙ˋGkdrl9xJ\R`,ud'/:-D۱ n8 Vy2{}r(xR81b G`wklBm8`I*yIg93n'Kۇ wh{*[\yޱiY%~1Bş=pI0ߥ7 ݃ >V5*KR}"4m#!h G)-DŽHpv'0 ҡwߝ<)Q*vG'SK'df{'e859$ѩ >H+:|gH+a:xQFt7 ;τtE^|ߦOOxzT,xWn6`UhKJd[-0 -,.4\5d#eYrwE2~:-wX62GI® p%[7 |Ez>CiymtTufu@dƒo{>[Z9P.5"<-cTvbE͍l]{V7lU%ûJvWRBv:0VhҋEE׺ov~^Ͽ o4e?qu QFXVֆ+ hW%+uFZdtŝؠtN^vX^9 GPR61ō.E%fdJ0=CU e(cvBgc*9a Bt(K6Yr'GG}\H ] nqH(ThF:u0ѳ|34NB!E-ggP!mc  =>U`Wc(1 GH5*~<8)#Iϝb%p9EM|H))w盂+ @p`% WZc^*8:-JV T|#$mY-Ҳ/c5/僷-VǤ+$ ]["8&?4]& -׋X ȏkb|a?v3H.L{(BZ>h?{V<Е^Xd MŽ;'ʂ33Q:ݸI "X~dK {JK]TQ#VQͯ.n})TZ,8CL*л30]o͎,j]b>{6ZFv[!_ WsݺEw9[.2"4X5˂J{Կtӻ6W3v,?pXri z_=Ѽ/ܔ0Cihig a ~ƦQ(Ae&]/GEت4SHa@JEDar(p+*ȶ(}NXe1Paၶ01A;^q-/ @ggUP`5.8n[!e*^/hb[{oS;˸K>wio-‹QmN5. ? V?!*xWn6`U7];eEK ,0 CAGTIJW{CɎ8n?V%ܿJ{߿>KVʣiw/IؙA:.JҰgxҾv,[VB7̙үwK\<j |hd;ό}r!fEw7Qg)+*nYyGuQIǖ\7\1*e|d!MF(=IQtf굕ʳ?`oG$O {K7`SeaRx/q-[9o<9rY3eaִRz$Eg+H.ϹR~K#d)q/F}`>Puɭ^pT9i!PQ-I1#O3AQ_V S 2i~qK$5*qVa8E0r+ȍRѽ rd "y٣kn6p4'4z\aeM߰huy i5]aS}.=ilmNafW{ۂFPf՞+`7v H=EcOɕ h!IIp8 ̎c*UY,ΫJ,Y<'Y|ajzPO/cvcJK J?[ݰwHzq:1!AZ8Έ49H% >ɹTү'픑R"06'S T@ckŽ`)r5ד` ; kыT@cJJ ŖF4Y|%GNS) |p쎙h:7byC-+worKLf]k&7Nyt6埃8}&@N3zM+5:蹫Oٯ[[4X:--'K{K5l)'ӧOc30> 5D>q 1ARZG.3J͈seˀ߈ DB-%B Hia욬+#>n-nSyqn?*giF:9v]3TMŲN%}5F覿߈xd}zX{܇9 jy=r`)"[@mjP,]~x;>J'W2%L\-.O\Ada3Ҿ.Dxx!C§N8 ;|W!C(::[vLgw΋& P*xWk6S0 4%m&mEh7? hqd+*Iq9H{^GI:CѶ7-`Ȓ97OG~xuugtj׽$aWkv *4{Pve*]&fY]7N2cIB~-qlVK5,1*X\Ƃ7HƁu)-[r] JR7vZ0VjҋIEW^(ov~^Ͽ }߱VGn ^YJpEpMJ0!3r8 s%XhFRz $)dayzg;0 L;`#"8BC7`C%2ݾsk?y̜4!զr(K67nD,9=9RC|c[q8% 8Z+Nբ Y܋r+iWN &R$%RovZ_GY'Phf 5YuK?o!'{P7Ƹ 絛:T䐸:oxw >E:} whfV6'•c-HRaxX,?)T74Pc Hj[ ga_뚬U˳aP٠o7[*>\c!G`%W}mr_?ʝDB8L88X E(֭)J~ɹaG<D7Ve%zJ)q/)%rm| q)dI 4 "[s5,56W hH U X`ܓ/ebK4Bh '+!vYͼX8x۽\ |dlY^qk9} 'ߒ Zt^C(&8'Kj <k_Re|2`1G\KdW6HT5%{>lݕhFߍ҉hN)1Sr /Mnr K/V&p 1"f,xZϧlDsًI]];("#i$JV}>B_'wfWiM9폤$oΜۜCOo['3vYZlyq+й4 ,5/Va[xT弲s+s좔0lGRLI|%%(T(+vI+1!,kHγ,1}P\r!q?tFAɪHVIw?:xNjA*aF[Ү$dl> v @M ۶m2n;nd!VP'ŲK1gx޳163`~lbgB.@8JI,iNG2|-Gԭܩ&] D8UDĶJW}l(V#UZMpndjWX#"bc" gAhGGdLlH}T@ő /nTICY2A:i~Τwy|+>.zmWl$缗b̲q$d809? {Rw@Ĭߔ;X1? ve)_;q}i:Eo%FD]uS,ξL]tpI‡n9PbnSK[I]xY%kͷm*Y[sEsW.yRѪJӏԮCBgi$A"A]OVo$u}A)JC7a 28y\TFp`E]gu >WRghW'v" ԏŵ$2 CwK]Rb@H!|u;dj`JIF V L֬[bc1$7=m[0 ۺ/PLq)kY 9l ܤg{@\X`Φl.2hg@x?~4C!3Uz7VCCoWʎ%"y?;!4M,0 &ܗ' UݔHIQ$_IɪwA^=8cT|r6u@"٭c 1MmPI ]ճI8Au1Be3qd.]fZ)74a +5qjʮĂӓԼ}{h r_Lh_ys"dPݣkˬHp& }C~M+_5~ Sz Jo)5qSt~PLċΫ&r9UH??)>V}Bz8|8N$,vN2p]=`` 8*0|\ EI 2-Y٣}4"{ yQ$e3(JE=mTVmpzp5qy#nҞvl.aO UX[ ށ]IPrMEZ0!h=Ђ{B+ *#5k:)"˲ ͽ(Bg"38r{ #$Pŕx>8 bAV ZHhȻc6R/'c{,9i!BU[呆!$ޑv$Eh J@UCkc[<%8JQKs| ;ȕi^z9,4d]dz'(e p { 63=<ޖwlpҴ0e/):} ,Ǝcv֍~DsfH&RcxJ ̟X%-TXb8?PbfA/8A iHI?0)7p-(vpG ͎?<b̫;p<n襯YUl<6"%4ahѥsCKxJ=>uB*7SVK|͈)Pq=N5CHj8eim^2xkPiUBy>U+leAeAVa^9L%Q,؋f'1h]Ȏ;k AI% :P L0Xw Z%o<$"{p˯IC=BǼj WI먄*J3JB.ߒP}?& &9oi HFHD3䳎[ƹi,]泌xr6 tLuNs${vBi~-~~<8OcH?.wQzTR>u\Rs;]c[fʲE]5ĩZcPQv4#b$K !9&AQ9[ܫ(d|)46x&W0 _ķ߇f9 prl;j~ CۗSo `1/p`ǀ$cwH<|L+M=0z(z}/]t 2$6 xVn6_O@9!+ l0xФFRr^cأIvGю$ 2%~=竷kU&$إA喽-Եao JMb+Ʈ gj ?H,"pk-cez>Hh\ in,8K'RIF l FJ1SC.*@ );ĵ\O h8 3.T#_YRh&+oQ">rbI"ċ IfK#)h]ȞU;|uKAEe zPL)G 2\PMٌ?;^U6&fp v1xJw[L)gz ^j>.:/w*dYH }-]e~B3lNy_l<v4vPRi }س[~A 6P;k꺦֨5*\*S݄ ءF 1%a~2vK{cVF0SY)t~VdYA:% M3VIˁbxr.>N socpp" NOSq_z]f{ppL!Īö^m1 V,Gg?`s$Vw:T5*'v0g!ie0G-DӰr;KEqkvXVBÏyؙ+0xQCHc>!7#r xW͎6)X`IvӤ^[b!YΡ(F55dd[&)zꅦo~!껷W__2 VWQĮ pz;B(LnoUkM.ݎH ("DWVtJ+E:De,֭+զ\\2ܕڰ Ϥȅnu`Њ=q\7b[9_o}s>7RvGn z(5\Q*F7*X!3"kь;Qctѝ(HRډ|)d2X0j{.h#dZ}L9*B8/Cٝ ]LΫ`儁]mCX|isC=)&F1/hQst C m?[4,PZH-b,|HȭTC;$hݙÞؚ-d rH Fa67!;.hmxqΠnǬv9N59DnNBmCoθ<} wLQ4/ND;F7܉U:?,pYlX? )RV(סbìTp5Xݐ;qHQ;?<|JsKT<˲:6 ds$_AyP_O4*j;UYTϤc]AP[;ۀ4o=:aE&pU@^0R ȵL[RpP h-S?jYi$$K@g4P@QW%9*y-$ZiіmeZ++%l| Gtva8=l6bS JbR5m&u~đuhOxjӓ0U@?Ú&:noquw)[Ij T8Ύ4bI%zh">e&?W2rW ww u}yM b.K0}ti/< 8JRGXHs< HLq6` A PM{;b39=zj2Ywq:o9Ag?Xexen$PZك;"5t҈-.r8;:(i̚ h oh' xWn6`UHKNݤ[u4 V0 %%.2\5dh[l Y~w<ϞjVU3$ؕn!gi^߲|rثx2Bi[x^B6ب]s cKYE9~rFJI Fed1|^Z$|k_aľ,[p*.03| '(qOt+l E_–dGO:ZƽlByɴנn"=,o!=Swas3pXrFgU֬@|J:} 4Jhnֵv -9ȓ="*2H?)w԰92 IWyP5yW7W2^;>n `.7?[&>],b,Ive} N{9%BQGscM9 #RQ MY)rlKFJQҮ+8$\2TSv =jW V+Ě2"/KE+QJI&3~_{_r'.@ \O]H&`sbsѲ`>QlQ-TL͂0tp-S'5Oٌ /x18ܐ%Gөl̓4xَ(6_zc+ͮ+2{&SS_߷af4lQ!5O|zΚq5yOf{{<}PO˞\KL$s`^m,.6PKɥdDR݈ٝ P!F.Xpq,~[L0ɬz+ކjlw ƤY߱Cej\q/n9Vu'cg;2*Xyka'gva,~d.)s=-X o <+=FԸ皱A av eJqR[lƸI9q]:D39 R8?p#2sXe6I #gM95TEEgS & xWn6`UhKNt[,-VC1 %,.4\5d#Dv~w>a_" ?[+7%[k^;Nu]nrLG)2B.g d?Oύ}ش*STSU u:Z4ұW OlK%+i:7a=X'fGI*Osn\6;>z/$\_'-,/\_A|.@R Ƶ`B:oey %rQ3uGnRz$28U *d28=js`#E2YK|?$ fN ZHd(6R/'x*X9i!AW;Q!$^w7%G(d Z@ ]ÐBNq?x(K"5*q֠;eǗ0j'<&V*Ht/Le? 7ˍGJ~{r(d'Df/b:j֌ZT []lHuv!p5\!Ki+UVF^tSv_'mC'7*#k4IVUTm2p+n qd¢ qVBw]B^\ƂWRZVsU [𬒹ԭZ"~nF.K=r^?`_)a`ž ZZV+i4}+Ȭu@F3dQ4,EFn6FwRz $28y奛Ud2X0js^U.Ck-d!@9`R-'x*9i @Wʡ C,I>!v%xG(`- jaH ߆𵭸G<% 8Z+ѝe˗0gy 92 IWAJ2ƟB/w:_fI/ M<`s#4ꆷM헺 =X#ŽpS[CS輭@|KJg:} wڌhfvV6n$•sHo&RaxY,?JV(! c)!3P }B7d^^*>ȁ*/Oj;;;ce@= n(8V((E(֭1$J0sk&yc:ie&+SVJm{H)k{oM%CJ7egP lմJTpFj}(൬PJ#d`+ӕYLwnŲs2-~*CP+n-f9UAa8;P0pѤkԞ#U6x4Z+*q}>Oe6U\ڬ =LWjY<\ ~:<0խ%x,!+Sc{ʒ^%}(͇_z{vտ4sWx:N3S"$l%Tl.OJm.D!LM}_ҰEn{Q&Lyk,A Y]\o߿`eK;$gpom%XA\ja#435g;C߃k &A8sܛ&Ş %H'~.o}m?s(jYxWQ6 ~PShؾ׵%[Q`m0EZdɓdҢ?hcl_m@DRяW|xJ_,Z][[w n. {̦(k7OnltI)[H}'8&D*>yA kR ha{\vaDRGk%4|Ӂ{W'l;T&]{ddZo=Mֆ|H; V.&Cb[ȢLs[H& Hpo:54!)LTx7?~F5W#ٷro@j:Hɝ\ h1C0aURoYiXN$nMB e,(d؄dejzVo?m\Q~@Sų..f ƗC}r*0! { Ro˹s}xB}b/tr-9+b ȍ 8Ǿኡ%P Fz^,( pW tV@S/ * Bh+FaUo7`FJ*nQ <0~9k< 1;ۢڈ}h! hHȖ;6kAN ZP1BU=nE}: 5ocB!Yl-<9l2̝l4gSz½@dNX߁ VGB^zԿٿ8׭ex,#*SoSO}s-XȧgR>*8w^8ʩ EyR~dQϣ^ׯI? 5x~-$jZǸ1|g'QhYHOtdZТ#dC{_׶lKc8 P,Q!ہ;:\kh=.K4UiM/{UϘi!6lr 㥦_t;e.*` pxWmo6_@9$+ V0 -,"/%;ȔxseӯW|xJ_,Z ??% =؛w n. {&(k7NmMjfLS$\O4]F{>Yu5,ߖ1*)yq[~"y^JXuUa,[񵒹4F<}Fѵ;+7gfg~s<o!<#K#Qѐ9! 7lNq?x(K$5*qV;M70xu '^*Ӟ^z֛fOɧi/ =2r+k24jOX^瞷 tvF8?t iCSpu$Oe\ɾ {cGStb~$—K-2$ /<\%g1%VI}J 2X۔YP NxejzRןc u^nHȁ+'5>3x>駃wqr0x'`PP0(*p pS:($J'RIY)#D@nl9h.*@Rsvշ\Kľ  P[ (b Z`ޓWRXeAm(1|roc oQik#p*,c-wլr-QЂJ0`j JsGcvs`7W@f;k1i;,=O2%xz,٫txfDC8N"5~eW~d[5E2?]+7k6OR-4{Pڵv2|\[sc$,82,ʁr|Bʪ4KQٍɋKVXp-ij^KV\uaxІyJΎXJY~ȓJ#cϞ^s}5Hw`Vz(4\Q*F7LH,;dN0Vezѽ^Dv X^ݛ L&*ӣ6Mm_qLB.$~ "'$:)&zt^; n#r4;tk0ĒZnXrwOb^V߰~ wÈcYPiZv| {CBn2Dw5Pi WXn񞢬|2$BcTlޠ'[2?!O`|oGHXVݙ 2wتBW w? b7GAN u͏#^º $Rz&Gda$7EiJma,XO9h(% }-f\d?^}CFj\m'x+0pkwIgg}IW#|/y7Zd gM Ǻ G$c64(̛K+KHZ lKFJJߑs .*@V ;՗Ķ\MjW}Fg,2b g Y-~mY~x@xdZjb؅Ypk1a]IPQlYyk2 ٩#( S]"y86 ^U`-6? Rܢt̋{P?$Rhmn#Uӿ A 1T`8-(.'x21Sk2?ϟ?˟b, 9>{r/}d&CV^'EE^Hcԣ ŨFW7^n+v(@INpǷs¥6JGµQL{no6-tc+l:&MC'0 Ǧ96'`I4z_i˩Go *#FjxNa?%;p KŀWuԢǻC>[:EiT$y|dH ]:<~^vE\7l WEGy#Et?cw[H 9ʓOKB-; +Ɂ#˳APݏ6?#lv9;H%t۳+P*p :CK.LnO2Z6Vej=ĘMLaSN+*,X xWmo6_@_KJd[-60 %$.2/%;[뀀Ļ{3{/^-4 ?]lR'(;Mj) K&,"p?KpܫEG+yxźns zKb ,!22s7Qd׺5Idun0d,Dc'd-z*))Erm|ONq)bQ4 p54{ } F},QFVM߯Lbxe09`J0щ32-~ZCPkn-r-1{uS8۫ l(E;~i  )xhaLtJM)1gcd7ڻvL2{2\_'qnTo cbh8Z{JᔙSӗy|<>?cc8zx2{pï[d" /ޘ,Pd?u~Y6bm}T>ј>x+Y@+:8ӯ0fa[$R6%Y߲ce\b6wI/8a!d{9ag wxPU0[J$K}i5cW*m[xc?kaa~؍t - o-0y+W2^nЋFcJfcM'@"6^=Vn&vRFdYI<"lIZ >Pt^OpT0sBT[Q!$[coݑXA '1.hQK. mNq?8%8Zz5Lߌ e^AA:oTce.TKbGhHʆ Z&~_C:oK;bu ; pP:$֖qc S;?{}̊Wro@ʼnh'a[)|auda"5aqJaUR߲BH%sN$eEdH"]U8\.{%PYp1msPj| k 5N m0c&Н"E1q~Q đ\:GpsA{}餓+X-65#L@il4  ]kgfb P[dT RaoB!KoQ"roa5دIioV2_ sa&߅XsvEPoTS{ŞD[.C!GS$oPuEGaI0baσb kGy=}!e@\s<N۬F?{k>m(o>,]l2"sE~?}?~IGQѕg؃[~Mܰk*L=X%v*ͨWʔr^l,@"&pkcwE"4&_;no6-LS+b>%f*SOEմ?ES a/ &c75awNVɣG\2 ЋC(p:.=4+O"k }a&uzƭ;\I/#oNѲ<%8^3:>Z^ڀ&Y8dia"}j5B\|EȏVIXyVPs/ZڀFdKMTC0cp EqwIoPE93۷WO2ٷ(jlL)Dh׊?/ xWn6`UhKJt[ 0 %,.45ddGv> hIݿٓ?\^r~h6!RD+ɴ^pk{z.,e-4\ieCFpiCyi@3/kCr֖l'Mn e d߁˽#A,{UcI\@UKPliAmVa>9'L(nEc`Eˆu 4.dJŝlAI% 3 ^ۃмK0t{ԟRyYs1fCKY 7#BP1=/zțC)gpu<ҀFe LKRcFߤWs?;tcY- WqdvF\jXIq*J3yLy7bU}H!Ɉs!x[&8|mVs_K#`dvܴ~S泌tr6;sL z7C d8YZ,~-N؃{h/_Ti8߃ ]׽:RΔVx:ߥ|e Ⱦ;mFU43D{ V7\K김9TX $2HujQF1mC ؇@}_Rf/TakN<ͷ*,kȘZS ].%8kf*H_Lϯ~88&{rïI #.}UXjR_4r[}!dBU\l=WkU R >fq;7,#͆N+S6e F>_ C{`k8ñ G#СnYNJPm,/OnkI[nrrx{:͑Ef5ίI\D+V)䊖H΍qg27o#DѶ%!=*Sz;/RYu  e3N xV6 O@}vp+ X{r P(hH$;>^cO6RvǗm'ǏGڳgYrFѬ,I؍Aec ,ui؛b־r,nJש̙owKB.<n QfAdV3bq͊5e6Y-ұ 5W OlJnNҫME7j\=/vqvz!nn PeeRxq-[=P%rYT3e4+k)} dˢ !d(b38 z\>FE 11B"!lԓ3B`C&J >`礅ʣ C,I11@`D- d4ߴ=>va}["щc5Q\jɀ㛣j JvB+)^0˃:YTjuQ?cPqttp4Ώ 7F LS<O#}яYr5}, ihkL X?Js $ 7E\%Jgk <)-YPT N xa*zn>v/@]흻'=>]2[C_r1\v{f|)Q\8ׯ($H'RINZ kFN0}Si:@ZSv {8 (RbՓoB! ~F'')N]B(E|#PPv > zl5G~,z>!gB/]u~?:i*|BͲu/K={M ni2^/K6ZH6;S鮅0|pqnj?,#ͺ:tjYg(t8 À߻xփq%N_x*,UÂ]gZަQDtfؕՖ??j^#a~_[h; ̊>vƋ"trv=>82t xWn6ThKJt[-0 -,.4\(#5({Q#9NLIw]_}/Y7L,cWV;;v  {Pڷn^6_.7v]8S-PA`YFlϮw-)*dUí|HW׍tluSm,+%+i:7c=X'fgEDNItlP ;n'z6tSebIyk ywYApO"/hQ+t C  7l~qLK"5*q֠;u0fCe>^AI:Wf(nK$/A.-2*+[3w}M =ܾ,].Nt2! E~?{?`nGI1Ö[~Ia6V՘P{ZZG SS՚QynBTi#Z %nm쎰pa𗋞SY7ₕKnYUY,c5-W *c +YJӺ:i4;y\fmbٿ_Gx={"\aiaaZVk 7hׂ 鼕s/k?XIAK HH/+H7[QDep`;\h#"اX!+1@D2M"V йԋ fNZHj<0Ēye-2K=D$- jХ )Ǵ$RGkK^|=h> BWPiE mq.鸗LbSh43Kʆ, #~SFߗw-1 p~jSiZ[BwSnO.̹ړ},hfvV~ /g:,<q9,Y%-[ZfĄ~î`p Y7!_c T\wp1msrrrjPUxSI82+C(>D" %=ҹ8z!o`{'K%z–R`^0RƆ,pP%$z4DAp5HU@Qu;x-F,VxFo0N ?г/ d:7b,M ٱRq0\$2 k{w:)"B 3öFay1b0Շ!0lQ +܃nk;B2{箹`6~7Gڮب鸡4biհt9?cp^LWYy~NKw4=>ɞ4 "UFXaT_Bm*i5KEViF=W E7bI3!١ ݱ-na ŵǾ,;K#0[-~ӎ[M  6I`Ӿ;ԤPa=g؛i~zϬ[},1s(9SEhw;벎W֚_q؜sk:1JeolPK @S-OVOi1X>ԨwXo ߇00>[kU93aW:4)81JG  s6j $xWn6`UhKJt[ -0 -,.2\5d#iGVY݉YIUk"?(mV}ͺv[np`YFlq_Vˮw O]A,.Ypc-{Wg/꺑myֆ]U++{;c+bgE"O+\7;?{ _w% ln IރH0pEpCJ0!3r;+$XčhvFR{d )duw2,%XLt f@o|6ȿBBL)nX "&dP UwNlwwNHj:a%VbwD"9XRÔ|er78nK":q u0ѳ|sT  ryBu[`o/'"%%YledGqFw~/cwiyu;#oq 6T7x71?+Nl_BN!u͋ aiF[)\0>20 7EiJumazJO9h ,kQԓyu1)k $1\@Igg 8AcW1a #$v 83 \Vݜ5R`^2rT\Sphl$jhl(U`:8:#5?FhJ#dmҭf K6|J .[W喵0@a 8O7qW|0m-ҕ[xU2VE9â匽mn? >ˤ#@oQș=R+]޴ת{ܻMŊ!֝ޭ gɂtYgl kH4AIWἰ_L\ym#&zǯP]n 7tjd gxdF L/-I0t~4h53a/65p uxW]6~)v7&m@uhidK*IQ9H{^GI:CѶ&-)i替oF{߾^9Z,Kvm;(ٲg/^a x'TbҮ,l6J6m KB^j ފn_k@d7bǨ257ܼuU,^-jaٚKJK) [;a+bge4kFj]=c'F6{n ^Y pEpMdΈe뀌.k`"7r1%@"!(,/M"L&*ӡ6>Rg\$.u)*CIo6 NJ>BjR()ǒHN5HGq &#zocANJG{Zr4zǞމAfELf p-EuG<WvXwF8guGi:[ASݑm鯔Yrud4XRW82%l[cr+ozH&Rq9 ̟TY%5y*@?4RRfAQ18AS R{0]>@5<j?"е~qD{o!9ҟB # rn iQYN.~7eW2 84\1tSvk6}8+@o Pgg5Hf BV+Fᕓ;߮~MB!_d4b<M ٳJqdݒ2= vT{G&I2A)*W8c]GxAJcݎR+$lO`O;wt;ꁶ,.ǬhXⴊX\{xWdF,_9;H}@Zug+zܧ% 8Z պk Y^D<e '!'jBݸ{~_%bo Fq 0!;^8?Fq!`uk Hakhk߅Z#KP`f HEb$ 6ڸVn(HD(LB˘*a"/) N>xzTo/>Cc TXwp}N9|='؁8$>`c/z[?Atw%8-*5-b'l} q"wq,%~ "'(8*&xt^; n-b4;"t0ĒJ;10D-5 'H+a;lkDRGkSshF,_d 9HeIWCN"Uh䞛J%WoAؑ MNº1֏$Rz.*IDjLWrBbrKLuJC%fEdH<^ީ7QbXNpn@;5>FXWGzZl%v/p+@o rP&T!S1OJ VF,Vxl-+')~Bf_,h4b<M ٱBq0^ u4Bg4yէlO?/ pŐ`|.1G@0BmՑEx)#t9e۪8Ve LKٝ;'nj*2/D^ƃGG hb,3*3z+5 _*S\[}jޝ܂;x|69PWJH?Y-nܴ~.gYF:9=9V֌]Բ^Es>)' . Nح{Crt#AQ/V"<* {m G'x k!+rrt,0B<аTٚn:4CtcTɭʇ{\߱[*ue؛|ҾqxZ .T~-}/9fYFyPVvhgRVOd[~*{Fnұ+wϕ,i݈u`4r}Il-]B+ 54}kty끌ι5FHpTXIAK 6^=Vnv&O &Ps.Ck#d%{L9&V C-2apka<(K+cɻ'b`c>>yA ZkRH)Dz$RGkKtGqhF2K z (|כ =b: VfWZِ.<-ainSXH2ONaʶƻm_(3@h;$N8$c@r%_t!YxI*s*0{Rbli52 r 2aޚTxzKS.j p1f<0 >yoF*fS;Aw~Q0.79M8 fuɹTү'l)RRFf&84\2Tl 4& k, ҈8+@oMh*a*yVZ*6Y~m͍n`'/6 GU2a؅XsvNPRlT)pdW/@_.ø!)kT),9$7b [8# L? j3b=]su Z<2{箹dl!WlT鸡Jbi߰t8YJԘR7o5ۛwD4F$ {p/Al2jWI+ѭҌ:{LyoH} !ى l}-naōGVWK#ѵ~ӎ[M  6I`ӞCehH M!1~~duz#v5.hy]{x&Tˆ@wi ~D{fY pEpMfΈi뀌NK`%G15/D"!nnMW Ps)dbRb&} fHU5Pyn߹PA fNHj+0y eR,9=RC|Vr8% 8Z[ ռsY܉<NBIn$Huktrem iǙ7VLn=d Qcێ)eg| q)1Tl4p5\hl%v/?K@g:˨B<(J#dU5ղf[;b1|Tk?&)($N*-Ёaj [ x;)w>dc~yU/_゗K}tzM:ʝ(mG Rf'jju۪:F L[MRcLY 77{Dܩ4z(;i#FΩj cgfv3Ũ§RW7tFlW*ベm^DOtqk&i1LR{f/7xLKݺqMlL͙۸AE}?*w ND{8Q`k߀PVuLwrc H$WS m(0qgr\eqGJVa@d am_72؏o'[FyC ]i7~d )U_|yI>Q[\mx~\ Q'ҍ'sXx:.[e#Т*hwOJ >$5h'@zG h hK= xWێ6}W0 dKl6M h&A<Eb"UF3lKKP`!K̙3W.~VJery$ ئco}dk,uabҾv|ۥ[ݤn~-}/9gIBTyPKFh'뮆*Fe?'W,/uW/Wj]J*Ʋ5(KӸk:i4;O/ӗi]r[z?3^<p}߱c?q}Ql%]B+[54}ktMがnzQKpѬi Hd y(`28-j{`#}"8X! Cd0 $- >PtuRogc*9i!B(K睱7D,y #!.hQs. mNq?xHK$5*qV"[9^M e^AF6eOPgy/ *r+k23j} M<<=o! ttF8ߠtI4!&o*;?{}̆ٷroHʼnh+aWG;)|bu$a&5aYLaUR߰B%sJ$fEdH*^ީ7ןXAp 7~D/ 걦ƹx>1p0z1qCw(ΝnS;o}iR" 76t瘆+ @CoΡEi؃^*xk"`_ xRJ*6~7%WN r5 :bm#0 V1h]Ȗ;k69(hA%0iN5oBOYUlJ`bTE6-c} 6Ls,qowS~Oe{c9)c2,].՝IpZ,WEy$r&<=WD K.ڃ:ꐂЌyL~Ŧ> !Ʉ&j[c;F`"57F&-[, o[*[2ZI'c˾Ԇqb5OQ='sÁ{z`[஠ OͰ`p[˻4KpHN2VJw̚`%# Dõ =2=mr1 0OT!"){b4wnÂS484Zq5nxXRgш TD.Zfv@j ҳObthߵ2=c/UE<_xWn6_O@`94͊ hR>P--"\5d#i[v+(x4z7U9F߃8fM;v )490ME2M<5jf\Cjd,_;>5Ε m|2kCeS\gU\6dx7S]i)2g-h#d$yDѹZ ~w\ DЕ0zk.)V`\,j1m,)(jYd;0kZz$IeEm9zELTEm|2HH.v!V*3!AҹFB d(Bxu*X9!BMiQ-AJ b!4 %HIa[<6%݈CY"!Q\>~V6OȭT&V&ZΓu<^* !ŸɴKaWڦyYBқl%<7;#FgUTx#N6yܑ}4JwhV숶Ҷ#-9ȍ el$0>QVK!oXa6 ,FIi()L {ת&{8 Tkms!MV{5>ǐCr*K;ꉗ MЮ & ! .1*{™1aF^TZhg1}aDb Mf=__SU{\A\.^ WT4|&bE˲jBc8^;ʒ1 %ItC6ߨ;20[-tY0*(>{oCѺKI6 RfԧZ쎶TQZS1Ǵbh-վ8+Fɳ8y89a!-jBobj)BZY */WfB5L2Tٍc]m Px.{#\%YM^-TE (8ұ'z;J+R7a#ߴ]Ի 8( ~اeE?naBvraeԴPLBya#Im%=AQynHX}xV0(b"^ іѭ)\M"(uWӷ3V tT10!H_]?,h>T xVێ6}W0 `IgӤ^[@ HhEQ8YӤJRr uޠB̙3g.ϟݼeKVy4=Jvm{زwoH]:ne&]&5v9S 2cIB[-k=h̷5Ĭf1:X\rɭ?k|{VtluûX6煒4F2}FѵV._qp WI D صt ,,$7zktʢ@A %8fhִRȤ'e뻐ݧDgp`[\>FE qLqm$~"!lԓl3B`CJ >`夅6ʣ C,I7Ʈ11@z]0H S  7m~q_Hjtmt׋/`4@ r"e5^AN"-A)e)O2BcY,Vi0 X]zxTzBP+آ pKi[BSYݑ^C e l߁˽C*GMmXn˙{$ #@\%f/bRVIbK ,X/)YP$'PY<75Eo?qZ5~@{=>_\vUz޶ULl6'gn4q- 8='8'4^gy{%8Q>'UE:l!:>:4:iͱȏ=:-W Vv ݡ@Ot#Dh<^EQu6m6t @(xYϧ(dً R8kEQ1"GdI33kQ$ΙEI^%?Zixw~닫y) _4*MŅUҫ\LWkqzfԾqrvd|/Uc("M Q*%V/ժQ_g01iq"BZYgANTne)mfRgڴn(:mjht|$YY=/Ͽѣ y?3V׹UKGYߨ$ylCAʚ\ D(!\yW$t*`Ef5 {$*TFdx`VNq.2}AEber=xDJ$*ֹQ:מiȻ}VH,*mA#I祱7F'VDO_ TI SjcWJ߷8%5$Ps5d QHt}&$fbt(X 5r IU5bN矯3/j4lAݨ"tJv9&k+|!\4SYje7GHUD=btղ1(:Yȉ u2uHux@-u}# fgQ Jr$H4$V߾xYs _*JpOyr8U_@( w6G1jOߔ˦eHL8s.6D󐔔E|XhcQz")Uf,1:YNTZ(j{⑪>&qaPBT`Qf)0әt d2ʚ2GN]\ُI[*ioi[ʋ%:ed.1#5Ltj7E^ԩOKPe P +rQ\:$DZ8w2*iOr2oo>nb~L6ܙ=v'P񠞺Dý w+0T'k鸡(ߴXx~xR4SJɋ`dAT xH+OH<҇:O)bZFPVOKp^5!PP}FIOZXƮNC+*?zqnQ}q'krNB!+u3x&ivl|(5@85hfU#car=¸#A!W?/@UhȋHF9`ֿ̀]ű eTkܖd{]a2G[Eˮ+T%o}K(P*h6w{¶2S5;8iJn 6yD^T$o{уM3 Fe7*!|R^ ¡h霡s£DZIi؉z%._2*iڕ+9r7L^+cYtɆ<Rs$9_l6i`!9JOC3s]Z̒gF!rqG;u2uYMȀGY|,>D|;!{m0=Zjŋ<.W%ۺ@ۉºH|]#WZPq6]٩[5vMOoR'go_Pbi1}iKI-䜞JGC]a^1صByNP mJ܂r5y)mCyG=6/ ,qeJ{VP1IP1 m$~"Eb>%+jIߐp(%(щY:u4*9#:tpMDyC(֩;z_L0q*n8cg(z šNй,xZi#mE[MFiNdGpg5Ї+%5iAýۢKkr {CW&4WBVy}$ lscm< w)/t]*߿>*\qӀIVknB'؋~H Zkov5h|;%Ƿu)!5'N=PHRDRsϊ\UƫwSCOGe̳=7p&CvTAc^ԂRr]k S%"SFʭuK>Jlv ԛ,u=:Rz(Tk{@G[@zBdT> H܏Aڳ&P]CSl VMUbp{6?ja,c~n|:]qXrjuuSEdx?8"2ʁre2De7%,[qc-WD/JXVqppUhny*E&tc'cVi<_ApʱfOϾ~.Un`~L%7^JQ4Urai〜܉ OQ LnEN+ Nd-/]]v$iQ!J'@zAQ9ʅ2p*\v7XHub"r(,ZIM:9!T25xxYKר3g ~,;|]l%KaFGqh]H]5xuG8@>غao[ RowRtо|3?RyDZ_]ě#ί;hyf:~\T~ǏҎ/,ONc\cwx$u)t* io!zvwG|4pV@8-~=x)2v2;== =1\NxFaWIT"ˡۤ]{N}A~xXn6Sp*P%^v-Ⱥk:(,"4](`GRe'NۡEdIߪR4 '!׵\;b'0HEmC(t1 5yusĽ6qeVXю>BC۲y3ǻuCI=rG R7Ѭ]XڸR@n$a eb$0SUP2PNb@IìB8N&=BZ[nmcgk DඹGOG<LS ܱD5V)˻:J_ gb u+L opnm;p#ġ\oBX1ȩDmzH)) N0  ;\U[hK@g4^@7|.$͵h2G_5ղh_QGf];uEmYy6`n6=3u ={i3lH]e+enm|Oe 5ք֗.Wم$0&eQz6KhEø ֶvS(H29$egRGbD٩ĶCBо^IM>ui"qch]4z nxgq!el2NơoqF}C2(뇞l1@\qYb]YmiXۆ1Ю: w="o<$H>50nW :Z`/ J/>~/~B& {FҬลMm 7n<|\گo),H" y`FVnRVi~H(Xց6^B8֖ЍX'by$l/`䄅6# CY0#t$UGG 1>~A (DhhRpVx$]cX‘\>A˞7x{DK("Ƹm !yzHM )y6tI, JiN-|a|yZD^a:aԍ-!Ҭt,quDww\GoA^!U#ҕw(עi+̏,lBapDW)[X`nrj') iz i=&"w/kO]JAei^>$ˮU#.c KV{Lw~Pc-690 "3!ߎBTXW Pec] 2@jtc _JrA}_΅$x}az}SsXK@o Rc/DVE&#UWC(S$o&dyYsX׍}&C^ F#fM˜=1!KB5s}}| <z Kq Ąx˗{`^ фǂ-"@<$璂-wjaHMeV+F ; 9wd}*zZϥǴ[RoU~K]AGU܋Oc\ndK̊SH)i-g6 Iu&mv1P٦' 03a.ŧL5+^B`ɴپ1:8!wib]&ݭn$Do-J0+熱3_;d)[IzH)Xq6t 瘆S ތ[leأ5z 3g5_Kbk BVh+< J4.KߒЯ/T2/؆YHABvR9 W[b7cTR_ف]BhH>ʌUabbOy1aCn#&N~WM`Fm%wK@ ]}{zQOJ!ƚV KMsbNWˏ7GlxŽJL#uᖟ,9QGfT2u( ? P\CC;-~Z|hu} {d_+# 2Obq;>cZϧx*b>%fFC(yh3c醴j0_2 v-Cd2vlf//޲WI~85o9,j2 0kg[%I} $dlPS`2xp-j{u##Drqbe*~ ۤ1\*DBwZhQ+$j0(uW.90$*04L)d |o?{0,2, <ϫ=4x5(у  >cw؉&sOATNd~0oZB{``K?sK(X48YDiES݁ι>}  i~h; Vua R2,Z,>Rpyl >N N[:(ҽiý>p23[yq_IǍ]ʞz;W4 }Ku=4aPFo$ Vx/ԄQ(,*J>eK%q )euqNqC8ch#>%tiq4؝TΚE.̨J^)b5M ߯z_seʫp>%q1_l펟d2r|ܥj{lfAPbtRSt nxa۽. ?e~X;.x*Ju=b.T4]1ato⭽7:ނd=0s_߷voÙ OQ!L5$jrr [3 T4?O0| {؃;~F^!6 URoKhQa`$ Rɉr k\ =!]w#(t#wN`[NeE[&qwȶrykZ/85 _g"B@gA9TmfI(f2j]u\##SH!d3aŋG<H/,E\xWk6S0 `Id:@(hidK*IzQzP-{hL߼cz/YJ^ c {[Pf]e'zWYݚ9fQDgW^,_j¹V Boݘ8gi7]=;(׆-RTڎX ؓ,~\W#VcNwtۿMo =UWA3;sܓ9LM oLu}WR/<;m@Zu "s,k!/#0\FfOCbS u ,똖:N*=p+zTw/?w k*-p_BV_[:SW[EdM u<ԡpmjP f+snPһ%7[bCF^FXR̈́"zuQxNj͆7J螾&|;P9\¦`+/iMa|?[aQ ];õ'"-cl %gn̼uf<(@JQ*@$wqqxgyO$rKaW"ݩ|YQ]ЅsC@U?Z/<^uR'7thR/!K}^؟hr[*~?A޿JP-7ԊL$T}tc=ԏC=oz:  H8xWn6S*P%Yv-󺢻H0 @G6TIJ[؃{=ΡhGvt܍,;?4~엋WlWHAA>fp-uedҾvp^ .T~- }'9dYF YA-l'hgM )+8c[~*{ƨfK؊+wlJ4nZN͞{B$!&1F 1B-2n?ԋA? VNZH0FyahKRkc(HDϓ B |qAh0i{VwVT(2ڠ}kn#i) 9 bmJJs#6a')h]Ȗ;be ZPfKӀ{)LցmiBHQ|V=yYs8ӯ..vUy)pN/wї {ўcۭJF#=wugQ:!+*d񰦢!D!,]NofW wx>Т^ϥ1Q=gL`RuVQW4-fԘseʫ~+/@sBτwa!Z!iCnatyt1n>۴0`t 6樯LD6yC:t@3._=?h/c Wgܕ-_Cꋱe;tE>Ϧ<47Ɵ# "YU\dZA`]F,ݧEOy \R_[ CԌVuT`R׍gwb) =&=jEGI/4f.| ўRl] GUxW]6~)6IMa:EQ8Iu=H/k(=Ig(+y,K7?n65JMqyelf{lao.߳9J]"?h8\R7ˡ3_s CIYEVyPC#I:3ڃ|SCʊ$Ee?$u'/iD5c+ޕƲ9_(YHӸk:i4{/$zc쟿g? z]š $ؕtzYZ o 0y+r^0ZcL|fmM+W@"6^ ]߹^%H&*ۢ6>JE C+#d)}$@Ih6"B CH>`椅6ʣ C[0!twHDϓ >Z 4 )d4|k_;}?☖DjTB8e×0s|92 K`zɯ㻊dm'a:$ +k2kmw< -\ (42߈ wc^*@ hp JXZ _MX Y3SU,`,%:7PNRix̂s2sS{^Gr TF;}sfT]U>BA/x`NI82ڞ􌤝 tJqsq&5zCcEumh5ˬ!ƭΫo,m4Lʻ"cAoTP{  lf4sÁI]7$',o4V:CtG(܁nX-BpОV{QCUkC:b@6t킈jS0+, Hq s$|A/u!Yّq/cu%WpuM5;''#)UBܭ]no؂], }`a-qA5`j($fN,]t=k+YЬrf1'3KP;nXՂ^w_@?  K xV᎛FSlmR#](jU]N:ߏfe.8nk:`߂fofz;RgA:\^DY+JLl%y_4z$!މ6jh5 1eB"-R-?[֭µ6BROMbY,IQQZކM4h)'xlhYdg*o Xخ2gx^ι;uwF g*wjF)*l){ Td(lМVc M60FɎֽk2ҰrcUDgР:)C3m)ZlP K҅ (A EɌ;2P\sLAT[nІ R-G&``D- $ߴ ֜?-D1Zt8`ӴU(e 0![m~{MQs:Mz` AVa PqYxΟD4{PAf#=pim* 2,ex71?{L~eN=PHÉbb184RJSJP{1͡<Ҙ^=lW!f~:  `ndc>aI8?`u698-Om@hHƆ$ȝ3Oa_@ [a zXn\;Y83X$)*Mw%A*qA膊E%qg=ODm,nW!Kd)8 $8q'~vW& noARnѢqH]KlF#vZ/غ}h;L)bOv`?+=}l]k!r/1X8r D^5Tѥ%b(A [iiiB&P[hDji?hMf J xVm6S0 %m6nڒ-(E"Uc9PѓuH^ʻ?>f޼y3VowoIm,J5P@ޓ5|bb#z֦Ջ$VtTDˍS,Eh? "c}0 L>rBt6e$eMuf GViPQNj#YӂNHJ3)U<_AAmm?_fx^rܝ߹{r#*{ ;;P  lFb**R1m+:6hA k0&rfd*^5 iX9`9!*b3hP=zs# Eb#+a~,%#NTFb|q.9 @7hCY{vʋd0Gzc]0H Sro_kNؖ tF:mG0iLA<*e<0!o:m~țrAw6M` ]*pHܣZ~( ! XJ{86UvLeՙ\پ|8_v{ TƳܳY=%r73&UGSeh˙ؑZ& SlKH,ԆZH׊,\F}Ƿ?ǕGt{Zp wsstۚ>=!! J,!p{P|')m3ks 5]j=v/#iV0aAjV0/u*(r='`IR\+h>bQK0U`ws0qx9i!,aV'%ZcBcqIġ!=+h\=O˙}<=o$[DDgao&4;lGy[=Ac=ZPB]O|@ ],iڶbwq.+Z)oxފ.jh1{ 1eB2C,:gJ DC !),DI%)k43M8ZLrOȚLvzFzPIAy:lmkCB^0;ΝߓQ)ؓ_A܁jvTe0]PQiXN jXQ 4x2[%{VYx d$aUD0hP={#Db*0dE:(Qq66~p&3?j+(mr1y/Ϊ{PRy FP/` z@aH.AR e @Eo5Tl;'O,tHE* 3GJ<&]K~&]0@'YX.ko&:ot48ϨvpW/M,T 9J]OSo,(ؾ _NӞx{V:ˌ ,FehʙؑZ& SlIH,ԆZJW,\z}՟#< 0`dxNwsstۚz|1]{"BCrn8a+*pMx7*z/GROGl-6 ͶK%n!{3 ƙ9,H*%R*7 j`W\A9-Z8g7n7&H Y(g!+b=)9+'Dzʳ͌|B&8AKJ[^ԅ%hJ9 gn΃?](˖?[x>/В~}r@Q>1:bHm*({/+vYG=(v8p hK+ʒbK]Sh\д5Sr\P 4V?1vmhL _;  N rxV6+Z6mز6҃h( J[)R%)9Fo2d[wSBI̛73oJn;RJdA_E@-0Y'.7ghmk3O~oe+M=Ր2!Q2T`wNI FC !)e6q,(6`DožպTT6T(M413҂6\Irį SAmiɗ˷3<_Ɵ?Gr+==QJW 00nycͩfQs0Dm;YkrKp&=!,/:,o]Cv,&:ݢ7NcߠBL)V }I6I6Jƭq≀Cwq RmEXq+sL <:H>@j/Ӷjm D'J#6t =CQ5hWRƝ-1'X5V ߝIZӤ3 e20 4lQEcǏ-a6?IM DvPEM5]8N(/Һ]O:a0[)KKX@R@. /K'Gki&C M lxVێ6}W0 4%mnڲf>EQP"L*Iq|P_!%ے6@_h]fΜ93V⧏owIi+i"ZH~$n>qUm|=Ck[Ex'X]bv "Ozjx JZ6kIݭBtc$EIj6z6%7ViWJx`Ғ!Wo~y?Οߓ4/T!@Wx(TRX@dqc5 .hN-0!jZ3^3 Ieyay{`1 9?CхR[9>lГl$3[o;Ln6̇Z6|Pz]A$x"t|# j0%_ %m3pNHGPkfzVjЮ JwB ȪW@\IZ/iY@H BEL$0A5gf,FǒpS>}5Rpv vTƳܱT:H^&L`(4ס,gbK*EȰcRB/Bmt]X+بO:|xsXTz.%Xq nnyS'6G 4$#xE!pgQ|'}o0ۚX_m En"{B|f9gb%XB*73l s*fđ"_v>nGLܻq^ ,ْuTk|k(,C׻w6 σt<"rHq n>3M|@kex+Xm쩂 "K:X7R&ZZI95RpƘ TƳܳY=*$r &=G3#M2l.(Y Y_1)=z#NS뻏5okZS3?ddj8C34(CqQ:\m2I}m61jcTCb{˄DCR-Ze᭒ևBROY6q,V6`nj]qCj*[*m&kZ^r՚@$8nUs|[Y rU|7ÒTsJI\~"Qn._Py K2?%oda|f=MSx:S͊pS':]k$#oB9`ؕo}  ͫ0S#4e}&^N#_2Gg  T bxVQ6~W8JvkBt>CUU`6~PFYdždnaofzRJdA_^EYkɏ.ghmk3Od+KՐ2!Q2T`wφpiͱ2Dg8 RTnajSrC***m& ^p՘iA$owqU}|WZ3z;RZA:\EYk)g./hmL~d+K=Ր2!Q2`w௖wYV҂@H) &Ŋlm6Xm*nHMeKdC KZ hÕ$U&j*KC./^?ڟ?k4G*!nAx(TRXPj^\ЂZ^c C6#Vgνg2CUDg0;ߩC .Ĝbr|?ȑad+聡dzWqr.wq>z VX!6d1O`D- $ߴ-6qC[.щb *w-bDzR 䬔q/t˭n ~cI:/Ӥ $ Rv(0@8%Dv:Lmw3SwBTl߃Mcv8Qn_L;Fi;sfAĩ TYȱcNBAdAdF5.7n簤]XKp:No?Dעh^0&6' 4$SRez "qa`&VDXR#fC0):) ˹4fX6r5|;nx%8^1(s&aE *\ rY)+$%cxwkPG: A:wT@[(H@"BzNԸp2󓴋 xI7yp~K'CDqq|An n& A6=b\iV3Qʏ.4i\OAs͊pS'm|zM/1QU8|D^4Tӕ#r(+#M7ʒb&P;he~?B E 7EnW` xWmo6_@9!+ Xl·a ZPtm^pT0sBTQ!$cWXA G}\H ] 2_;>-ԨZtˆ/a4  I(Ӯн M/S4z^>T'kCUfhwF;X+Ԡ1::pPxBP+bZG LؠwG_*H=h;$}ESHɍ hJpI)*qX.0)J,XbJ?4TbfAb9A4⹩Y翼؏*kc T^{C] zݿ=b g5ci!'H[t ̅s xJ)Z*[m@[0J &v K:8 blEӅ0f1ٲBq簌AA% ZP :ĹLA6A!tHG>aSdcXQ-L3fZaU a>b/=£]wf#TiVSN1t \ܣJpL28}}^9{ă{?^kEGந܄:ꝒگԌ*}L %wbX;!wdovKc?\\0V@>m=mO3l6H'gӮ9ԣqZ :'ؓ}yjoGgUoD\􅧨Ѕspm*P0[^5+0J8/\me>oN[f~X0eR$)4xv`zj#;s_#,ȉCV 9xV]nF~)6 $HڎӤ2Epyh T~("Xr֫]vwI =Bѣ$YR2%q ff!'\tFQ>=Ivi{ٻ>I]:=o<˶mmj*s[n!eƒ ۀ-Z-K=h,bV W}F,.Xց_N#Z:Ym,[RJXIIzN4gNNe8p}-{ D؍t ,T o0 0y+-̢#?XIAk 6^VVnnC",&:ۡ7J1үP7FZ@D2F`GZHlzWi>윴!Vya%bwDL"y 䣱.Q+) 7m~ؖHjtmt׫`6|(ȝRн M=U'*_`S1"*+ 5klNGZ*;Hz,p@iZ[ATّWʔ\پ {cqhkv~b¯:TI.fRcJ1VI}E,RZ*1 C4^?8*7zWH^{C]' f=>HBwv|uJWhS!9 ?wR*9[Kw)Pg;ICH@ lN`%r a`_ [d }jI7Rh c(1rw/Q,m}E rcΡڒ~PQnT qVҟ ]CvSDW9-Ub# -:g.]VY;rgt Aqz@΅ɳe~ lN2*ޤg;ZW}D<XJ" Oa2y тƬi4)wɮJbf !zxVێ6}W0 %m6&e[7҇>EQP"L*I1|P#_!%۔@_h]9s|ZOjۈ"ǟIBVFp@ˍ"oZ̳lߧ[٥Jo36vO5dvH8F 2^)iAd}h!&pl3bAjvM.UknHCeGdMK+:3#=hÕ$WM6jokKK^4?o?$iؓ_A݃nTet ]Pj^vӒZ`-C&V3u{v90G4>B>g$:1ANw";@ %۸xNX!ŝ;,F h z@ aH>AJ k# #q j#vt @$tHȣTC[nMgpK;w%}7~gI4NDeTE0XcL{~,! pfg\x$v:LU]W$Ouo*4Jpܖ09[m`K=vEof\bIH ,_.5l1~NҧU'oWɌt{$\kcr+ښ;XB1]{"BC25`ʷ!0!5yX]2Y+?cerpe̸v#NJ]2=o4uZ65ʜ)[|/$!DVyPKVvh'כbVO}F,fu/W꺖nb+e|d!M&4H_QtiUٿӳ'?EX_;'o!ރ]IJePxoq-[l=%r^43eG4k:)Hiecfo?0 l+5H@LS\!KCd0 $[- >Ptm&c*9i!B(K統nD,y #!.hQ . mNq?xHK$5*qV#u &#z e^A*E p _>E@fRY~Di?$|M]5߸(?`N*?{2`Mt`(+M2\|݃ [-:qt_|tYl 6xWێ6}W0 $%M @&PE@#5M$% A~Yg(ٖ/iMI3gngɳ>~*Ry4% =6߰w >I]:8uMj"skn!dƒ YA-?N;=h65Ĭ螦1*eEŭ?m|{ftlu]i,񹒅4F&}Fѝ7V.*]]\~7:7a&߲ﵰf?r(.@R ^Z0!rx s %8fܬi HwH/+H{ݧR ı+#d){ r2z'-j!}H >`夅]mGX|^$%G Z@]ÐBNq?/K$5*qV;E0 KI*ӎ^zyM/R{'k/_MN8Bi,VdlX-?6z8ɱ#,il?lRaf#]#X(3Hh;t{&Ǒh+a]k)|5"S0U20)J%,XbY?4XbfAMc9ABL㙩Y翼؏+k-b;Cm4Nz^Hjkiz+Tc'L{$,7Qυs8xJbOϭtr.1&e( 8ᖡ$0 X}\2XIW ʄ>+PleAm(ѿr/c/Q,ċmwxE0#1 ٲBqH͜-!v\A KbXfjG`1@<ɏ ҁ?ԧH͞[Rg/շ£wl#]oUIVS]1tܜKpL*LDE{}Tf/jn-9##H"P[RZG]TR#@%; )MVpv]oa,O+#7Z;ݩOZnoq w9N2٤kԡ2ksu"({lp`m_ZY|Z%d\ ܊Г3p+PatE۞-W :ՇA]b:՚o^U'#%n-j tAa,•)H/14x`F"u  ?{/:iXV xVێ6}W0 $%M @n(GkTIJP-{(`Д8sU췻+GE ܃` p{fEҰ}Y^ӅnRc3_s $3$\ <j vAd!fE4Qge.Y*؊+X6s% i7b-X'fgU6So\T8;aeX]Xg?jaa>r(.@B ^Z0!rx s %8fhִRz$ˢ dwa0Q=W>ALS\!K}d0$- >Ptm^pT0sBTQ!$kcnD ,y >.hQ . mNq?OK$5*qV!  9: iW^zytkz_ 5fuQLc&Cfo8?Z.YRGH؜ wG⻀_(3Hh;=EHɵ hB0UT`zS`KVY(t~Iîs I3SՓ /}S.v[%Piᶡ0hvzZP_'Tv])qkQcoSfBAb;Fǣ=\X ah(  Q\& xVn6S*P%iv- ڢh̹a#0Mj$%+@{=ΡdGl)|ί5{/7Y*fϳ$a--Nʰ}YlҥnSc3p -3$\<he7}6deͭ?o}UZ:2-xd)M&,HߦQtmڳbgM^w=† Z@^kJ7zktʢ@N h$8fȏd6tR2iese*d"+5HH.%CHdp "[- >Pvm^Np X9i!BhÐK捱+RwDrʴot/|-5:v}W.tY֛D4h\ieC.FcpEa/q~@-&\rX<8”OG$^*Spud4X 9-qdI4F _tIH%*q0SJ+V[ޥDbfAc9Qi냀?}XMn@tW7+Լj;6{"4dGLr ׸ RCqt#bPTa K7)m: nvB*SVKz$aަ4\2@R);5\OkÞ$g`T u Zaޓch6 e0J 8v [5 bf۰ 1h]Ȏ;-, ,QЁJ0Z S);h%*qh3Bl-/Kp'qJ,`ihN=jƥǶ=m3zoG}K.\s~>:^T>2xBͲ K2T&1ߥ36z!MI[%޽<[%8# 6NO-~糎S<ƹi,S泌096ӼyD#C'8]]~r/<%U8Y*~Es_GQƂ3 }?O=z=vM+HNpC[[:^xWknFSL HIeI1ZhQJ[R25z^GI:\Id'Z|sǣ'^|s sWhIrTh3X08pQdD'Zr1]hPi603HXt^`u;JjQʵ[1-d*um@cVp$/(Ucl>=?O+8W%|+F RZEVfF(dA 2i! 'KhAЬ^Ȍ"N-6&ۣIh,H6OPdK\yf@VPeyn׹FYp^2' FD.aImdKAgGkb2i]үuy =ŎThӦKĎBu$2sq ؿ"T8>qH `n0$>!Ÿg`HqVWlA?^^tX"Zp*>/钩5 ¶RY[ w 5@8Ւvh,6Z9kYא+0zSkèD³}=r* !eF zgjlHKsA7,?F\$x/ʊ}(Iqrj8UIwV$<9#E) +}LuOVCj}3C1M<z:kPqpH a-UV=Bk|;*J,br}TT0\)ZKMz@LpCl@V$0E7%=ٯegjj3eh6WHNV*hPq(k~'g+1 WUrBNVuxV #Θ CQpF.]\BwJdsrwF6Ӧa\ 黢c7Gou1qsy̱C/d?e v:lQ#]`u-DQ&RB֥ȯJyt YU0;yKy,9lv\Qi k~b&pHD{,iMqJ)ev"_4W9T~z6Q2juQaPC}Q4pW_^ߞ@jzT``\kGCi"Nk5-:33"Ij:s. {? |!F0iD58 ΄ܿeUm1>2W Er9ɬsd@L Vl<+jhT\aH"%@7_$hG<GhWVjpR2~G/z=OhR鴽'Ai)OVBm#xҮ6k/BTBwHKjQ?O7h^b}W1Pv  C_ xWn6_O@fٚ9!+ Xa J<\hR%)^Q`GkQ$d[vZw2yl*&ϣ$a5{ԕa/JڍlZsݤ3g*2If,I%xxv_Ad!few7Qg+:Wy{5[Hǖ\7\1e3^(YJӸk:i4;Ii]zm|ٿӓߎ<*g:߰ﴰb?r} Qt v)]B+s54} ktʢ@F %8fܬi H6^Vw&W&mQsz.CFJ>Ad0N6Z=B Cz>}PI (2 $2y"/hQKt C 24l~q_HjThm( h˽l.!wRvD+ȕA6NZ'c=1&Y'4J+k27h$K|W-qu kLptj[BUYՁ61̕):},hzV~ /ZdKnFRcJ 1WI}i,S.1 C)d7//#vVpnWM߾O)bq`EHQA|6D1AA)Bq~]:䈧4($J' _B l FJЋcp.*@cvˏ/ {8\+@o>TKPliAmVa9'(trEe&0%1h]Ȗ;4j bK awy`Σ1f aH| #vUVvNJl=HG>xQ~C.\}~ۢyVӓFd5Mh,XeB <}~Ž U #p܇t_B <# uLcQ@'Nb Mƴ& qXޛ,ӐOZn7O2M'^l:H'g_Զq^։OQwKjq$j l0l30TB:oC'Iλ`礁6CX8'v;&ba% u!5LH+i;<%w㌇Rh)Z5|=˫j JBwҕ) {&k&_̒0fBay(fFh4 wg=tXvaG8%uԍ r)tTxw`->U<;mF4S1L[ Z7\KኹT^FSyH-g|JlCL %dyh'H߄y5E=7ן5elZIkk+CSo>]@|!C>Ɖh]jͬVic%?򁿴ʥ,리S$ Ow+@lΠؚiq(7} VX@Qٗ+弒%UZi0b-u)WVS\53|QxxR<E ٲ֢%AFE%PF0Iapxo#4Ŗ\MٌF,kqd㶦G9Kx:aw1pNk;0`W5tBfIM2hO8!WE|*>?g{ p{: tEdjn1D:J" \.%40b%پBc4`ɬ;L߁+6a賿W|~)$IkY Gl,]\ xWn6S*P%i-ڢh͹a#Mj$%+@{=ΡdGR4)|WO_.]gkQY4~$ =Wl 7RNO'(+7NmujjLԷS$\<j Uf_Ad fEQO9+:ڗɛc\K6\\1ܕƲ%ϕ,݄5`4g4.Lr˷\O_,?GN [3E`7(\S(ALHkd4^nЋJc|feM#D:BxYXA5ELTAm|ϕlP$c#d)  fd؎n߹ԫI fNZj<0Ēyk5e"z:x>Hվծг؎lp83Oq|J:W&_;j'B%zNsћRq<0"V՞n<he1kc]{aCݘp=8n1f&Ծ8ӽ x/K9~tniTng4^p -aj {##  IahxXێ6}W0 `glbs 4 P!(G6no:C^4A)qPW󷯟/,tw]X7lWR=IG*]:5v1t+na[!KB.σZղF{>+YMcTCKni,/c%5W Wl3%sij7` X'f'i$ S\,=6:yz?g-,/\_B[JrMM_Z0!2=ь{YbL5˼ յv+d28 jsTg#E2bi,$w "'٨sln?ԋA? VNZZya%畱ݵ'gc >5G0 q)weF%֖zQ z9^d 9HeK` ,q=f(k3NxuF[X˭\% 6\{}{@v.aaQMmsHn %ķߍaL՞ `7'HEcO=ɕ~9 [p3KU0<>)JKPLcJîs sSգ w{vYη%ͶpPW[MzNNF!BRHi9Br~ !; 刧4($|H'3_R lsFJЏcr*@cvU\ۋ  P["!?)x)FVxleFg]nx@lhb؅lXsH:[` 8SMCjD198-}Zv0ـ:SgFdGMu 5A{:s9}rc\~Co6*dXQm1fbrz-2!Q::Kؑي1t;UsrHDA6,4#gr(7blmh!I!haC '5sF@T{H& g&s2ՌM'CҙI۵}ejF"(olpa<`?􃰏ZxJ-n%Z8ކH$x&aŪmY !U_[~5>H.]k3)pS$8UHs^S?._N.o[{v;OJvN*[R:;?7~gH}Z/+gdrqkeܵjjqxv/V᝙ޕi7Vt`lkxXn6`UhKNlm[E,-P0 -l"2(`G쎔mّ4 Iwnjxs1Kp2Ͻ$afk=µTfORʎjUj3Z]70trȒ Y-?jL (L,InHZ|7]<[ iْ W6lg̥5`Ԋg4.t6rp쟿|>3?d?)a`~ - W Q0:#g:N.ъJe\GF b_ )dELd An|˲ޢ"8Tq,$~oDJzQdVC%4ݮqk惮=y4u鐆!$W\v;MDGC "c|% jIAZ-Z܆% 8J[:%WaQ7xp W!ѝt%dFNzɧ.7Ysx&JlndE:CɢL7 qukt;:@䐸:: :|_yg<} wtc6V6C-&̐oRaxxX4&crl)[(&p^PbfqAS]^^^|h۔mvJ->j˿~)Tk,=&NW/l6M➎֭`JYֶ9)u'Hj3YJX猘6.G3ddG#[q5Zh,3v+_ h5O eT`L/edK4B(˿_f++?{z{1php8=@lu~ۢâ̏Toa!Ê"Qy7GB`SfYu\ԻE⸵~/ {PqIALB<R-Tb3DI6dThƤ'#1[\5ɉw6g[hmU \  G6nټeڍd<$Cv󔪑ȐP,\>a>jrQ'@~^{K|? cpB _y]“)_We7ql^Q@\{6:H* ^j{6aX1:]RIUՎmi'0XKhA[̼]K$o0_pREgj/.ʻj*H~eE" 8SiV'/(hc:pPb^ւ.%aҿU$/4r#gQ,ЈU{GDB /E b_omz 5|x}^EPݱ[4^p;r6',p hL ,d = /=\d< xVێ6}W0 $%mf`M(G477ed[mZu9sfHg?|zU~h=Kvk{lfw >I]68VUMj"s+n!eƒ [-?N[=h5Ĭ讦1:Xܰց6Lլ-nbxVf|d!MF"JߦQtk굕ʳfp 7-^ +#׏E`(\S)ЏLH筜7({,j 25^谂u = lx+HH!).}d$- >Puɭ^p\sBTц!$+cݎDA G}]0H S 2o;0-1Zt׋/`4r+Q)N^z2HYHF" A&Yg14 +k6FJr [H|X{840EijmSX(34Xt80m%jcr%ZJ.FRcJ 1UWI* 4O)YPyNxfjz/n? rpnWoxqq i1FDVS!Θ0_c$~a :)m(EBns_Y% #D@al1n< 7  ]KjǕQcOsыT@v|)-6Y`pǚ%[NcvK&; {E51: ٲBqPX͜~PPnT ӸZ;C? &alw΄_u/]̠ݓs<4{Qso/J HBm0KiMVIYjFs0GǠ.17 UMA|5WF`g{2ݱ0aG>i87 jr6d䓳I7Cg8ߖ.,0 ]'8᥄}ypGUk8ũOaFG{P/W4b$sKNu3G+@)D}ІdH 4i;0]J(1c 1xWn6`UhKJ[,-60 -,.\5dd[vt ~̟f7ʣI ܃`-{{-ԥa}fYlҵnScי3p %3$\<j nAdm fEQgert4-JBMXIEzN4[+וgͦ/uM^} ;`kZY[)ޠ;`\ &VZdtŽыFcfcM'W@"!m,z L" &*ۡ6>J 6G(S~ fd؁ع fNZj<0Ēyc;0#K=Dh Z@K!@Fuk{<%8Zz5LF e^A R8tkP Ub,b!Svqwq~u[ p#@iZ[@Tt"12+Nd߂˽#A+'McInB@UԘ"NeLUR߱B%SJC%f"vdH"^>77QbX^ߟxq1J#h1BH`8gvݤrt0#\8$N:JUR`3_3RJƆpP h(_"p= 6{8FSeBu>T(Vm@[f2J f8(sRc+#aV,b仐+w] -QЁJajfeA.A!KG>csrEa#Ƹ8Ngd)b38-z{T#E qLqe,%~ D$Cب'hg;Ln#u5}pI RmGX8]=11@`D- d4ߴ=~va}["щcQ\W `4+ȓRн reIX{u6$L~*4ƙ\aeMP}y i@-an@$p@)~ȿRfՑ[`7v`HsE[ȴ˵~1ТJ0[U0IJ%[X(Ė~Lîs m3SSԓys_U.v[%vp84߇K8q]>Ihlh`$~Q9)m&D~jsߌB [FN0ctn:@Zcvϑ/ "pW]ʄ>؋+leAc>(ѿr/Q,bg,̍؄m1!DȖ;j(hA%0 SG fab9t:tbYCs~~/FE{UT݅z03dR׍g 0atN4$U?o, [73:M翅00^SjXFkwZp  f6 xWn6S*%Nf0d]k5#D$%+@{=Ρd[4倀s=ͯ^UeO][7>Ik2Pv$*^&fX7N2aQDqFZ+E7BuO]BVLYVpcGWaoM!-jxpknԍZ2~F. _|7u|K~oJX xC!pEpq%h;Ytѭ^)dayzG} 0 Le?`"QXi!s6l[t^;tn-r4;4)0ĒdJ;ng09}\Q34 ] ?ے}ZP#[\-<˫h. GBwҕM81-hevZ_gI'􍡐j 5 :)ro3[t{a8SAT謩pw R/xy Rw8m%jm@r%+Z?D2'_R;V~i@931otM*<}C?lm7K" ?>]!©y 9ıӞ$4.E?3k!#[iBҭ'[{H)isSODЈsjRhl7 ߗ hcFWDJ+rkKѿOL0K0_݉K ݑZ䘇w![Z,fAoQ -:L-Dm΃o: „*gXurELT Em|ϫBLR\j! ߻Io6H6J*![K5Ϋ`椁6CX8YѳOD͑_~w}DRGk%ҩ7|=˗{! GLC;**6NJ$ߕ(k}i>|ԵBcX͍^'bli8ۃZ/lk aZucrH~ 7K;߆߉yg:} wh~V6'•-KRaxX&co%ՂI,1R/13PMb8A\L⩮Io]c Th[}]zz~scQ87aҍxp:Q³nRQtc;OiNQ4oS+JR`s_2RJSpPhH,?GjTjl8v+j (|$_ ŖZiіlt%WV~N39=bAm8ԢL.d[r-*Aapݐ:uD `-NIv\ !5f&Kg OA5afdlQnlÞohlB5%3@ˋɔޞgϘ6{ vj^Yǝowogjn%$SXTڠX걂ڴP:b _en#/@ MNxeڬDWjk c$lmƍxxH:>+S;Y/ ‡v9oTbi㥢Y&?4G俶   Ih KxV]6~)vmm@>Eb-*IqFk(=Ig(ٖm 4%|/>wX* I[܁`-{-Tf/]cgIljcmVՅp%E\_ {~ke7or\6bq n޺"VRZVsІ-ԭZ*~nFJM/.:¯W~ү_o0aq xCB4^J0!3r: Kd^4,EF4;)H)dcy``0Q,=FE2qJB"l0l30TB:/C;j5ÝWIRm+2 $qh&v&bdɡ9 qA #5tH+n;l+i B%JSqj &#zG}@B 4R81-C}4酃/ZlndCF qUqǷav-^g;&:okܝK^Ⱦ;mF[49ND; F7Hʹ+%0M, ː[IfbJL뇘K T:N>pz_ݾƕc Tb{cCGf)c/K-!(]Ȏ ]r-*Bqݗl Ż}_MAKg$9X (fgLM]s9X{AgjiR?&v*K4 {H|#l):dg G^=}=k7D`\QjYHc B1*%"}NX:wʇ4:uf߯~}:p\ YGpv6tw d,jLf%JOws{_{{/sH}(7ןxDn7"X-) Xp)i̙ كoo~y|h{$ b^~nԥa}&Y^ӥnRc3_s $3$\ <j |ld;}r!fE4QgŔ+nyy{uU\7\1ܕƲPq#ւuhv^(6ʳd'ߍp? UX {-,ُ\B[IrMTxoq-[h<(j 27kkZ)H}$;ESd28-j{To#E2qbe,%~ "'٨wlbwFhA3'-Dj<0Ē[nXApz^2m?;0>-Ԩ Q\/=ǫ6xG iW^z2IiAGأ}}6Y G}_h4ʚ =[I-lz8_ &460ESH|GaKe\ɾ {c[49D[ X?\KWs-VJFRcJ '1e+ / %ےw7i_d]fΜr|o7oU-GI®-p{ԥa/ӋJ-mӍSc7sgJr sKY"p?{<%*6ڃɺ fEQω+:ڗɫx`J\\1+ek+YHSk:i4{^/(6Ugf?/p o;Z -D ؽt l, oׂ 鼕y큌=zQIp̔Ѭi -@H/+HW'6R 9Ž} fd؁عNlA3'-DHVebI#v'&bdɣ9 qA Z 5t)hn{cDRGk[|=h> wBWmI+`OOɚPϖ^,:BU,VVdf C M<Iq6[;l 䮟3Vr t%Ye}&m0|5VVOYR=~C/cЦ}Yi^&,kʝ6ip XZɡ{05Tu'h؂-R{;_ŚT5q&YOg6F(jA#{a9XgjX6W]aeI&hVfC 1ċꏗ00/6oH|i|xX]o6}ׯ`]` Xr&tm`A7bQHPJRxK)2}Q,s/Ͻ}{߲U<sv$RŖ{OT..ǰL6M4marm6I,', Qr? 8hM<Q4Jzf,$4gJJIOؠ+Z7-G g[\~ ! U)<D$YO5B*DnV8肓SNf,E7A$“>/%! ksx5idchn-_qBz/KQ*NA-ڂ@᰿tQN:f#!}TC$}ײ)>yЁ;жy/Ja˶Ư!̗.>}'tou U)` jS N9FyT/ ;zpOlۇ-# o/e7eZ(@0rX{hF08|%] YE)'o-5B*'_*?8 {Mj/y?yzwK~bNb~vlbl$ .Ԛ{) ˵\K#Z _Vh{8])yYJQpN|N'|>fpT 'xM*yb}lG;]ϏMYgG;R?ICGru|`goLI7eq O@wS'{poDp~@TUhw(`{Hu1Iw䰸nKH-z5VLI,ME'b>AT"PX"^-&|ZOg9 AQPhFpWdi68ERouQsZ5V*{f) e:^")e:hm-7d3uYӺz9L?6PPɰ4Pa*\g5F{`#3+j jv]m RaܱB<(OV C(OpLhx`5ۻWkr  u/L[{WTw/y_CVȝžia~X1ъm-3T>Ws8mW hmSPFIPD;/ޝ117),B>QY8Z!`-zg}J?D8g  l> GxWێ6}W0 $%'Mzm6 ڇdz(hqdIA>/ %ےw7A_d]rfp|7oY*ϣ$a6{ԅaҋJ-mӭScsg r sKYEyPKc-U|muWAi+:x@.c{kƲ5(KSk:i4{^(6Ug?z]^pB~zQtv/]0^kJ7zktM큜n{)"?YYHA%H/VN.O&mPsW s{#d! FZ B-2qp8 VNZj<0% skН' ||4=aH!AF gG<%8z+z[-FOIeK CHG`OOdM`nh p-)8A nd+pΔx9$~ڐďI*Lh;>)q&Hh+cH—+ " 3$\%1TIc~JîZŘ2ҿצ"*<_hrv~|<)E:QU71:BA6<FcGQ⎦ZO(iFz;i9a8Ta 6)7 ?7ɍTw VJMzH):mKCHJa`a%r׋`㰯 P["!~f<)^*mdv1J v KtEm8Eˍ]4.drŝC9(h@%-Nch$*F=,ؒ?PUv/jks :xbj\摡j\lV#rud>17KY2ʞ荫'`y4[vP!.sL+Mj\XEz 8a`</ %۲v7m_d]fΜrx݇7oX*ϣ$a={#[ԕa/ӋJͳlۥkݦƮ3g*2Kf,I-x26ڃj@iψ+kneU0@%u<{}}Z55/ Tڏɴٹ蠽1Ay՞jHƚ-~ås؍xJs$NRIZ l+FJqsc*@R 9{ϑk}8+@o^j}0IŷRh% w(1rOc5Q,e!- #a,c仐+w -X8F]6QҼKY{T0,9cg:.2 z~f|a>6#v՞j8[ʞ5WkMmTEP1δ`X\M$3 ΈU^*H?~AY-gI-"XBsIYWJZGPQ/UQʔP v.@]20`% q)['8Z#;@ێMlH'grd!,w, 5X~)"tʶ;TL!P9'Kq>A81'k-RB\iԗfO>c /5Mb}mD=jGDp) HjτCf_?74W!­HҪG$nҮ\+p0MxQ h?Xy [ TY[zox 0xV6+& 4%mmzm 7fzEQ8SJRr"uHkڛ Ћ,<μ{v,"`i9>X'6 EΊb[l 7n n, <#2N :`݉~.r\:B5<-R«fƢ[tnKGUZXhh+X\ؖD(1VԶc[D,kΪ<)e> 'v#$w'SBz^ 8 )G[ Fc;Б|\Y;.܄~3g!?b-pԂӘހe+=ph)`V_w3sb[fсo{0ZEH}$5?]EdRǻ+$(3MLK8a0o[&w}Z7})q;#hMDƍ*OC<뱈;9|j5O ڶ7Isp!)h}=ے8ϽIw4NaxMGؙgQ^̰l2סsl,شuZi|^`R8̿j)ȇwnr (xVێ6}W0 %m6&E a@EQ4SJRr"umʛ]/d9sj_y\-h>|H4l}` ]z=AkitTmfKb^G {X[K( Ĭ1]F*f$Aժ\\2|hV|-E!tk'cV*IߥQmؿ?O~OVWvE`ja=z(N0JV X;Qc&rNLAJ;Q\޺9"L&s)3ťZb#~HnAdJ0BU m(ap0<+' D(mr ҼfGJ yAZ4 'H+a;0,PB9m˷0 Y^$|˃E Ėcb۵$: ʣur ]7mGw9nxQ8h fv٦I% X@yoՓ<4Ɏ sH+͌~T_vzHG1f~ 7k3.G;ߧv@t/ eH^5!2l_9G*cǥ<4a75}!&y(mTxX_O1Q ܀e߻4\I@n.d/Rґ5xFqC >@_'wfd[o Y|.>7{hFb(Ľ#;@?(XflkO[ϼmN:$9EIPQ{]2xw*}[P3NTt²MY>D*/6R 5։ҪR%5v4mwj4zkS;ډy,{Kn|4/k' C,\?UdPd)6Y9U5"C@U%[Q;L2 escefC Z(莓+!rQP{ #`Kq;9S$S@19J>pXRYC7^0x(K $GK&ܜ! O&4i^8Rl#?^̒H6te^Ũ ޡs<~ rKӼ<3H{^sUTmopw!~<+/d$CNFG<%.Dvua$Suh5m"~(H]xЃrT+(ZG F Ʌ#}l2¿l^U9&?hWǯNGssxV(2XŹe`h`xD,alGjI|#.0|+a)OPD?nW+UEj`ʺgsL/Cw Tģn.^w[55A!8kӚ!~lwȍXca|7Z!W9zۭ.|Aܦ)[l`kރ:Sʼn d݀t #R]\,5UEޣs7p9-f"t㒗d]72q#cSQYNڵvJŬa^'_n"f‚V~6܊9B8Ru;aS -WZl4y~D]i[=FBع+T\F| ں=/zS:i' ryiŌuJH5V&'w @ /T\@^<]~sׁQcO=B54Jo]!'I{W .VNy:I ')34~@!Y6tE(ޙdvfo>๎>-X}P15c΀ j'cڃܐG2R|-+0J"3^%[{JL S0I/(ů?9"vDةbc֐CYkH5$ Ā9g>vC>hMAT= JPg5t@\\PSأ9! (|cit"0w5OOB((#.-x/Ԉi'gVٕh':E_mܫ-~N@mvDg~c]צC$vԽ\@:]\܍ux֑Ն=Hp CqDaE9yPv\zp{U 0/{w\~iK}pњgNP#Wu/WqjUIv\7\1<Ʋ_+YHӸk:i4{^/(6M?/^zM^{=-D ؝t l, oׂ 鼕]s/wE-1SF~@+ 6^VO&WmQsz()ŝ fd؞йԛ fNZj<0Ēyo؝%"||- jХ S=IJUHGqifzF]@BvWKW`l ԟj&-N0{Be,Vdh 1*WzPxB#-0 pJj4- hvx|~̚;`7v H=Ec"J^ _-X!II*A,_X%UJty@W&*<rvqw{X֝͏UW| aHPĜ$b'A㼼8RtV46gL;tʡхsHxJ3ZZ*sVI|H)Ps3NCH*8ga9r5`s/TM*Lnا3|'6Y|Z%GNsvsz9 b)E0'1ٲBq簨Kؤ& : yGQqQuXIr|n0#`ZK"??+|ۜ=?/teOW݇qy-UEVSb1X\%8ST"}"dTq3(_',3PGRZGRRQi)xQl,@Գ% QF#Z[ _1Mr\dEדCejxu.#12|m0OϬv6&br_*Ѝ+R2ӶL#:0c%W+tt5X?}pu4-nD ? J ]t 0N\hVI g5n{s^v5x4,mza6 U)!أDŋ&kpJK^ 1qf ^xW͎6)7mzm6 ChCQ-,475d5enۋLI7wnܾeߪ"?OX[ٻ>I]*ol:vZ3q SKNYEyPVvhg})+E~J(YYs/Z_eղmnbxeKRuցuhv_$1uˋNzU^ { $-حtzY[)ޠ 0y+Wr^n1FcJ|k 6^ ]L&*ۡ6>J >G S[#d% &V B-28IA+'-$Ueڒygȓ yAhDhRH)㈇$RGo5Q\[I(OY*^zt |1R],R!/Q'|ĺ(4yPzA#Sc΅ (7hwK R ͽ!{ Xc0msgX $-hw6"g%Vm,Yqtz$EcpDa$ #89 > >wɕTgR&4=4  ]Kgfbg\@[ U|+m6hD_n2J fv KzwE`%0) ٱRqJAIe :PFK݁S+n-ͻ Hޣ֌Cee aKj\(9bn#cu51 poc{ʑHd=+\_ +BO%fK)1'_!A}Dttl=k ELWDu0SI-*J3"Jrbc4+߁싸'i}˾hkiDI_;nO) OI`be4Q' .|Gt\~kϲq_ԊqKbQ10X|?aWHN:\Ez5OVM: ]m5O= -z}] 8Kž C[!"GҳʚphӴ%E o|kiaq2)$9Ԫ~b '|xG.p` BxW͎6)I`!YΡ(GaTIJ^75d5ݤEfx׫_nްT,ƟGYƮ-plR׆/f([7/~ot)[( Y,#NhgC )e`_+V5:٫tdjc;;jcي܌`4=/y\`zU^ {=-$ ؝tAZX)ޠ-0y+ם2^ЋVcN|D HH/AWnO&W \FdYK|?HHP E7v f}`椅vʣ C]8YA #1.hVH ] 2_;}Djq EM e>^A)l0Ȟ -A*Be*UV:XB2+{rj p/3:c Mg+-B=Qfՙ[Ѐ<hV>Kᛥk# 7311\e/Rz 5îZsR2LW%q@]`,Npk6| !&ӵwPMωZ*~x}#pzcNp8Mw!t>ʹq&#|'6B[~6JvSbqD%0 )h]ȞU;ӭTX8;Cig-^hlJ,*paqAjQrn0Ծ%gq˓ClFS'z+꼍[yEKnary?Gip:,WE~^!>)tx=iWDKb\RQM-FjͨlTP(6.IS;2wfVF@dhii:(T LC`4Q ۡ ,|+0uO >kE OVfROi9-O nskaj#{pʭ-bitől05F:S0b8Jp}L9 w\VM(s9XŒ\򝥵Ӥ̆(Q`@.hJ?q<  #tJ xWnF}Wl H]Ne&APEŅV,)/q_%9s̕鋟>_y*RY4^$ =o؇OlwR]g#:]&5v1vkna;1KB.gjd;}2Ũe6Y+؊+X6繒4F„MˋvFa1FI=$|WӟLp[TP~!({sW_>hǝU<҂VkJ"ƛ Kd'Y1ަg O^tPqONdK`l)jPJJR3*\b o;:!@!9\n=7:xKe] #``ٴvqf?)ct26lLw5jzr&>  L{:[ozSߊQ(Tagu*ngN}|YW LpnK,14ʵ>V7a҆|^~qUF?]h"_rؾ/[yZLa]T7Cj_l"e9sv xW_o6ק`UhKNl[@v0 @'0Mj$%G+5vGɎ8"St?{z{Vʢy,IصAU>|eK0Mz>Ai_tҵScSg $!DyPKZ6h'˶"Fe?%/X^r/j_$qղmbx*eKR2vրuhv^o(6Uk쟿'x=&\/pŽVV֖kJ7hzktU큌[)"?pK !m; ]ݛ^ELTAm|ΕmOH&]! l;YkP ew\+z2"tVebIyg솼D ,y 8G}^d4|m_;0,ԨZ(5_dQ6xL;{dҡˠ0{yOPbO;o [YҠ#n{*n?7j-^KjjCm*L^ot$~H82+d?؁ u͎#F®2$wRr!A$f"5$ĹxSvVZ(0~,]J%f"vd"^Tx?zp\ 8{{cVU%_AjX1Xz;8<0##ꆚ8ffxKη̹s xJbNF:JvJ)})%rnMCHJ18cgYiؓ5z (\`֓oB!sz[+Dɿ`}o`D!^ V4_ц鰈ASB6,W9$PrS`TRO:nGښ7 F 6U}D'Faɳ|ʳ Rc U@UCdAʏwTߓ9{be/UW8lBϧULz=VƜ]KPF4pe/*n4#H ":jЌR&X:b]tǓ λ{]s#``ټvqfj?)ct26sL0R,*ۣ[3|c/ gUΩO)/e`RWݥsqb\9$1;phZe?橌u4'-.H **Bt80%ܓh C%FnH k_ .;tN5xXp[kKxʬL*(媛qÉ&/ Df  "cvJ1xW]nF~)6 I%ӤDqҠ}p y(XCi.rz%'.)QO7xӋ__[#|߳UX(:֛B/3Q4U*aE뀜܉FLבl^@" (-/l]De`s);=>ąD-#@zQU20Pdw^3' Dey%"FAQ z@%BÐɱgàtw㶴hP7q)(n=fsQaS3RJ+(u9ys6fO`) WFaPfYuJu>tZ(J}WB˪Ɋ?`lf`>E/G>^,| Q4)t=]9Ē[EJ ,b8|O+L1Lل$/KyIf2y1gԫ{i{`}30qg]*o'eTac/*dɨt!6zL&)*,fO1 u ;wvjQ ?&XdK*{ZKE^SԊQIR><5q W6k? RW0Fs>Yrq[7[Φl:hLӽD@(Sl?1/o: ve89 |-fnKC+ 9e 5` oF ^︢Ҿq쏢PH æ_' {y9؉;~"|hyޭcZ.a&`CDO7M%4. &5X/57\cRtTda)6b"k]-`PLgHQk­Wj݋$-wD(l C2=7T_>ɾ|jTw~% {5XESSߒc"ηثV[> K,a|̄mG~tnm<Ə  t3iEZu8HxWnF}Wl ]7IeAZ 1(b -w%57eYR%YǾФ83g,o~xw{+VJeѴM[ ܃`5{ORH/Ghk7WUMjbLWwc$?xvA~]Cik:˸Gu_J*Ʋ{>W2q#ւuh,J_Qtk굕ҳb.p 9Šl%]YkLƵ`B:o@I %8f`ִR{ d˼]Ud38-z\>GDJq2BȐ6A6Zj!}!vŭ^p\sBPцa,IW. dXAG=/ K  l~XqߖHjt☭D8E0scwQvB+Hl'I)Og[YS |oij/.4B-al 7s ˁ'460yS݁} e\ؾ {c4At>V~`—3-! #\%TR/Yi)#f,vS,75e}W&r $~7ɍK>]im 4dJl:k<|C{<8ڭ=#ksN/ A?ɹTү'S" 76O*  ) {՗\OJ# F/REBz` d8)x%UF c57J?9'Lp(L8ԋ3MFô#)![+;ȩDA *jIxut`y`T_g[)<9Q64 F1F;Fc: @=p&zxR8Nٱ)({箾fm㞜OLRqO5 9M$8SV2L/3.{B{O6i-( MBZG/hF Hseeߘ;SJ5w]s#`;iW326'cn|4Eq[4;@ L89gGnT}q=d!Oɼ׹݊YWO)c^5x~f֬ Kk:_7څ«c[aX}I Y~Ѣ>-w+l y{d-1/f.7\1P} OaaQo)5q> N8U9;~vW#}GTs  t?M,_2Y[W؏p=.,AQZamm /H1-u+wIӼ}:p$șZt8BD\YX!݈ Y2/YWv+jпħ0ϥ6&Aã-"|O6  31yf xWn6`UhKJlm[ 0 -,.\5d#eGV ~wW]ak "1Iy#j8) ˺-HTFta0#L$^Zt9F>gt.`q)8gI4mW=53ZSeBa_JBRF(h@[fҵY7q5Nj4cE[?'1Z ٳ"ؒz $' FWIUj:k,I6MTm2tn qd¢ [^-?[(- !*fEō7o] lUkW6lZRv:0VjŦU:l\V7^|?^[~~P ZZV+Jhz+ȼu@Fsh$Xl HdpHi'K7&W&PlOH&]\k!Kl08*fP ewVdw^+' j[;a%6+10 yA ZkOVv܍#HJUNղKܳ|} '$qOt'] h7[ U^>ГuҤ Phh )#!0;Z3/uԭ) r-*tѮH|y}${ mFY47D; F7H᪹yTX$^G r[KbrJ,꧘J :Np_|s D!>#f{}Ftz [i8W8)Ob/.#$`υ8xL󈢏ϝ2t&f ]=D0)jVil,$j (#b \bebk4Bh? r]ᑕ ,| |'>^$^ ͵1WIȎ5bj蠎0`jbGB.IQR5kb̊i³ 2S> $;G}<z>0Cms~cm~+4fS!Ӥbi!1t\=ZpM|_\Sv_婽ޫJp2/eTN|G*~Qk:ǹ㠧U݂~c8W$9`֙={8?k .BDon >l"4h9RQzaFC;XM$]w> fxVnF _OqU,)qslCV5؜?a(N:ʺYNrؓ<Ɋ$ ~?)-^jGVmE+܁`ٞ]|Vp'Ux:AkWyvxXubuv@:˄E!ǽ[5]WZ9P.ZkY]-Ctv dyɍl\}{VRZóBY%s;a-+bg,~FKMοqgxJر@܀J0pEpCoq%5(hƝbtV r/LzBJ;wX޺= LxWU#E qJq,$> D$}ؠ'(gtކ;Nn/z2·;TmbIfCQ$x"||# j0%_ 𱭸gܷ% 8F+NպkY= q't']h^ߋ^oIgC02`s#krM- cO-az=]N019Dx<Λ-%?tƫkPlT81m%jmr'+ZH/&RaxY ,Cl%Նe(w1u }JQ~/*{k $nBSOx}>; 1Fu{EjnmD!ޑVfn?g8z"K@+l`55WR8o ֱ">/V.*VVhJ#d]+ӕoY7qfO_i {?|}lY^qkQMF?)&i9/: n!4Ps9Xw4=m"֏>j5{2[_'5~* c, fVF8 R!/-I,z8&{Us/$JQ3x4^а.Jqw0;61zfOaR cϣ;Z(BoE.n"- lэؙ)Lr%c; AΎ_hٟ]7}Tj.RQH~5 A':gKޢw pRڕx:^D;k_0/AI/t:7q>z?]R9"Eu6=>C2   u|n xWn6`UhKr[ņ-0 -,"\5ddGcY~woonUVy4~% =ܰo޳[(ui؋rҾq,[J̙үKB.σZ[7F{>4ZĨ3e2c5-W Jc-_*YHӺ :i4W4nLrUy?rz߄U~ZXX(z.@R Ƶ`B:o@Fh$8fȏl HdpH/+H7&vRdYJ<DNdC-2qpWq<(KkcȻ{OȒ#||4- jaH!AF S܏#IJUzLF9^e 9JeK  R%k8 |6zh WXِ!cLg{x|[xA{Pw 7*`$~I)wߏ`̒נ2v$HE@n#ɵZ)IxHe*qHX\Ĕ\ UE,S,1 C!i {uaWn.v[%vp\hևjt@tc#(KC{p8qc F8o0P"0 e" >uɥTof[R"бyN5CH*8cS?GR= ; FReBaJERrLF@kޯ[Kɿa~BWg!^$h4b&"P1!;V(Ҫ][`,8rm ͻc3MA$/ pG")?ȍy {EAp̘%#f̙|,=c%v0k;}y؈ʼnͷ*DQk<.$eEyːdxQ4%_ݢ%d%o{b AxWmo6_@d9! Xlɇa J<\(R#)^_;Jv$Фts'fǏ\U͆I.-pkvg+ަgfjJM]dT~-dX"p?5x<4ڃiȋ V.u筯wR:VsrpWnyd)M&$=OߦQtigNNzMXmXc?haas}Qt.@R Ƶ`B:oez ( *#7k:)H} $28evϹR ľ~H9F`>Pv^LpTrBʣ C,I>'<#K#Qѐ%! 7l~PHjThm(-_dN6xT=ѽ r`.R; |3zh WZ¨)62>?w=1ps{PXX۬”m=mvX(Sp'{ )cGc4AD; X?\Is2& X.ԁiL VR߳jK,L,y<'Py|kzT/Wr{`.܅ۖ`Bl7trrm7F850A),|^ GNw$4$aإsÀxJ_:d!)[Jm}H)ȿ|OCH@qNI=]l5$p+@o^XþTXx6! [Qbx_0y``F/ ,FԘ%dJŝCJAI% :P Lcy`zɣ2e3<)xYs8dL|v |%#f̙,=]s}h-WpmhO7aH}5Ted!x1\&qX~-ӑ:n7Oq w92٬2r0P|iB_-荾l>Wc9V)"sN0$"z55x\` m.E[m~ZRpk>Cn2da(Vaࣷ 6B~~z -xWn6`UhKJ[ -0 %,.5ddGvv~w'f˛_?\7*ϓ$a ~ԕaҳJͳl^+ݥƮ2g*2?Hf,I<j ~_AfBᴌQg+kneu}yiA3/u4-!-*L5;ߥ}?2Wנ1v"HEs@nɵ^ 'I8̤"q8$ ,Ocʭe,w)YPyNƴdQ\]~q "Npn ]S߾> Lo@|r_CjR1{GMo*Mo0T8K" ?B*7sVK-}H)8pPh4 4_"r= *p+@o^>WX5F,VxmFg]BH'hQ cC=+w%Ŗ(A%0 xy`ͣw?g MVcʑ3M L S䏲e0}C+vhµC ;g2vCq,ɰF=ۧsE-l14T6ηI<4B4| ^U<W>ABS\!K6I6Zj!}H >`礅6ʣ C,I.ݞDA G}]0H S 2o;0-1Zt׋/`4+I)N^zhl"y8rO]dqυHX+{0.?6Xz8 640E³#]3X(34 !c4[9L[ X?\K᫩&eLUR/Ye)3 j; 24bLMQux˻ۏrw`-$3<ە@wg>^\\ArCo?E0!n7$,7I_υs:xJrOBϭtr.1!a(L=ᆡ$2 X}\28XIp5z ( \bB! XsDɿ`o`Da/OW4 ;bC葐-+w(J0a\bC6!LIG`&ip`(|I&Ӡ=$?GP?{ e"B]}~aa+Leu!'YM}z{a n 3^kvQzݸY`YA]B:Ԍ4?WX)١XT(i_3!] O+#=X +!niO2r>5GjVvxl+i B%JSqj f#zדh> GBwUxsq=ߗ&|IX$\0B#P͍lHq 7mM ?~  -l0Žptiԭ!r:ok;߅{J~UWh3yq IX7ڸZ W.tXIUdP`2VRݲ@ %&kL$deh'Hexzӏo. Cq *n=٩orrr %ŽN#؋=ij0Q(.1VЬ۠ThέFqcEI+3YIR lsFJ\sm *@T 9;{`Ʀb PV"a ATZV(Vk2G[zJ f{{8bm ?!L ٱb9ANEtPE05 L@].BIQw:yb#ĸ*i9,&>a72I꣇i>jտC"Le9gva4gU!ϋbi1t93}wg,™L_ǧ˳)&%< =k ΨDE+7^UyVWۊMz/| 1MVl;L߁+޲m|>AkYxXUbu@z˄E!W-?[-K(lY-Ctv Ƃ[ޅRZVsU Y%s[;a+b"~n6FJOϾz_/گoJX\A\PeeR8q%(hƝ1Fe܈fct'@&!{,oC,&:ӡ7>U5ĈH!)ZB@D҇ `JHm6R&|.s@Tʡ C,I=10O`D͑ ߴw㌇m B'JSqj &#z}ANJBwUpq[c˽8YEj ,C67!Q7oet(u)w8L`uvmVGhCS輭|WCJg:F!u͌#Nºƍ,Rr)CDf"n"bYHcbJFJ T:N~n(yyTvw[%vp)}9s  H| 'Lw Fa# 9viQVfn3csFN\3m  *M m5+56{_Wh})QkYY3|=t%GV3|5=|Q@xEχe~X^qkQJmF?)v\w#Ż$M|D[`-6;5at®qb܌Eу6´{@Pmƣwm#mn]Eжb(bhxpۯɂ㳋5;|;m8aHω#Qp$7Qm i,NAW(FJ*y ١5Vd4Χ#纕6ӟZ6<5F@>0խ[$x"!-;Si_v!>n4ZG[?C5j)|󽧃)~B:A2qIY8[ZFTt迴gaNF;B$rn O"4 xUH &KEr 2z۟$   xVێ6}W0 $%&M @}("đŚ"UF3약B+Y3gΜ'?\] }h9{$ Xco߰k,uet>CkߺEmtuLBˌ% !σ[u_WF{>޵rxZ3bqʚ[~*ykXuûXv %Ki:7c=X'fgE2+\מ8p`FY[I o0ׂ 鼕E灂h%8fOhR{ d2r mUb38=z\1FE qJ1BVߏ6IvZj!}!u^Ϧp\rBT;ц!$[c7DA 'G.QK)Nq?x,K$5:qV#kM9AHWΆp)u/{~ۛ=b 8b%0`]tCyiAm` 7&,l ?Naʮ\ؾ H؉!m^¶5O,Rz%ILj,WVyL*7PbBMKQux뛫Orwyx@u0<;H?е>A"hܒw0ѐ!-*߸RKvNB/tJ݂R]2rJf^Nph-4_#r {8+@o^̾T\RF*4k6YbvU%Ɵ8v kf/ bvDˆ]U A_!{V*6AW[P5`ڸxN9׼O0o{t^%vxYs82-f~Zei v3]~xO| ZOŽ"?k_"=gG yhG<=kD;+.'U:jfҌڱP܄JٱuH1:#?ꭍt 6K80 0l|n t~]Vˌ|rgL3Alxf9 kn!؋1ַ*p“" ) 6|svl+S';c9#}FPqVx0`uȌqkS5W5[:0P@3Ag^50Ya>? ?^xXn6`UhKJ\[vCQ--.5d$[~x7W޾`+4v?]Hi<!yVxXeb­ĵ "B.=[_jK(]+Y־Bdv iq nVE,촺ʥe%W5/ڰ+>/d&umGcV$O e_O#|? Y +Woz(4\+FLH댜H;Y"p5+)="RɬVd3,;/NF|$b_R 9bNZ 0JHiȻCR-GC{,9i @U! C,I:&$xE J@ UCkm[p7 K 2q:W˚/a4Pruȁ+6ѝt6^\,xmzƧi]Y(4 Ȋ'n7 au kkékAvKT.qGqByG> o6V6n@3 I_FRaxYLBkXBA@1 0 tERoeYَ;ۼKm?P6''c@V`;P,@.4C$l3!Quk4ҠkЙ]CxL쏼or. ,S$ -9v8  ʁ9;{`+sED¾-0т@R+W.Dʯpo`o/.+εX.1 IȆedd[T`yL%ml?mA(Dh:B5)LYb#0/҃&<jc@WDIw2}_xSoB쁚}`-ˎgڳiRQh4zLn EWxN1o}agcA M1HބO=BKUB\(F9?/tvsdTbEޟQ/sҙQ/Y~kti0Ҟ iM! .Ol6M-eӶRTHy.i r_GX><u)θ-٬я?;yutѝ_>볻b-|ž;t#MQjkCp^gB~hW ;g ܌b(±vDcn gS BKGX:DY<ϼ`VhXMDeeID8 iMmW4^ $${Nhet[[Ňzڈym=H7^+= TYG PK_cq*av3$ \H$12½ܒRO=qJ9k tyjC &tM:qc㝦:z2"T Ta11jپ1[CzekJTQ ՞~Z)v# JH N xWk6S0 $%'&M?E(F5kFғtm( ,d=77.~|j,ZN?]Jkv4{Pڵv1o6tTm%,I"pܫ%*ʁrB̊isVXpUɫxBuU :.Uڰ+KQX{/(`ĺvzrg~^} D%FXo W 0JV ;4N4E+2]E.݋k N-/]"L&*ӣ6RN> c.E% FN`&Pvֳ0 VNj'0%FBGRF h z@BÐ|VrF<% 8zj5x7cBn2[tOK{:>[GhjVq 0%A\cշ:$P8Cgn`6#m,L;lR]wG4_Ksy$ hN66.܈իzEfBaQL,V/bʩU,R#13 WuL+ݒ;i8I=n `.<4lkB0]3PROP_Y  dBM&^s'B ~…ЍxJSbNϽ"RajQb3RJJ(gSL9CHj`ϡٖE}؃TpFuZBG T4,З|Z+1.̗wNj񈊖.? V1|g"BA%z FK=sjdG: ,z: wX-arγRkjg{unO6w({r۞wvf*lBY[晶 CU:,LbI^'S '"ǡ冟CQH%&*ňōgۊ Pp} "ckmrgvmf8ͳe-ƙrw[-礓h2[;ԨkHEs O ,[?M+sqWKG-}AYFǒZ$7i4rށl/^ $PD"Hq e!$n˸7x|h]mÃ~e23ο?.|<zo~y+|Ѽ"٭܋Z؝$unثr i_l$k]'Ʈg~íNrS σZ,>ֲYLnBĄbe?#+nXZp_>_Oz Xu]n,+%Sij7eN.UEj\'x˯*\oYa^D{aKVY[)`{X&rU{A%pYYȌ A"AxvXA-}L( 'lmJk$HKXLa٨7֙:>PtεRc*Ȝ"ad{ngI6ZÃ`9q @Ma\ 2Z|~qHj(qVk1x (IGt/ˬa9|GK::/LʊFuYhF$Խh̍p@3MEK23i]@|keV\~/ƎO6Rl*cHr#3_,2рqxJp;D,^N(J{VX/&IP0+b<'TI/9^; B po޿ߨ+8ڱ1u5A  ze|;FN*dōUAAe+@zηpݷԹF<>C^F:J2Cq0R3b[Z0(م(\uaP0Qp5zd"qs^Jhk~QYkT] GsQpmJ|e6>bɆ;+'Rr,V*TL:Ѽйfs~L9+tƩ]Bd>){Q;¨ƹ^n:AbM$PL\u~pÂIV5U1D&K"FӖ~&_س[~CF0\Q$s_1"J>oEv:3C#c0km H[oB E1Z#dr$|cSNy) Ds3Dm[Z%[$\⥩$2^" e" &^$gM4]ÅFu>o]74ܶLj#C&QǨjGٙ(+O&1vƟ:SW"7g}͍cdbl/$W" |rwv*bHYh)1Xvc7\aāfJuAƑSm:$K4 F0܃Hct&74]%$8J2u$zz9FM ՘G4nC^g .R i%#EŇr p|Tqlx)wӆ~VnӜ9,)@aw ( Ҫ nI(L)`7Qx"=) U.k_ ]FP9n BA# W\^vGË/wrr4c??!gpn%t|f-jȃmg3H"unkkQ0]]Hd'2%h{vGn Ί(yG]zvFݧ gϜ@zD"`a$s n+uh>aX#uꦖnbe7Pu3ցuh`椅ʣ C,I71у@D-d4_=;!-ԨZt׫`6z A(Ӿн r==$B)>[dy4Fe,V6?[x?wmF8ibLkKH)5ᝒ^)Spu$4X R|8$lcHr#:$<̤dp8, XO%-TXbS1 Cia(A?0@½~RM c2mBA6/ %eiӼ4}%s^_~y _4u?_% ;=X_Kx'unأ}妓j/u=6v9q&+na[ KB.σ[ֲF{>\W}'ey8X]ұ+w/̤݈5`4Tk+gN?vדz_7V ^- PeiTxq-[=PYT3y4+k)Ƚ2iebj0 l?W1"اX!s]du$k-v >Pv[K }pA夅ʣ C,IW^-1qL>5Cj8 NSgINHGqFz;mBR9n K /vw[ yo6i!4GVe Pv<< {cMV6V~`s FFR0\%bʪy,QwcZJbfAc9A(Q[?]-P6=6pO^>K uC2uBCkY0nq ~|kIAw~ 7s[l#>Նtr!)+=cȌ }6KCH nC!r`۰ýtX@P]9f:y)F0VZ%{.~BN|T}5Ec4w!)Mp gK}Ӱ4o-9zMٌg8Cyn6鈽Du@[ PlZWbM@mp{&ޅ&6r$̨BN [ v-?#*X:esJb&QCfT eP75hI|%J 7$q4vMZgmlkf wfpqz6_,v-&Y~CXxn"4g@ 6^xkw"|-ݎbNoRSk Gp-$tZWZCUu/Z:HӁW77 ( ah8x+( zTo( !S 7W<ZG_!2W@/}2?gEۥU`$}9wEm0$f@B %|mF5K,ރXiR[Sto#.v"(|s vjO^a;E?q  E txVn6`UhKJt[ 00 -l\5ddG ~w'Ξz{ʣ,IصAen>ޱ|4mz1Ai_imtULB{Ɍ% !WA-k=h,bVO}F^\bͭ?o|kXu]i,[𥒅4F2}Fѵ;+Wk]8uX/&?e@݂ PheeTx7LH\6{YaL5ˢ (d28-j{`#}E2qbe,% "'hp8NdA+'-Dj<0Ē ywYApD-5 )$ha{;cmD?E0hcJ1Ζi/Jxw`ͅs(xJOٯtr)ݔb( ]8٦ኡ$kA8egP}\tmؓa5z ( ZbWRXeAm(1roboQ,ċmfK#01h]Ȗ;djbK ZQ 5oBylƟ/ pƤle<[,15cǼAc @5C{b1+|B̲9=R'ʌK/v0Nً[~E"vIljWJuJR3"R߉ P_<&=B{7ѡA/F` 70F@>kݽm2l>H'g-ԝqr(vll}"<57j̏3P…Dy7d2\umEF˪V@ނIeB &t< ZxWmo8ίpTik{]SF:/K?TUU<,ن-o/nؗ$:)b"0 7WEiHufbJo1u ,+Pԣ|}uRvη%pO(}|דS=+k;P8" .5GKwCVb]ơ[;4(I+3YIY)9#H@9N5  *F@3 WRc;;}VX@V؏Zi1ce++{ެ |&>_`iɰ AQBv,(6?)u{w A4xs*9XMS={BX$<AO$1nIw1~l7ߢ{2ۜ[[n[2ݸEЖbbrvtUsdAL_Ƨӓs6-/v<<5sZ#lLTBK-SPJۘP? i"F^k$YirWj70Fyqya/E Էa [.ӀME'E6 ?>`OPmդfvH8=z ap3coQo̟7^uY78ސv^q0hI;<~-> m4 7xWn6`UhKrlvt CQ%,.\5dd[vlZ~d^~*|yEw Xڱo5|*,>,IuRM*:wkn qd¢ qFB+E] !E.!,+ˣ꺐U\5dkîyZLNX J4> ugpO\O^ԯ?G7n!Tz(2\Q(FӷLHLd4NVE-2nD6 Nf=w&`yY6(C2?Hz@QP Ew\'j2;ڔebI혈%x"||0- j% pۖ܍=HJHjLF, ehAU@*͓^4BE(fFdj7M׺}9B.n ;@01DnAΚ ķA*uKP`f$H}ES@q#ɵXhJ"2 SbyH-e|JL闘J :N> Zd^^_|Fc T^[}mGz>i:=LXB{GrKuH6a|n/Ý8SGGl- ^ycȶOZ࡛a5{6XO}2*|^BcyL,b^n~HG:*)A<=;Vdd%^R`XtA ˤtQ[g_Y\c"tC-̍]ahf*gAK0P,}sJv1 F F , KxWmnFSl HrIm@Z4 ZG Q@FO7KJ$M&3oϓ]^(ʢIAKKS!fqEJύx kw>tؙ_KKcIE0"VePKKi|i'퓫MMȻi e?f/.D^JO?O^ĽWWrb%u#+J*+Ӹh:e8Ii]zcբ⟿ӟF> ׳p!\/uai-~zIQJ+ +5^rުY㉍ΤW+DQ+r#?pU"CxwXA1EH&ɑmz=.CWPs>Ad0N6 { gwFhAS"T2X}^dn<)<"AQXjRH8vÈDJCIZ w*\hl.!GLFWdRdz+mx|Ӡ d2~04LM\nU߶~w-q r_yv1-Lެpw K~du 4Yt8mkc@r _N j+Ix)B*qh>9KQZOc^ZbaK Wf*<~a^;=nK& ?pw;>3/f1Pҝ}xq'lo'xo*Dsɔ7" fʩߜR JIAa6ϱ4](PRsqBo>/ FM +F/҂ :G5\ b+ s ׽S9]xN>gdfMӘ4^Vtr-*A<.Xk5Nm)MEop.&{B99ad1l$ޣ2p(m~ |o>knb⑞B|a9Ә1V?M5gbrvk9`3^ӓ3quBqûţZZy'񌻱se֜s¬22ߊ u& k c7g/Mt4}8Vk^NƸG{zswIL'cFĤ!<y$w܉@~N0ễw3NW x[ )t_U D^j 8$ xFXVQ.#aډ@tԨTu7UԱX0 7 @Z[5F{>{Ũ3✕ nYm{unbe׼Pq#ւuh6N7i]zc|?FYX {-,O\/! PhenTxLH,d^0ZcښV R_iead)d28-j{To#}E2qYI' fF ZHd(6RGx*X9i!BWQ!$.ɻ{O#||- jaH!AF gFܗ%8Z[;y0j/KQ*Ӯѽ rlAJ߰ И'Ӭzbh45ʚ q߶~-q ^Kj[Bi*L٬pw K~se d/A؁ fǁh+a]k)b&^IHj,Wæ٫^jK,mJ%f,vd,65Y}Po.>q j>.zˡayS(ϰqC(31N`.rSK$J' LB $9#D@il`眆s ,ℍa%r5דA'^*xk<P%1s5H* VF,VxmFw0)``DY!M #6aVb-+w۩)J-QЂJ0`" 8xy`R{D)J70|)G +M =Y. @5A{ W?vy#ͷ*4uXZ,SuKpLOij>cC8{86{QsaD]xF=(*dL/Vl_Қ :1ijs]!8kKFJwHӖ[ƹi4]fӌtr6;T&}NesT 'VIok8C*3/ ^8NAm^:BӴ9IGN .C=N} 1NG}z{]\.v[%2vptRʝ#^s;09;'tPt#Pd(>l@&B w ʫ*lTD} I,Ҿ3x y9a/.- !8kyƌ/sA6+le%Ȃb6jپo6p t_~HD͏Y2Y;cڥ{S5XpmuFHhV@F5`IP0Q=mcF4=E:e0=478սv( ̗Q1xD 9{:Xsb h`Qo:lrKȔHN^:z烆Y^xWJN(9InU(Z|zʰcl%&\Lm*/R?XI  xWn6_O@9!+mXa JUۈqLB "'٠wQLy0T0 VNզr(K+mȻ'b`a>>5G0$ 𵭸Fܗ% 8Z+ѝE0gr/KQ*N R=قVӉgӤPhj 5Yt-C}0݃5^<;6:ox:ߦ~?E3^Ⱦ;m]4;D[ Z7\IʙTX(^EIW!eꎕY(1fu }%f\d>v"Vpn MU߼~@?1N#x+(1aLTbiO` ׺5Lwnm?ӤDVZJR`{_2RSpPhLN9,jRjl9(?W hq}.*QBV!s埯z[Dʿ`s,| |'>^Z0ʹX1 AQB,H&?)v @o# |i&lʟ`-%=4`i{2[_߶6awqQ!ߧIM: crqU24%oq<~=fSCx=0r //`XjP"t~i6b]`>р>B5OJ-/5VI:m >@0$ 𵭹G<% 8ZНe˗0g OI*N2=قXq5{~OPybH^:Cy(F6dmwXw {aG8TEݑ>!,kH-(0i3q$I4ڸF Wtȕ?LB:H )T+V(~i@=+1!*<0]wK 6{3Z +)n 7Q84Oc%8)~Y à.scLI+sYKJ lkFJBߓ3t *@Tk`fc} VX@gؗ|-k[k@[|3u-#+? YN|H# ͵i1AQBvH6?((6q`- @" |4Yf,^`-?"q\K"uihҾq,[VR̙үKB.σZǧF{>\7Ǩ3e*c5-W O/,i݄u`44NMrYyG?q?7ZXX_(:[KrMM_Z0!rz eQ43eGn6tRz$28EvϹRľ~H9F`>Pv^NpTrBʣ C,I>&n<#K#Qѐ! 7l~PHjThBw˖/a2rz'OȭT=ѽ r=قԔgxDO³7e]Y+DCoh6ʆ )a.8߁5_vn kZ[@wU'-nKe\ɾ {cGc4AD; X?\I᫹X.ԁaL VR_B9%KJ&f_ #`d䳎S<ƹY9,#+So"ݐG}t`g2-bAxd쮲 O8<37V-ӨkKJt c3\ j\Zׯ{X*d$(O턽Ǯ&쌯'gq}h J/.LdnŰ{Czo[K[ƕ+x[:/N/8wi4~mʿ%lF  IxWn6_O@b9,- XZ.a Z`7U[Mxq@@avs/=LM mNӺ՞6W^bO5(0i3'HXWڸZ 4X!IEdT`4Rݰ@6%sL%dyh'HyY=v}`,Jk+ B]m7'>N&gPi+?'UC) Wg/SWn#9Ju-:N~H<)E񯍴r) )˥־` H9ũD9Ј [q55د @gZ*}07QKYXFmRdL0+0c/.#--h䘇w!Z,zIoQ :L̓m?ؖ{7 $F)-`-KrNfc[TG շE#H-mub&MOtsQ!g2٠ѼHeShFU⧓ل`$sػ("{Tq/!V#c%SbIc2L1je_]n#+@y%Vڴ&˵,Dg LtG2k|eW ƤYײCe0w(o#lS*aL/Γ}9ٍͱdGA_/Ewk`w8:L~ظ,|3T;"-n@Jc2t)=o xKON o{O҉A0a{ Vֱ%|[KUÆdYVtqEKMgE+?xe #|w)4xsAk\tm-~E |6X2͑ 0VyC .ժ\mr fKiKKMn&C?~1  <|qxW]nF~)6 $HٮۤDp PEA=JNҙ%%S$'S&řofח_߼` _,w$ =6[Wn. { PWn4.tЙ/o%,I%x$4ڃtUAi,_pOj_$ΫB:Vr]s0ML\ XIIz>MT++ 8wz߇'-,,\_C[JrMTxq-[9=(* "=7+k)H}$9y[Dep`߹RdbYH|DNQdC-2n?A? fNZZya%祱ݭ'gc >xA kR hְ=v~]Z"Q|{[l;Tm{d{قOdM('a+u-$r++wumzx|{@g[PװBօ6o0y]ݎm̸ڑ} ,h^6'/&$< p8,ī-,Xb2oR'1& C&Tdu÷/.wCuq \Fpn|υڨ_zrr5;>PJ]>Δ.H#W%ǹsxJNtr&[HM{H):oLCH@oN`#^*xk<P$T%c'/Bh9 /;[3D`n`?Eo!^,mh<3bf$M ٰ\q簄AN% P LCk{u͛ÆU]<簵Q_ YC -!~1P~id5@o|C쑞8jhlB%|og)1z̞gI+AnV]0G*#ls/h~+4Ҟ)_km6@brB(2g_9-i#,Dj&){UYƤjRR5݊GhMAo<%Wp?Ҟߋz6^y8|u@oX<…SjD':5鞛$,\)˴hs  =Njh1W/vM?jd~$0GCDF[t5ܧ+/{{ V z~Y gM 7r xWmo6_@f9.- XZla Z<\(R%)^_;J4`(xsL/^5[JѴs$ bܾgs$uirҾv,[R7̙үwKB.O>67F{>ojY=bTfŊ[~2y+XuûX6 % i7b-X'f*}Fэ7V.W7?~o*\ K-,O\A[IrMMZ0!rx e^3e4kkZ)H}$ˢ dwa0Q=W~"8X!K}d0$- >Ptm^pT0sBTQ!$kcݞXA G}\H ] 2~qHjThmtˆ/a4xu $iW^zhA=W&kCE>fXwFX+̠c5tXmy i@.JGDؘMwG`r_*H h;~iq$JXZ h:0SUL`,*B9%SJ$f,vdH,Uxrv{`,j'x BSԷh}/Q7Cmݾ87fx4#Mf*SO9F)PlM=9134b''?t'O{bs)B+BmGyjB. Wn/Z(ƅm t0Fa?#o _Wu Ն:i=G[ MisH [WgHeX׸|_htZJ?`EVE-ѵm4_n[ T T5n xWmo6_@d9.+ Xl·a Z<\(R%)^_;J$`(xsLf[ʣIY ܃`5{ԥaJڍlZ ݤ.2gJ2If,I?xvAd!fE4QgKniuܳ-c W Jcٌϕ,i܈`4W4nLr#^~Wm~haa~l%]B+ 54}ktyがιzQKp̔Ьi %HOH/+H;QDep`[\FE2qH2B`6I6Zj!}[K >`椅6ʣ C,IW1у@D-d4_=;>-Ԩ( _h@j/ Q(Ӯн r=тTybW rubQmLc&3Vojh8߃5]0$~1) ķPfՁ;`7v HD@ɕ~9bu$a$5a"*B9%sJ$f4vdH4Txۛrv}`,j+ BSo7h}Lc仐-+w  -QЂJaj`9ښ z Ox=@:w cf[(`gzk.T߈ POu>&To"Y&8]OF 䓖[sIw9N2٤kȡ2ec 9 L݋#So:C#vtCwgT.vQ9)"t6{.y(,lڀnYE/11.{}) cD v]?(^ApxqQҔ0uM:|U|v ~XܒY[׻=-mPǕ4WTAP]׆qLcNPaa obxWmo6_@9.- XZa Z/exk-,/\B}[IrMMZ0!rx e^3E4kkZ)H ieada0Q;WCLS>@D2z`{ZHd(CR/GC*9i!B(K畱XA G}\H ] 2~qHjThD:e×0sډrʴ+t/L`` n{zW Ey6wQb.&Knߔn-qu kpYa`*McsHn{ 7ķ!ߥTf՞;`7v H]E3cOɕ hF2UX`,*oYi%3 j; 2daMMV*`夅]mGX|^{O=K#AQ! 7lNq?/K$5*qV;e×0 KI*ӎ^zlAv5@ghi p54{,Ilo [H6z8_ 460E»#]#X*Hh;ޢq$JXZ _Ȕ$<2q8 ̯bJ.z* `pD~@9)M$> >ɅToR"06' T@pư!32Z"pW L }*1IWRh~uoka_97L(trEmf #6aJc-+w, -QЂJ0`jcYC6!IGo`fkÞG!-S>2;5Y C {`(͞; `O7;nLg[sTY8$.B*3bh"Wt2a'caa=>̞HV}=^,5#/M~+v(@]Erٹ-|2kڻ] #``.䳖[sYw92٬kԡ2ku(zll>=1XZ,ɡ7gtwK;C%J!BVm W RdDҨgM<4}7D}[,Q0\87h(|!aZljZ.u-}u6]  i\8kv,W5m0ľǯF ~E.wʬil@A^̬Gs#1{o8o,-lvEMewa2$^Mn}/?n6$L xWێ6}W0 4%om"prA}hbA#]TIJP-m ,dJ93s־TY4~% [[n7l. {(+77MujjL7зC$\O e3F{>Yl+YbTCb5E2Zc%5W OlJnNͮEEsSm\=/6zz߆w-,l\A[JrMTxq-[=%(* "=7+k)H} $9yUd28 jsTg#}E2qbi,$"'٨slbVՠA3'-Dj<0Ē;YAp:^2o_;}?.-ԨQ\jA=#6xKi[^zA U}P t:l14\neEzqߕqw qvu[^SjjCT.t"82KNd_˽=A.'MeIn뙀k% 71Q\%ÃٳUR߱bKL짔FK,Y<'ȐY0YWWn`N;K" PW{ ZWW#PqT? x~NМbhT݀ΝrSH{~iKߎZ l #D@nl1N8  ]A5I/+v%u Oz6{A5z (*&$/Bhœ|94Jt cvkZ}c}K#abDrŝJ94divyy`ʢ0fS`<p~lzsO<X4.BWNQvV@-Mu9V}h='z mq;O1зN+J,M;{(c )Uh2Ϯsv>v1~.Ǘٓ[>!5UP;BZGVPQ/.߉ P#Z^ xk+cgovYiٴvqfj,<Zږvܱ\ j÷ͭ :mC ˑhxĪ5y6es-/0:ZHʃʫ3÷&kip+Ug}O"='$m64N Y7hJ Q9<}hNǖ    $xWn6`UhKJlm[ -60 -,.\5ddGr ~w,z7ʣIk ܃`{ԥa/ӋJͳlݦݦn2gJ2Kf,I?5x26ڃj@̊nȋ+VT:֗ɫxjUIj[Jcي,i݌u`44MrSy? ߅e~?e︾(.@R Ƶ`B:o@Fh$8fȏl HdpH/+H7w&W&Ps#.ck#d) r2'[-j!}쎃I>`夅]mGX|{Ky"Fomgo`[?© O+R23PEfM*Iq|P_JJ^{ .3gΜg?~YvVѬ,I؍A垽g $ui؛t2Bk_ivtULwB[ˌ% !o e3o}W}3bq͊5e6X-ұ-5W Jcق/,݈5`4ӫME7[Z{?l2~o*\ ZXر@݁J0rMRx7LH\({,* 2=52ieb!d)B1=W>ABR!K;du$k-v >ؐRF|.X9i!BhK睱bD"y NRÔ@FMggܕ%8F[#+9[AIW T R49Y,k-n(4\aeEzp?Ѱ8@m` : ,m0EŻC+e\ؾ {c{4U3NL X߳Is HFRcJ6 _Ǥzy,RZ)1 CT_|뼋j}B]/x}'W#T=@u}+c`F81)*~ vepR*SS"06Lwka%rӵabO{ѫT@P%ꞔ|+m6Y`~Z%WN Sx% |qfK#a/cٰBq簅%AA% P &L@&! GG=e3dyQs8#vեojo*-}u1PG`/U#a;cUTNT.WgvN d6d̆wnd/*n5n#|+3x+5_*SlBЀ&M&Htr8EJ+c?_uxEh>k=87ex,#ډ;`y+W~F_і^u&@s OZ0u [9dRWg8gc-_QLU @U8pk@2 Eeo{4l4=|<| xWmo6_@dE@ 60 -l.\/%K dI{W]Ͼp3-[ReѴy$ b޽cs$uaثjҾrp^K].~- }+9dIByPKZ6h'M1ۧY~H,&,_qj_$|%+bxW|d.Ml^(1ʳfWox*\pš=D-RVk 7hׂ 鼕]p/K)"ߣYYHA+ 6^-V&ۣ6Rdbi,$w"lԑ1B C;z9}PI RGX8'v{&gɣ9uqA #5t)hn{N*t ̹s xJ"sB*7cwH)zpMÄ$+18f#(DH]W[= F/SEB>T(VmB4&,_wF.~BXDx~ˆM4.drŝr9(h@%05 L‘M^C*ޣM(:";gvi_=_%aywSz_;`z m`\@of[}:(uD,]fl(Suz^ҫKH:(ظs4vQq' Ү΄ڂ:jЌJ|L~oZB@}G,p~e#^s#~i-ƙ1xtH:W3Ұ=Cc|zNwSԛЀ|מ<}TΥ@x }85.ũŎ m ;lXR;+:9ra8م]8M~'#ΟPm-*AWU7GYVjC͂ۓc%⸦ Eis$E>a +C) -) o]ڤNjGh۵R;2 ab ? ?]> xWێF}+Xlivfgu(/eY ]@gt7ǖ?(/KU0i]uԕŽgo޽U`1܋"vm;,[/߲$UٓbҮ$YVqX2p+n qd¢ iq_Vn-,!*X\Ƃ[v#JZp] Y-s;;c=+bge$kݮ,+]4z?cVwn!^iPh4\Q(FӷLH:d4N6E+2]nB5+ Nnw&`y]6oP$-d!| fdyԹTlw^3' H0Ēy-1K=D` Z@K>@Zuᱭz<% 8ZNUfz7{C@B!3-+t4YK"䂱%YlndKv&3)Br{tua'8tiԝ!r)t5xw >dÝ6A(UHpR@T^G !ŵUe(1b'!3P/C8A,ݒՓ rqRvη%PamvQڭgg mn J^@8^cغ5:GE0q <9DGЗ^ZZUR`^1R\SpP h4_r546&ѪU R`7FF+9WLb|egcכo,2-~6,!B,XJ]FoQ =:L y E4xsx3 Og5:.ۢ I'1@mOtb{2^[;[;2ݨERR1ⴄ\LlE8KT">?E#^3O-7a6V%ՙ7h4+jq} Wg%tJmք/UZ`F5&O/zn66LEXG'͝'v8l1 2cpIsmD#S:s0h4TMbv*CQ0,<r^HK/o6ͦ!Ԇݮb,w6=I'P^N6ƫ=!!K W\rp4qajإ Z MҦ:q~~JهlI$0NPz:(;k .TBwf3-['z3hhv?ip̿Zp5n xWn6`UhKJl[@ -60 -,6\5dd[Y~wvWʣ(IحA冽~-ԥaӫ JMl^+ݦƮ2gJ2Kf,I<j nAdi fE4Qg +*nyE\`/fo(z.@R Ƶ`B:o@Fh$8fȏl HdpH/+H7{QDep`;\FdYJ<DNdC-2qpWq<(KkcȻ'bdc> >@0 )eF%*tGqj &#2K -4{oPօ|6zh FSX+lڈV:l4`nm`IMk H!M)w? a̒#נroHEHn#ɵ W0 Ui`~SvwPch5*1!*^\\tjqb;чڍptH(Do0$;؃ԁBm1Kiѩ$FQ/)BKءq,5ag02vCq3K-:no6Mgl>H'gcemS"({l$j`uZ\~-Nə2kgOۦٞ>" O5 pޱua˓ 5`-Cq =Z$hNJݴhe2ՆȄwXj@c% ߴ~(Bm3sA/[K{Sf6߽h,^ oA32^q'y4_k|C#J rxWmo6_@d9! Xl·a J"8vqe$~DNdC-2qpq<(Kkcɻ'bdc> >D0 S܏#IJz%LF9:rʴ'^A.g0[JdufY/ <J+6;JtK;H6{F8ͳ#,im ?lSavwGTHh;q$IX7Z _tȕ$dobh2:4vC'XZ#;Q:no6Mgl>H'gkԼqO^֋zN]9}yjj0Rܤp \g@ q=Hk5dg! 6ZQ%qၠ]|kqQf֭>Ds4*ÔEA &&}cM  9v xWmo6_@9.+ X[la Z<\(R%)^_;J4ȒxsvWlkGQ[ ܃` {=['KÞWfzN+ݦV3_s %3$\O >ǷF{>YlY?cTaŊ[~2y+XuûXK% iZ7aX'fu<[lV~׫gz߆wg ށ Ph\S(AwLH\{YLƚN R_ 豂t7ELTCm|ϕl_H&)FR "FV C-2ݱs fNZj<0Ēym3#K=Dh Z@K!@FuS܏=IJjy=h> 'LB+ F 7d]ȧhc p {L<<-< ;`Ѕ<@hZ[@SH|C2Kd_˽#A'GucI𫹀# 15\%1UI}Vy,1R&1 C 4d^~Fc TV;C]Gf=GT1yr_Cc+) |$7DžsxJNϝtr))[IM{H)P:oL CHV@o.`#{U*LN# j Bh+_FᕓV`Do/h4bf<M ٱBq簈%AA% :P :LC8pyzɣ7:e3`yQsވ1.f'旚>]5`qm䣢!7gNQ}0=Kܰ?vvq{aU!?gYCXar}6ggӔQ=/ҫ"|FIPe<>ƞ45FX_T]BmJiJIVjFT UbG! Xd*c7翀_H>unm2|Nf}g(tO ]`9174a''?'Obs)B+B-lFyjqoF.NrʹQi̓ A4>ΟTfRňg}q닽Mq5MQ }ٽPLXhi#8)K"`*I=`XPN{o-nGTa[~Kie-m;WPzuHa$(?Y[ʊ =xWn6`UhKrl[E Z0 %d.\5ddGvl~fO~\z]]|x<"4mٛl*4{OP5v$&.UkS&Vn $LX"pjn.r\6[bq57ܢuE*XҲW w6lųJRv:0VjŦE2nFkO~z_/_`?)a`~ L-B+B4ƕ`BZgd: wF/ "p#ѝ)dcyd`0Q,;FE2qLBχIo6HJ*!莝JUNpU0s@Tʡ C,I7;&bdɡ9 qA #5tH+n;<wcRGkkSqUɈA4x{BwU eM:YPtm&c*9i!B(K統wnD,y #!.hQ . mNq?xHK$5*qB:LF2 K 3-H+Ϟ+u"Ͳ^,:By,V6df 0:4`AnJGDؘmwG`rYru$4X R?Ѵ8$cHr-_tXIxH*qX&0)J;Pc05R0!g0ܠ]K ?6;=Z/.`UxCU}LJw t `ȅsxJY {٥F͸:?4g@O}p=KܰwvqbU!?fYChar}6kgQE/ӫ"|FIP<>ƞ4UFXaT_BmJi5KIVjFT ubI! UYd*c7?_H?unm2|Nf}g(tO 6^`Ꞟzgbs)B+B-lFyjqo VZ(ƅ tO*iaD3 ?(>^mGpXhW#8)1"`I1aתC)S%[7,-LŴsWmVAQ}9LNHY  ! NxWn6_O@d9!- Xl0xФFRrؓ펒mى 0dۏ׋_oޱگT͆gI®-p-[g+^fzNM]fT~-dX"p_+<%g+y|mŦ$_If+ B+_ pɿ`o`FaP/ OhV [bڅXs(T[5`4(u5¬4ylxYs82F~Ov? z3J~,y>Tpmqr<1օe uK{xm n)4^ga<hW!*Qu9p4#ʔwAI~kvh@WxLzvibBKc7?iY.ƹi,óglؙfN\eS4;@ d&jc"\x"R{V`A`Y~ (ɤQ/jÅWs{f w-.gB/<:`Α_C<~Zz;aO{1n-_nhQ md ɲi+oÿn=ʉX 4 xV6 O@.n0EZɕdYkFNI.  ?~$?Ҟ>kGY ܃`-}wIҰ}&YlҥnRc3p ,3$\<n |ld;o}23bq͊[~2ytluóX6 % i7b-X'f*}FэV.+]/p o;6'WEw`(\S)+`\ &V.t\cLښV rLzBxYtX~= lx+HH!)}d$- >Pum^p\sBTц!$cWDA G}]0H S 2o;0-1Ztˆ/a4+I)N^zjA,j}64댣~.4F\aeMq)P}y i@`n`CMc H S4k<;202 loA؁!m#V¦6,7Rj&E$b$5ġd`vSq+VY(gĶ~Jîs sSSGC\]/wXK Ph%ǡEyǧPK{AVSkp_OiQIN.~;a8׌a'4\3tZ6\O*Ş [2!%V=)Z*4[mX0J &8v K7 l{iEӅ۰f1h]Ȗ;jrKLI廡;мM0wQ;)(9q!`|4 zCu`GOqQ W_ggx3S\iVS?aphמhTdJߤ8`'+aDi=?^kb(+RP;RZGS!3;4 5MA/t-WF`W{2ݱ0a@>m87fx4#M:Ӝv: 4=B fx`k_\|ZNkXŠ0;V|襦xQ1P@H繥Q':|c=|]dH 4);,*ZPnv%1f xWmo6_@d9.+ X[la Z<\(R%)^_;J嗤`(xsvWlkGϣ$a{OR=O&(7ͲzVM2gJ2Kf,I?5xnAdi fE4Qg+nyEPtm&c*9i!B(K統wnD,y #!.hQ . mNq?xHK$5*qB:LF2 K 3-H#{Lօ|6zh6WXِQ+ok8? ]W(`Mk Hac S5}ȽRfՑk`7v$HDHn#ɵ~5au$a"5a2*B9%SJ$f^m;pXhS#8)%"`I1aӪC )S[7&,KekVmSAP}ˆLNGY  J#xXnF}Wl @ŹTΥ)@(w$nMK*Jo:d40%w xt)K]AFS܁`{-={vw<2fֵz@Ւ]E\jYjj@h( dI}7 QuɋXpMa8\d?*a`~ L.B+3i4}+I逌N9FQHLOr0S !Lj,/]\L&*S6>Y؈H&6]̵SMIo6h,xt^n!լӎ;IZfebIy9ywhYrwDM5 'H+a;ܶwZPɸ|{kuBRׅ`$g0[/E}APhi k5[YIo_'W5sX`m|c0H.M[oR2Ն*2=نsP`Ӧ%HEcC0/q-ɹ. R"ӑ iYdd`x/fRtJCL%dah'HO0났Tf\F;Y.0@%\[BYԗ{n*H F^dkᰩvղhhubm3tLDJZ9t>K>a H}iD)h#?ટjl3vد3@gU4E.)ebV![摕||Ww}XL_e`OabbIƭŲ*' eCa,8vdxa{Ib#HDF1Q!ת_kfXjohEKR[V{r=;ZnA,cbrE8mTq/w?f[oP*9l*',#B<2r*R[Nd:9bpuP>E1XV6 ymвT3FS\#=cՈ ]Aݸmev%(i#lX>BrmP/Kfл,O.\EH/m#Zݮ~4eHnPҥxw#DƝI "%*ȣ_մ#_Wz )Nr}a{cQ^)k-R:&m QƠƯk{݊͝{wi?ڋ[o53s_^Lo[)d,NvgõqB%ß]xQ.u&+7V24Ƥ'PK+ï8lmVRYų>n@g@}T",WxWmF_Q $`I>5/>[P.!ȅB+ڞ!?3+']R!Kڙgfy7W޾`[Vi0E25|I<4IVUPM"p+n qd¢ Y^-?+(]kY=CTv yq n޸"z^]Ҳ%W ڰkU2#ւR+6/'q\zmtd|lɹ^O`z(0\N`\ &uFf2q'E-2]nfmt+@"CJ;wX^5H&*Ӣ6UۈpL컸B{Io6l{t^j1ÝWITebIy ywXrwz^ mm0>-TZT\-=˗;l*Нt{قnZd/G Phh 5{v?o!X#p~į=LnLmQfw{[wXT:՞KP`f HEscOqɕ hN"0 īb,$n+nXi%2<<5Y=p݋v} @܅۲?pZ `Cu &;Q8#=4ɺ5Ge~ ^,!>_,b<E ٲb15ANEWa"8ƎdoB67JQf;vGa];1Kx:bo1'awKc] %=}}t֗d \~9Ӎ %59hO,¹2 MƓl?cc1w7c =)һRԈbTY_Kn#+@-E66'}([wB5+pޗk+w!lmK|Nf][ ڒN%s?9ԇ;{zsK8_f݇Bdžۛ0594h)~{MT ҄FS7Lg>t  _> &8 xWmo6_@zEv-0 -,./%+cw>J{ҋG]^5+\U(إ@Ֆy{ͮV\tҮ$l6Z56mu "B._{>5]Z9P.{Zbβ nٸ RVȗĤ4VBf\qyXW&Gx}VΆr T`>ȅwOh}^,*vZXisc؅lYVrkAFE%PF05 =P0tS[ԟ@m,kq ʸR 'Hx:a14X,#t5uGLl=g'/ TERS1 tq1\M,F8{Tx?;Cs>ǧ`Y XdJQ;\K}SkQJr;}j."g4dp߮z{ҭ0ѝfaHp"!-+Sv@%JJ'~=S x8ƼpfDP/''쬀?~;ʅ?hSt]# xWmo6_@fYEu 0 -,.4\/%۲>J{G?RѴ(IؕA~snԥa/ҋJڍlZ ݤ.2gJ2If,IK<%,2ڃͺ,FeVT:Ɨ˸ꦒ-nb+e7|d!MF#v%G - jaH ߆S#IJUz9cwQvW d Rڠ='kC]>fpFKX+ؠ!n1Jگ4` 7yc0Pߤw[#X(3@5h;ޢq JXJ _X)IxIi*qX20{J;VY(gĴ~Lîs 7&*<~}?\]l7%Pm\h ')DU,- KpLZE<}Ύ-ߣUrG$0;r`!^R ,uS%eu\.߈ PuAJ]1X녱kWF`J{W0F"n6MͦlPZ+[IzNWQn?9683,2qOjxV;@)YOJc]Kyvj>oi455*\Uo.x8A:Cc&noP, ]̻R1F,_ﮖtڐ؀e8.U xWnF}WLHr\Ie@I Fy"XqG.F3KJ.vS0h^f̎~x ,h$pmQx0[Ëax^ HWn4VtЙ_ CJ!IK"%V$6ڣt]a y4Iً+ aIɓjZ(KkQ͍*Wvh:e44MjQx/8?e?S--Wo0ޢ]* ͩL -A*筚Lx(*<=7+k%Y@ƫ d)d2: i{QġK#\.Ad0uNZR~]Y"II)^b{N,!ڄ2m/13-Lsv &0x؊G]gh5%ܪZ=`å}7 qukJt=tjjcU^݁61,J3 h7'@Q=ɕHl-Ix(Me68yszKo8ĊJ9r;/2bOMVO*c7\o7KdmPW[[>_)M#$^4*iN$90ݸΝs$RO$(fT~=BIj+`Dbnl;W@ qJQaNp_")xk"8O7uNHbJ[m2'[53^9G4 (0KT03#afLbT pHUs-)2UhMBc*^;H!@(}dGE6TqwX҃9}_>ƪw 3=sŸ+0_ 1V\e=o+/'kyg6ck$Hļ:=6]dJXq.%( \Yǝ5k>& }n6ؤOe0vH*mL{͍Ğƍtg!e0Y'qۻ}en ] 焺6IT&g&v8U924)ъFw}ځ0u"Jگ c=MKھIi+X)_od6t.SJP(L}z4mRYC^"/Bw :q" MM'Ӕ&~atߕ -jQִA+t,RJ49?V@,UEAY3(_WqA 4PsNq`.'s~&K 4m:)l <i[   B)xWێ6}W0 $%m6&M@>E&"UF3lRKI3gng>fK_<$ =6_7. >K]<=8VUMj"s+n!dƒ WA-N =h5Ĭ螦1*8gŒ[~2y^͖ұ+X6s% i7b-X'f'Y< S\,=ovzz#{+`+ZYX)ޠ+`\ &Vdtν0ZcښV R_ieazga2Q=W"8t2B "'٨wl0ԋ0 VNZFya%畱W11yA ZkRHa{ÈDRGkKtGqhF2W >릚1xV>djwFX+=. ^s?n0@ m1p7h}:99oqamXQFpHAp_cxD~|:)+? 澶ɹTүl)69#D]:uO9CH@rN a٭a5z ( ZbWRXeAm(ѿr q:oQ,ċmwE0C1ٲBqL͜-!wQ6L@:!ܘME<@!MC~L2,/ %{&4E̙˙w7pUQ@喽}I\]m'IljbmVչp$Ed jvεr\{e7ܬqy*ZҲ w6l̤n숵`Ԋes]o\?a ^;~~Tj Ap ֛BR4Bq%l;Yatѭ^)d=d*d2X0-j9/#~E8vB "'=l;(P ewVhw^+' jS:ahKmݽ'b0yAkOVvږ #HJ tjY^dw 9IeIWB*g0[F5{zOOzZ>&lзBY(fFք5;Hd2[yavů#+XNݘ "wآBgM#}Xz#ٷp@:Ƒh+aSk)\1"O"0 "a`<ܖRYa )2,I_Y5Ux˛~X^;? `.<4ޫ^_8_A_Z[y‰yb)>.ƂDv;F6Ԟ#$붘 "M?3ke+}nKYJB lFJ@ό C7  *焍ؚIa/j #bcWDJ+&3kKY7LpZ/Njm K-~BP-Jn-RYd[TB eSC;_#4x6e`-N 45d괦 OGi@ЃD CZ_S}W=w.`O7}مOw*diRBt1\- G8U|?/q1>Ǘ̲'57p CR4^J0!32kь;(j "p7k[)HRɼd*d2X0-js^Uĩk-d!} rқ z'%*!J Ϋ`夁]m*2 $fE<K#AA9!i7lm0,TZT\-=G]BRwDwU ĴQz\k+IYjtA B67&CtLy;BGP+bwN19D]Λ5N%8cYW'AN u͐V¦ $7Rr&ED0 ƫ"y`: WRXi |ӈ jZ Wc.tMV/*F8DŽNYg}%nb[BB֥l-F:4O[l\U GGz'.ذr kak(hYY oA0KVJ\^e0kֲ㕠- m,٫ is: I1ڔr)#@IեB]JCRҡ=܇#"Vya% BGR4yXI 4@jh0)df{vŝ[qC[8UW"s>`GBP@+1/3`KQxNAy>ǝIjfRʆ4 |߇aǯ "D=-x/@Qɀ+Mk ,Mָ;ھJWG{ -,6RVQ8ںb;7լkHR 2`1~`H¡9BFs0ݛ<ᷟ~*ם.vp)(v@h3Љ`od(ODϑ&MJn\WbS!觵tr! dļat(+̆욠fiqp@d7a9q ד{QpW5zbQ5[Z*l6Y@WXtFݒd] srsE`6~”ېd{)׬P9H?Qmk2L;ȩ#3.B7'lwyQҐ9=Nv:ĞG24:4؆^B󝖾LO[oWaX&  R&tn- ց:hm{')&tL S@85ED(iw᩹ Qȓ2D2gئP1'֨4m@M=:fEHH~y!c3tYG΃/ds)ZP|\OeHS.޸0yf {r[: R((vy’;>\~_noZX٧sΈTo,K(_!*;2㠄 ~C ÿ̊o{;!5u"R vEVb =®`"L!#NIHqazC|a-03Q7#|2|0/E$=Ho||W.r)}@_p#bLqI8_GxU2V5i1!6) ю{1/ixLP`P}jT,;hN3p0QT'[ZBvr"Rnz*J-8ڻ/.Za{'Z0C+7h M!MP,$3xWn6Sp*&%Y-Ⱥh50 @KGHJW{Cʲl'Y]F_οWYV2$a-7ͻn*5{M5v6RmM5tkn`% I^k{~oE/r\ri fyZ즄57ܢue"Q]²W- W6/ȅnu`Њ=Mi]fcDU;ן鳗|}~^ D^j W Q 0 VXH;B+2r#ѝ(")Ddyf2lELd Cnϥu@$WAҫz*U!!UMpY0r@P[鐆,Abɡ~A (5GhhwVovm%wcDB!Gm5‘\U-`2gj<8ȕiHt' >٥%|:Χ&AE\͍hHǨ>bԷ }xi퉺 z#99䐸,tޮpu@>yx%7p͈*i'`hFkQzQ@yP. g1T uj"۔H El'Z7NG^_7'sV(}q&dS%1!!'uŠmf#\_m3a .2@R5{ ϑm=(د% 3ZUieB>+!lF9׽Eˊ?`n*0#_So/& .͗>%ӧ]ZɰDB2Ak"KJG.A[BEg<kqlK7l®0T#AIjq c3roŽ͎󖄲ji ޺:,˶,$街i08?~XsʺEzd¸Gh7 €C0o)r+RTDbKnKO@zG%CFLJ i[2 \0:y6eͧb>%C& N11;9҈A5$i蟢s Rw*/ : kR4}ZZٓ.';´#o:{(R`%CUv[4'\I eGc[:b"NNN2a9N_A)͟O8ĪwX$jhv~Xeeýu#.0T)#>$ ]1Vp;KSčsi{V6ĩw=iF3.Ty@8%s 7v{[t|n ɛmG2)Rr3A-_EcurJ9ezv>qeS |nR\|Cn^"}>iZn%%U5ڐ%]I ]3 yv=˒VW#8|^|?/+r; UwCg h` yJwNrOZ h7Vj;ضƭ[iGR隟ij< 2 | gZ|vKlh600ns#*<:rmgopg ӵyS.ۀ3kWTh_q u1N H*m\r'B\L(p l /Na|bEHod+<$ç߽-Nλ=ؒc@up7o_71,0u!9& 1>qEB@ v<{䳮5mͭm mB34g +VB \`Rsm|]ARO79OhH .908:cH1.ȏȝJ4@p_ߵgd?+kg _C[Jf+ W;[Kj-MbJ;{sh4=ٵس ?f })3H0ϳ9o-QMZ?'5A0Kt܃X UCt%u~#I ALo;Y+l'liVӧE `#c E96sggp?BZj=[+ T bdIcX¾oY gkB4'T]b@`N8HD++opZo]SCr oT.s 4&;MBA (g ܐY?ؕih |;TA3nC8\ .Jr^:62'NTZ zma$KT_?ڔ0:~G goKJ687!d+Dp)h5ZeY|BZXQ'Ƃm2%^}"V° \W2Fd_%FDiOe)t|KŖd6=y6Ezh$k F_q KESOeWefǪ͠Z #;GW(|W#+B[+Qͤ. 8&L&pMZGpZW=A\GBʃ>ئ7w\LB 7ӃyO^UCYPEN՘IRAG&)cұ3LXMtZb6@$U+[W₳.dJ y/zwÀLRA̓A,{z>CGxbNk[|KJ[az9F ec/@ƀ5 #gcLEl#q[Q(c8^[1[!:~okFE¦iSFYHw;ՐۈCoznġ~#n90 sݮGaSmDQC#Gcb8HݸΤt`6Q5y_+96 Eb`5:ڌF;IF?f~#fmĠ@Z oS!+,Er(a? 1?_~ 5+ ?VS  j].>xX]6~)X`ɉmR- &A,M( J[RJRA=@ѣ$dw7-җEC>XjE$agkvWB-4{NFH;WUTmrl­),I#jp<>ʁrźjy_* ط\]BPpEpE_dΈu@BsDV4,Ӌj6Fw$xD2(ES7;``:D>rޢ"8T֥X>8bAV` U)!ƭZB{0tHÐ W\v;M@C "<0>kIAZ?5g+ - *TGrlFz{C\ aFKL|0TP ElaDCRJxqߤ~Wq|n!ԭ) qeYꢭqu@uKs.h_Ý6!UN+Qj^BP.IG1yU u*y,0W):N,}nH굀;<4(;놁w)&Ֆpox>:Tmp*X*dQnYl)Maw4nfQf\X;4߈} y +r![OY%J,SFB_wSf N Zߔ=]d2b2k pFeZ"f/x>vᆟ&Ib/7lXB1\ҧېP:{w%abyJ1\8{ު6%:n63ݺWƄجL zOс$>}޸.޵W޷E]&1PUc 1w1n _$ΙgF}s&I)Tq yy|gmsyu-8rȢ7G0eqE.Cg *{Mlp`j 8 ;0;UU^>MCW}x{/" 7; ]3+H3ҵ^Lzʈ|.)G%v`ϣmgN_ $o '$"d9K%]+s7_긏-( xxWێ6}W0 $%%mzmmɢ<EQPH"&U A~Yg(ٖ-"2s̕Փ>^z5~h5|b7p'uelҾu,ni:s[n!dƒσZv_WF{>ٵ31BL)nL)+`6Iv;2ԥA;un'u}PI RGX8o%vG&ĒG>q>U 5t)hn{SǴDRGk Q\a1$|ȽPC{¨DiXb B-%#FiWiǏ8?tG 1ڔf@2)ɾ {c'K4)fmkHneu =VFRcZJ_T%-k,TXbR$1ֱ CiWq'Hb B oG[Qɿ`]nk_ЯYoC*Z܅YAP9,p ȱDA*Ao'pRMlyڡͣd+r!9lbTf:˭2/5携x 4O>?J` ̃U;5/^et wx ZJ ƙ Kie&ߤgv,GݓRGOOس[~A4 眒(V4-6^Td bL *>Pĝ6vGqcj{2U&vyzno6MWlH'gզq`!{,,VB޷ˋ^S|mpC`aiPFQ.hrLe-ߥPbtԸ2pќ:Dƒ/hᖞKڤ$]$6Rbe>:aR B ͱgJmxL40v:_I/ "`s#6;? ={Xc|LnMoS݁6.xu  Rw8$mHr%[.tX+HUdCX\J{4P,Bh jZ gbꆬUxv}`,l+7ElFu?_b571y )d ڎQqtQwl"Fxn0̢DNZJ-F1Rn T0ch`N9_p5]jl>(W hU})0?QkYXFmV+13LqBzmL#.d[f9UA@8d]΃/& !”ws+&=R*vE32ӌK(=Q;渑kƐTfst;6?F' 3BC?Ҝj8}_/`Fܽfg 7|F|H 64zv-*zs}j/hSޗ-۞ךWpK-0~͵`I7 Sݺy- lwX:L%wIe:K /g6ƒ뚆ہ=e(3Yex4uF[X+lܬ%"v\:{}]zCP70`|kG@XTب”]WGưQHh;q$KضV _Ȗ$,Rq8 ֏bJu,S.1ֱ C)iI?=z7,7if{Cyf^ta&ywgg@41G8`wXˇ \uT 0bdRȬ#\ .rmq5G9[I\> FwMC8/ %۲׻I>Xhu9s=}UVY=Hve{la/~Ǯԅaҋ JͦzM-~-L}/9eIBO7 ,1*)y1gyŭl}<+XuûXvWJҴn:NYEWXYV'8߄e~OZXX(z.@rMMZ0!rz +eQ43EGn6tRz$28ySDep`;\FzdYH>$ fV ZHd(6Rq<(KkcoȻ'bdc> >5G0 ំS܏#IJUly {}Bn2K ˑ3xJP(hߣ x1-c.!#RvaLJ׹qvuLp#v kZC*Lxw$+a2+d_˽#AM#Nº1֏$Rj)ÎIDj,W a$+oXeXҀMCVO*<|0ܠKV K0mv#uߟ_ Ew )d Hm0^#|`S'\I%f*)sFJ+ s T@mΡYe(^p5L39T`RXmAm(1r#̐Ͷ9 x ?ʈM2M ٱ\q!AN% :P LmCvvD:ѼK0~Ul 86c Uy!f'꺘l5o ;+o;;)pȶ*bPY0UX\L b"}^}HMsl 6£ǃ/I9UO'Cx^_`j*QH_ &_CW-ƭcKm?*r8\9`-ɴ)?~GkqH5naS_a0Bd!e fji] o&GqF{{co>^-&VkumD*5 G]7%  G4xWk6S0 $%m$m@("đ.M$%5z^GI:C^ A17OR߼KVʣ I؅Ab^~.Zʰ}YZ҅nSc3_q %3$\<j n_Ar@nψ9+knyEr>DjRn{|cDRGk5Q\/ZɈ˝h> LB+K왅D<`,#T)Bu>eJ4tF{X+l-ali8߁5&@g֖݆lx'M® e d_˽#A3"{UcI\@UԘ2niL!VR_B5%:!3 j; 2c_Uxˋrv`,m+ 7NˆElF?99)c#R:ރhBs; z#Nίu*a ;).M褓TүR"46tgs @sN`1r `;õTE*J1Pav/B!K[Qbx0Ia`?F/^]4+Xy2ABvT9,[>8bۢ{Hw FB}4yal?LxYs8g\4je<~w8f\E k8lofH0.\s~"-[Fe eA'Kߛӌj9ҧ-3},T{)" zmcw?:oԇrtFA)u,_γ?/,qN?t ?M|ʾ=y@̵MtvWF{>޴z bq%M"Y]/c+;5Ʋk^)YKӹ :i4;g?kaa~-ؕt ,,T o0 0y++̢il %HH/+X!G s)!ŕ|, adؑnF$·)6 $q^{Cn( %uZ#5L)hi{|qc[щc%Q\/:ID^5P;{5X"xұ e}PY1'dh5OʖE#Ҿ܃ _;aSMgk Sw+<;0?2W@Ȑ拶ǁi/a#˵~9УZp1[U0ET^% [Zh~îs צG{ya\Ynw[%vpq"]C,prrc1y -쿁luQ9'd7X˸kU) J*7SGS&66K-V甝kZKc [&#U/ )kJ*4[mXzU%[N~) 5 S_|Qhx:Ye&ly rgΡ亊2= A•wàhg=e!lƿ[,9\KG35@Pwjc-h=.hw;F1$'r%stDp}Ϭ[kV }X:pSH,^#s=~=iDKP$U殡m4)ol߀rH-6۩5;0zZ~ivwd2k# 1mY.gl6uLӝۺZ 9Ȑӻ񪿇xv癆Oϟtե:Tq&`xG}fZɓA p.9g_+LoXYW(GƚUz:?$"WEL\ JIlS)0}<(0]ab)>9n2 ]xWmnFSl H]7qe@ 41ZGQ;^2K*Jz'̒)Y@1|ҳ'?5|h6y$ b޼fWQҰW}YZҥnSc3_q -3$\<n |he7/}rn fE5g9+*ny,c5-W Jc_(YHӺ :i4;JOWi]fm쟿w<|m8dkaa~l-]BJ RZ0!rz , 20k:)Ƚ2ˢ -e(b38z}>"QX!KχQ6l;D;Nn-r2·" UmbIye Ew1y GGC]Q S 26m~ЖHjtVa8e˗0xS N)^^zy34O݇-ǞߪuA/fY ӡo p QEӮ8߁56@W5- +LxgmnKe\پ {cG4gEL; X?\I᫹U2i8+oXe[1%3 j; 2c_X:nJTsC*XMfo5Wk MMobcaxP$~**HO"NM  j6XQxWێ6}W0 $%nI @&Ay("ő.M*$% A~Yg(ٖo 0dJ9s;3&~zs} GAk ܃`{R=K/F(k7βru;Ϝ)[|'$!DyPKC#i|m퓛U 1+i>#/XQqO_&ޫJ:4𙒅4F2}FѵWV+]0wz߇S׷Eo. PhenTxoq-[9k<rQ3enִRz$;EUDep`[\FzdbŅO9F`{>PvpTrB6ʣ C,I>/%ﶞ%G Z@]ÐBo kFܗ%8Zs s| % iGt/K|-IYduQMc&xXiMy i@ /Қvhߔ`723d_˽A2!{emH.T@IHj,W(azSԷPNc҈51oLMV*<~p^ܮ0@d k07Ӻ.%j88C[{pCQ{%DW:QsxJrß[L*WcVI~H)PzvPCH*9fgqNV  H@P|!-6Y|ۚ%GN~1 ;% x^춹h23b4M ٲBqh͌~PPlTS;Vui&5ل-KxQs8jș8Y&G-&vi3RIaOg]}v`#=s}t;8Zd5AKˣ% Φ 19^Os9:1qûMG5|Gʒ9%U5n)+yKͨOfy~-+@m2 x"q3tLw-n'-맸sIM'lPf ۡ:lcC?;Oz0J -YnݡhcvBu2o+O)!$#R7$:ɇ4:`<0n-_ %^8Pt'o !)4?OE8RA(swl"}X!}%Il>a1Šqӓ,(Bf9⑮içݗ?`_PO 5xWێ6}W0 $%mKb($h7EQ8٥HA>/ %۴׻IR`e朹ɳ߿+*A+ ܃` {=R׆'h[7-z/u,[(`Y,#D5ypNhgכRV W}AQ\jŭ?|LǨWұ+g/܄`4giaa~F,K5Ƶ`B:o@ eY3u0[kz)}d2Հ=(b38=z}ȑ"Q!kQ6;F'z9>`礅CGXb^{C# B  ZahR(o)Ƕ$RG^v| (<Ǜj JB+(+xnA#q^|2+d\eeKTG lt(p<-n`.莰dp\ώw-8Lĉ#נroldHSF;ȴnZ Q3YH *s%̟Ta% [YiŤ̂s ݘצ%֓~ua\\nv[%vpq(vY,`Rc,KZ1=6ޚ,Ie\sOxNjOtr!)[Ic)PfwQ%CV@sΠ -8+@o^4>إThmBp=r--') 9 _|Qfx:ˆM*4.d*ŝCu r2Lީ^l'H>@I[&oef« EXv;D3+x9aP+:Ob*Oh zߞ(F$H/\{~!9\1օ-B;'[ffe~?ϟ>c6f2H>{x?{r/)v.ѡl/HBmqkiM`MC\kFP [C!P,mk߆G+#c0ñ2"Sznw4-Mgl>+ȧdacg#- u^k۔ LzOƈԮ:"Oc}ՈkuP a7wL_>r49ߪ9DvyѤ p!w=Wݞh^\¢/_  r8hxWn6S*P%%Yv-`Ȋb̽#Dj$% @{=Ρd[v.$=●oUe'QĮ pe'[ ^v&zY&Vn $LX"p8"<ʁrbSCiKWXpgXI*^2+a 2ւR+v_Ư ʱbgMz^}5`*i=ZY(N`\ &uFf2q'+`.7YJA+ N&`yY61J YH\D$٠'(gt^;tn#r2;ڔebI홈%x"||- j% ߺpٖ =HJNղK Y^Dwʸ+t'] i=Ԇ% ˞k6_̒N!{Cy(FdptXCx q@/Aabucra 7pŲ/d߂Ý6A1 GuHp+&0],: \JuVy(11 (u }2BduTo?cq *!0MCH<|GC{G/1D!Ԏ ٺ :OE~pbm f?M!(]Ȗ%K9B@8Fm#_uG)*`-M:R-Oᄉu30S(}|:Sq#A} ! =Sد;{i;ݪocFhcr9GtQ%e|~F'4ѣTz{_q,X2zI*-l!+u ŨKR7VPsЇ7Twjǹc!0}nf]s-``Τ[ SݸYw)I٬k2wt"({l#hC[~,NRt'Xj,?>DU+# ָrP7u~#aV6ƑLڰwSV{C۬2{M~,N~֐۱\f^@㕛鴡GCHJѱetaxRF n$S7B*h? R3P3ya>wa;җۖTfp;9jwgt7lGxWnF}Wlr7Ie@A 4 (` v%e%7eYRNZ䩀@2svf8?oo^үUͻI®,p-wn. {OPWn6n6tԙoo%,I5x"2ڃ"Fe?%/.Y^r/j_$ΫR:Ya,K%sij7a X'fgE,+Sm\;?{O" ǧ-,l\@.@R Ƶ`B:o@F5FQIpYYHA%H6^-V&G&mPs:=.cFB.Ad0uNZXkPlmAm(rpJ`S}EiK#a,b wV/9Ŗ(h@%0J-zy`Qe+9Z<p: Ԑ48[SM?{ f`(Ok]5nsz:C@a'zK{tgm~Gg;c>Xn,.Fk|oYNsq<=O1t,N*n%T%CH "P;BZGWPQ,oNPڱ -$6!VjK/K#蝃17O6o83O,ct26o|LI uoXG/ +㩾 "OȿM*pW[5a_=2n-Xw%Z ̿8*H)8|mJpSVb:߃(8Y=nM_Jv+>+ ݃&v;ö >d$=[ѮFjf`r(?K̇͡mÞ腫{{;e{z;ߩcEht\EMp2M2}fgF3Q<{6{Rs˯c)A^Cځ:j:ԌcL ;c.dOγ-+#'Y%eO2tN&]7|@S#t`]{?;{zs_Ie^xʨ ;٦9pmRxlK"5:qdk0KD9ک r t/™YK+4Y18$lhd\eeKPC lմxUyC;P7 |up{PX 2;T oRW{AȐf6Ȟi/a#˵ Q1YxH*s$OS*5y*sZ0) C3i__]ז-Hjpq (!xHGbci\ȚkQq[Bt~ɓHE^97.紹:Y K'RIF  FN0S܄.:@);ĵ\O# [9ا|%6Y!WxF]/B(0~ˆM&4.d*ŝCu r2Lݡ.#ya޷eAlƿZ&9\|@-@KQX7M< ]{>`w781gz -҃3?]n]YR#tt9?/54#%/y~znhcDQz:fQ_P(X"CT:F֌dLuf4CY֐mCtO˟7F`XkeD,L9ݾ۴4xW ͆iz`4D1}_H^ܫš Ouazk @s'CsgGx@.k:K}Z讶ꌇ><$jN Eq^ki)ҷR׊:9x ?xWn6`U hKJ[E, 60 -$4\5dd[vd~/z7޲-eLϢr6_wl*4{_Pv$*.UkS&Vn $LX"-qFF+Eu !˺4De,঍+7aoլ-jd+a3>"#ւB+v_ů ڈr#\/_+ \- ,PR(N#W9˅uFD:N,ыZeV^)DayzGٽ 0 LKsďH&.u. 6lTPyйPhw^3' hj#0dJY$09}\Q34 ] mnq@(TV9%Y܋ qWN8 i=SjCX! U)k}u$JwBi͌rXzگy9B{P Xcr;01Dnas5KoG)wp@ȁh+`Uk+jCUH(LE7azRP V(@?4dBf@NC8AtLÙ|Gq*>0 +z08`JvpÊO u#Ծ}8ڣ[iBnS<izQt"OV̅n=fȱ)E9d4TpP ht9,j\ilC(K@g*c})0?QBR+r竞ke?o SL:_2 AhY&Xj͜ #" -‘w,&=@R0^-ŒلBY@a٤GethD.b^Qr\c jB1ꖹ—ۈ Psvn G{U]Y&0\svoMf:OI'-7 SݸIM' lҵP:=L1L:!>$s?h9u/{ʧ2r$Dz;n;yֱUb1.[8誯No*v'γjÄb}j<(pfkkZ.`,؋(fqk?~.-$4GEO1o.k Ԙԥ;rczwNaـ% \$5G~h { {~> xWmo6_@fY9!+ XZla J<\hR#)^_;vdN; Pr<^5[*YM+ ܃`Ն~nԍa/ JMb^ . g ?H,+Ptm^LpT0sBvʣ C,I6%,#&C$FХ S܏=iIF%lK4Gq&#_E|(t/ƞYKt@Y W[ۨ#c_myyZAc/,;֐6Vxw e*d߀˽#A.ukI˹k% 1Q\e=󔢫eK <؏9YPyN!ƴzTѯ>āv{p )Npn]CIpvv71y ,. 1*N(V0ߠT$qőfE' ԟzd%)[J~H)Pu3P%CȖ@s`9q-ӥc{ы\@Q5O 'kJ*[mF~*D|0 a`?'׋/\2؄92OABV9,?ɷLA*CpC Pm\#”kp'B+<^*OѴ*@=1Ǻr%}t;>V-3Bk? Ҍj|/\F"^}ѭG[~Ib UP[FZGP6QcTԷVl_pp+5hpegmO˟/FCkm(snmZ +|VNfC#2!=gؾ¬>OW9=l_J~]x eӖO^n-Lh^+maPeCUGPy;N;@) %ǝ"ck;dD4 jLKqgp؋4ݧ5& @`{Q'X$,kCN.nϘ (GJk6ƸP 蓰 \G} FScDki*w) ;Y Ea[C #Wq#ւuhv^(1Eٿˋ?z]^5{J, 5^Z0!rx 9rY3eaִR{dE=e*b38-z\#} D8qe,% DAڨl0ԋ0 vNZ0Fya%)浱Kn0y G}]Q S 2o_;0-đp׋/`4A5xWRн gfa,J?mHYbuQ?馱WXY`*P[9J><~,q n؃AMCX C$+V~USBjBv&yKp_OikQ]@NΥ~3f8׌a^Ǹ5\3tZcvWǏ=K$LHGKIJ VF,+|F+'15 Ӟ|QZxEI1h]Ȗ;"k(hA%0sNm :> ʘM7*8z e|n9̀ (?UNGpW>k2D#L]}~!;ǓZ3օd55{AK} 8^^Dz}zOf`jn5j%6TT-n)+inKhD :5;4R NR iF^q3ltLw-MOZnmO2tO&Xi|PAczNpïv)ώrN!qEc:-׹ Oag<[W(R׍Cg_n:ø|FVBFޣRX(\.)pbK|t俀o,2}tU:V=1êE1 .w^t9o<b nxWn6_O@fY9! Xl0xФFRrؓ펒mqdIݙ=ⷛ7+GIk ܃`ņ}wQʰ}Y^ӥnSc3_s -3$\ <n n_Adi fe4g+kny2Zұ-W *cقJҴn:NҋuEצX=v~ ^Ͽ ׋p6\_ﵰf?q}Qtv%]BJ RZ0!h=i\aLQ5^ iecfOa1=WjH (C\!+ m4jvP UwFd;'-Dj<0Ē;n1y GGC]QK S 2ovqC["щ#[(-_d㫃j JB+Kx*]|QmeC4̆Fy,V6D8[VMK;H6X~F8_6ִ0e»#]X*Spud4XҌ92$cr-:TL&RcJ& 1XI}j <ޏ)-YPyNxab=7rZImgx7n(!,pvvifq}BJ/"o@qun Nxܰ#ޢ$S',~3e8Wab5\1tZSvϑk= F/SUBZb*NRTh2 d\z*+')n 9 |Q^xEˆM%4.dJŝCAI% :P </=ѼK0hLٌHxYsg,Vf'OQ#ՌXn1Ќ =Ӆk;x`&;ߺc?lcrq_hjiF:/UzN.gLc?y<$Q|_QܨVB^NV:ҌFP [C>P~VC 6ELTEm|ϕmH&]\!+l;hP ewFhA+'-Dj<0Ē%yD ,y 8G}^d4װ=~va}Y"Q7|{IeK(gƒvx')k9_Y͡$J+k8[NK[Hj ̿po Kk[BUYH|W0̸: {ce4CD[ X?\K-r& #`\%˘2^jK,FL,I<'PI<55Y=wWzr\m'x7! $tvv%(h^1jO'tOivQvV:9J͘-d( ];Yᒡ$ 9fg`^*xk<P%&$_Ib+ Bh+_fF'BH0v]ό؄y2ASBT9Z3?()DA *p_ pG@ &B"(co /Kp YSKbn42q83F'g$;Si#wA}G0왞C g5+BWK"?VSN\.ަ;=1qӇ-g5\GΒ5U-n%֫{+ͨQfʔ@=;B N a>l@\~aw[K#``;kvqag+$H`yCe=/0Y'v9':q7J #/.Yց7J^ǽWtlu]e,[BRMX IYzJ[++awaa}~†ZVkJ7hׂ 鼕Eが5FQKpTY[JA+ !m,; ]Mv"L&*ۢ6J6\$.}`6l{A;n+r2"tQebIyc-yD,y 8GG}^d4߰=~vq}Y"Q^6| {IeK /gƒi J+ٞ |>: WZYQK .=<~(=o![b|kG@XTب”wGưTH-h;q$JF h-IxH*q"_Ĕ^%-[Y~Jîs SՓ }sY.wf;CqF^4a$qdzs<טi78;OAW0g8@ ԞD݋[ Hҹ~hGaX|Úz̡4y:C7iw1}ی =х/;{;e{z;TYVS"t\EMp2͈<}"ь!?͞KyJvPJZGVQVQsʔq~;^" yMv$ <z ~e[K#`d;\Yqn?p,#ͺn+SS#eJ8[XgwvV<ʼQɄcˇJFv+&m7bm$ K4!Ug+5]i0-W ?qqҤ[QQwѡ_ O;apQԮxJ_Mth ?4 xWn6}W0 $Jr\ҽ( @&A<EpőĚK$67ekN \J9s*z>f_<?]Y[n؛w5|4Ez1Ai߸imjl9S5^2cIB_O7 Ĭ1*XXQs/Z_&/u-[qrpWˮRBMXIyzH4+ڳaOzCX/,OZXX\@}.@rMMZ0!rz K h$8fȏh6tRz $2ˢ ͭ(`28j{`#"82Bχ`6HZj!}莝H]MpT0sBT[Q!$kco-1у@D-d4_=;!-ԨZtU+9ڋrʴ/t/%)icoKu4̳^>ZCE,V6doŴ_}yiA/{ aZMk H~ S+¿D̒7roH:ǁh'aGk)|a$a"5&ġxS|7P.bxrMCVO*<էahA=n0@܇g`Ģmv#u?_0-h^x(N]w0#Ҵ$N:J͔R`)% cCNqi1TSvkێ  P[T@P /%f%)J*[m@[z4J 8lk< bYE0A1h]Ȏ;. -QЁJajq':]C(&!Ɣ/ pŒ+%?.y iypbYhƥ41`{#c8agz}tggqG#[c5r]d,-'{.Csez>OSj;\{x:;k3"J:/6ڢ:jzԌbLqJo {Bh#v{v2?d0FfI>ݾm3l1H'gq ^KzN÷ 3޷RqS +BþBY7>[_ZM|OWxQ3P@n)^/p !?P>)?+Pg=HNXU #?~Z$ϑE:RBG7AST}iKSNQi  aCF xVn6`UhKJY@-00 -d.4\5ddGvl Z~b_?eKREOZ[lػwl {^MP7ne:u[gT~-dX"p+<%g+Y|knψ +:Wx`5_JV\\1|esPuցuhv^(5z?&^}~֗'!>]IJmPxq-[h=r^43UG4k:)H} $2˲ ̓(`28j{`#=CLR\!+Cd0 $[- >Ptm'c*9i!B(K統YA GGC\H ] 2~HjThmtuk9ڋ(i_^zE=SKS.n{P "zh fWZِQKalkiCyi\A/aRMkKH~ S+|:߇ZW@ؑ MNº1֏$RL@ՒDjLWCavSxliS93 j; 2bMCV*Wt,3SE7BjdtAxH3ME]o[KLK龪kp;kUK F,u2.eC!a`4 -At?)ŒWB2xXێ6}W0 `gsmA,CQ-,viR!)9no:CIz,0d]fΌ(NxsvKEN3 ܃`5{-Rg=KC;VUebbLWג#DŽ\<j1/e5Ab]t~D^4ց>.rؒ+gϕL)ݐU`4%ɳ$Lr{?l|!Ǐ8SVW/!. PheaTx/q-[9/=9rQ3Y;nTRz$8iQDep`+\FrE2I|$ fR ZHd(R/x*X9i!BWKQ!$W^w[ODǒ#|- jaH!AF×Sw#nIJzQ ;9e ʤ&^,ŞYK's`RVv>j. x$h||z^A2.aaqMiS}aI%oЏc̜WrolGȎh%aU;+)|>P!kp1KU04>Pԗ,MK!!3`t<'Pdu^kFke F-BNj t$}wt4GBJloB(j/h#Kί1tH3Sf&?VɹTүOX.6)#X@jlN*@ vO+> 6!;F/YL\b3NT(4 dUcknhn97र / O]4d:M YTqh~Rl TS :HW1fbF6KNf7ِ#hD0MJel}joWmtsW?6Hvn˦U!?'Xӄ<{ɘ]31@&7` n)y%{cP-p&˨3ͨUʤ{ PgQ=ʆ6~Od!;Lqccjto٤ⶽ5ٌM'#ҙI]eB(kcBÚ?xߔ=KH:v?.,ƕ'([yKJ-M2LHPշ-ㆢq!ĤW|5Bӥ??:Ca_<<f@wԭ/_{9(%a_o=5k$n[o_'?zέlq\W,Qkn-_̚e,Y tTq򤸚| )8uu>n-ۙL-4KJU.|t&,_$%cf)={Ȥ'RyWIZtp$'8~C+AfZpM!;nHro"BiыCM& A"\v–c&Wvg+ BbW!1ۈVH؋NxTIw\nJ%؜jaͱukz#m&ذ)Byw_{pVD E xVn6S*P%Yv- Hbh4a#Mj$%+@{=Ρd[r~MI|;ϗ׿\}`_Ptm^pT0sBT[Q!$co݁YA GGC\H ] 2?;!-ԨZt׫`6z ^(Ӿн r$[P j2 ,c!> hZsyiOnan#mLim 0eݑ>S+e d?˽#A$GMcInR@uԘuL1UR߲B%&.13 j; 2_>ˇ߇rX^p wqSrjXmdfl*xT ^Kd$sO[aƺ8R Ao-J0K&_;d!9v=g( =7Iᜡ$5؛X\6BIW JT Z!kP ]0Y~3*+'9]͂X:폩hQ `&߅XsXDm$Yuh#ͻ}&>Μ-e a'8Ht|Ʈ0iG`8^iF =r~ Ѕkٯ{G{츩G/ߩobai9ir ]zaqМb<0>g/n9q ",3ʺځT:ꃊZҌP wbSjmTr(xO/-.NqGzݽm/2lH'gpd! =B vX8.{zskH<{)"kKW ;@ n߷| +xjN$,T4rК<\=ǙAg1<]zG2c'ۅ` ;Z}.=\QE/4Ṇ(mD^xYn8zb Xrͦ$6EhE$ek Eɔ,'(69ppD|w.ɝfԲ,w=˕")H\f6Y*Qz=3jeT%g$ R/'wJZ&m|+ل &iNav^Uf⽺Ϲ!>&t)xUedôJ"yDѝ*wsK/9?{?{䞗VfmɯT>(t+kM%*0ɸ/+Z^*J QnZmx9CT5.& 0mBx#.ü:FJfL{eƭ膋q֩q"pd`qyz$ ,YXs|\,HIv-LAmb-DZ*]iE'A([)Zi{fc˛Y-`c>ɘI5/L `uy~H-ݰd@==3.`USnbf* o}-Ԓ/L2Mҁ V膳m $<ᰕ%XL&D31Km|rJ:?}%x@,Ҫ~|ߊ2K,v3U R&ĹEs!ZbETTPfP, ޗ_z#`A /vwErA^T3* jdX3,|W"SRy+H"(,(X:*F+z V(2[n|m-ῳ+tf[T!^VB0K re$Ԟq`|ϳf+ oH*1jiX0CP0uuұ&&07^.vEn14e@ƃjH^fFSS>"*C,S@wVɾ8d9rikh.=Fs3+q !؍h|\nPNn7yrI)wx;C!/J5:LBD`nhpV\L- |)Ta$RTNs;Ć ?]^f\zM“ O|Сg9ӆjKtD敋[rg}qhQ\ ޏ_6TT7nM['Y2pkB,r5,.uZ UlW f 8γm\Cҕt \. #9t``TB뵪 0QЂfL_:kQ͵K vTYH o~ MCBkҪ K34 ]P^y?5"5P#Wv&կمŗJkLR'wX' LѨɈk1LzJ8L]mrGJE6{q*"f 璓m;‹^c6!BklZ]y-ܲ2_X)V@pgJl0k׋L*i!8f?dl"?2|3H[xC tC:9dXL&=RZDWBc;#5񝄮7MU4A\եGirx(O{H ->0M+]aA%XM,Nh8zYiW{2mXж3']}j.Ȁ. czܧ%8-  s| r<^Aܾim1tXOou8M͡n p  k`[N%?Vw5l0 pݺ,LimoWav] X(3@h@kR 9$c@r-_NtX3YxI *syJVR_zJLFL,i<'Ȑi:3 ުzjXNp(Sfs(ʧShWRnq GoAn>.n\&T7 *~W<9M2UȿtɹTol)9#L@e"'s -蘝kK-{ы\@Qm/5f+J*[mB~s͍+'1 5 b6^{dn&Li !BvR9,vNPoTS;#c42 jلsp` ְrYTK,Q g@ K阈"Us1n{KGȞk;;;Zܪb珥֔? gׄ*|/{==id:V0aQ ŭuԈ5r\:ߊ PFCx3?2n=-߃_-ke 8%TN:noqw%N )$P=-cxras 3mWdɳތt2"M=m]_xVVw'WG.\UWl0,iHi^[EG xVn6_O@9!- X`0x8KFRrؓ펒َΜ?yz;VJIk܁`-{-Tf ZΒdąjcmm "B._ {jer\6ZbqŲ nѺ鯙0 tq{a[7O.eyB>)c8vi ӡrI cs%p?p/h ]8*3v2oP`l/ E u9hzh(E=nZGD,\Jƭ[(eEVX>5Vj\ִpK:;ވQG^Xƶ5H_ӓz{?Z"o?cmXhv"v_fV?=n218eĠL K87^  }]K> qxWnF}Wl Ht7Ie@ 41(`J ,)Ne̙3C:}wl* Q+܁`pERW]cI^jcmե[s-E\O {ne7 r\44bqɊ%7ܬue:X͗ҲW Jm؜,nu`Ԋ8t1rt'x<?do0fr SK0pEpCq%(hΝ1Fe ܈fct'/LBJ;YX޺ ? LxW#"8Xk!KχI6HJ*!ꎓHλ`礁CX8Y[&ba% uZ 5LH+Ѵ>w㌇RhKSqh&#z{}AJBwU!aPaZֲ"e4=a8ladCA l/yp8V ;~vXZݚ"?Bmg짱tΫh32)r`IX7ڸZ P3H Ud)*\IbK,/1fu }7f\7O>r p#*m94{98F 靐qo=*Rw77'\6X Ͱ kUvU+v\Vml).KFNBS܍ .:@ZSv6\M +@gZʈžد䵬ЬJ#d+וnYLqso/Hs-6~B5cEŭE9AAEtPE0 .L3{xaWeRjE@vN,4&ք=l PsjsQOm5E h?:?,'z6ZC:?N*RM/|i?ORJ4 xWn6`UhKJl[ 0 %\(R#)9^kv%;K 2%}Nfͧ/޲U͆'I-pk+N JMlZ ݦ.2g*2Kf,I<j nAr@mȊ3V.u筯`R:VsrpU.yd)M&(=IO(:7ҳeG/Ux#Y +k t Yk 7H} ktʢ@F/ *#3k:)H} $2e[~+`28jw>`"QX!+C@ FZ,B C;z1}PI *2 $ټ2D9LqnدQY  #accaٵAI% :P :L̈́\CҼK0:ɣ3e3qH9f4x>aX4.ΈWSzC` =Ӆk[{{{>ߨZΌ?'׌*;SvFWҏ>53k~OzW:jŊҌP7bԧ!ɮW[0vMqL`I,G峎W\ƹi,U泌tr6;}L }~)=&![W6a{;/3^|ʈiݳSq#ւuhv(0³a'OY#{%+t - o 0y+g2:^VE-1SF~@@"=!m,: ]ߙ" &*ۢ6J6{(mxHQOlP EwJhA3'-DHQebI41K=D Z@K!@F)iF%HGq=oFzW]@vBvW#aЂ׍ fZ5(kCmON!{Ci,V֤9hXմY]y io@ /mAabMc Hf S4m\W[oA1v H=FdKɥ~1b$a$5đӧ1XI}i,1R01 C2^ǿЏ-k[%P7vR0kmP>6)Yz1 ߂[PjWkdW *~<)M2V|i3_B lsFJtc*@cv\[ FSeBžT(Vm@[53J cvk&@łMfFt(d ŝkf(hA%05٠ѼMU%لkp^ ԰tvYКd<+Xkz_cdk\dO5n@*$0CXiNpzMi,}pt(wI-?'Xd k*W[RZGmXR'Q̔)nB[MοݤΚ.scW翂_it@-ƹi$ûM'lҵP:=C̲Ŷ-smlHh؈휽N{f}B,B_&2f\o}QWKdzA 7;\<ݶ{iuǴe7s)eG~ƹn;GAVJk65%twD7w?'+epҘv+4<\r1'~{M{Ey+wx'o,m2&(jnD}?)?  eNN xWn6_O@&9!-Xl0xФFRrؓRlَdNٻO߯߳/UMgI.-p Kޤ#gjJI]dΔ~-dX"p?K<%w#i|iٺ4Fg VT:Ɨ۸g5cKƲ+YHӸk:i4;I7i]zmFx<= p!d?kaa>p} Qt v)]( 5 } ktyあιK̢)#?Y[JAIOH/+XېݣR}bYJ|HQOlP UwZh;'-DHQmbI2mA$"||# j0P i{|ÌDRhQ\/р˝j L;{H]cCDZ[6$뜢~>4F\aeMރA)jWSy i@[ I$~wh)%oB9W{W ;0YMgJXJ _M$\ƶq8Jx:"+oYe%E3 j; 24dLMQuxrwZInc wІ= CL{(jq|!:n8z@ί,$~=)6[(|ms_Y%. FNtcܕ.:@R-1;\+C [5P&3%%_JfK B+_F7]|Qzxڽ܈u7B?lYs(fNPPnª…xai&XVG txQsEn(5d<k-ji*랭unB71;&@B]}`a/l΅d5i{EG*;fiz C'8E-PU}Nр4f4Nse۠Ngk@*lRƦ/]|2;S鎅0ҽI]Wq#ւuhv^(2j?z*\/p-D5إt Y*5Ƶ`B:o@s%8fdִRȤEeUDgp`[\#G"QJ\!K "6E6Zj!}[K]p\rBRц!$+coIN0y >/ȀJÐB Nq?/K$5:qd[u Fy/2K GohS\L]64IyEh\aeMɸ>ش~ۇO-qu kpSx%6- c+L,|[P*e\ؾ ؁!MVª6,WRT@X8GO_Ɣe%-[X(BIîs 3SO{w_`.%Pm 0[CP>tiܪ'`\,guCh\Pi;ƄPkp_OiQƒ k+K%zR2d(L>=ᒡ$ :fg{ýt*P&ak5KJ ͖F,+_\sD`[V`Ead!^l:~܈u5BƅlYs~͜>PPlTP2A x"R '4n-_L t: EQ'u%Ioh% LD xWmo6_@9!- Xl·a ZϞt=|h6|=Iva{la.H]&=o4umj*skn!dƒ _ObVw}F,YQq[_&oբ\\1<Ʋ_*YHӺ :i4;I7i]fc'x=}g:\`?iaa>r}Qt.@B Ƶ`B:o@Fh$8fȏh6tRz$2ˢ ͭUDep`;\FE2qH6B"l4l;0B C;z5}PI RmGX8!vLȒG>r>@jR)iF%*^|=h> GLB+ȑ0htkHY,594\aeCؖ~ɇOqup#gw5- *Lx:ߥ`ߍ2Kd?dcHfȁh'aGk)|5a$f"5&đ1EXI}* >c2H'gqއ-_ܡ Oo埽ǒb.5G0 a{v~]Y"Q|{[mBRD+àj̦&d*G]h<ʊz f6xu+,p=,6o70y]jG|Sd\Ⱦ 臱=A=,;eeI.XFGqNOcJ-,XbٯS<1 CaAo_|ƙs D6^9zfW''#8Q̴S lW6͹s(xJJ d&1[H |H){M9CH@pN`S/Ty*HSM ^Jb!s/;[Q{Gc9QaM2#Va>Lca!I~Sl¬&;RC5aj$ Q͢W8f%ya#Xéӛ lU_0]߰s<2=iZ +*.g sZ$8&Dt>NO٭sn6vك[~N!$QPBZGTPK3e@"fks*0 I17vEfBʱG1ңF@bMnOqLdN3cyÇJʮ5OyÛQ~[A%PЉLQi<+ҫcևhFnk(^9:4k" 2oX_/γvXگu(T^䎥Kǎx?zpataB3[WeܵRWg W5}ϒ4t+O_"OHxWm8_a@jm+: XE'rICnI>TI<3ϼxzŻˏ/Y<K[v ߤ5{G(*;Ij/TkH݊H\'("-qZ6\+Em!˺Y.!/XVpcjGޫBZ%û\vRfRv0VjNYj\7A䤇 z'k%*!kZpUr@֥C$押D F>/V3t C ~6l˶nq_@*TV;%W/`4pV6xT];Jà7/jac=nS|4M: gY`_|.X7vw |Xav~ƿkX^] "e%oʰȢ)/wd_G 4Fª $WRb&H*,/#KR+Vg"fBfq21 /uEy'/kgǵ%PmUaJ]mb0&M*$գF]8RUsP,ֵ&j3k{xLLGySie*K +@z8c tgs̩DN ,jRhܲFTpFE, +|)K[jdXJu)WV# x,Tֳ,!Zl:d[T6-# wyǔM)yLؔD',kRڰP^8M|.-Un;Zjh/: .C Jmu>ml].Ȏ|B?OZkGÓ")uyr>DjRn{|cDRGk5Q\Zوh> BW#a==T%B5>[dH4tFe,V6db09p4Ώan2&ϴ70eD|c+e &oAؑ Mh'aG)|aU$f&5ġ{|SH׬P-c)IîZs _W!w*<hrv`,i/x ]J55/ Tڎɴٱӂ׭ E<8)HS oO=Cp#v~NR1 CtnOi d|To笖[R"4=9N5  FKvbTU*Jj T|-6Y|3*#'9]͂XHx?YѢ0b&2Q!;V*T[8(ɱDA*AoKpnnyڣɣ2g pyYs0|>_d4^]gұ-W e|d*M᦬(9M^%QtiM篧x=> p}/-,د\@]JrMMZ0!rUx +%8f֑︙[SJAH6^5VL֯"L&*[6>J56\$}FȵM`6j,xA z3}PI Z(2 $3Dt,y 8;GM^d4Nqߍ)K$5*q;M70v/N IMt/%: Zp,{zGOVZ>j٨i .2'N?|iSy duf^Cr¦&-'ަ}?2+zAalG:FOˍɝ>[('qJE*vrab"_+fA-&s uXLMNVGK3\K po>oTNL@({Hl6284[Vb)xå{rp@Nkp@oɕTW,R, 55qi`q4lG.<3JA]*xk&c|+a!S[+Dn~BBHZW|eDbbd!ybgְz1 #euٜS^3jvl3+$>T[e#V|;UQx9.'z g{oo)떷*|S 1ǴmX+5^'Ŝ87H{ܜ4<cOrn"ld)@݂uk3bJ&ߊܽ6OZWqm[=Ī64E[&ӋZ$?JCxUg-]8Z!Jn;7>kKC4w=WDiTw4l8eLĖWV1Y J_|+6AygETyj1AR/*aX`4^֡H҇#^ZqƓ+$H*>5HĄ]S.i4"CQ3`K 7n~fsky ͋[ܒboz1XvO=?Cp?F CL(%CC#\Ȕd@#}OO&NGL|/FQl$H1#A l#!sl$A#{]t>+9t²JK*=k?pI1 T T&TPqxXێ6}W0xsݵl R"("M,M*$eR%n^dqxp8 LsVkCO<=S|F.E`G~ Ԇi'6F7@HH´Ql.aE@ LT-K,} R:$aq~Ȣ+`"4-N9/h躸 [2/dtH@mN.gbuҜ5+j bj1Nޓ18GhcAUct $ vkNMsL hktS NiiE9Ht .ys>A%ϓQʍ!p +;Jtw[ D7tYGTf*дi"loxV\.(`߂ET ]vt[T*@Xb+k0 Eyqr0}hC[`.S;Q׳/e%;l?KP bh]sTySĶ5Ymrt.aY`c˂С( ϖi`YXR@,KX\$@[)l:|-qk^a{9녯",dm9&lKbNƕغr7X1 Ct1+ s2q Zp7u=|J;ݕoeAһ zU&kNpUr@P+P-AmI60"4 'H+a;|m%wÈBGo9‘\m+(KȵTѝpn og) ށvbA } ljDIn ИUx qL]AI- `ueRܸ13VcJH9(0i3~HДڸd#222HX= )R+جBf2rZɤ/*%y=pͳ-vgi{ED9_gl`roX>xk 7ʽ=iY"(*^gc=uk!k,܂RA9F   ʁ9{ŧ\sm>kد%3Zm 6U}`ޢ /DB+&S7YȊaj`>>^,<.OM\ AQ왨Y*Hjm!" 5%V~3#5O2 ^ڜ-4kQoX[Ny2aoˁ2U\g egjmeoFFS8NsL } ]ίgZ2#l%%yl #=GVY _,=YIJSFKPl#N|INl,@`E#&x{8miC|_ 4Y2LtS\%lN–] YᗅXOB(}X{| p"ӛYg5g9H)d,K0'n|_ UE侰f7οYj?涂DV*ܔp|R9qm{!\,zzMpreUt+z;5~ 랄>Xr4X+*UՈ3@qKYJэ\~Z>NW8tb $wb\m>!蜄ZTn*`лK='ً7 :R eN!}ZPY4D Ԁ(g8RQH[u>{f6h:3} и)d⎏d#-' bGV>"`7gd{Mw~+uϊ/Į {{U<(x[nbsOlǎ-ʎ6QHN[EGm#iK5(~{>WygodZHJ)toYt)Znˉhe 6\Ei^M ,( yZ Mq'r)5$؉%Ye(-,ڠud:5RLjjh@DWy5LIC:?v5(nkxRa 8NʳUW&738:篿ň9Y}x'ےW~qrhNlTds:MKY o`N_5ߊtz+v`Dyzj)̫24jZkWii+b\ah5JqUZ^DO/ˁ`x)pqM-[by:03L*SVt4G4 ˼@NO/^lSq)[ ta(Y,|UQt?O5_t+ cj¦Kā 6V& aFDTr!SwOZ& Eb)dL9ѧfgB)+P[}oC>?`o{*YP3Z[o1ڹA=9,pHXKeNFe'8'/Y+Y"p§g/3z*u6c"RU`Thм%s*[ j9m;*,~>/z)7-RszMue@ܾcO'ʄB5hUthz47XFH!@WDy٧5 uӹ}t7Yl ΃*mjџCb0=BǺ-4vCVƦ>Ctk!灢*%q猗%Q[S<6Ӥb~!k^AGLs|nDb8>3HKP643fTZ>؛h0lp'*fć'*7P1 FZ!>z̛odBv<>Cֺ bXY$5BTejU,VcӁ~`.4>8ZWjfIm5ʆ0/4[s+q ЁՔZĖzM'^//mk\2 *0.ɗ(|tt,hPe#3;4V2 ̠#$}r!6$mfCuTp@>f[*z?HQ02ϙyb{d29}>ȟLӦtȾ:g\?,(f:᥀ȁ`;&35lP]I$R c;i8*ՙ+^}Y/<ԸJ(L x'm4fJ8',5 ^?lM4K9<ЭIw\m)Y4g_FSk&#Jh4[}EzK*Z #}@h?mqGr(,DXR&HG̼7[\)H8vhd*tKFM;fJx%/MsʼnHރXŎGi5PwEG܆Q?Ny]wd_F27?,s:@_H]wL 4J3ԀC/ Znp\v iݢʏqak5{?l:-Upe]I~CƾR!Yi͝xW^{|6 kAמ3Ctgn:96[/;;y>E\ KFH V{/FWƚk~.lͻ^cF1KkCm=ZRO_|x؋$cv2Tk^ /|4/>?> f["w~؉:ǜ"z{5.?~ϰW `y a atWlxXkSe^Cj=f$`2kLdy Y{Ev3Miec_#G5r$_5IhƊAU}Z]OzZ,&eYkKS&fbJ*9?h8\B׉3s8fDJ2Zƃk=iO7 D|ŅHsiqoW\9QJ]BX1BL:ex|JT8zMx6~^#tfi- l\S L/IHL9oլFgҫQT0ܬYsb!mJ ]L6?EH&ɑ]AeQ6g\d.&Ssl:YlΔ2~pgx*պR%{$Y 8"{Gm^`)\CH!AFϮq[Hi(IXN! :d $Q*^&o7dMSVbQ r(DmohX2rUk=(бi]劒djI?s=;BaMmS~f&K|:`?Eaf84Y r9])ZWZe>gcLiKuh\(xPޏ TK bG>x}vlV;~KbmkWiNtJ}-1ՃJ (˪Fz?w} ,)Xͩs(d³㍃VʩbND24`8Ѕ#6M ăp$^R)rԣܠijsAHJi. #(0<9˙6SV"-s(k.+L1B`c$m[(km-W1jH\g*ӔCB_^m/rr&Q5nSUVO~_@T;N 0b8񅞹BA/6ODM:"gX~9?3E1.uW`X6ϟD_T c `9sg GLd+}!g_Npa)S,pᑫ+N8SRh?;DÒTyB n׎`/6r]tPJ#v̜own,Ih e{MBPG$fEl#.f{D&E:N XhKX7B V҆;QLZ80B:ɥ Џ=ERؕ94Ն S{(,&Wz d"k0=pL3k6Ma>WENS\x?q׋ :n&Rc{G/S*6Tb;?fPRfA-RA&,ҕi(E翼]1)7x#hN^cƅx~"=-%@(1.1X3kBtPˇ5\:7Ddw(WI'ג\g46(n{L5C5қ+}J\#6( $pV) A/^od6!w&XsثZ4bGn4WI#/-: nS$qbDYs8U f\v'E0O,m;ׇk"x"a&|Mk\. D1VAG}7O:} X:]hGqit7l!ͣs;gdMσ$aglB-4{d<^VR56˱ Ʈ$!DTgKFL+%u 1˻inLZƂ6n|fB6s)r;b-+bg4t6bY:Fx=~}ξW w`*a=JYN `\1o9wB+jEjF $(yUDf`Zs.eޢ"U҅X|DJzQPQ*4ݡqk=y0tHK+m.H&@C "|`|5G$ -aB&JTGrlF,xwʴKt'Wcg6?Yh2P %MlnDMÿɤ掷 X ;b;0PݘwH 7jR9;AN!uV (Wp崀3%#0L\&SObrꂕX`X/Sj,13 u } L$u/gvew?nЗ@)?ReQ9yKCnm OxXBALn{Louk4!4И#Rg"/$^VX1 +E|ʈ)) ƣ`Spʐ-P} Ѧ2sRD_?M\k*K{ 05Ldi A,Z skR(ؚrJ*NUuA60sKQy2وQ!Dzl_;0X66EDתO/{wm0۰qMxbr˜`Preٵn@#Ec57#d̽cʼz\W:+l37P|K-OܵnXk,܃ZjJ,6POi=6h懸ͲMr]̡LI`2CI!$taA5:`[e|j>̽#fuQFh"HiokavJH?G4 ;9 &Axۀ<*poVؔW'oG#j OrK m8%;MN;%C7o߅ TjUp4z̟)TDvD\><@0j -7CU# h.C^L-U -%X0U:[L/+pgEqZB kݺ8Sgʌ†n7p~@5Wr'\Sb[!=I_H5|G˦[axP oËqv2Rjkց_/{3u.jwzQv}#4)cpɵ<mW5+?8}Y-ۛ dz mKutY?mat ~h{ @A1dzhiO/Xb xVF_O1Q `I.M;[P.GpPJ)e[[+;}{άd[v.i򏼲7ɽ糟_^@j]$^C^ fFgIƟ:_6n9v8tc2jު4=& l` {ƌ d%0m":Q*贰fbT#Xx?ɟIrnS*㇏I|>ϯ)|kJkNLj)t0aJ(Nۀt.)FHfJ^! Jvtw}JLRFnEк"8XR-} bm҃lMGhJ ; nr4GBS@2@c^[wHʁ@D b|BȪ$hR$ܰ}Za}ZeHIhaXhϋ yWAsAu~d ؗ'bY~9wIMta_~xEaK 80ub; ӶNb[t$0sd_A'uA,G+ƺ0\2TWT'Y|)CI:T08}2Z.yPOSy3۰;__+kq\`;CsoDh8 gamvvz9e8 x09EwWsU؜BJj3`Di]S/π0)wYpaQ2es?#ݟ=e%{\n9E0adai2pEe g2TE=\(}%rK@! TK1,LZex]rw{_'ێp_܍]C]w|Y=13G4;l/,-qN#p?aqPQN-Uv"r3}e-]FgbIX,"%U6T֎WL5 )c b/lYA^c쳣j_w0vX|9`8wKf]~^fkO!J 0Wv枊5Vh ^N"X'!M-jS>;]ˠZd)n0 svjVoEr@U%[Q;L?RceF 9rV!0l|d*rT ^R޺{I=A D/2.BCJ kM;gegR(% o l{(_̓|[rRXko# ~[duf@#;?4 K(]Ee8oV} $ڮ 9 r)wօ^աYִ_e %uAZ~2a|2qYN02rdɝ yu<|֮GhS沅{W4_ 7X`PYR` KxO%zS-8UL\`bC8Wb>Iv}Ӆb4w;ZiעQ5FRYSe]ygF@ʆxH^~_j7wt[eJM|'ucё⽞㳦ر(tLq,'oQi=3 wKǠwV9tօQRlnU|kֲ{43,+z䋹\MkT{ydSa>$o1G6WËW4؜Ȭ}w#ŋ\U jꢼOWSpS)N:yl|b6vc΂)0QI#$zƆ{6s6`}(QEI7T4 Dȧ]Nb1KeMXǣ8 a8h b{bee>r:?A 8!dzI-VT\`z^힗>;Pz#TŚ&%a1.1ѓP=ۖA95xy y[t \+aN :N[͆KϑmaU\s %+75piC1| 61Xi2j $e:`)KvY2_o@I245V*e%*ԇ>pXUԇCZjq@pt%S&.Ʀ@P{оV,D6vm`DFôMEiͳFbCr1GuKDº~QÃ=3,QWpѸ%mCvp.8k5 #qjkRqYJ oUg-c=V ~XS%,͌D2 h>aҏfb=3}Kqg{P5M8=L~SXO,Fg<@d#qI&̒%ų1hﺈydDG<=Fg]& ^yV0L{L8lF5nCi*DxmX E-pC.[ apucS,0 UhQ(Һ8e>dl+%Q3]JPY,UmV`!7O+A{柧(Ot9CG#mRd;#CfhCn]- Z>'3#ޠ/-S stb҉gow-rkPک1 WGw ؏ޑxVۈ1_eM޿.b j jz^x xVknFSL qe@A"mZŒ;vݥd5z3KJ8h9og7ӷCUۃ$k£|/^xHn4tЙ_ CJ!I" I%z|ר$6ڣtSc E6I2PMK`)t#*0y e7Z"}Fѵ7VK gz8\/pjiq ?(zv\0E^Vhr@ZT[7i.ZRBfښ^"thmz튴黨GH5S#AQmPK n|ЏGBS#Tdl)Ƽ6vHdϓ >x!d hR ha{*wi&%AJS =o=xN,-!Q0{3T/7U(̓񰕎$ j;m){x)Xag!oȎPJMc L1ht$0yerQɾ@Vxc{|wkc}Or/'WT+Ix(MUhpr3 (-&ޥZbXMb SS/*<|aNؽn E<4Ǽ'>%5ߐ9ks]D]%+T*7#(sH, ? H"W =* 3|pxC}h GifRsv;,IR qAfH[UB01QE>fEQst=ٞPdH箾_wvMq{J!۪Úy(x Z\|}$TcNMvg%ܝ]4lŠ+FH9d ^#5Q=)t[0fECn Z m%|>xFsa h9 m5]7Q?}+B " `e'O|o!/C!t;OTfMĺTE ҠjҕV;p4iޚ&kc`0igCFJ!Vv6nyws.^^kEANݎ(^xޑ@N6; n\ зrtX@_+_SvDl+S, ~ =|#W$7{jܸB)P"7MKSfe͙yIzd1/T)Z!h1i7-'hSO`u<QiD2ͳ֩ i˟{'6JA9fX"t-= ;)4nnܣڵ_;1-و ] xV6+Z6ۦ ofzmQ8HE>/ e%m/$ϛy|fŋwoYj]$l@ls`~gkֲ7 Cyﳝi3v۰GsBG AD?Z-ӕ5LC)+eVVy6l7j])jaZmckѪT3ցv]go$YԮ ogxx*^f`Ͼ\|LUvN"X,LɤMnDP5Q&aDqSP@ؠ>WnN%uBF E*1X[ "l2l704RCwPf7G) Rmuq[@NLRD"btd+`ᑢ@=va|-2XB:Z]+v0>SC|"e=mP/Y"a VX|TC ct ,-R=%~YB86ж·Rڲn~NۍГw`X7 YM1 (rd:t3e-BsDAqјMܡX4 sO*ǡBm'q(f%nOF(sb77c'];iGm7 ~]&OT8y yq]k$8,_٫F8qC  Mp<5<'8* L|EqKJ+GBZ<9=,{-#J4E?U1oQ8dz%yS\ xVnF}WlhrimI@ 4 P!(b SPY4-;P9s̙.zw®^%QKG2AyAZ/g3XƟ>ߚ6n;v[2![JE[psfq!J:OaنMs:ZWڋ46։,j]jym8y\ ijӧp}<^xI4^*%{r;#l4,E}EB% A Y4$Lh6vZ{El226NJmU1L\o}Cƺ!*G}c]X RQ⟙6(3fӔ2(u#%edXe G}/ $n.ܫA{?6ȏ1JY`V0}Ӈr!Z1N< N{]Zù!)*m|dBxS}N|#yeq0W}Mxp ~[$ªC<˔ U%g2JRSGuzܒO<2Pؒ*y sߣ,Kg 0SW*h1竾$\ćfE&ۆYf !NL Ljž=n qa?x;/Cg8 Y<*PH=5N:~qH'//ڈ#θ(.X/!mU_פef* 0=y h c4@z eḮ;]Kʄ p&躤Y?C,|`Ff=&Fɑ@c8f>`B09&C-y5Q*%>@ _݃vHeb0~X|#OF^}$YV7'7NU'2 GGx`t8xW}nEO1iu m)J D*4},3v BkpNͮ7k7 Jޙ{O^^_B,}YLqIsKS.fkqEJύx>A+7uujbܯo("IX"%yVhO'W"k&0!8RZG~RyŠEuTNRײ67V\Y2ejYGI"sSmZ,/g$jp:AQ 9Ε4ݾqq ",EZ4c^{=M g| 54d4_=]!}6,`жBE-9YxC6i^/Q3.Ź)+蝩Bxzbrp x(≞T4}4}%HbM,,xX3a'Vˏ]TĘC8=IcqoK^|M~TxRI+O*"Zu5q8XC-6aPH0xȳV=Į_FOsxgx6s R6քE&5?ӊ KaDwjX1༐zѢT&LEMia67QaYߌ2Y;j& J_jS%/0WYUfP775J]VƍI_vJ-8| u4#L>vbO+FU۠8!FYܥЂD+yTlRÁG]uV#i+#n'tYÒ![@Zꥍu!?mv<,h[6"^ Oͼ[?88o`}:kKEȀ Ѿ , MCg#8 `-vtE4{Ho>].QjNzaX;MpD)G}TaՋǸz\=g֞ і~$Ba;k$.24x}U,^ūk>E,0.߼| Os}$y-m@^,Mž;+A]rH+A`wy\PĈrJ0nDزXÁnag]'o_zE9_vZxY{obg)$-p}Au=kQ+r$mM2K _3$Eɏ-ЃA1kg&_oa"&q f=GIND*{1dD[ #(G,EN?%:bZ+ŷ 逘݈Q\BƢn~Р]J P(2CXR+'7I]jcb_? zz~ W*7(z֋"- #iR} TY퐕΄%hA#׃Y9/I@J;Yڪ "2&1E"nz/ё<UC,u.璾7b^mԀUAr< [Ta=y4ԺpD$K26n$irD5v! $5#h$o vWܸ%i[BE-8ܱy`$V_ m`d&!rke{{Ba̜Xa2HwDl۞ um2nZ:K#L }Q(hCF8mzM\+HWו6G[Ns\Qla(9F [Ӂ$G~L `1X'XEWQ/}{}(pgc+lT᮸7T=cǘ}&+烱:Cle_zmBXE)*[a-gNJC.a'u%O2Ђ902T#p]b^կ+iLm.`)sJK`8L`T^1`D.0(?"}, l%RS³}E>CG~&th2gtƤ2^2 fT <'Sϩ=%V1aCUL^YRg߇iG8to3=Q';5d:$VdisPctۨN gVVNד)sə,,Qn'p#br}TG&^yr I;mrW QĝqUi/iKuťtӚd= R_|gc2!bߓЭTI]WpK!!ZK[ =ۗ98<%pC皀6K]Q8lFĤ3̵tK. uPe6)dӳ[ԟP;A">i+0Zо[׬Z+9g]H2i7%wFR ep4yw v)Ξt8 ˮ}{O{ES9kI_K~W7AӛQdEG- HJ31j[6t:aQyYυTg?n jq)5Hu8g1Bfй6^^? }&/J1y/C64SH3ь䇑%ֵ1Y-Z^o!rꐆo>غE&j"ʭِwAkϷQQk*xhU0Nǯ_x|/c;:2W\? 3aGE[/Nm>bیu` {?Q}CМ\zD !}"RhL8(}1TlȞQ՞ʆ`tx?-prFs><i^\2z|&*g!mc0v4lP~ l[pF/ᜈr&x}TUd/c~W'mԂKI+)wɭ>l*͓۬z4dwIC!M#ż=wT~*A0d\LFneq?J3IV3: Džmmǧݼ:oz[I^ Ӵ7#yhsE%9mwح=LM+=9: ;doke(!ƟgM6M]Kdt'Hp̤!h~"Q.&?sߎ_?Q~ G  rJb 2xWDغRR\ӃB.rB rHx'*ήvU<$̬d/o;'og_o^m,t?O p-v[6R-5{(*;mRujhmk%,I 8xWfϴr\2U}ƨ7ܴv䛸c5/ej^2[j|Q\XJEzLh±f:zᯗ~;SFZVV+ hz +E퀌.`^F.YHAHGHi'KWGQDe`,;DF xHzQGVLP E7tn'jÝWIRK2 $qj&vG&"OG]\H ] >mǶ.KK$*qV UW0Y9or'i[Nkb.Q'SS`_K5D [kFYRX :-|6w4Nְ,|."J䐸:7x?ԙUɾ;mA8'=F¶[)\1`$a &B\Jf4)(u }N\Wdӟ_솘c Tx:z/g)VPY<A%}sT{*nxv:)M+ośH+n7fW6sOCH Q9fيq؃oˡ'yvE;B6,/ÂW8(FӨm&IF"QI- ل?H`-6-is2ـ`]d60Py%5p[aX\v6{bAT{-۫aEilׇ˨ਘPeqNÂ;מ>f=WD+aF0ʵ~/Mr-hV@aah 0=gٛ\i\zIH8P%\刺pǕV5P Z3b4e'gᾗZN6l.h~kqw5nx@4:(4!ne]Uڶ#6 P60q=HtP{dFrwqB^?7gGiߣOqv8 uyh?4iXқ)9ڋ a xW6 \hݺŵ(6`m?aI%UzCh')9v?Nɏ?W/\-~~RlBٴ(ĕCXe'^~/Q#:ǻݮ\4n=fvpɱ( PGYZWFԡXtsQYNa(.E1ڰ*{T݂meXRJ֏FGYeWvN7Ax=?ϧu|~#N-F芢h" }t-j郓6 ]B ea%zaVYle#= mxC?eD&G%kc_!!6+I b1lփluGkfw\'z4B4IAmU3|IƼ3ԃH2@`|BkE(Hg 3˒IMF@6G^ HܠLB2(3+ދGqm8f+'-Gt{^FRo[,k73TJӺ pڞچ?P~ WA0npgѭĝ5. Nd6"*<g93Y.K)pf.cfXzw/~ﭫq,Sw/tY,O;Z(!\I2S3/~K=d'\.k?l+AӅ)b˥T2t5`ʸgBJ ,6ȣm"a)dcM ?e ՐݑMbrr+*2U+Q(ܢ*QEmA0γd9SPU=Iٝa>j?p08^_>+sV|o-W(%h.\BL+Sފ9Jw1.·L8t H!sٞ(%q'Jalmf7)LiHLdb4L;樼H#LRVX&E?ο҃ @@+dZ"xWD律Riiw $Z BH!4oa3ff4Jk(< 玝fˏf~{可u(P]4ߖ։K*Wcѐ8{=˒V[V [<~'i4~~&4F+JJ)xY9i8 i Q(ZԁBU"JvF&TڊյUdB<]j>]B,m 16@֦ !4 Qnj܏G)G :@Fb5) DO怆bvkeGܕ%QJրYrE)nl?|&Uuh>KThU{i2[ ^؀XTu'6^0u@CsC(YPD0{xQ_U.~5b[@7Y嫗&B2T~耡\\:>HDd"xD(AE`8Ys6q/8>#J φq'ub=a|]UsC ?s~OI<|F՝> :Rޖ=ÒC–I˓#bmN"A㓃v;ۋͭK^$ӽv&8ů/ mܤ LѦq_ H cxXn6`]HKjnx&C7 %TIʎ0cl{=JdwlˎH&ǻ}v<L?IlҤt\ E$(۳K2e\$yat˥7'rfT1ߔ;}⺨P+O9_Z) Ɲk|@∄1U^nf 4暤T4!4Li\ɂ)ͥ /q2+dž/9x6|k ^D- WqΙJ\Q0L_1BED"An )"L9sL fG(3RewgaZ4|O=MBLeg+!Hk֩@"bB("nnpvevGm#j 9M@tvD~]뾗T t%܆]\n] 8PY@SUGW3-X:VʈmFշf>kJF7'k77.?ͩf}S] &%چ2|?Lagtg|2>ofB4t9v{6`JN 'Ft2RpJ.ǯ۝' 'd<:kqBt󏒋Y_Nr} /d|. W2ςiG=ޣ)Ԉps?l4/>`(ʖp&_$0:# 8#|63KĝΠ-8^kYGVjjۨ@ p \1qIHa&jՠX S{΅$pQŦ+U# 8S4M7aFqOאi5O!p_I2CaXOtgrgJ䔚5Z ЗvjIm3Ey[$#BkB$F0obχfR &uPP fM tTk]j8V?taR (('g&enb `-x#H@+vϘ̒v !9/4E0}?XjVբydmb  ;ffP xWێ6}W0 $%%Nڴ^[@M-$h( Z[%!)y ulIE+s9#(uW&_=u)jxm-[M% 7c-X'b'4.9Z+=O6>Ix~_op`?r(z .,;Q5J0!rxe0ȏ`[)Ƚ2)e 朲)B2{^U}#)bJ'@QQlP ;>Ql| VNZjSyaK惶{BwF"F< G=/  >veB'JSqkf#x7!2 x%`dmPe֙F}W(̳JCF?-q~#Hp8$S7lPƷwjb{ ,ڎ hjLL[ YJ@*I‡TX"^%G1Q[Ig*X딆J,T 1 eXkm(w_=U.N%N GhGh:_ ޱ 9I}xM1.)؈?b\*}? fP@ҼkYI\R l FNBۀi3MCHJ`~ ٦pkJ*Ϗ98բm죙{ЍY8 _+(Zn8N_NYQq簨%780u UI8N3SM ߭%Kp",IFM!B{K$vp//2/hHגx.xp;UF=6±e s-3z͙(MfR0õ.,AՆ3 H%b W$ۨDT]E1;uߑA&&>"<Ýev3nN+'(YeBTȺ(;$"짻?W}b?C"\LΥml5g:b0ݠ"}.t\LH(CTSopI> bFenX {Lw`;((ѴI^I}AMӧC짰EJ~WTx5t(pʼE TIrs\,L#gC E˴c5FHx;JidAexXk6S.P$e'>wm&Zm6((hilK*II1FFRjVf.>xOEjß\;Jމ'>\N?mM;n;vzh\9#, ZN[Nέ dB~kh"@9ً3QTy 6l'W򢖦Znck e[?9f>eٹmvNm Wܻדq~tԋ, W+`ea*+ҔT>8nѵ F"/& #7g;UzE,28dlPEŠ͵*P&O6~Z6fopMXRml68ٚ)U2828 2ep2X}b=)G"Q ,k)d oaL(IXf-MGyY`C&B^r =iHy3!wKTt4.I>ZrR/jXiPbY"Ȏf +ځҏpշ#$HZڢqw$~f[mR>!CNFa|ahA8<"(yG9*:T5761VmJG>B5$P9Vw (>(0 (f"WkU؝Jh3JyIuѳS~ϋҿg۝UD:qsU^c;oboъ7Hv BE?0+PY3G񔈟3qVpvT64 1 l<*E_δ%^~򠻏Zw=;9! j4$4iRkܥ=hqZS~V='FZPDTb,x3ߧxLCi_5>cVy LF cdɣ3lzb{VQ8Y׾Q#yW^XcO;TPC(^```# xw}IZm x911ЭBېJcod" Y.z Roi8d.1Fs[[NPmZ=2!7lR[bHh0Jg'[F ǪH=GkC6L\{hl6Kgή4GoOX:Eu ;ÛWN&du[}82?D  ggRxWkDStiؓ,DyHBmlL(R%'3u&AH+=g>zk\+W"ewPb.`WFf JΦvSn L]/9eYF+ׂA-^lVˮv쟖)*)Ƃ[zξM#FXrdxֆ]BRho'l ؝^~?O 패߹_p:\aTe`~VVji4} U:# ܉X׉ވ HHi'+HwG`lPRFg(1VWb-}  fHҫ Ld* EwNz2􇻠CX8o&vG&C>p>qA Z"5t)H+n;|m%wCcZPHjk YވQ(НpV?*gtKRa_KmBI~rIl Fi4#A/fǧ ka+;/N#LlJŻ!7R\d/AN u͋F $rͲ G&Bar, ,W)5k dì\q 9XW#'n?t[R6j=Kp=s" POXk7Kxޙ<dQjr"_2+%e6 3dAe#fdBQv ؂6,Zl*b5JbW?RX:پ vs Qu˱Dݮ*bQ1DtN"qP3leyu G{aHu9<$^8#"=}FՕ !*Go* cVI8*Pꬭml]j_3{Pc!^&G`L /dҽg +"=iagm;ɋm\;^x 8p6 aI*'l ҕ-߰pQWZ(;觇''P1S+#dk8lA1-h!yIOɤ'uBDZ5!4MiK%HI@]Bv9 ETM:6"- Ȏ;bX_xY.?> s,޲% -m#`ÖA "T;m lť 5'.OX; [/B%T'2 KLئ7=Û:d/%{~ n7-~"\ GOV 6BIBI(4F&?AθrP}Z1eqiC9nFU2הč86ᠾNvG㨦?Mؙt-3{޽"\VDcv==M-(e^o bG;j /oxw;x+Pr)1#ptGg?s_?!FL )L@ɲgT"FeMF]ALx[s$.噻Ƚ/;nʟV1zYU||:;:6TJ'[ZYY# >`?as& kN*)/ ހS2Ȩﳔt\ _1q#u!L~PhTyJ/'+.;p"ԧ ƥ`@.n#mB4+bFmOmO|iΙ(n}m}[ym gg1%#[yqmX{6-U/y,ɒ=O:?aHhKw딵dyWAwOmw%0u徔gni~ѬKї.@M1sF y'$t+ygj&hH1&Y1g`]"8ɿPzReV$:8L!uaNAJ4&rs8GAt\tjq3ɤCIlEP:wJzbdp r -Oa[vlV'(XQ:I]. ܇˘Ō!ńĨ|@B,w20QշaTx|pgi0@ST7jyW$ñq1T>$BvڑT"h C VP Orwrm-..>&<4&FbQqa3 aMsؠ 1zTm| vc"E h:g&NjV(* MVUK8u5̴lP0 aUCfSzJAx2v 6EV.s'nhrLtd.5Lsh&G0UˣxoM4\7,:6$+3+@Iˣ4养!k'Ur:̄5)t%ZE[BFDC:3T;a.qy6r!sڃ  Cܭ[ԛEVdBu B=5B֚EFAZMw6F/ c Ę\t*@ N#ڹ\w4I3B-]#s!äSg~ZNxZ;i,岧E!µt|4!k O a:3Lը|oOa6 #Ǹi2~ΞAB}QiQX.;i#A~٬0_u6M×̽_2 Ut,㮊eWpv"|K7a{d:@*4k)aV._űv9kbE}Z t1މ+D9Dǻ2)xas ]NHZi,aZvLDKgajN R?QkӨbBzM=76 [ߊݯAR^C=a~~$mOOr"ҿaY\P?jb/(`qx`H`D0qӼbxOb]K a;F?bY+Gu5ٚ2)j`XϙVS|Z+9( tUyka-- 6[M-:(ҢQs߳B A͕; KRl)d|xK\002p*vKZ^$d.ήVO#,mqdKlIDX.+ x'&1> EtXfk0xyl"Z,m`sdb$dy-=uCXf@sU2˷ CTX>@UE! d&gļD8>kaDe-nw>$kqLY֋s>q}FDY6+vA;P"c]So]ADe5W_Ěݞf 8Q?C|i* 0ˤe.RH2l4v9w #,nqs/|֩AdkyFͯy]^YQC:*b$ !R,$O ˱\-?d۴?$ &,sοQܧ,˼ pWW'݇ tkDNY^MefI~#,nqYnSӠ˥l-OAK\ ׆%kl!Ո+DXQsۊwO ː5j t"ԍRC "Z-$jd.u^$wUPվjo@Y~ko1W"H7AD5_|<5CX"]-UٳwJ:WW^05%k qSَHY!_" _naDe-nv#>}sR#,6>bV;bDXQs|Ȱ|[fG\C rh-$ }c#K\ e¹XWf7%Y;(GZk/PT Eaoh:-L~>PSDDe P)_=Ax}Doj`D-n%XJDtX~QUvF)%7Zڎ$d94U!x`De-%r|-Xa0S+\MR%,FVz!0g6F ȱ,ZN7#+MGCliwopIY /UǵF8o:jyg &,C?( bU[V$mz' IYu[]޳-(͕=BdX.1Ű:4_?&Ҕ 8G?uG]j=4(yn0n%c# rd dSȷ}O꾼faT  <\8PPqw13eM)<ݵҏ,U;- dHxeLMnbi6E.OjArchhj `nm/_0J`F15垔OAQs ]ЗH f̓>I>w r&=8|m_{3ʌaHA(hES$ W6j-b dr0ѥnPyOBIE\M>xϿTE}VEa7 yY><+?e ݻoJC5@쁅&v7ǹ>D[?E[ 7hrx]ks6_Uvzt]呝L2퍜vR us&i>$w_x ARr7= p7m]>iłdh@WyhGY9.9(qlyv f ^fijiCoձT AQu]=,UqvAZ } 8=񢌳]f7ۊr{Ff?#?8ȋ]\TeS*ԏiĢ$x'"yɲ ̋)[.!4PR輣ԡQbc^Il-ʃ$i8$J *qEC,MIY/iW #k>N7_ *8rq:\R]$L%$;ԋ`YC!M쒪,Sw2 *a9SQ ضBN:𯁼2ءtXUyzW _r]dO%ͱ4=!_F 8AE~QG O8hY]|QeaT.ּI !xʋ G>9ϊ ھh 8"Hh顬$Nٶ{| >,@&SjBAݻ *mBLqӪȢ:uq$=I 3I Hn_V{TVvcvaY6v-YOqI\_m. -"fjׯ[&6-?0@~u{TVOJ e{D:rڑ]cwmg[[`HV̔h& ic#ie jeZr͖FAKՀl 14q; C\dј܋"-~Ժ#kR&C籎;8+rRȢrNPa1-U2~q+¶9ʶ>Ȇ̴VYqtѹRsǽ!O bYT zlX^"+:lVcPq].Y% G7wabfpʌARImpiZ*yPP~YIciAQ+g QS$F]6q7W̞S&dJs^QVص IK'*k0Hf\,{͓;mZ 9\5i0p8wy vqZ@ .l 4SAgҡrƉO-Hpe y*k [-v2DB KƞqwL#Ue]:S2~aɥ?"QT:$0Nh>p$`ڙ%V@@VN /ba}5b2=zQO3ICw^`^*&d=ޏ@었P`Mzb@O^5VYiO7l4'w k8% l/6|l +vg@۞b ˞wC`~ujyCѰ% -j~y1@ "&(y5 cvl d:?`l uʱWbn1މY6a<@&3{m|Kl|睂 >ԕBLo%n|tiݵ;HvBO*+B OxZ 'm"=U̒tAHSQo" '^T%\y]^vA%OS鍝r_uM|2F`3\KW Ӟc1+WR^Ĕ߽]iba{i tfWFAzY>fu05fs^'l"@pT"t )$Dyg'L(6!-fbz*.:>67LZ۝rBC=9w&JsT^rG "%;B!ߘVFw;Q2֟`%q(]8Ssi^=DMhI31&JhD^KQ>L9^PAz{%"+t%m d=DkxLR0 FENQNhdYK;n-7jbFLB(k&[ܟ/"[+LzD3W qvkH [_html/tblish_002edataset_002enhtemp.html>tblish.dataset.nhtemp (Tablicious v0.4.7)R= W[html/tblish_002edataset_002eNile.html=tblish.dataset.Nile (Tablicious v0.4.7)V< [_html/tblish_002edataset_002enottem.htmln(H^E EQhtml/table_002emovevars.htmltable.movevars (Tablicious v0.4.7)? ?Khtml/table_002endims.htmltable.ndims (Tablicious v0.4.7)?  ?Khtml/table_002enumel.htmltable.numel (Tablicious v0.4.7)O  O[html/table_002eouterfillvals.htmltable.outerfillvals (Tablicious v0.4.7)G  GShtml/table_002eouterjoin.htmltable.outerjoin (Tablicious v0.4.7)K  KWhtml/table_002eprettyprint.htmltable.prettyprint (Tablicious v0.4.7)E  EQhtml/table_002erealjoin.htmltable.realjoin (Tablicious v0.4.7)I IUhtml/table_002eremovevars.htmltable.removevars (Tablicious v0.4.7)I IUhtml/table_002erenamevars.htmltable.renamevars (Tablicious v0.4.7)C COhtml/table_002erepelem.htmltable.repelem (Tablicious v0.4.7)A AMhtml/table_002erepmat.htmltable.repmat (Tablicious v0.4.7)E EQhtml/table_002erestrict.htmltable.restrict (Tablicious v0.4.7)A AMhtml/table_002erowfun.htmltable.rowfun (Tablicious v0.4.7)G GShtml/table_002erows2vars.htmltable.rows2vars (Tablicious v0.4.7)E EQhtml/table_002esemijoin.htmltable.semijoin (Tablicious v0.4.7)C COhtml/table_002esetdiff.htmltable.setdiff (Tablicious v0.4.7)V Wchtml/table_002esetDimensionNames.htmltable.setDimensionNames (Tablicious v0.4.7)J~ KWhtml/table_002esetRowNames.html~table.setRowNames (Tablicious v0.4.7)@} AMhtml/table_002esetvar.html}table.setvar (Tablicious v0.4.7)T| Uahtml/table_002esetVariableNames.html|table.setVariableNames (Tablicious v0.4.7)@{ AMhtml/table_002esetxor.html{table.setxor (Tablicious v0.4.7)v ?Khtml/table_002estack.htmlvtable.stack (Tablicious v0.4.7)Bu COhtml/table_002esummary.htmlutable.summary (Tablicious v0.4.7)>t ?Khtml/table_002etable.htmlttable.table (Tablicious v0.4.7)Js KWhtml/table_002etable2array.htmlstable.table2array (Tablicious v0.4.7)Hr IUhtml/table_002etable2cell.htmlrtable.table2cell (Tablicious v0.4.7)Lq MYhtml/table_002etable2struct.htmlqtable.table2struct (Tablicious v0.4.7)>p ?Khtml/table_002eunion.htmlptable.union (Tablicious v0.4.7)@o AMhtml/table_002evarfun.htmlotable.varfun (Tablicious v0.4.7)Dn EQhtml/table_002evarnames.htmlntable.varnames (Tablicious v0.4.7)Bm COhtml/table_002evertcat.htmlmtable.vertcat (Tablicious v0.4.7)>l ?Khtml/table_002ewidth.htmlltable.width (Tablicious v0.4.7)Jk G[html/tableOuterFillValue.htmlktableOuterFillValue (Tablicious v0.4.7),j )=html/tail.htmljtail (Tablicious v0.4.7)Di EQhtml/tblish_002edataset.htmlitblish.dataset (Tablicious v0.4.7)Zh _chtml/tblish_002edataset_002eairmiles.htmlhtblish.dataset.airmiles (Tablicious v0.4.7)dg imhtml/tblish_002edataset_002eAirPassengers.htmlgtblish.dataset.AirPassengers (Tablicious v0.4.7)^f cghtml/tblish_002edataset_002eairquality.htmlftblish.dataset.airquality (Tablicious v0.4.7)Ze _chtml/tblish_002edataset_002eanscombe.htmletblish.dataset.anscombe (Tablicious v0.4.7)Vd [_html/tblish_002edataset_002eattenu.htmldtblish.dataset.attenu (Tablicious v0.4.7)Zc _chtml/tblish_002edataset_002eattitude.htmlctblish.dataset.attitude (Tablicious v0.4.7)Xb ]ahtml/tblish_002edataset_002eaustres.htmlbtblish.dataset.austres (Tablicious v0.4.7)Xa ]ahtml/tblish_002edataset_002ebeavers.htmlatblish.dataset.beavers (Tablicious v0.4.7)X` ]ahtml/tblish_002edataset_002eBJsales.html`tblish.dataset.BJsales (Tablicious v0.4.7)P_ UYhtml/tblish_002edataset_002eBOD.html_tblish.dataset.BOD (Tablicious v0.4.7)R^ W[html/tblish_002edataset_002ecars.html^tblish.dataset.cars (Tablicious v0.4.7)`] eihtml/tblish_002edataset_002eChickWeight.html]tblish.dataset.ChickWeight (Tablicious v0.4.7)Z\ _chtml/tblish_002edataset_002echickwts.html\tblish.dataset.chickwts (Tablicious v0.4.7) :v0X ~ : j  > B T :Lv2T<l*l0V(=I 9Mhtml/mustBeVector.htmlmustBeVector (Tablicious v0.4.7)+H ';html/NaC.htmlNaC (Tablicious v0.4.7)+G ';html/NaS.htmlNaS (Tablicious v0.4.7)+F ';html/NaT.htmlNaT (Tablicious v0.4.7))E %9html/pp.htmlpp (Tablicious v0.4.7)=D 9Mhtml/scalarexpand.htmlscalarexpand (Tablicious v0.4.7)3C /Chtml/seconds.htmlseconds (Tablicious v0.4.7)5B 1Ehtml/size2str.htmlsize2str (Tablicious v0.4.7)9A 5Ihtml/splitapply.htmlsplitapply (Tablicious v0.4.7)1@ -Ahtml/string.htmlstring (Tablicious v0.4.7)?? ?Khtml/string_002ecell.htmlstring.cell (Tablicious v0.4.7)E> EQhtml/string_002ecellstr.htmlstring.cellstr (Tablicious v0.4.7)?= ?Khtml/string_002echar.htmlstring.char (Tablicious v0.4.7)=< =Ihtml/string_002ecmp.htmlstring.cmp (Tablicious v0.4.7)C; COhtml/string_002edecode.htmlstring.decode (Tablicious v0.4.7)G: GShtml/string_002edispstrs.htmlstring.dispstrs (Tablicious v0.4.7)A9 AMhtml/string_002eempty.htmlstring.empty (Tablicious v0.4.7)C8 COhtml/string_002eencode.htmlstring.encode (Tablicious v0.4.7)G7 GShtml/string_002eendsWith.htmlstring.endsWith (Tablicious v0.4.7)A6 AMhtml/string_002eerase.htmlstring.erase (Tablicious v0.4.7)I5 IUhtml/string_002eismissing.htmlstring.ismissing (Tablicious v0.4.7)E4 EQhtml/string_002eisnanny.htmlstring.isnanny (Tablicious v0.4.7)G3 GShtml/string_002eisstring.htmlstring.isstring (Tablicious v0.4.7)A2 AMhtml/string_002elower.htmlstring.lower (Tablicious v0.4.7)E1 EQhtml/string_002emissing.htmlstring.missing (Tablicious v0.4.7)?0 ?Khtml/string_002eplus.htmlstring.plus (Tablicious v0.4.7)I/ IUhtml/string_002eregexprep.htmlstring.regexprep (Tablicious v0.4.7)E. EQhtml/string_002ereverse.htmlstring.reverse (Tablicious v0.4.7)U- Y]html/string_002ereverse_005fbytes.htmlstring.reverse_bytes (Tablicious v0.4.7)K, KWhtml/string_002estartsWith.htmlstring.startsWith (Tablicious v0.4.7)C+ COhtml/string_002estrcat.htmlstring.strcat (Tablicious v0.4.7)C* COhtml/string_002estrcmp.htmlstring.strcmp (Tablicious v0.4.7)E) EQhtml/string_002estrfind.htmlstring.strfind (Tablicious v0.4.7)C( COhtml/string_002estring.htmlstring.string (Tablicious v0.4.7)I' IUhtml/string_002estrlength.htmlstring.strlength (Tablicious v0.4.7)Y& ]ahtml/string_002estrlength_005fbytes.htmlstring.strlength_bytes (Tablicious v0.4.7)C% COhtml/string_002estrrep.htmlstring.strrep (Tablicious v0.4.7)A$ AMhtml/string_002eupper.htmlstring.upper (Tablicious v0.4.7)=# 9Mhtml/struct2table.htmlstruct2table (Tablicious v0.4.7)/" +?html/table.htmltable (Tablicious v0.4.7)C! COhtml/table_002eaddvars.htmltable.addvars (Tablicious v0.4.7)E  EQhtml/table_002eantijoin.htmltable.antijoin (Tablicious v0.4.7)G GShtml/table_002ecartesian.htmltable.cartesian (Tablicious v0.4.7)K KWhtml/table_002econvertvars.htmltable.convertvars (Tablicious v0.4.7)I IUhtml/table_002efindgroups.htmltable.findgroups (Tablicious v0.4.7)A AMhtml/table_002egetvar.htmltable.getvar (Tablicious v0.4.7)C COhtml/table_002egetvars.htmltable.getvars (Tablicious v0.4.7)C COhtml/table_002egroupby.htmltable.groupby (Tablicious v0.4.7)A AMhtml/table_002eheight.htmltable.height (Tablicious v0.4.7)C COhtml/table_002ehorzcat.htmltable.horzcat (Tablicious v0.4.7)G GShtml/table_002einnerjoin.htmltable.innerjoin (Tablicious v0.4.7)G GShtml/table_002eintersect.htmltable.intersect (Tablicious v0.4.7)C COhtml/table_002eisempty.htmltable.isempty (Tablicious v0.4.7)E EQhtml/table_002eismember.htmltable.ismember (Tablicious v0.4.7)G GShtml/table_002eismissing.htmltable.ismissing (Tablicious v0.4.7)C COhtml/table_002eistable.htmltable.istable (Tablicious v0.4.7)= =Ihtml/table_002ejoin.htmltable.join (Tablicious v0.4.7)G GShtml/table_002emergevars.htmltable.mergevars (Tablicious v0.4.7) :r.l, h & \  | F  8 V h|B^&z8\~2Fh"5 1Ehtml/dispstrs.htmldispstrs (Tablicious v0.4.7)5 1Ehtml/duration.htmlduration (Tablicious v0.4.7)C COhtml/duration_002echar.htmlduration.char (Tablicious v0.4.7)I IUhtml/duration_002edatevec.htmlduration.datevec (Tablicious v0.4.7)K KWhtml/duration_002edispstrs.htmlduration.dispstrs (Tablicious v0.4.7)A~ AMhtml/duration_002ehms.htmlduration.hms (Tablicious v0.4.7)E} EQhtml/duration_002ehours.htmlduration.hours (Tablicious v0.4.7)K| KWhtml/duration_002elinspace.htmlduration.linspace (Tablicious v0.4.7)S{ S_html/duration_002emilliseconds.htmlduration.milliseconds (Tablicious v0.4.7)Iz IUhtml/duration_002eminutes.htmlduration.minutes (Tablicious v0.4.7)Gy GShtml/duration_002eofDays.htmlduration.ofDays (Tablicious v0.4.7)Ix IUhtml/duration_002eseconds.htmlduration.seconds (Tablicious v0.4.7)Ew EQhtml/duration_002eyears.htmlduration.years (Tablicious v0.4.7)+v ';html/eqn.htmleqn (Tablicious v0.4.7)-u )=html/head.htmlhead (Tablicious v0.4.7)/t +?html/hours.htmlhours (Tablicious v0.4.7)Is EYhtml/iscalendarduration.htmliscalendarduration (Tablicious v0.4.7)?r ;Ohtml/iscategorical.htmliscategorical (Tablicious v0.4.7)9q 5Ihtml/isdatetime.htmlisdatetime (Tablicious v0.4.7)9p 5Ihtml/isduration.htmlisduration (Tablicious v0.4.7)1o -Ahtml/isfile.htmlisfile (Tablicious v0.4.7)5n 1Ehtml/isfolder.htmlisfolder (Tablicious v0.4.7)3m /Chtml/isnanny.htmlisnanny (Tablicious v0.4.7)3l /Chtml/istable.htmlistable (Tablicious v0.4.7)7k 3Ghtml/istabular.htmlistabular (Tablicious v0.4.7);j 7Khtml/istimetable.htmlistimetable (Tablicious v0.4.7)7i 3Ghtml/localdate.htmllocaldate (Tablicious v0.4.7)Kh KWhtml/localdate_002edatenum.htmllocaldate.datenum (Tablicious v0.4.7)Kg KWhtml/localdate_002edatestr.htmllocaldate.datestr (Tablicious v0.4.7)Mf MYhtml/localdate_002edatestrs.htmllocaldate.datestrs (Tablicious v0.4.7)Qe Q]html/localdate_002edatestruct.htmllocaldate.datestruct (Tablicious v0.4.7)Md MYhtml/localdate_002edispstrs.htmllocaldate.dispstrs (Tablicious v0.4.7)Gc GShtml/localdate_002eisnan.htmllocaldate.isnan (Tablicious v0.4.7)Gb GShtml/localdate_002eisnat.htmllocaldate.isnat (Tablicious v0.4.7)Oa O[html/localdate_002elocaldate.htmllocaldate.localdate (Tablicious v0.4.7)C` COhtml/localdate_002eNaT.htmllocaldate.NaT (Tablicious v0.4.7)O_ O[html/localdate_002eposixtime.htmllocaldate.posixtime (Tablicious v0.4.7)C^ COhtml/localdate_002eymd.htmllocaldate.ymd (Tablicious v0.4.7)=] 9Mhtml/milliseconds.htmlmilliseconds (Tablicious v0.4.7)3\ /Chtml/minutes.htmlminutes (Tablicious v0.4.7)3[ /Chtml/missing.htmlmissing (Tablicious v0.4.7)IZ IUhtml/missing_002edispstrs.htmlmissing.dispstrs (Tablicious v0.4.7)KY KWhtml/missing_002eismissing.htmlmissing.ismissing (Tablicious v0.4.7)CX COhtml/missing_002eisnan.htmlmissing.isnan (Tablicious v0.4.7)GW GShtml/missing_002eisnanny.htmlmissing.isnanny (Tablicious v0.4.7)GV GShtml/missing_002emissing.htmlmissing.missing (Tablicious v0.4.7)3U /Chtml/mustBeA.htmlmustBeA (Tablicious v0.4.7)?T ;Ohtml/mustBeCellstr.htmlmustBeCellstr (Tablicious v0.4.7)?S ;Ohtml/mustBeCharvec.htmlmustBeCharvec (Tablicious v0.4.7)=R 9Mhtml/mustBeFinite.htmlmustBeFinite (Tablicious v0.4.7)?Q ;Ohtml/mustBeInteger.htmlmustBeInteger (Tablicious v0.4.7)=P 9Mhtml/mustBeMember.htmlmustBeMember (Tablicious v0.4.7)AO =Qhtml/mustBeNonempty.htmlmustBeNonempty (Tablicious v0.4.7)?N ;Ohtml/mustBeNumeric.htmlmustBeNumeric (Tablicious v0.4.7)9M 5Ihtml/mustBeReal.htmlmustBeReal (Tablicious v0.4.7)AL =Qhtml/mustBeSameSize.htmlmustBeSameSize (Tablicious v0.4.7)=K 9Mhtml/mustBeScalar.htmlmustBeScalar (Tablicious v0.4.7)KJ G[html/mustBeScalarLogical.htmlmustBeScalarLogical (Tablicious v0.4.7) 4Jp x 2 J  | , T l (Z8JZp8lplO7 O[html/categorical_002emissing.html7categorical.missing (Tablicious v0.4.7)U6 Uahtml/categorical_002eremovecats.html6categorical.removecats (Tablicious v0.4.7)U5 Uahtml/categorical_002erenamecats.html5categorical.renamecats (Tablicious v0.4.7)W4 Wchtml/categorical_002ereordercats.html4categorical.reordercats (Tablicious v0.4.7)O3 O[html/categorical_002esetcats.html3categorical.setcats (Tablicious v0.4.7)W2 Wchtml/categorical_002esqueezecats.html2categorical.squeezecats (Tablicious v0.4.7)M1 MYhtml/categorical_002estring.html1categorical.string (Tablicious v0.4.7)O0 O[html/categorical_002esummary.html0categorical.summary (Tablicious v0.4.7)S/ S_html/categorical_002eundefined.html/categorical.undefined (Tablicious v0.4.7)9. 5Ihtml/cell2table.html.cell2table (Tablicious v0.4.7)7- 3Ghtml/colvecfun.html-colvecfun (Tablicious v0.4.7)5, 1Ehtml/contains.html,contains (Tablicious v0.4.7)5+ 1Ehtml/datetime.html+datetime (Tablicious v0.4.7)E* EQhtml/datetime_002ecolon.html*datetime.colon (Tablicious v0.4.7)g) gshtml/datetime_002econvertDatenumTimeZone.html)datetime.convertDatenumTimeZone (Tablicious v0.4.7)I( IUhtml/datetime_002edatenum.html(datetime.datenum (Tablicious v0.4.7)U' Uahtml/datetime_002edatenum2posix.html'datetime.datenum2posix (Tablicious v0.4.7)I& IUhtml/datetime_002edatestr.html&datetime.datestr (Tablicious v0.4.7)K% KWhtml/datetime_002edatestrs.html%datetime.datestrs (Tablicious v0.4.7)O$ O[html/datetime_002edatestruct.html$datetime.datestruct (Tablicious v0.4.7)K# KWhtml/datetime_002edatetime.html#datetime.datetime (Tablicious v0.4.7)I" IUhtml/datetime_002edatevec.html"datetime.datevec (Tablicious v0.4.7)C! COhtml/datetime_002ediff.html!datetime.diff (Tablicious v0.4.7)K  KWhtml/datetime_002edispstrs.html datetime.dispstrs (Tablicious v0.4.7)? ?Khtml/datetime_002eeq.htmldatetime.eq (Tablicious v0.4.7)? ?Khtml/datetime_002ege.htmldatetime.ge (Tablicious v0.4.7)G GShtml/datetime_002egmtime.htmldatetime.gmtime (Tablicious v0.4.7)? ?Khtml/datetime_002egt.htmldatetime.gt (Tablicious v0.4.7)A AMhtml/datetime_002ehms.htmldatetime.hms (Tablicious v0.4.7)M MYhtml/datetime_002eisbetween.htmldatetime.isbetween (Tablicious v0.4.7)M MYhtml/datetime_002eismissing.htmldatetime.ismissing (Tablicious v0.4.7)E EQhtml/datetime_002eisnan.htmldatetime.isnan (Tablicious v0.4.7)E EQhtml/datetime_002eisnat.htmldatetime.isnat (Tablicious v0.4.7)? ?Khtml/datetime_002ele.htmldatetime.le (Tablicious v0.4.7)K KWhtml/datetime_002elinspace.htmldatetime.linspace (Tablicious v0.4.7)M MYhtml/datetime_002elocaltime.htmldatetime.localtime (Tablicious v0.4.7)? ?Khtml/datetime_002elt.htmldatetime.lt (Tablicious v0.4.7)E EQhtml/datetime_002eminus.htmldatetime.minus (Tablicious v0.4.7)A AMhtml/datetime_002eNaT.htmldatetime.NaT (Tablicious v0.4.7)? ?Khtml/datetime_002ene.htmldatetime.ne (Tablicious v0.4.7)M MYhtml/datetime_002eofDatenum.htmldatetime.ofDatenum (Tablicious v0.4.7)S S_html/datetime_002eofDatestruct.htmldatetime.ofDatestruct (Tablicious v0.4.7)C  COhtml/datetime_002eplus.html datetime.plus (Tablicious v0.4.7)U  Uahtml/datetime_002eposix2datenum.html datetime.posix2datenum (Tablicious v0.4.7)M  MYhtml/datetime_002eposixtime.html datetime.posixtime (Tablicious v0.4.7)M  MYhtml/datetime_002eproxyKeys.html datetime.proxyKeys (Tablicious v0.4.7)M  MYhtml/datetime_002etimeofday.html datetime.timeofday (Tablicious v0.4.7)C COhtml/datetime_002eweek.htmldatetime.week (Tablicious v0.4.7)A AMhtml/datetime_002eymd.htmldatetime.ymd (Tablicious v0.4.7)G GShtml/datetime_002eymdhms.htmldatetime.ymdhms (Tablicious v0.4.7)- )=html/days.htmldays (Tablicious v0.4.7)9 5Ihtml/discretize.htmldiscretize (Tablicious v0.4.7) 1PR V  R P H >$n8h&BZ F`~>-h +;html/index.htmlhTop (Tablicious v0.4.7)=g 9Mhtml/Introduction.htmlgIntroduction (Tablicious v0.4.7)Cf ?Shtml/Getting-Started.htmlfGetting Started (Tablicious v0.4.7)Me I]html/Table-Representation.htmleTable Representation (Tablicious v0.4.7)Id EYhtml/Table-Construction.htmldTable Construction (Tablicious v0.4.7)?c ;Ohtml/Tables-vs-SQL.htmlcTables vs SQL (Tablicious v0.4.7)]b Ymhtml/Date-and-Time-Representation.htmlbDate and Time Representation (Tablicious v0.4.7)Aa =Qhtml/datetime-Class.htmladatetime Class (Tablicious v0.4.7)O` K_html/Datenum-Compatibility.html`Datenum Compatibility (Tablicious v0.4.7)9_ 5Ihtml/Time-Zones.html_Time Zones (Tablicious v0.4.7)I^ EYhtml/Defined-Time-Zones.html^Defined Time Zones (Tablicious v0.4.7)7] 3Ghtml/Durations.html]Durations (Tablicious v0.4.7)A\ =Qhtml/duration-Class.html\duration Class (Tablicious v0.4.7)Q[ Mahtml/calendarDuration-Class.html[calendarDuration Class (Tablicious v0.4.7)MZ I]html/Validation-Functions.htmlZValidation Functions (Tablicious v0.4.7)GY CWhtml/Example-Data-Sets.htmlYExample Data Sets (Tablicious v0.4.7)EX AUhtml/Data-Sets-from-R.htmlXData Sets from R (Tablicious v0.4.7)OW K_html/Missing-Functionality.htmlWMissing Functionality (Tablicious v0.4.7)?V ;Ohtml/API-Reference.htmlVAPI Reference (Tablicious v0.4.7)CU ?Shtml/API-by-Category.htmlUAPI by Category (Tablicious v0.4.7)IT EYhtml/API-Alphabetically.htmlTAPI Alphabetically (Tablicious v0.4.7);S 7Khtml/array2table.htmlSarray2table (Tablicious v0.4.7)3R /Chtml/caldays.htmlRcaldays (Tablicious v0.4.7)EQ AUhtml/calendarDuration.htmlQcalendarDuration (Tablicious v0.4.7)kP kwhtml/calendarDuration_002ecalendarDuration.htmlPcalendarDuration.calendarDuration (Tablicious v0.4.7)YO Yehtml/calendarDuration_002edatevec.htmlOcalendarDuration.datevec (Tablicious v0.4.7)[N [ghtml/calendarDuration_002edispstrs.htmlNcalendarDuration.dispstrs (Tablicious v0.4.7)]M ]ihtml/calendarDuration_002eismissing.htmlMcalendarDuration.ismissing (Tablicious v0.4.7)UL Uahtml/calendarDuration_002eisnan.htmlLcalendarDuration.isnan (Tablicious v0.4.7)UK Uahtml/calendarDuration_002eminus.htmlKcalendarDuration.minus (Tablicious v0.4.7)WJ Wchtml/calendarDuration_002emtimes.htmlJcalendarDuration.mtimes (Tablicious v0.4.7)SI S_html/calendarDuration_002eplus.htmlIcalendarDuration.plus (Tablicious v0.4.7)UH Uahtml/calendarDuration_002etimes.htmlHcalendarDuration.times (Tablicious v0.4.7)WG Wchtml/calendarDuration_002euminus.htmlGcalendarDuration.uminus (Tablicious v0.4.7)7F 3Ghtml/calmonths.htmlFcalmonths (Tablicious v0.4.7)5E 1Ehtml/calyears.htmlEcalyears (Tablicious v0.4.7);D 7Khtml/categorical.htmlDcategorical (Tablicious v0.4.7)OC O[html/categorical_002eaddcats.htmlCcategorical.addcats (Tablicious v0.4.7)WB Wchtml/categorical_002ecategorical.htmlBcategorical.categorical (Tablicious v0.4.7)UA Uahtml/categorical_002ecategories.htmlAcategorical.categories (Tablicious v0.4.7)O@ O[html/categorical_002ecellstr.html@categorical.cellstr (Tablicious v0.4.7)Q? Q]html/categorical_002edispstrs.html?categorical.dispstrs (Tablicious v0.4.7)M> MYhtml/categorical_002edouble.html>categorical.double (Tablicious v0.4.7)U= Uahtml/categorical_002eiscategory.html=categorical.iscategory (Tablicious v0.4.7)S< S_html/categorical_002eismissing.htmlhtml/Missing-Functionality.html*Missing Functionality.html/API-Reference.htmlAPI Reference2html/API-by-Category.htmlAPI by Category8html/API-Alphabetically.html$API Alphabetically*html/array2table.htmlarray2table"html/caldays.htmlcaldays4html/calendarDuration.html calendarDuration^html/calendarDuration_002ecalendarDuration.htmlBcalendarDuration.calendarDurationLhtml/calendarDuration_002edatevec.html0calendarDuration.datevecNhtml/calendarDuration_002edispstrs.html2calendarDuration.dispstrsPhtml/calendarDuration_002eismissing.html4calendarDuration.ismissingHhtml/calendarDuration_002eisnan.html,calendarDuration.isnanHhtml/calendarDuration_002eminus.html,calendarDuration.minusJhtml/calendarDuration_002emtimes.html.calendarDuration.mtimesFhtml/calendarDuration_002eplus.html*calendarDuration.plusHhtml/calendarDuration_002etimes.html,calendarDuration.timesJhtml/calendarDuration_002euminus.html.calendarDuration.uminus&html/calmonths.htmlcalmonths$html/calyears.htmlcalyears*html/categorical.htmlcategoricalBhtml/categorical_002eaddcats.html&categorical.addcatsJhtml/categorical_002ecategorical.html.categorical.categoricalHhtml/categorical_002ecategories.html,categorical.categoriesBhtml/categorical_002ecellstr.html&categorical.cellstrDhtml/categorical_002edispstrs.html(categorical.dispstrs@html/categorical_002edouble.html$categorical.doubleHhtml/categorical_002eiscategory.html,categorical.iscategoryFhtml/categorical_002eismissing.html*categorical.ismissingBhtml/categorical_002eisnanny.html&categorical.isnannyFhtml/categorical_002eisordinal.html*categorical.isordinalJhtml/categorical_002eisundefined.html.categorical.isundefinedFhtml/categorical_002emergecats.html*categorical.mergecatsBhtml/categorical_002emissing.html&categorical.missingHhtml/categorical_002eremovecats.html,categorical.removecatsHhtml/categorical_002erenamecats.html,categorical.renamecatsJhtml/categorical_002ereordercats.html.categorical.reordercatsBhtml/categorical_002esetcats.html&categorical.setcatsJhtml/categorical_002esqueezecats.html.categorical.squeezecats@html/categorical_002estring.html$categorical.stringBhtml/categorical_002esummary.html&categorical.summaryFhtml/categorical_002eundefined.html*categorical.undefined(html/cell2table.htmlcell2table&html/colvecfun.htmlcolvecfun$html/contains.htmlcontains$html/datetime.htmldatetime8html/datetime_002ecolon.htmldatetime.colonZhtml/datetime_002econvertDatenumTimeZone.html>datetime.convertDatenumTimeZone<html/datetime_002edatenum.html datetime.datenumHhtml/datetime_002edatenum2posix.html,datetime.datenum2posix<html/datetime_002edatestr.html datetime.datestr>html/datetime_002edatestrs.html"datetime.datestrsBhtml/datetime_002edatestruct.html&datetime.datestruct>html/datetime_002edatetime.html"datetime.datetime<html/datetime_002edatevec.html datetime.datevec6html/datetime_002ediff.htmldatetime.diff>html/datetime_002edispstrs.html"datetime.dispstrs2html/datetime_002eeq.htmldatetime.eq2html/datetime_002ege.htmldatetime.ge:html/datetime_002egmtime.htmldatetime.gmtime2html/datetime_002egt.htmldatetime.gt4html/datetime_002ehms.htmldatetime.hms@html/datetime_002eisbetween.html$datetime.isbetween@html/datetime_002eismissing.html$datetime.ismissing8html/datetime_002eisnan.htmldatetime.isnan8html/datetime_002eisnat.htmldatetime.isnat2html/datetime_002ele.htmldatetime.le>html/datetime_002elinspace.html"datetime.linspace@html/datetime_002elocaltime.html$datetime.localtime2html/datetime_002elt.htmldatetime.lt8html/datetime_002eminus.htmldatetime.minus4html/datetime_002eNaT.htmldatetime.NaT2html/datetime_002ene.htmldatetime.ne@html/datetime_002eofDatenum.html$datetime.ofDatenumFhtml/datetime_002eofDatestruct.html*datetime.ofDatestruct6html/datetime_002eplus.htmldatetime.plusHhtml/datetime_002eposix2datenum.html,datetime.posix2datenum@html/datetime_002eposixtime.html$datetime.posixtime@html/datetime_002eproxyKeys.html$datetime.proxyKeys@html/datetime_002etimeofday.html$datetime.timeofday6html/datetime_002eweek.htmldatetime.week4html/datetime_002eymd.htmldatetime.ymd:html/datetime_002eymdhms.htmldatetime.ymdhmshtml/days.htmldays(html/discretize.htmldiscretize$html/dispstrs.htmldispstrs$html/duration.htmlduration6html/duration_002echar.htmlduration.char<html/duration_002edatevec.html duration.datevec>html/duration_002edispstrs.html"duration.dispstrs4html/duration_002ehms.htmlduration.hms8html/duration_002ehours.htmlduration.hours>html/duration_002elinspace.html"duration.linspaceFhtml/duration_002emilliseconds.html*duration.milliseconds<html/duration_002eminutes.html duration.minutes:html/duration_002eofDays.htmlduration.ofDays<html/duration_002eseconds.html duration.seconds8html/duration_002eyears.htmlduration.yearshtml/eqn.htmleqnhtml/head.htmlheadhtml/hours.html hours8html/iscalendarduration.html$iscalendarduration.html/iscategorical.htmliscategorical(html/isdatetime.htmlisdatetime(html/isduration.htmlisduration html/isfile.html isfile$html/isfolder.htmlisfolder"html/isnanny.htmlisnanny"html/istable.htmlistable&html/istabular.htmlistabular*html/istimetable.htmlistimetable&html/localdate.htmllocaldate>html/localdate_002edatenum.html"localdate.datenum>html/localdate_002edatestr.html"localdate.datestr@html/localdate_002edatestrs.html$localdate.datestrsDhtml/localdate_002edatestruct.html(localdate.datestruct@html/localdate_002edispstrs.html$localdate.dispstrs:html/localdate_002eisnan.htmllocaldate.isnan:html/localdate_002eisnat.htmllocaldate.isnatBhtml/localdate_002elocaldate.html&localdate.localdate6html/localdate_002eNaT.htmllocaldate.NaTBhtml/localdate_002eposixtime.html&localdate.posixtime6html/localdate_002eymd.htmllocaldate.ymd,html/milliseconds.htmlmilliseconds"html/minutes.htmlminutes"html/missing.htmlmissing<html/missing_002edispstrs.html missing.dispstrs>html/missing_002eismissing.html"missing.ismissing6html/missing_002eisnan.htmlmissing.isnan:html/missing_002eisnanny.htmlmissing.isnanny:html/missing_002emissing.htmlmissing.missing"html/mustBeA.htmlmustBeA.html/mustBeCellstr.htmlmustBeCellstr.html/mustBeCharvec.htmlmustBeCharvec,html/mustBeFinite.htmlmustBeFinite.html/mustBeInteger.htmlmustBeInteger,html/mustBeMember.htmlmustBeMember0html/mustBeNonempty.htmlmustBeNonempty.html/mustBeNumeric.htmlmustBeNumeric(html/mustBeReal.htmlmustBeReal0html/mustBeSameSize.htmlmustBeSameSize,html/mustBeScalar.htmlmustBeScalar:html/mustBeScalarLogical.html&mustBeScalarLogical,html/mustBeVector.htmlmustBeVectorhtml/NaC.htmlNaChtml/NaS.htmlNaShtml/NaT.htmlNaThtml/pp.htmlpp,html/scalarexpand.htmlscalarexpand"html/seconds.htmlseconds$html/size2str.htmlsize2str(html/splitapply.htmlsplitapply html/string.html string2html/string_002ecell.htmlstring.cell8html/string_002ecellstr.htmlstring.cellstr2html/string_002echar.htmlstring.char0html/string_002ecmp.htmlstring.cmp6html/string_002edecode.htmlstring.decode:html/string_002edispstrs.htmlstring.dispstrs4html/string_002eempty.htmlstring.empty6html/string_002eencode.htmlstring.encode:html/string_002eendsWith.htmlstring.endsWith4html/string_002eerase.htmlstring.erase<html/string_002eismissing.html string.ismissing8html/string_002eisnanny.htmlstring.isnanny:html/string_002eisstring.htmlstring.isstring4html/string_002elower.htmlstring.lower8html/string_002emissing.htmlstring.missing2html/string_002eplus.htmlstring.plus<html/string_002eregexprep.html string.regexprep8html/string_002ereverse.htmlstring.reverseLhtml/string_002ereverse_005fbytes.html(string.reverse_bytes>html/string_002estartsWith.html"string.startsWith6html/string_002estrcat.htmlstring.strcat6html/string_002estrcmp.htmlstring.strcmp8html/string_002estrfind.htmlstring.strfind6html/string_002estring.htmlstring.string<html/string_002estrlength.html string.strlengthPhtml/string_002estrlength_005fbytes.html,string.strlength_bytes6html/string_002estrrep.htmlstring.strrep4html/string_002eupper.htmlstring.upper,html/struct2table.htmlstruct2tablehtml/table.html table6html/table_002eaddvars.htmltable.addvars8html/table_002eantijoin.htmltable.antijoin:html/table_002ecartesian.htmltable.cartesian>html/table_002econvertvars.html"table.convertvars<html/table_002efindgroups.html table.findgroups4html/table_002egetvar.htmltable.getvar6html/table_002egetvars.htmltable.getvars6html/table_002egroupby.htmltable.groupby4html/table_002eheight.htmltable.height6html/table_002ehorzcat.htmltable.horzcat:html/table_002einnerjoin.htmltable.innerjoin:html/table_002eintersect.htmltable.intersect6html/table_002eisempty.htmltable.isempty8html/table_002eismember.htmltable.ismember:html/table_002eismissing.htmltable.ismissing6html/table_002eistable.htmltable.istable0html/table_002ejoin.htmltable.join:html/table_002emergevars.htmltable.mergevars8html/table_002emovevars.htmltable.movevars2html/table_002endims.htmltable.ndims2html/table_002enumel.htmltable.numelBhtml/table_002eouterfillvals.html&table.outerfillvals:html/table_002eouterjoin.htmltable.outerjoin>html/table_002eprettyprint.html"table.prettyprint8html/table_002erealjoin.htmltable.realjoin<html/table_002eremovevars.html table.removevars<html/table_002erenamevars.html table.renamevars6html/table_002erepelem.htmltable.repelem4html/table_002erepmat.htmltable.repmat8html/table_002erestrict.htmltable.restrict4html/table_002erowfun.htmltable.rowfun:html/table_002erows2vars.htmltable.rows2vars8html/table_002esemijoin.htmltable.semijoin6html/table_002esetdiff.htmltable.setdiffJhtml/table_002esetDimensionNames.html.table.setDimensionNames>html/table_002esetRowNames.html"table.setRowNames4html/table_002esetvar.htmltable.setvarHhtml/table_002esetVariableNames.html,table.setVariableNames4html/table_002esetxor.htmltable.setxor0html/table_002esize.htmltable.size<html/table_002esplitapply.html table.splitapply:html/table_002esplitvars.htmltable.splitvars6html/table_002esqueeze.htmltable.squeeze2html/table_002estack.htmltable.stack6html/table_002esummary.htmltable.summary2html/table_002etable.htmltable.table>html/table_002etable2array.html"table.table2array<html/table_002etable2cell.html table.table2cell@html/table_002etable2struct.html$table.table2struct2html/table_002eunion.htmltable.union4html/table_002evarfun.htmltable.varfun8html/table_002evarnames.htmltable.varnames6html/table_002evertcat.htmltable.vertcat2html/table_002ewidth.htmltable.width:html/tableOuterFillValue.html&tableOuterFillValuehtml/tail.htmltail8html/tblish_002edataset.htmltblish.datasetRhtml/tblish_002edataset_002eairmiles.html.tblish.dataset.airmiles\html/tblish_002edataset_002eAirPassengers.html8tblish.dataset.AirPassengersVhtml/tblish_002edataset_002eairquality.html2tblish.dataset.airqualityRhtml/tblish_002edataset_002eanscombe.html.tblish.dataset.anscombeNhtml/tblish_002edataset_002eattenu.html*tblish.dataset.attenuRhtml/tblish_002edataset_002eattitude.html.tblish.dataset.attitudePhtml/tblish_002edataset_002eaustres.html,tblish.dataset.austresPhtml/tblish_002edataset_002ebeavers.html,tblish.dataset.beaversPhtml/tblish_002edataset_002eBJsales.html,tblish.dataset.BJsalesHhtml/tblish_002edataset_002eBOD.html$tblish.dataset.BODJhtml/tblish_002edataset_002ecars.html&tblish.dataset.carsXhtml/tblish_002edataset_002eChickWeight.html4tblish.dataset.ChickWeightRhtml/tblish_002edataset_002echickwts.html.tblish.dataset.chickwtsHhtml/tblish_002edataset_002eco2.html$tblish.dataset.co2Phtml/tblish_002edataset_002ecrimtab.html,tblish.dataset.crimtabPhtml/tblish_002edataset_002ecupcake.html,tblish.dataset.cupcakeXhtml/tblish_002edataset_002ediscoveries.html4tblish.dataset.discoveriesLhtml/tblish_002edataset_002eDNase.html(tblish.dataset.DNaseLhtml/tblish_002edataset_002eesoph.html(tblish.dataset.esophJhtml/tblish_002edataset_002eeuro.html&tblish.dataset.euroRhtml/tblish_002edataset_002eeurodist.html.tblish.dataset.eurodist^html/tblish_002edataset_002eEuStockMarkets.html:tblish.dataset.EuStockMarketsRhtml/tblish_002edataset_002efaithful.html.tblish.dataset.faithfulZhtml/tblish_002edataset_002eFormaldehyde.html6tblish.dataset.FormaldehydeNhtml/tblish_002edataset_002efreeny.html*tblish.dataset.freenyZhtml/tblish_002edataset_002eHairEyeColor.html6tblish.dataset.HairEyeColorXhtml/tblish_002edataset_002eHarman23cor.html4tblish.dataset.Harman23corXhtml/tblish_002edataset_002eHarman74cor.html4tblish.dataset.Harman74corRhtml/tblish_002edataset_002eIndometh.html.tblish.dataset.IndomethNhtml/tblish_002edataset_002einfert.html*tblish.dataset.infertZhtml/tblish_002edataset_002eInsectSprays.html6tblish.dataset.InsectSpraysJhtml/tblish_002edataset_002eiris.html&tblish.dataset.irisPhtml/tblish_002edataset_002eislands.html,tblish.dataset.islands^html/tblish_002edataset_002eJohnsonJohnson.html:tblish.dataset.JohnsonJohnsonThtml/tblish_002edataset_002eLakeHuron.html0tblish.dataset.LakeHuronFhtml/tblish_002edataset_002elh.html"tblish.dataset.lhbhtml/tblish_002edataset_002eLifeCycleSavings.html>tblish.dataset.LifeCycleSavingsRhtml/tblish_002edataset_002eLoblolly.html.tblish.dataset.LoblollyPhtml/tblish_002edataset_002elongley.html,tblish.dataset.longleyJhtml/tblish_002edataset_002elynx.html&tblish.dataset.lynxNhtml/tblish_002edataset_002emorley.html*tblish.dataset.morleyNhtml/tblish_002edataset_002emtcars.html*tblish.dataset.mtcarsNhtml/tblish_002edataset_002enhtemp.html*tblish.dataset.nhtempJhtml/tblish_002edataset_002eNile.html&tblish.dataset.NileNhtml/tblish_002edataset_002enottem.html*tblish.dataset.nottemHhtml/tblish_002edataset_002enpk.html$tblish.dataset.npkfhtml/tblish_002edataset_002eoccupationalStatus.htmlBtblish.dataset.occupationalStatusNhtml/tblish_002edataset_002eOrange.html*tblish.dataset.Orange\html/tblish_002edataset_002eOrchardSprays.html8tblish.dataset.OrchardSpraysXhtml/tblish_002edataset_002ePlantGrowth.html4tblish.dataset.PlantGrowthNhtml/tblish_002edataset_002eprecip.html*tblish.dataset.precipVhtml/tblish_002edataset_002epresidents.html2tblish.dataset.presidentsRhtml/tblish_002edataset_002epressure.html.tblish.dataset.pressureThtml/tblish_002edataset_002ePuromycin.html0tblish.dataset.PuromycinNhtml/tblish_002edataset_002equakes.html*tblish.dataset.quakesLhtml/tblish_002edataset_002erandu.html(tblish.dataset.randuNhtml/tblish_002edataset_002erivers.html*tblish.dataset.riversJhtml/tblish_002edataset_002erock.html&tblish.dataset.rockLhtml/tblish_002edataset_002esleep.html(tblish.dataset.sleepThtml/tblish_002edataset_002estackloss.html0tblish.dataset.stacklossLhtml/tblish_002edataset_002estate.html(tblish.dataset.statedhtml/tblish_002edataset_002esunspot_005fmonth.html8tblish.dataset.sunspot_monthbhtml/tblish_002edataset_002esunspot_005fyear.html6tblish.dataset.sunspot_yearRhtml/tblish_002edataset_002esunspots.html.tblish.dataset.sunspotsLhtml/tblish_002edataset_002eswiss.html(tblish.dataset.swissNhtml/tblish_002edataset_002eTheoph.html*tblish.dataset.TheophPhtml/tblish_002edataset_002eTitanic.html,tblish.dataset.TitanicXhtml/tblish_002edataset_002eToothGrowth.html4tblish.dataset.ToothGrowthRhtml/tblish_002edataset_002etreering.html.tblish.dataset.treeringLhtml/tblish_002edataset_002etrees.html(tblish.dataset.trees\html/tblish_002edataset_002eUCBAdmissions.html8tblish.dataset.UCBAdmissions^html/tblish_002edataset_002eUKDriverDeaths.html:tblish.dataset.UKDriverDeathsLhtml/tblish_002edataset_002eUKgas.html(tblish.dataset.UKgasZhtml/tblish_002edataset_002eUKLungDeaths.html6tblish.dataset.UKLungDeathsXhtml/tblish_002edataset_002eUSAccDeaths.html4tblish.dataset.USAccDeathsThtml/tblish_002edataset_002eUSArrests.html0tblish.dataset.USArrests^html/tblish_002edataset_002eUSJudgeRatings.html:tblish.dataset.USJudgeRatingslhtml/tblish_002edataset_002eUSPersonalExpenditure.htmlHtblish.dataset.USPersonalExpenditureLhtml/tblish_002edataset_002euspop.html(tblish.dataset.uspopRhtml/tblish_002edataset_002eVADeaths.html.tblish.dataset.VADeathsPhtml/tblish_002edataset_002evolcano.html,tblish.dataset.volcanoVhtml/tblish_002edataset_002ewarpbreaks.html2tblish.dataset.warpbreaksLhtml/tblish_002edataset_002ewomen.html(tblish.dataset.womenXhtml/tblish_002edataset_002eWorldPhones.html4tblish.dataset.WorldPhonesRhtml/tblish_002edataset_002eWWWusage.html.tblish.dataset.WWWusageJhtml/tblish_002edataset_002ezCO2.html&tblish.dataset.zCO2:html/tblish_002edatasets.htmltblish.datasetsDhtml/datasets_002edescription.html(datasets.description6html/datasets_002elist.htmldatasets.list6html/datasets_002eload.htmldatasets.loadLhtml/tblish_002eevalWithTableVars.html0tblish.evalWithTableVarsPhtml/tblish_002eexamples_002ecoplot.html,tblish.examples.coplot`html/tblish_002eexamples_002eplot_005fpairs.html4tblish.examples.plot_pairsLhtml/tblish_002eexamples_002eSpDb.html(tblish.examples.SpDb8html/tblish_002esizeof2.htmltblish.sizeof2Nhtml/tblish_002etable_002egrpstats.html*tblish.table.grpstats&html/timezones.htmltimezones(html/todatetime.htmltodatetime"html/vartype.htmlvartype html/vecfun.html vecfunhtml/years.html years"html/Copying.htmlCopyingtablicious.html2Entire Manual in One Page Yhd- Q  U  T  K  s B tU8e>h; `?S,g@_0aN/#Y'' duration.charduration.charX durationdurationW dispstrsdispstrsV!! discretizediscretizeU daysdays'T++ datetime.ymdhmsdatetime.ymdhms!S%% datetime.ymddatetime.ymd#R'' datetime.weekdatetime.week-Q11 datetime.timeofdaydatetime.timeofday -P11 datetime.proxyKeysdatetime.proxyKeys -O11 datetime.posixtimedatetime.posixtime 5N99 datetime.posix2datenumdatetime.posix2datenum #M'' datetime.plusdatetime.plus 3L77 datetime.ofDatestructdatetime.ofDatestruct-K11 datetime.ofDatenumdatetime.ofDatenumJ## datetime.nedatetime.ne%I)) datetime.minusdatetime.minusH## datetime.ltdatetime.lt-G11 datetime.localtimedatetime.localtime+F// datetime.linspacedatetime.linspaceE## datetime.ledatetime.le%D)) datetime.isnatdatetime.isnat%C)) datetime.isnandatetime.isnan-B11 datetime.ismissingdatetime.ismissing-A11 datetime.isbetweendatetime.isbetween!@%% datetime.hmsdatetime.hms?## datetime.gtdatetime.gt'>++ datetime.gmtimedatetime.gmtime=## datetime.gedatetime.ge<## datetime.eqdatetime.eq+;// datetime.dispstrsdatetime.dispstrs #:'' datetime.diffdatetime.diff!)9-- datetime.datevecdatetime.datevec"+8// datetime.datetimedatetime.datetime#/733 datetime.datestructdatetime.datestruct$+6// datetime.datestrsdatetime.datestrs%)5-- datetime.datestrdatetime.datestr&5499 datetime.datenum2posixdatetime.datenum2posix')3-- datetime.datenumdatetime.datenum(G2KK datetime.convertDatenumTimeZonedatetime.convertDatenumTimeZone)%1)) datetime.colondatetime.colon*!0%% datetime.NaTdatetime.NaT/ datetimedatetime+".'' datasets.loaddatasets.load"-'' datasets.listdatasets.list0,55 datasets.descriptiondatasets.description+ containscontains,* colvecfuncolvecfun-)!! cell2tablecell2table.3(77 categorical.undefinedcategorical.undefined//'33 categorical.summarycategorical.summary0-&11 categorical.stringcategorical.string17%;; categorical.squeezecatscategorical.squeezecats2/$33 categorical.setcatscategorical.setcats37#;; categorical.reordercatscategorical.reordercats45"99 categorical.renamecatscategorical.renamecats55!99 categorical.removecatscategorical.removecats6/ 33 categorical.missingcategorical.missing7377 categorical.mergecatscategorical.mergecats87;; categorical.isundefinedcategorical.isundefined9377 categorical.isordinalcategorical.isordinal:/33 categorical.isnannycategorical.isnanny;377 categorical.ismissingcategorical.ismissing<599 categorical.iscategorycategorical.iscategory=-11 categorical.doublecategorical.double>155 categorical.dispstrscategorical.dispstrs?/33 categorical.cellstrcategorical.cellstr@599 categorical.categoriescategorical.categoriesA7;; categorical.categoricalcategorical.categoricalB/33 categorical.addcatscategorical.addcatsC## categoricalcategoricalD calyearscalyearsE calmonthscalmonthsF7;; calendarDuration.uminuscalendarDuration.uminusG599 calendarDuration.timescalendarDuration.timesH377 calendarDuration.pluscalendarDuration.plusI7 ;; calendarDuration.mtimescalendarDuration.mtimesJ5 99 calendarDuration.minuscalendarDuration.minusK5 99 calendarDuration.isnancalendarDuration.isnanL= AA calendarDuration.ismissingcalendarDuration.ismissingM; ?? calendarDuration.dispstrscalendarDuration.dispstrsN9== calendarDuration.dateveccalendarDuration.datevecOKOO calendarDuration.calendarDurationcalendarDuration.calendarDurationP)-- calendarDurationcalendarDurationQ caldayscaldaysR## array2tablearray2tableS NaTNaT NaSNaS NaCNaC e^1}VE2 r Y <   P  k :  h B  d L * pL&Z6d6p8f<rN(\6N$+>// table.prettyprinttable.prettyprint'=++ table.outerjointable.outerjoin/<33 table.outerfillvalstable.outerfillvals;## table.numeltable.numel:## table.ndimstable.ndims%9)) table.movevarstable.movevars'8++ table.mergevarstable.mergevars7!! table.jointable.join#6'' table.istabletable.istable'5++ table.ismissingtable.ismissing%4)) table.ismembertable.ismember#3'' table.isemptytable.isempty'2++ table.intersecttable.intersect'1++ table.innerjointable.innerjoin#0'' table.horzcattable.horzcat!/%% table.heighttable.height#.'' table.groupbytable.groupby#-'' table.getvarstable.getvars!,%% table.getvartable.getvar)+-- table.findgroupstable.findgroups+*// table.convertvarstable.convertvars')++ table.cartesiantable.cartesian%()) table.antijointable.antijoin#''' table.addvarstable.addvars& tabletable!%%% struct2tablestruct2table!$%% string.upperstring.upper##'' string.strrepstring.strrep5"99 string.strlength_bytesstring.strlength_bytes)!-- string.strlengthstring.strlength# '' string.stringstring.string%)) string.strfindstring.strfind#'' string.strcmpstring.strcmp#'' string.strcatstring.strcat+// string.startsWithstring.startsWith155 string.reverse_bytesstring.reverse_bytes%)) string.reversestring.reverse)-- string.regexprepstring.regexprep## string.plusstring.plus%)) string.missingstring.missing!%% string.lowerstring.lower'++ string.isstringstring.isstring%)) string.isnannystring.isnanny)-- string.ismissingstring.ismissing!%% string.erasestring.erase'++ string.endsWithstring.endsWith#'' string.encodestring.encode!%% string.emptystring.empty'++ string.dispstrsstring.dispstrs# '' string.decodestring.decode !! string.cmpstring.cmp ## string.charstring.char% )) string.cellstrstring.cellstr ## string.cellstring.cell stringstring!! splitapplysplitapply size2strsize2str secondsseconds!%% scalarexpandscalarexpand  pppp'++ missing.missingmissing.missing'++ missing.isnannymissing.isnanny#'' missing.isnanmissing.isnan+// missing.ismissingmissing.ismissing)~-- missing.dispstrsmissing.dispstrs} missingmissing| minutesminutes!{%% millisecondsmilliseconds#z'' localdate.ymdlocaldate.ymd/y33 localdate.posixtimelocaldate.posixtime/x33 localdate.localdatelocaldate.localdate'w++ localdate.isnatlocaldate.isnat'v++ localdate.isnanlocaldate.isnan-u11 localdate.dispstrslocaldate.dispstrs1t55 localdate.datestructlocaldate.datestruct-s11 localdate.datestrslocaldate.datestrs+r// localdate.datestrlocaldate.datestr+q// localdate.datenumlocaldate.datenum#p'' localdate.NaTlocaldate.NaTo localdatelocaldaten## istimetableistimetablem istabularistabularl istableistablek isnannyisnannyj!! isdurationisdurationi!! isdatetimeisdatetime#h'' iscategoricaliscategorical-g11 iscalendardurationiscalendardurationf hourshourse headheadd eqneqn%c)) duration.yearsduration.years)b-- duration.secondsduration.seconds'a++ duration.ofDaysduration.ofDays)`-- duration.minutesduration.minutes3_77 duration.millisecondsduration.milliseconds+^// duration.linspaceduration.linspace%])) duration.hoursduration.hours!\%% duration.hmsduration.hms+[// duration.dispstrsduration.dispstrs)Z-- duration.datevecduration.datevec LZ6_2 p E  c 8 y X E  u 6  } <D{BZt1x9f-|?a*6 ;; tblish.dataset.chickwtstblish.dataset.chickwts\. 33 tblish.dataset.carstblish.dataset.cars^499 tblish.dataset.beaverstblish.dataset.beaversa499 tblish.dataset.austrestblish.dataset.austresb6;; tblish.dataset.attitudetblish.dataset.attitudec277 tblish.dataset.attenutblish.dataset.attenud6;; tblish.dataset.anscombetblish.dataset.anscombee:?? tblish.dataset.airqualitytblish.dataset.airqualityf6;; tblish.dataset.airmilestblish.dataset.airmilesh<AA tblish.dataset.WorldPhonestblish.dataset.WorldPhones6;; tblish.dataset.WWWusagetblish.dataset.WWWusage6;; tblish.dataset.VADeathstblish.dataset.VADeathsP~UU tblish.dataset.USPersonalExpendituretblish.dataset.USPersonalExpenditureB}GG tblish.dataset.USJudgeRatingstblish.dataset.USJudgeRatings8|== tblish.dataset.USArreststblish.dataset.USArrests<{AA tblish.dataset.USAccDeathstblish.dataset.USAccDeaths0z55 tblish.dataset.UKgastblish.dataset.UKgas >yCC tblish.dataset.UKLungDeathstblish.dataset.UKLungDeathsBxGG tblish.dataset.UKDriverDeathstblish.dataset.UKDriverDeaths!@wEE tblish.dataset.UCBAdmissionstblish.dataset.UCBAdmissions"jCC tblish.dataset.InsectSpraystblish.dataset.InsectSpraysJ6i;; tblish.dataset.Indomethtblish.dataset.IndomethLfCC tblish.dataset.HairEyeColortblish.dataset.HairEyeColorO>eCC tblish.dataset.Formaldehydetblish.dataset.FormaldehydeQBdGG tblish.dataset.EuStockMarketstblish.dataset.EuStockMarketsS0c55 tblish.dataset.DNasetblish.dataset.DNaseW vartypevartype=!! todatetimetodatetime< timezonestimezones2;77 tblish.table.grpstatstblish.table.grpstats $:)) tblish.sizeof2tblish.sizeof2 <9AA tblish.examples.plot_pairstblish.examples.plot_pairs 4899 tblish.examples.coplottblish.examples.coplot 0755 tblish.examples.SpDbtblish.examples.SpDb 86== tblish.evalWithTableVarstblish.evalWithTableVars&5++ tblish.datasetstblish.datasets.433 tblish.dataset.zCO2tblish.dataset.zCO20355 tblish.dataset.womentblish.dataset.women:2?? tblish.dataset.warpbreakstblish.dataset.warpbreaks4199 tblish.dataset.volcanotblish.dataset.volcano0055 tblish.dataset.uspoptblish.dataset.uspop0/55 tblish.dataset.treestblish.dataset.trees#6.;; tblish.dataset.treeringtblish.dataset.treering$0-55 tblish.dataset.swisstblish.dataset.swiss(6,;; tblish.dataset.sunspotstblish.dataset.sunspots)>+CC tblish.dataset.sunspot_yeartblish.dataset.sunspot_year*@*EE tblish.dataset.sunspot_monthtblish.dataset.sunspot_month+0)55 tblish.dataset.statetblish.dataset.state,8(== tblish.dataset.stacklosstblish.dataset.stackloss-0'55 tblish.dataset.sleeptblish.dataset.sleep..&33 tblish.dataset.rocktblish.dataset.rock/2%77 tblish.dataset.riverstblish.dataset.rivers00$55 tblish.dataset.randutblish.dataset.randu12#77 tblish.dataset.quakestblish.dataset.quakes26";; tblish.dataset.pressuretblish.dataset.pressure4:!?? tblish.dataset.presidentstblish.dataset.presidents52 77 tblish.dataset.preciptblish.dataset.precip6JOO tblish.dataset.occupationalStatustblish.dataset.occupationalStatus:,11 tblish.dataset.npktblish.dataset.npk;277 tblish.dataset.nottemtblish.dataset.nottem<277 tblish.dataset.nhtemptblish.dataset.nhtemp>277 tblish.dataset.mtcarstblish.dataset.mtcars?277 tblish.dataset.morleytblish.dataset.morley@.33 tblish.dataset.lynxtblish.dataset.lynxA499 tblish.dataset.longleytblish.dataset.longleyB*// tblish.dataset.lhtblish.dataset.lhE499 tblish.dataset.islandstblish.dataset.islandsH.33 tblish.dataset.iristblish.dataset.irisI277 tblish.dataset.inferttblish.dataset.infertK277 tblish.dataset.freenytblish.dataset.freenyP6;; tblish.dataset.faithfultblish.dataset.faithfulR6;; tblish.dataset.eurodisttblish.dataset.eurodistT.33 tblish.dataset.eurotblish.dataset.euroU055 tblish.dataset.esophtblish.dataset.esophV<AA tblish.dataset.discoveriestblish.dataset.discoveriesX4 99 tblish.dataset.cupcaketblish.dataset.cupcakeY4 99 tblish.dataset.crimtabtblish.dataset.crimtabZ, 11 tblish.dataset.co2tblish.dataset.co2[apjanke-octave-tablicious-8a1b10f/doc/html/000077500000000000000000000000001515050116100206465ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/doc/html/API-Alphabetically.html000066400000000000000000000135611515050116100250670ustar00rootroot00000000000000 API Alphabetically (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/doc/html/API-Reference.html000066400000000000000000000047401515050116100240460ustar00rootroot00000000000000 API Reference (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/doc/html/API-by-Category.html000066400000000000000000000360501515050116100243340ustar00rootroot00000000000000 API by Category (Tablicious v0.4.7)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like.

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.

    8.1.9 Uncategorized

    caldays

    Create a ‘calendarDuration’ that is a given number of calendar days long.

    See caldays.


    apjanke-octave-tablicious-8a1b10f/doc/html/Copying.html000066400000000000000000000110511515050116100231420ustar00rootroot00000000000000 Copying (Tablicious v0.4.7)

    9 Copying


    apjanke-octave-tablicious-8a1b10f/doc/html/Data-Sets-from-R.html000066400000000000000000000056771515050116100245000ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.7)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    apjanke-octave-tablicious-8a1b10f/doc/html/Date-and-Time-Representation.html000066400000000000000000000060621515050116100270510ustar00rootroot00000000000000 Date and Time Representation (Tablicious v0.4.7)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/doc/html/Datenum-Compatibility.html000066400000000000000000000074701515050116100257500ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.7)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/doc/html/Defined-Time-Zones.html000066400000000000000000000060161515050116100250650ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.7)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/doc/html/Durations.html000066400000000000000000000046521515050116100235130ustar00rootroot00000000000000 Durations (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/doc/html/Example-Data-Sets.html000066400000000000000000000102261515050116100247130ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.7)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/doc/html/Getting-Started.html000066400000000000000000000064201515050116100245430ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.7)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/doc/html/Introduction.html000066400000000000000000000072461515050116100242260ustar00rootroot00000000000000 Introduction (Tablicious v0.4.7)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.7 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/doc/html/Missing-Functionality.html000066400000000000000000000117541515050116100260030ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.7)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support
    • Things omitted for compatibility:
      • ismissing function

    A global ismissing function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. ismissing methods for various classes in Tablicious are defined. Tablicious also supplies an isnanny function with behavior similar to ismissing for clients which which wish to have ismissing-like behavior using a dependency only on Tablicious.

    It is the author’s hope that many of these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/doc/html/NaC.html000066400000000000000000000076401515050116100222040ustar00rootroot00000000000000 NaC (Tablicious v0.4.7)

    8.2.45 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/doc/html/NaS.html000066400000000000000000000075251515050116100222260ustar00rootroot00000000000000 NaS (Tablicious v0.4.7)

    8.2.46 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/doc/html/NaT.html000066400000000000000000000075711515050116100222300ustar00rootroot00000000000000 NaT (Tablicious v0.4.7)

    8.2.47 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/doc/html/Table-Construction.html000066400000000000000000000070421515050116100252560ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.7)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/doc/html/Table-Representation.html000066400000000000000000000100321515050116100255570ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.7)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/doc/html/Tables-vs-SQL.html000066400000000000000000000113661515050116100240400ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.7)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/doc/html/Time-Zones.html000066400000000000000000000141321515050116100235270ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.7)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/doc/html/Validation-Functions.html000066400000000000000000000117531515050116100256030ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.7)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/doc/html/array2table.html000066400000000000000000000103041515050116100237420ustar00rootroot00000000000000 array2table (Tablicious v0.4.7)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/doc/html/caldays.html000066400000000000000000000065041515050116100231610ustar00rootroot00000000000000 caldays (Tablicious v0.4.7)

    8.2.2 caldays

    Function File: out = caldays (x)

    Create a calendarDuration that is a given number of calendar days long.

    Input x is a numeric array specifying the number of calendar days.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, 0, x).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration-Class.html000066400000000000000000000063161515050116100260640ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.7)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration.html000066400000000000000000000107151515050116100250170ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.7)

    8.2.3 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002ecalendarDuration.html000066400000000000000000000077751515050116100307610ustar00rootroot00000000000000 calendarDuration.calendarDuration (Tablicious v0.4.7)

    8.2.3.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002edatevec.html000066400000000000000000000077011515050116100271020ustar00rootroot00000000000000 calendarDuration.datevec (Tablicious v0.4.7)

    8.2.3.2 calendarDuration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert a calendarDuration to a datevec whose elements represent its components of. The components are the year, month, day, hour, minute, and second quantities of this calendarDuration.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002edispstrs.html000066400000000000000000000062011515050116100273340ustar00rootroot00000000000000 calendarDuration.dispstrs (Tablicious v0.4.7)

    8.2.3.3 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002eismissing.html000066400000000000000000000062451515050116100274760ustar00rootroot00000000000000 calendarDuration.ismissing (Tablicious v0.4.7)

    8.2.3.4 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002eisnan.html000066400000000000000000000063111515050116100265730ustar00rootroot00000000000000 calendarDuration.isnan (Tablicious v0.4.7)

    8.2.3.5 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002eminus.html000066400000000000000000000061611515050116100266210ustar00rootroot00000000000000 calendarDuration.minus (Tablicious v0.4.7)

    8.2.3.6 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002emtimes.html000066400000000000000000000063521515050116100267660ustar00rootroot00000000000000 calendarDuration.mtimes (Tablicious v0.4.7)

    8.2.3.7 calendarDuration.mtimes

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    This does not do true matrix multiplication, so at least one of the input arguments must be scalar.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002eplus.html000066400000000000000000000070301515050116100264450ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.7)

    8.2.3.8 calendarDuration.plus

    Method: out = plus (obj, B)

    Addition: add to a calendarDuration.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    B may be a calendarDuration, duration, or numeric. If B is numeric, it is converted to a calendarDuration using caldays(B).

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002etimes.html000066400000000000000000000062251515050116100266100ustar00rootroot00000000000000 calendarDuration.times (Tablicious v0.4.7)

    8.2.3.9 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor B.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/calendarDuration_002euminus.html000066400000000000000000000056051515050116100270100ustar00rootroot00000000000000 calendarDuration.uminus (Tablicious v0.4.7)

    8.2.3.10 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj, which is equivalent to negating each of its components.

    apjanke-octave-tablicious-8a1b10f/doc/html/calmonths.html000066400000000000000000000065161515050116100235340ustar00rootroot00000000000000 calmonths (Tablicious v0.4.7)

    8.2.4 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/calyears.html000066400000000000000000000060241515050116100233410ustar00rootroot00000000000000 calyears (Tablicious v0.4.7)

    8.2.5 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical.html000066400000000000000000000177441515050116100240260ustar00rootroot00000000000000 categorical (Tablicious v0.4.7)

    8.2.6 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eaddcats.html000066400000000000000000000060111515050116100260610ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.7)

    8.2.6.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002ecategorical.html000066400000000000000000000137231515050116100267430ustar00rootroot00000000000000 categorical.categorical (Tablicious v0.4.7)

    8.2.6.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002ecategories.html000066400000000000000000000062041515050116100266070ustar00rootroot00000000000000 categorical.categories (Tablicious v0.4.7)

    8.2.6.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002ecellstr.html000066400000000000000000000062631515050116100261370ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.7)

    8.2.6.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002edispstrs.html000066400000000000000000000062721515050116100263420ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.7)

    8.2.6.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002edouble.html000066400000000000000000000067041515050116100257410ustar00rootroot00000000000000 categorical.double (Tablicious v0.4.7)

    8.2.6.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eiscategory.html000066400000000000000000000063231515050116100266350ustar00rootroot00000000000000 categorical.iscategory (Tablicious v0.4.7)

    8.2.6.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eismissing.html000066400000000000000000000061561515050116100264750ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.7)

    8.2.6.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eisnanny.html000066400000000000000000000062611515050116100261440ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.7)

    8.2.6.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eisordinal.html000066400000000000000000000061651515050116100264540ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.7)

    8.2.6.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eisundefined.html000066400000000000000000000064771515050116100267730ustar00rootroot00000000000000 categorical.isundefined (Tablicious v0.4.7)

    8.2.6.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002emergecats.html000066400000000000000000000076321515050116100264420ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.7)

    8.2.6.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002emissing.html000066400000000000000000000075071515050116100261420ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.7)

    8.2.6.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eremovecats.html000066400000000000000000000075211515050116100266350ustar00rootroot00000000000000 categorical.removecats (Tablicious v0.4.7)

    8.2.6.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002erenamecats.html000066400000000000000000000070311515050116100266030ustar00rootroot00000000000000 categorical.renamecats (Tablicious v0.4.7)

    8.2.6.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002ereordercats.html000066400000000000000000000072631515050116100270050ustar00rootroot00000000000000 categorical.reordercats (Tablicious v0.4.7)

    8.2.6.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002esetcats.html000066400000000000000000000062751515050116100261400ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.7)

    8.2.6.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002esqueezecats.html000066400000000000000000000061351515050116100270210ustar00rootroot00000000000000 categorical.squeezecats (Tablicious v0.4.7)

    8.2.6.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002estring.html000066400000000000000000000062731515050116100257760ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.7)

    8.2.6.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002esummary.html000066400000000000000000000060651515050116100261640ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.7)

    8.2.6.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/doc/html/categorical_002eundefined.html000066400000000000000000000067011515050116100264250ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.7)

    8.2.6.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/doc/html/cell2table.html000066400000000000000000000102361515050116100235470ustar00rootroot00000000000000 cell2table (Tablicious v0.4.7)

    8.2.7 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/doc/html/colvecfun.html000066400000000000000000000065701515050116100235300ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.7)

    8.2.8 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/doc/html/contains.html000066400000000000000000000074631515050116100233640ustar00rootroot00000000000000 contains (Tablicious v0.4.7)

    8.2.9 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/doc/html/datasets_002edescription.html000066400000000000000000000065321515050116100263440ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.7)

    8.2.59.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/doc/html/datasets_002elist.html000066400000000000000000000065501515050116100247740ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.7)

    8.2.59.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/doc/html/datasets_002eload.html000066400000000000000000000062751515050116100247440ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.7)

    8.2.59.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime-Class.html000066400000000000000000000063731515050116100244040ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.7)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime.html000066400000000000000000000202661515050116100233360ustar00rootroot00000000000000 datetime (Tablicious v0.4.7)

    8.2.10 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eNaT.html000066400000000000000000000075611515050116100244720ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.7)

    8.2.10.26 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002ecolon.html000066400000000000000000000117221515050116100251140ustar00rootroot00000000000000 datetime.colon (Tablicious v0.4.7)

    8.2.10.1 datetime.colon

    Method: out = colon (lo, hi)
    Method: out = colon (hi, inc, hi)

    Generate a sequence of uniformly-spaced values.

    This method implements the behavior for the colon operator (lo:hi or lo:inc:hi calls) for the datetime type.

    "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time.

    The inc argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with duration.ofDays (inc). The default value for inc, used in the two-arg lo:hi is 1, that is, 1 day of exactly 24 hours.

    Returns a datetime vector.

    WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if inc is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.


    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002econvertDatenumTimeZone.html000066400000000000000000000070101515050116100304460ustar00rootroot00000000000000 datetime.convertDatenumTimeZone (Tablicious v0.4.7)

    8.2.10.2 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatenum.html000066400000000000000000000060321515050116100254350ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.7)

    8.2.10.3 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatenum2posix.html000066400000000000000000000061221515050116100266020ustar00rootroot00000000000000 datetime.datenum2posix (Tablicious v0.4.7)

    8.2.10.4 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatestr.html000066400000000000000000000066421515050116100254550ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.7)

    8.2.10.5 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatestrs.html000066400000000000000000000067141515050116100256400ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.7)

    8.2.10.6 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatestruct.html000066400000000000000000000066771515050116100262010ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.7)

    8.2.10.7 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatetime.html000066400000000000000000000136431515050116100256020ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.7)

    8.2.10.8 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edatevec.html000066400000000000000000000071271515050116100254210ustar00rootroot00000000000000 datetime.datevec (Tablicious v0.4.7)

    8.2.10.9 datetime.datevec

    Method: out = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert this to a datevec that represent the same local wall time.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002ediff.html000066400000000000000000000061161515050116100247130ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.7)

    8.2.10.10 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002edispstrs.html000066400000000000000000000057171515050116100256640ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.7)

    8.2.10.11 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eeq.html000066400000000000000000000062461515050116100244140ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.7)

    8.2.10.12 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002ege.html000066400000000000000000000062611515050116100243770ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.7)

    8.2.10.13 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002egmtime.html000066400000000000000000000060751515050116100252710ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.7)

    8.2.10.14 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002egt.html000066400000000000000000000062501515050116100244140ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.7)

    8.2.10.15 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002ehms.html000066400000000000000000000063471515050116100246000ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.7)

    8.2.10.16 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a datetime. These are the time of day components. The Year, Month, and Day components are ignored, and not incorporated in to the result.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eisbetween.html000066400000000000000000000063651515050116100257760ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.7)

    8.2.10.17 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eismissing.html000066400000000000000000000061621515050116100260110ustar00rootroot00000000000000 datetime.ismissing (Tablicious v0.4.7)

    8.2.10.18 datetime.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, the special NaT value is considered missing. This is equivalent to a NaN used as a datenum.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eisnan.html000066400000000000000000000060441515050116100251130ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.7)

    8.2.10.19 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eisnat.html000066400000000000000000000056241515050116100251240ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.7)

    8.2.10.20 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002ele.html000066400000000000000000000063011515050116100243770ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.7)

    8.2.10.21 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002elinspace.html000066400000000000000000000067351515050116100256100ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.7)

    8.2.10.22 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002elocaltime.html000066400000000000000000000067331515050116100257610ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.7)

    8.2.10.23 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002elt.html000066400000000000000000000062711515050116100244240ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.7)

    8.2.10.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eminus.html000066400000000000000000000070211515050116100251320ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.7)

    8.2.10.25 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002ene.html000066400000000000000000000062621515050116100244070ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.7)

    8.2.10.27 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eofDatenum.html000066400000000000000000000060461515050116100257270ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.7)

    8.2.10.28 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eofDatestruct.html000066400000000000000000000063031515050116100264500ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.7)

    8.2.10.29 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eplus.html000066400000000000000000000071111515050116100247620ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.7)

    8.2.10.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy.

    Returns datetime array the same size as A.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eposix2datenum.html000066400000000000000000000062171515050116100266070ustar00rootroot00000000000000 datetime.posix2datenum (Tablicious v0.4.7)

    8.2.10.31 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eposixtime.html000066400000000000000000000062761515050116100260330ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.7)

    8.2.10.32 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eproxyKeys.html000066400000000000000000000065131515050116100260210ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.7)

    8.2.10.33 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002etimeofday.html000066400000000000000000000061611515050116100257640ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.7)

    8.2.10.34 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eweek.html000066400000000000000000000055641515050116100247440ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.7)

    8.2.10.35 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eymd.html000066400000000000000000000061321515050116100245720ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.7)

    8.2.10.36 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/datetime_002eymdhms.html000066400000000000000000000060671515050116100253110ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.7)

    8.2.10.37 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/days.html000066400000000000000000000062471515050116100225050ustar00rootroot00000000000000 days (Tablicious v0.4.7)

    8.2.11 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/doc/html/discretize.html000066400000000000000000000122201515050116100236760ustar00rootroot00000000000000 discretize (Tablicious v0.4.7)

    8.2.12 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/doc/html/dispstrs.html000066400000000000000000000066111515050116100234130ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.7)

    8.2.13 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration-Class.html000066400000000000000000000057651515050116100244410ustar00rootroot00000000000000 duration Class (Tablicious v0.4.7)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration.html000066400000000000000000000125211515050116100233620ustar00rootroot00000000000000 duration (Tablicious v0.4.7)

    8.2.14 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002echar.html000066400000000000000000000056721515050116100247570ustar00rootroot00000000000000 duration.char (Tablicious v0.4.7)

    8.2.14.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002edatevec.html000066400000000000000000000101361515050116100254440ustar00rootroot00000000000000 duration.datevec (Tablicious v0.4.7)

    8.2.14.2 duration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert obj to a datevec whose elements represent the components of this duration. The components are the year, month, days, hour, minute, and second quantities of this duration. The years are in terms of fixed size years that are 365.2425 days long, and days are fixed size 24-hour days. The fixed size year size can be found in the FixedSizeYearDays constant class property on the duration class. The month component is always zero, since months are variable lengths and there is no equivalent fixed size month. Thus, the days component may be more than 31.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002edispstrs.html000066400000000000000000000057321515050116100257120ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.7)

    8.2.14.3 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002ehms.html000066400000000000000000000061511515050116100246220ustar00rootroot00000000000000 duration.hms (Tablicious v0.4.7)

    8.2.14.4 duration.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second values of a duration. These are the hour, minute, and second values that when combined are equal to the same duration value.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002ehours.html000066400000000000000000000057731515050116100252040ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.7)

    8.2.14.5 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002elinspace.html000066400000000000000000000067741515050116100256440ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.7)

    8.2.14.6 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002emilliseconds.html000066400000000000000000000061011515050116100265130ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.7)

    8.2.14.7 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002eminutes.html000066400000000000000000000060551515050116100255220ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.7)

    8.2.14.8 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002eofDays.html000066400000000000000000000062411515050116100252600ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.7)

    8.2.14.9 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002eseconds.html000066400000000000000000000057731515050116100255020ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.7)

    8.2.14.10 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/duration_002eyears.html000066400000000000000000000055461515050116100251650ustar00rootroot00000000000000 duration.years (Tablicious v0.4.7)

    8.2.14.11 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/eqn.html000066400000000000000000000074611515050116100223270ustar00rootroot00000000000000 eqn (Tablicious v0.4.7)

    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/doc/html/head.html000066400000000000000000000075101515050116100224400ustar00rootroot00000000000000 head (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/doc/html/hours.html000066400000000000000000000063121515050116100226760ustar00rootroot00000000000000 hours (Tablicious v0.4.7)

    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/doc/html/index.html000066400000000000000000001327631515050116100226570ustar00rootroot00000000000000 Top (Tablicious v0.4.7)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.7.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/doc/html/iscalendarduration.html000066400000000000000000000062521515050116100254140ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.7)

    8.2.18 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/iscategorical.html000066400000000000000000000062261515050116100243530ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.7)

    8.2.19 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/isdatetime.html000066400000000000000000000061361515050116100236720ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.7)

    8.2.20 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/isduration.html000066400000000000000000000061021515050116100237140ustar00rootroot00000000000000 isduration (Tablicious v0.4.7)

    8.2.21 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/isfile.html000066400000000000000000000044601515050116100230130ustar00rootroot00000000000000 isfile (Tablicious v0.4.7)

    8.2.22 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/isfolder.html000066400000000000000000000044501515050116100233460ustar00rootroot00000000000000 isfolder (Tablicious v0.4.7)

    8.2.23 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/isnanny.html000066400000000000000000000100301515050116100232050ustar00rootroot00000000000000 isnanny (Tablicious v0.4.7)

    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like.

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.
    3. Octave does not define an ismissing function, but the Octave Forge statistics package does, and adding an ismissing function to Tablicious would conflict with that in hard-to-resolve ways.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/doc/html/istable.html000066400000000000000000000065071515050116100231670ustar00rootroot00000000000000 istable (Tablicious v0.4.7)

    8.2.25 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/istabular.html000066400000000000000000000062271515050116100235310ustar00rootroot00000000000000 istabular (Tablicious v0.4.7)

    8.2.26 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/istimetable.html000066400000000000000000000066031515050116100240430ustar00rootroot00000000000000 istimetable (Tablicious v0.4.7)

    8.2.27 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate.html000066400000000000000000000123071515050116100234670ustar00rootroot00000000000000 localdate (Tablicious v0.4.7)

    8.2.28 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002eNaT.html000066400000000000000000000101531515050116100246150ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.7)

    8.2.28.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002edatenum.html000066400000000000000000000055131515050116100255740ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.7)

    8.2.28.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002edatestr.html000066400000000000000000000066401515050116100256070ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.7)

    8.2.28.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002edatestrs.html000066400000000000000000000067421515050116100257750ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.7)

    8.2.28.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002edatestruct.html000066400000000000000000000071341515050116100263220ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.7)

    8.2.28.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002edispstrs.html000066400000000000000000000060041515050116100260060ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.7)

    8.2.28.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002eisnan.html000066400000000000000000000060611515050116100252460ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.7)

    8.2.28.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002eisnat.html000066400000000000000000000057051515050116100252600ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.7)

    8.2.28.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002elocaldate.html000066400000000000000000000111501515050116100260610ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.7)

    8.2.28.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002eposixtime.html000066400000000000000000000063341515050116100261620ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.7)

    8.2.28.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/doc/html/localdate_002eymd.html000066400000000000000000000055611515050116100247330ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.7)

    8.2.28.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/milliseconds.html000066400000000000000000000064151515050116100242270ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.7)

    8.2.29 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/doc/html/minutes.html000066400000000000000000000056261515050116100232310ustar00rootroot00000000000000 minutes (Tablicious v0.4.7)

    8.2.30 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/doc/html/missing.html000066400000000000000000000075361515050116100232200ustar00rootroot00000000000000 missing (Tablicious v0.4.7)

    8.2.31 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/doc/html/missing_002edispstrs.html000066400000000000000000000057241515050116100255370ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.7)

    8.2.31.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/missing_002eismissing.html000066400000000000000000000060661515050116100256710ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.7)

    8.2.31.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/missing_002eisnan.html000066400000000000000000000060171515050116100247700ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.7)

    8.2.31.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/missing_002eisnanny.html000066400000000000000000000060301515050116100253320ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.7)

    8.2.31.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/missing_002emissing.html000066400000000000000000000054711515050116100253340ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.7)

    8.2.31.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeA.html000066400000000000000000000044761515050116100231070ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.7)

    8.2.32 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeCellstr.html000066400000000000000000000045421515050116100243310ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.7)

    8.2.33 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeCharvec.html000066400000000000000000000045661515050116100243020ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.7)

    8.2.34 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeFinite.html000066400000000000000000000045641515050116100241430ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.7)

    8.2.35 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeInteger.html000066400000000000000000000045621515050116100243200ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.7)

    8.2.36 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeMember.html000066400000000000000000000045701515050116100241310ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.7)

    8.2.37 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeNonempty.html000066400000000000000000000045741515050116100245370ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.7)

    8.2.38 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeNumeric.html000066400000000000000000000045621515050116100243250ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.7)

    8.2.39 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeReal.html000066400000000000000000000045541515050116100236070ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.7)

    8.2.40 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeSameSize.html000066400000000000000000000045601515050116100244410ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.7)

    8.2.41 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeScalar.html000066400000000000000000000046201515050116100241230ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.7)

    8.2.42 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeScalarLogical.html000066400000000000000000000046261515050116100254240ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.7)

    8.2.43 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/mustBeVector.html000066400000000000000000000045441515050116100241650ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.7)

    8.2.44 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/pp.html000066400000000000000000000077771515050116100221750ustar00rootroot00000000000000 pp (Tablicious v0.4.7)

    8.2.48 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/doc/html/scalarexpand.html000066400000000000000000000072671515050116100242150ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.7)

    8.2.49 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/doc/html/seconds.html000066400000000000000000000063341515050116100232000ustar00rootroot00000000000000 seconds (Tablicious v0.4.7)

    8.2.50 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/doc/html/size2str.html000066400000000000000000000065321515050116100233270ustar00rootroot00000000000000 size2str (Tablicious v0.4.7)

    8.2.51 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/doc/html/splitapply.html000066400000000000000000000114251515050116100237400ustar00rootroot00000000000000 splitapply (Tablicious v0.4.7)

    8.2.52 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/doc/html/string.html000066400000000000000000000163061515050116100230500ustar00rootroot00000000000000 string (Tablicious v0.4.7)

    8.2.53 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/doc/html/string_002ecell.html000066400000000000000000000057431515050116100244410ustar00rootroot00000000000000 string.cell (Tablicious v0.4.7)

    8.2.53.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002ecellstr.html000066400000000000000000000057721515050116100251740ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.7)

    8.2.53.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002echar.html000066400000000000000000000062351515050116100244340ustar00rootroot00000000000000 string.char (Tablicious v0.4.7)

    8.2.53.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002ecmp.html000066400000000000000000000075371515050116100243040ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.7)

    8.2.53.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002edecode.html000066400000000000000000000062221515050116100247360ustar00rootroot00000000000000 string.decode (Tablicious v0.4.7)

    8.2.53.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002edispstrs.html000066400000000000000000000064731515050116100253760ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.7)

    8.2.53.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eempty.html000066400000000000000000000061601515050116100246520ustar00rootroot00000000000000 string.empty (Tablicious v0.4.7)

    8.2.53.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eencode.html000066400000000000000000000063471515050116100247600ustar00rootroot00000000000000 string.encode (Tablicious v0.4.7)

    8.2.53.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eendsWith.html000066400000000000000000000066321515050116100253050ustar00rootroot00000000000000 string.endsWith (Tablicious v0.4.7)

    8.2.53.9 string.endsWith

    Method: out = endsWith (obj, pattern)
    Method: out = endsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string ends with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eerase.html000066400000000000000000000060441515050116100246140ustar00rootroot00000000000000 string.erase (Tablicious v0.4.7)

    8.2.53.10 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eismissing.html000066400000000000000000000061651515050116100255260ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.7)

    8.2.53.11 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eisnanny.html000066400000000000000000000060131515050116100251700ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.7)

    8.2.53.12 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eisstring.html000066400000000000000000000057361515050116100253660ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.7)

    8.2.53.13 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002elower.html000066400000000000000000000062321515050116100246440ustar00rootroot00000000000000 string.lower (Tablicious v0.4.7)

    8.2.53.14 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002emissing.html000066400000000000000000000061511515050116100251650ustar00rootroot00000000000000 string.missing (Tablicious v0.4.7)

    8.2.53.15 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eplus.html000066400000000000000000000062761515050116100245070ustar00rootroot00000000000000 string.plus (Tablicious v0.4.7)

    8.2.53.16 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eregexprep.html000066400000000000000000000070151515050116100255150ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.7)

    8.2.53.17 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002ereverse.html000066400000000000000000000062201515050116100251640ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.7)

    8.2.53.18 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002ereverse_005fbytes.html000066400000000000000000000067541515050116100270010ustar00rootroot00000000000000 string.reverse_bytes (Tablicious v0.4.7)

    8.2.53.19 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estartsWith.html000066400000000000000000000067351515050116100257000ustar00rootroot00000000000000 string.startsWith (Tablicious v0.4.7)

    8.2.53.20 string.startsWith

    Method: out = startsWith (obj, pattern)
    Method: out = startsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string starts with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estrcat.html000066400000000000000000000062461515050116100250210ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.7)

    8.2.53.21 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estrcmp.html000066400000000000000000000065601515050116100250300ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.7)

    8.2.53.22 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estrfind.html000066400000000000000000000070041515050116100251630ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.7)

    8.2.53.23 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estring.html000066400000000000000000000071311515050116100250210ustar00rootroot00000000000000 string.string (Tablicious v0.4.7)

    8.2.53.24 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estrlength.html000066400000000000000000000072421515050116100255300ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.7)

    8.2.53.25 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estrlength_005fbytes.html000066400000000000000000000066771515050116100273440ustar00rootroot00000000000000 string.strlength_bytes (Tablicious v0.4.7)

    8.2.53.26 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002estrrep.html000066400000000000000000000072611515050116100250360ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.7)

    8.2.53.27 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/string_002eupper.html000066400000000000000000000057651515050116100246610ustar00rootroot00000000000000 string.upper (Tablicious v0.4.7)

    8.2.53.28 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/struct2table.html000066400000000000000000000067701515050116100241640ustar00rootroot00000000000000 struct2table (Tablicious v0.4.7)

    8.2.54 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/doc/html/table.html000066400000000000000000000262031515050116100226260ustar00rootroot00000000000000 table (Tablicious v0.4.7)

    8.2.55 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    apjanke-octave-tablicious-8a1b10f/doc/html/tableOuterFillValue.html000066400000000000000000000045321515050116100254520ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.7)

    8.2.56 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eaddvars.html000066400000000000000000000077661515050116100247360ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.7)

    8.2.55.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eantijoin.html000066400000000000000000000070521515050116100251110ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.7)

    8.2.55.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002ecartesian.html000066400000000000000000000077021515050116100252510ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.7)

    8.2.55.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002econvertvars.html000066400000000000000000000073451515050116100256570ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.7)

    8.2.55.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002efindgroups.html000066400000000000000000000064171515050116100254620ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.7)

    8.2.55.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002egetvar.html000066400000000000000000000063001515050116100245610ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.7)

    8.2.55.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002egetvars.html000066400000000000000000000061731515050116100247540ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.7)

    8.2.55.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002egroupby.html000066400000000000000000000075131515050116100247670ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.7)

    8.2.55.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eheight.html000066400000000000000000000057631515050116100245550ustar00rootroot00000000000000 table.height (Tablicious v0.4.7)

    8.2.55.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002ehorzcat.html000066400000000000000000000063241515050116100247510ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.7)

    8.2.55.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002einnerjoin.html000066400000000000000000000073421515050116100252730ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.7)

    8.2.55.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eintersect.html000066400000000000000000000065211515050116100252760ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.7)

    8.2.55.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eisempty.html000066400000000000000000000057041515050116100247720ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.7)

    8.2.55.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eismember.html000066400000000000000000000061361515050116100251030ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.7)

    8.2.55.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eismissing.html000066400000000000000000000072721515050116100253070ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.7)

    8.2.55.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eistable.html000066400000000000000000000054721515050116100247250ustar00rootroot00000000000000 table.istable (Tablicious v0.4.7)

    8.2.55.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002ejoin.html000066400000000000000000000074661515050116100242460ustar00rootroot00000000000000 table.join (Tablicious v0.4.7)

    8.2.55.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002emergevars.html000066400000000000000000000073301515050116100252700ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.7)

    8.2.55.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002emovevars.html000066400000000000000000000070471515050116100251440ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.7)

    8.2.55.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002endims.html000066400000000000000000000056351515050116100244150ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.7)

    8.2.55.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002enumel.html000066400000000000000000000061211515050116100244120ustar00rootroot00000000000000 table.numel (Tablicious v0.4.7)

    8.2.55.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eouterfillvals.html000066400000000000000000000060461515050116100261730ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.7)

    8.2.55.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eouterjoin.html000066400000000000000000000076021515050116100253150ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.7)

    8.2.55.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eprettyprint.html000066400000000000000000000060461515050116100257040ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.7)

    8.2.55.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erealjoin.html000066400000000000000000000100301515050116100250670ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.7)

    8.2.55.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eremovevars.html000066400000000000000000000061311515050116100254640ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.7)

    8.2.55.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erenamevars.html000066400000000000000000000067151515050116100254460ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.7)

    8.2.55.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erepelem.html000066400000000000000000000067011515050116100247270ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.7)

    8.2.55.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erepmat.html000066400000000000000000000065131515050116100245670ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.7)

    8.2.55.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erestrict.html000066400000000000000000000106041515050116100251320ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.7)

    8.2.55.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erowfun.html000066400000000000000000000157061515050116100246230ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.7)

    8.2.55.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/doc/html/table_002erows2vars.html000066400000000000000000000107341515050116100252470ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.7)

    8.2.55.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esemijoin.html000066400000000000000000000072311515050116100251120ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.7)

    8.2.55.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esetDimensionNames.html000066400000000000000000000105551515050116100267250ustar00rootroot00000000000000 table.setDimensionNames (Tablicious v0.4.7)

    8.2.55.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esetRowNames.html000066400000000000000000000061611515050116100255450ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.7)

    8.2.55.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esetVariableNames.html000066400000000000000000000076371515050116100265340ustar00rootroot00000000000000 table.setVariableNames (Tablicious v0.4.7)

    8.2.55.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esetdiff.html000066400000000000000000000063661515050116100247310ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.7)

    8.2.55.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esetvar.html000066400000000000000000000072021515050116100245770ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.7)

    8.2.55.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esetxor.html000066400000000000000000000065501515050116100246240ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.7)

    8.2.55.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esize.html000066400000000000000000000072721515050116100242540ustar00rootroot00000000000000 table.size (Tablicious v0.4.7)

    8.2.55.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esplitapply.html000066400000000000000000000071331515050116100254770ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.7)

    8.2.55.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esplitvars.html000066400000000000000000000076141515050116100253310ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.7)

    8.2.55.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esqueeze.html000066400000000000000000000057471515050116100247700ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.7)

    8.2.55.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002estack.html000066400000000000000000000072771515050116100244140ustar00rootroot00000000000000 table.stack (Tablicious v0.4.7)

    8.2.55.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002esummary.html000066400000000000000000000067701515050116100250010ustar00rootroot00000000000000 table.summary (Tablicious v0.4.7)

    8.2.55.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002etable.html000066400000000000000000000126421515050116100243660ustar00rootroot00000000000000 table.table (Tablicious v0.4.7)

    8.2.55.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002etable2array.html000066400000000000000000000056061515050116100255110ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.7)

    8.2.55.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002etable2cell.html000066400000000000000000000062551515050116100253130ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.7)

    8.2.55.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002etable2struct.html000066400000000000000000000072201515050116100257110ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.7)

    8.2.55.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002eunion.html000066400000000000000000000064341515050116100244310ustar00rootroot00000000000000 table.union (Tablicious v0.4.7)

    8.2.55.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002evarfun.html000066400000000000000000000103541515050116100245760ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.7)

    8.2.55.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002evarnames.html000066400000000000000000000064661515050116100251220ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.7)

    8.2.55.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002evertcat.html000066400000000000000000000064321515050116100247470ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.7)

    8.2.55.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/doc/html/table_002ewidth.html000066400000000000000000000054111515050116100244120ustar00rootroot00000000000000 table.width (Tablicious v0.4.7)

    8.2.55.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/doc/html/tail.html000066400000000000000000000076611515050116100224770ustar00rootroot00000000000000 tail (Tablicious v0.4.7)

    8.2.57 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset.html000066400000000000000000000244331515050116100251230ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.7)

    8.2.58 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eAirPassengers.html000066400000000000000000000076151515050116100303430ustar00rootroot00000000000000 tblish.dataset.AirPassengers (Tablicious v0.4.7)

    8.2.58.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eBJsales.html000066400000000000000000000110771515050116100271150ustar00rootroot00000000000000 tblish.dataset.BJsales (Tablicious v0.4.7)

    8.2.58.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eBOD.html000066400000000000000000000103211515050116100261650ustar00rootroot00000000000000 tblish.dataset.BOD (Tablicious v0.4.7)

    8.2.58.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eChickWeight.html000066400000000000000000000113441515050116100277600ustar00rootroot00000000000000 tblish.dataset.ChickWeight (Tablicious v0.4.7)

    8.2.58.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eDNase.html000066400000000000000000000112311515050116100265540ustar00rootroot00000000000000 tblish.dataset.DNase (Tablicious v0.4.7)

    8.2.58.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111721515050116100304720ustar00rootroot00000000000000 tblish.dataset.EuStockMarkets (Tablicious v0.4.7)

    8.2.58.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114561515050116100301760ustar00rootroot00000000000000 tblish.dataset.Formaldehyde (Tablicious v0.4.7)

    8.2.58.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151431515050116100301150ustar00rootroot00000000000000 tblish.dataset.HairEyeColor (Tablicious v0.4.7)

    8.2.58.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eHarman23cor.html000066400000000000000000000103311515050116100276410ustar00rootroot00000000000000 tblish.dataset.Harman23cor (Tablicious v0.4.7)

    8.2.58.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eHarman74cor.html000066400000000000000000000104061515050116100276520ustar00rootroot00000000000000 tblish.dataset.Harman74cor (Tablicious v0.4.7)

    8.2.58.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eIndometh.html000066400000000000000000000110441515050116100273330ustar00rootroot00000000000000 tblish.dataset.Indometh (Tablicious v0.4.7)

    8.2.58.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eInsectSprays.html000066400000000000000000000105031515050116100302120ustar00rootroot00000000000000 tblish.dataset.InsectSprays (Tablicious v0.4.7)

    8.2.58.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000103151515050116100305410ustar00rootroot00000000000000 tblish.dataset.JohnsonJohnson (Tablicious v0.4.7)

    8.2.58.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eLakeHuron.html000066400000000000000000000105331515050116100274560ustar00rootroot00000000000000 tblish.dataset.LakeHuron (Tablicious v0.4.7)

    8.2.58.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126651515050116100307700ustar00rootroot00000000000000 tblish.dataset.LifeCycleSavings (Tablicious v0.4.7)

    8.2.58.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eLoblolly.html000066400000000000000000000111411515050116100273520ustar00rootroot00000000000000 tblish.dataset.Loblolly (Tablicious v0.4.7)

    8.2.58.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eNile.html000066400000000000000000000112541515050116100264560ustar00rootroot00000000000000 tblish.dataset.Nile (Tablicious v0.4.7)

    8.2.58.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eOrange.html000066400000000000000000000115611515050116100270030ustar00rootroot00000000000000 tblish.dataset.Orange (Tablicious v0.4.7)

    8.2.58.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eOrchardSprays.html000066400000000000000000000133131515050116100303510ustar00rootroot00000000000000 tblish.dataset.OrchardSprays (Tablicious v0.4.7)

    8.2.58.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102551515050116100300400ustar00rootroot00000000000000 tblish.dataset.PlantGrowth (Tablicious v0.4.7)

    8.2.58.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ePuromycin.html000066400000000000000000000125301515050116100275520ustar00rootroot00000000000000 tblish.dataset.Puromycin (Tablicious v0.4.7)

    8.2.58.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eTheoph.html000066400000000000000000000143171515050116100270210ustar00rootroot00000000000000 tblish.dataset.Theoph (Tablicious v0.4.7)

    8.2.58.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eTitanic.html000066400000000000000000000146421515050116100271660ustar00rootroot00000000000000 tblish.dataset.Titanic (Tablicious v0.4.7)

    8.2.58.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eToothGrowth.html000066400000000000000000000115701515050116100300600ustar00rootroot00000000000000 tblish.dataset.ToothGrowth (Tablicious v0.4.7)

    8.2.58.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000141361515050116100302340ustar00rootroot00000000000000 tblish.dataset.UCBAdmissions (Tablicious v0.4.7)

    8.2.58.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000150021515050116100304060ustar00rootroot00000000000000 tblish.dataset.UKDriverDeaths (Tablicious v0.4.7)

    8.2.58.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000111351515050116100300630ustar00rootroot00000000000000 tblish.dataset.UKLungDeaths (Tablicious v0.4.7)

    8.2.58.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUKgas.html000066400000000000000000000104261515050116100266010ustar00rootroot00000000000000 tblish.dataset.UKgas (Tablicious v0.4.7)

    8.2.58.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000101121515050116100276460ustar00rootroot00000000000000 tblish.dataset.USAccDeaths (Tablicious v0.4.7)

    8.2.58.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUSArrests.html000066400000000000000000000140141515050116100274570ustar00rootroot00000000000000 tblish.dataset.USArrests (Tablicious v0.4.7)

    8.2.58.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116621515050116100304300ustar00rootroot00000000000000 tblish.dataset.USJudgeRatings (Tablicious v0.4.7)

    8.2.58.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111451515050116100320360ustar00rootroot00000000000000 tblish.dataset.USPersonalExpenditure (Tablicious v0.4.7)

    8.2.58.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eVADeaths.html000066400000000000000000000113641515050116100272300ustar00rootroot00000000000000 tblish.dataset.VADeaths (Tablicious v0.4.7)

    8.2.58.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eWWWusage.html000066400000000000000000000104121515050116100272730ustar00rootroot00000000000000 tblish.dataset.WWWusage (Tablicious v0.4.7)

    8.2.58.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eWorldPhones.html000066400000000000000000000105531515050116100300340ustar00rootroot00000000000000 tblish.dataset.WorldPhones (Tablicious v0.4.7)

    8.2.58.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eairmiles.html000066400000000000000000000072671515050116100274050ustar00rootroot00000000000000 tblish.dataset.airmiles (Tablicious v0.4.7)

    8.2.58.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eairquality.html000066400000000000000000000134011515050116100277470ustar00rootroot00000000000000 tblish.dataset.airquality (Tablicious v0.4.7)

    8.2.58.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eanscombe.html000066400000000000000000000122041515050116100273520ustar00rootroot00000000000000 tblish.dataset.anscombe (Tablicious v0.4.7)

    8.2.58.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eattenu.html000066400000000000000000000115071515050116100270700ustar00rootroot00000000000000 tblish.dataset.attenu (Tablicious v0.4.7)

    8.2.58.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eattitude.html000066400000000000000000000111411515050116100274050ustar00rootroot00000000000000 tblish.dataset.attitude (Tablicious v0.4.7)

    8.2.58.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eaustres.html000066400000000000000000000102601515050116100272510ustar00rootroot00000000000000 tblish.dataset.austres (Tablicious v0.4.7)

    8.2.58.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ebeavers.html000066400000000000000000000107021515050116100272130ustar00rootroot00000000000000 tblish.dataset.beavers (Tablicious v0.4.7)

    8.2.58.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ecars.html000066400000000000000000000117301515050116100265160ustar00rootroot00000000000000 tblish.dataset.cars (Tablicious v0.4.7)

    8.2.58.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002echickwts.html000066400000000000000000000114611515050116100274060ustar00rootroot00000000000000 tblish.dataset.chickwts (Tablicious v0.4.7)

    8.2.58.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eco2.html000066400000000000000000000117241515050116100262540ustar00rootroot00000000000000 tblish.dataset.co2 (Tablicious v0.4.7)

    8.2.58.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ecrimtab.html000066400000000000000000000164371515050116100272200ustar00rootroot00000000000000 tblish.dataset.crimtab (Tablicious v0.4.7)

    8.2.58.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ecupcake.html000066400000000000000000000105321515050116100272000ustar00rootroot00000000000000 tblish.dataset.cupcake (Tablicious v0.4.7)

    8.2.58.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ediscoveries.html000066400000000000000000000106601515050116100301060ustar00rootroot00000000000000 tblish.dataset.discoveries (Tablicious v0.4.7)

    8.2.58.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eesoph.html000066400000000000000000000107221515050116100267040ustar00rootroot00000000000000 tblish.dataset.esoph (Tablicious v0.4.7)

    8.2.58.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eeuro.html000066400000000000000000000117151515050116100265430ustar00rootroot00000000000000 tblish.dataset.euro (Tablicious v0.4.7)

    8.2.58.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eeurodist.html000066400000000000000000000101521515050116100274210ustar00rootroot00000000000000 tblish.dataset.eurodist (Tablicious v0.4.7)

    8.2.58.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002efaithful.html000066400000000000000000000121511515050116100273660ustar00rootroot00000000000000 tblish.dataset.faithful (Tablicious v0.4.7)

    8.2.58.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002efreeny.html000066400000000000000000000121441515050116100270560ustar00rootroot00000000000000 tblish.dataset.freeny (Tablicious v0.4.7)

    8.2.58.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002einfert.html000066400000000000000000000116411515050116100270560ustar00rootroot00000000000000 tblish.dataset.infert (Tablicious v0.4.7)

    8.2.58.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eiris.html000066400000000000000000000122141515050116100265320ustar00rootroot00000000000000 tblish.dataset.iris (Tablicious v0.4.7)

    8.2.58.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eislands.html000066400000000000000000000104371515050116100272260ustar00rootroot00000000000000 tblish.dataset.islands (Tablicious v0.4.7)

    8.2.58.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002elh.html000066400000000000000000000102321515050116100261650ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.7)

    8.2.58.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002elongley.html000066400000000000000000000116001515050116100272330ustar00rootroot00000000000000 tblish.dataset.longley (Tablicious v0.4.7)

    8.2.58.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002elynx.html000066400000000000000000000113741515050116100265640ustar00rootroot00000000000000 tblish.dataset.lynx (Tablicious v0.4.7)

    8.2.58.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002emorley.html000066400000000000000000000121731515050116100270770ustar00rootroot00000000000000 tblish.dataset.morley (Tablicious v0.4.7)

    8.2.58.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002emtcars.html000066400000000000000000000124651515050116100270650ustar00rootroot00000000000000 tblish.dataset.mtcars (Tablicious v0.4.7)

    8.2.58.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002enhtemp.html000066400000000000000000000105361515050116100270640ustar00rootroot00000000000000 tblish.dataset.nhtemp (Tablicious v0.4.7)

    8.2.58.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002enottem.html000066400000000000000000000102001515050116100270630ustar00rootroot00000000000000 tblish.dataset.nottem (Tablicious v0.4.7)

    8.2.58.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002enpk.html000066400000000000000000000113431515050116100263560ustar00rootroot00000000000000 tblish.dataset.npk (Tablicious v0.4.7)

    8.2.58.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000104221515050116100314500ustar00rootroot00000000000000 tblish.dataset.occupationalStatus (Tablicious v0.4.7)

    8.2.58.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eprecip.html000066400000000000000000000104241515050116100270470ustar00rootroot00000000000000 tblish.dataset.precip (Tablicious v0.4.7)

    8.2.58.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002epresidents.html000066400000000000000000000112301515050116100277410ustar00rootroot00000000000000 tblish.dataset.presidents (Tablicious v0.4.7)

    8.2.58.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002epressure.html000066400000000000000000000112671515050116100274430ustar00rootroot00000000000000 tblish.dataset.pressure (Tablicious v0.4.7)

    8.2.58.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002equakes.html000066400000000000000000000121101515050116100270500ustar00rootroot00000000000000 tblish.dataset.quakes (Tablicious v0.4.7)

    8.2.58.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002erandu.html000066400000000000000000000111701515050116100266750ustar00rootroot00000000000000 tblish.dataset.randu (Tablicious v0.4.7)

    8.2.58.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002erivers.html000066400000000000000000000103221515050116100270740ustar00rootroot00000000000000 tblish.dataset.rivers (Tablicious v0.4.7)

    8.2.58.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002erock.html000066400000000000000000000111031515050116100265160ustar00rootroot00000000000000 tblish.dataset.rock (Tablicious v0.4.7)

    8.2.58.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002esleep.html000066400000000000000000000113441515050116100266770ustar00rootroot00000000000000 tblish.dataset.sleep (Tablicious v0.4.7)

    8.2.58.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002estackloss.html000066400000000000000000000142331515050116100275750ustar00rootroot00000000000000 tblish.dataset.stackloss (Tablicious v0.4.7)

    8.2.58.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002estate.html000066400000000000000000000130401515050116100267020ustar00rootroot00000000000000 tblish.dataset.state (Tablicious v0.4.7)

    8.2.58.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000105111515050116100310750ustar00rootroot00000000000000 tblish.dataset.sunspot_month (Tablicious v0.4.7)

    8.2.58.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102511515050116100307110ustar00rootroot00000000000000 tblish.dataset.sunspot_year (Tablicious v0.4.7)

    8.2.58.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002esunspots.html000066400000000000000000000105501515050116100274630ustar00rootroot00000000000000 tblish.dataset.sunspots (Tablicious v0.4.7)

    8.2.58.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002eswiss.html000066400000000000000000000141301515050116100267330ustar00rootroot00000000000000 tblish.dataset.swiss (Tablicious v0.4.7)

    8.2.58.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002etreering.html000066400000000000000000000112321515050116100274020ustar00rootroot00000000000000 tblish.dataset.treering (Tablicious v0.4.7)

    8.2.58.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002etrees.html000066400000000000000000000114021515050116100267040ustar00rootroot00000000000000 tblish.dataset.trees (Tablicious v0.4.7)

    8.2.58.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002euspop.html000066400000000000000000000103031515050116100267270ustar00rootroot00000000000000 tblish.dataset.uspop (Tablicious v0.4.7)

    8.2.58.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002evolcano.html000066400000000000000000000112521515050116100272260ustar00rootroot00000000000000 tblish.dataset.volcano (Tablicious v0.4.7)

    8.2.58.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ewarpbreaks.html000066400000000000000000000112341515050116100277260ustar00rootroot00000000000000 tblish.dataset.warpbreaks (Tablicious v0.4.7)

    8.2.58.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ewomen.html000066400000000000000000000114041515050116100267110ustar00rootroot00000000000000 tblish.dataset.women (Tablicious v0.4.7)

    8.2.58.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edataset_002ezCO2.html000066400000000000000000000105101515050116100263360ustar00rootroot00000000000000 tblish.dataset.zCO2 (Tablicious v0.4.7)

    8.2.58.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002edatasets.html000066400000000000000000000064671515050116100253150ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.7)

    8.2.59 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002eevalWithTableVars.html000066400000000000000000000076241515050116100270700ustar00rootroot00000000000000 tblish.evalWithTableVars (Tablicious v0.4.7)

    8.2.60 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002eexamples_002eSpDb.html000066400000000000000000000100221515050116100266000ustar00rootroot00000000000000 tblish.examples.SpDb (Tablicious v0.4.7)

    8.2.63 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002eexamples_002ecoplot.html000066400000000000000000000151211515050116100272550ustar00rootroot00000000000000 tblish.examples.coplot (Tablicious v0.4.7)

    8.2.61 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000120361515050116100305260ustar00rootroot00000000000000 tblish.examples.plot_pairs (Tablicious v0.4.7)

    8.2.62 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002esizeof2.html000066400000000000000000000124661515050116100250620ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.7)

    8.2.64 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    apjanke-octave-tablicious-8a1b10f/doc/html/tblish_002etable_002egrpstats.html000066400000000000000000000105451515050116100271020ustar00rootroot00000000000000 tblish.table.grpstats (Tablicious v0.4.7)

    8.2.65 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/doc/html/timezones.html000066400000000000000000000100401515050116100235440ustar00rootroot00000000000000 timezones (Tablicious v0.4.7)

    8.2.66 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/doc/html/todatetime.html000066400000000000000000000070451515050116100237010ustar00rootroot00000000000000 todatetime (Tablicious v0.4.7)

    8.2.67 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/doc/html/vartype.html000066400000000000000000000065261515050116100232370ustar00rootroot00000000000000 vartype (Tablicious v0.4.7)

    8.2.68 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/doc/html/vecfun.html000066400000000000000000000066651515050116100230370ustar00rootroot00000000000000 vecfun (Tablicious v0.4.7)

    8.2.69 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/doc/html/years.html000066400000000000000000000064661515050116100226730ustar00rootroot00000000000000 years (Tablicious v0.4.7)

    8.2.70 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/doc/mktexi.pl000066400000000000000000000302351515050116100215430ustar00rootroot00000000000000#!/usr/bin/env perl # # David Bateman Feb 02 2003 # Andrew Janke 2019, 2024 # # Extracts the help in texinfo format from Octave source code for use # in documentation and generates .texi and .qhp files from it. # # Usage: # # mktexi.pl [ ...] # # is the input .texi.in template file. # is the main INDEX file at the root of the package repo. # is the output .texi file to generate. # is the output .qhp file to generate. # is an M-code or oct-file source directory. You may specify as many # of them as you want. # # Takes various input files (the package source code, INDEX, DESCRIPTION, .texi.in), # extracts the Texinfo documentation and metadata from them, and generates # the combined .texi help document, along with the .qhp index file # for generating the QHelp collection. # # Emits diagnostic messages to stdout. # # Note: In Octave, "package" can mean two different things: either an Octave Forge style # package of software managed by the `pkg` command (like the Tablicious library), or a # namespace in M-code defined by placing source code files in "+" directories # (like the +tblish namespace within Tablicious). For clarity, this code uses "package" # to mean a pkg-managed software package, and "namespace" to mean the "+" # namespacing mechanism. # This program is free software; you can 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, see . # This program is granted to the public domain. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. BEGIN { push @INC, "."; } use strict; use Data::Dumper; use Date::Parse; use File::Find; use File::Basename; use Text::Wrap; use FileHandle; use IPC::Open3; use POSIX ":sys_wait_h"; use POSIX qw(strftime); use OctTexiDoc; if ($ARGV[0] eq "--check-texinfo-version") { my $texi_ver = `texi2any --version | head -1`; $texi_ver =~ m/texi2any \D*(\d+)\.(\d+)/; my $major = $1; my $minor = $2; if ($major < 6) { die "Texinfo version $major.$minor is too old. Need 6.0 or newer.\n"; } printf "Texinfo version $major.$minor is new enough\n"; exit 0; } my $infile = shift @ARGV; my $indexfile = shift @ARGV; my $outfile = shift @ARGV; my $qhpoutfile = shift @ARGV; my @sourcedirs = @ARGV; my $debug = 0; my $verbose = 0; # Extract the Texinfo docs from the source code my $docs = OctTexiDoc::DocSet->new; for my $sourcedir (@sourcedirs) { $docs->read_source_dir($sourcedir); } # Debugging output if ($debug) { open (TMP, ">", "topics.tmp") or die "Error: Could not open output file topics.tmp: $!\n"; print TMP Data::Dumper->Dump([$docs]); close TMP; } open (IN, $infile) or die "Error: Could not open input file $infile: $!\n"; open (OUT, ">", $outfile) or die "Error: Could not open output file $outfile: $!\n"; sub emit { print OUT @_; } # Get metadata from DESCRIPTION file my $pkg_meta = OctTexiDoc::get_package_metadata_from_description_file(); my $pkg_name = $$pkg_meta{"Name"}; my $pkg_version = $$pkg_meta{"Version"}; my $pkg_date_str = $$pkg_meta{"Date"}; my $pkg_date = str2time($pkg_date_str); my $pkg_date_month_str = "Date Unknown"; if ($pkg_date) { my @pkg_date = strptime($pkg_date_str); $pkg_date_month_str = strftime("%B %Y", @pkg_date); } sub unique { my @vals = @_; my %vals = (); for (@vals) { $vals{$_} = 1; } return sort(keys %vals); } sub setdiff { my ($a, $b) = @_; my %in_b = map {$_ => 1} @$b; my @diff = grep {not $in_b{$_}} @$a; return @diff; } sub node_name_to_doc_file_name { my ($node_name) = @_; my $out = $node_name; $out =~ s/_/_005f/g; # Have to do this one first to avoid double-escaping $out =~ s/\./_002e/g; $out =~ s/\//_002f/g; return $out; } # Generate the .texi file my $in_tex = 0; while (my $line = ) { $line =~ s/%%%%PACKAGE_VERSION%%%%/$pkg_version/g; $line =~ s/%%%%PACKAGE_DATE_YEARMONTH%%%%/$pkg_date_month_str/g; if ($line =~ /^\@DOCSTRING/) { $line =~ /^\@DOCSTRING\((.*)\)/; my $fcn_name = $1; $fcn_name =~ /^(.*?),(.*)/; my ($func0, $func1) = ($1, $2); my $fcn_doco = $docs->get_node_doco($func0); emit "$fcn_doco\n"; } elsif ($line =~ /^\@REFERENCE_SECTION/) { $line =~ /^\@REFERENCE_SECTION\((.*?)\)\s*/; my $refsection_name = $1; my $fcn_index = OctTexiDoc::read_index_file ($indexfile); my @all_index_fcns = @{$$fcn_index{"functions"}}; my @topic_nodes = $docs->topic_node_names; my @all_topics = unique(@all_index_fcns, @topic_nodes); @all_topics = sort { lc($a) cmp lc($b) } @all_topics; my %categories = %{$$fcn_index{"by_category"}}; my %descriptions = %{$$fcn_index{"descriptions"}}; # Build "by Category" index based on INDEX listing emit "\@node API by Category\n"; emit "\@section API by Category\n"; my @all_ctg_fcns; for my $category (@{$$fcn_index{"categories"}}) { my @ctg_fcns = @{$categories{$category}}; push @all_ctg_fcns, @ctg_fcns; emit "\@subsection $category\n"; emit "\@table \@asis\n"; for my $fcn (@ctg_fcns) { emit "\@item $fcn\n"; my $description = $descriptions{$fcn} || $docs->get_node_summary($fcn); emit "$description\n"; emit "\n"; emit "\@xref{$fcn}.\n"; } emit "\@end table\n"; } my @uncategorized = setdiff(\@all_topics, \@all_ctg_fcns); if (scalar (@uncategorized)) { emit "\@subsection Uncategorized\n"; emit "\@table \@asis\n"; for my $fcn (@uncategorized) { emit "\@item $fcn\n"; my $description = $descriptions{$fcn} || $docs->get_node_summary($fcn); emit "$description\n"; emit "\n"; emit "\@xref{$fcn}.\n"; } emit "\@end table\n"; } emit "\n"; # Build "Alphabetically" listing based on seen nodes + INDEX listing emit "\@node API Alphabetically\n"; emit "\@section API Alphabetically\n"; emit "\@menu\n"; for my $node (@all_topics) { my $description = $descriptions{$node} || $docs->get_node_summary($node); emit wrap("", "\t\t", "* ${node}::\t$description\n"); } emit "\@end menu\n"; emit "\n"; for my $node (@all_topics) { emit "\@node $node\n"; emit "\@subsection $node\n"; my $node = $docs->docs->{$node}; if ($node) { my $main_doc = OctTexiDoc::munge_texi_block_text($$node{block}); emit "$main_doc\n\n"; my @subnodes = sort { lc($$a{node}) cmp lc($$b{node}) } @{$$node{children}}; for my $subnode (@subnodes) { my $subnode_name = $$subnode{node}; my $subnode_doc = OctTexiDoc::munge_texi_block_text($$subnode{block}); emit "\@node $subnode_name\n"; emit "\@subsubsection $subnode_name\n\n"; emit "$subnode_doc\n"; } } else { emit "\@emph{Not documented}\n"; } } } else { if ($line =~ /\@tex/) { $in_tex = 1; } if ($in_tex) { $line =~ s/\\\\/\\/g; } emit $line; if ($line =~ /\@end tex/) { $in_tex = 0; } } } close IN; close OUT; # Generate the .qhp file my %level_map = ( "top" => 1, "chapter" => 2, "section" => 3, "subsection" => 4, "subsubsection" => 5 ); open (QHP, ">", $qhpoutfile) or die "Error: Could not open output .qhp file $qhpoutfile: $!\n"; sub qhp { print QHP @_; } my $preamble = < octave.community.$pkg_name doc EOS qhp $preamble; # TOC section my @files; my @classes; my @functions; open TEXI, $outfile or die "Could not open generated .texi file for reading: $outfile: $!\n"; my $level = 0; my $indent = " "; while (my $line = ) { chomp $line; next unless ($line =~ /^\s*\@node +(.*?)(,|$)/); my $node_name = $1; my $next_line = ; while ($next_line && $next_line =~ /^\s*$/) { $next_line = ; } chomp $next_line; unless ($next_line =~ /^\s*\@(\S+) +(.*)/) { die "Error: Failed parsing section line for node '$node_name': $next_line"; } my ($section_type, $section_title) = ($1, $2); my $section_level = $level_map{$section_type}; my $section_qhelp_title = $section_title =~ s/@\w+{(.*?)}/\1/rg; my $html_title = $node_name =~ s/\s/-/gr; $html_title = "index" if $html_title eq "Top"; my $html_file_base = node_name_to_doc_file_name ($html_title); my $html_file = "$html_file_base.html"; unshift @files, $html_file; print "Node: '$node_name' ($section_type): \"$section_title\" => \"$section_qhelp_title\"" . " (level $section_level), HTML: $html_file\n" if $verbose; die "Error: Unrecognized section type: $section_type\n" unless $section_level; if ($section_level == $level) { # close last node as sibling qhp $indent . (" " x $level) . "\n"; } elsif ($section_level > $level) { # leave last node open as parent if ($section_level > $level + 1) { die "Error: Discontinuity in section levels at node $node_name ($level to $section_level)"; } } elsif ($section_level < $level) { # close last two nodes my $levels_up = $level - $section_level; while ($level > $section_level) { qhp $indent . (" " x $level--) . "\n"; } qhp $indent . (" " x $level) . "\n"; } qhp $indent . (" " x $section_level) . "
    \n"; qhp $indent . (" " x $section_level) . " \n" if $debug; $level = $section_level; } while ($level > 1) { qhp $indent . (" " x $level--) . "
    \n"; } # Include the all-on-one-page version qhp $indent . (" " x $level) . "
    \n" . "$indent
    \n"; qhp < EOS close TEXI; # Keyword index my $node_index = $docs->nodes; my @node_names = keys %$node_index; @node_names = sort (@node_names); qhp " \n"; for my $node (@node_names) { my $file_base = node_name_to_doc_file_name ($node); qhp " \n"; } qhp " \n"; # Files section qhp " \n"; qhp " $pkg_name.html\n"; foreach my $file (@files) { qhp " html/$file\n"; } qhp " \n"; # Closing qhp <
    EOS apjanke-octave-tablicious-8a1b10f/doc/src/000077500000000000000000000000001515050116100204715ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/doc/src/tablicious.texi000066400000000000000000000552261515050116100235340ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @set VERSION %%%%PACKAGE_VERSION%%%% @setfilename tablicious.info @settitle Tablicious v@value{VERSION} @documentencoding UTF-8 @c %**end of header @copying This manual is for Tablicious, version @value{VERSION}. Copyright @copyright{} 2019, 2023, 2024, 2025, 2026 Andrew Janke @quotation Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions. @end quotation @end copying @documentdescription User manual for Tablicious for Octave. @end documentdescription @titlepage @title Tablicious for GNU Octave @subtitle version @value{VERSION}, %%%%PACKAGE_DATE_YEARMONTH%%%% @author Andrew Janke @page @vskip 0pt plus 1filll @insertcopying @end titlepage @dircategory Math @direntry * Tablicious: (tablicious). Tablicious package for Octave @end direntry @shortcontents @contents @ifnottex @node Top, Introduction @top Tablicious for GNU Octave This manual is for Tablicious, version @value{VERSION}. @end ifnottex @menu * Introduction:: * Getting Started:: * Table Representation:: * Date and Time Representation:: * Validation Functions:: * Example Data Sets:: * Data Sets from R:: * Missing Functionality:: * API Reference:: * Copying:: @end menu @node Introduction @chapter Introduction @quotation Time is an illusion. Lunchtime doubly so. @author Douglas Adams @end quotation This is the manual for the Tablicious package version @value{VERSION} for GNU Octave. Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a @code{table} class with support for filtering and join operations; @code{datetime}, @code{duration}, and related classes; Missing Data support; @code{string} and @code{categorical} data types; and other miscellaneous things. This document is a work in progress. You are invited to help improve it and submit patches. Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types. Tablicious was written by Andrew Janke <@email{floss@@apjanke.net}>. Support can be found on the @url{https://github.com/apjanke/octave-tablicious, Tablicious project GitHub page}. @node Getting Started @chapter Getting Started The easiest way to obtain Tablicious is by using Octave's @code{pkg} package manager. To install the development prerelease of Tablicious, run this in Octave: @example pkg install https://github.com/apjanke/octave-tablicious/releases/download/v%%%%PACKAGE_VERSION%%%%/tablicious-%%%%PACKAGE_VERSION%%%%.tar.gz @end example (Check the releases page at @url{https://github.com/apjanke/octave-tablicious/releases} to find out what the actual latest release number is.) For development, you can obtain the source code for Tablicious from the project repo on GitHub at @url{https://github.com/apjanke/octave-tablicious}. Make a local clone of the repo. Then add the @file{inst} directory in the repo to your Octave path. @node Table Representation @chapter Table Representation Tablicious provides the @code{table} class for representing tabular data. A @code{table} is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records. A @code{table} is composed of multiple “variables”, each with a name, which all have the same number of rows. (A @code{table} variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the @var{i}-th element or row of each variable compose a single record or observation. Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a @code{table} is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way. Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using @code{table} arrays. It’s like having your own in-memory SQL engine. @node Table Construction @section Table Construction There are two main ways to construct a @code{table} array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a @code{table}. To build an array from multiple variables, use the @code{table(@dots{})} constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new @code{table} object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the @code{'VariableNames'} option. To convert a tabular-organized array of another type into a @code{table}, use the conversion functions like @code{array2table}, @code{struct2table} and @code{cell2table}. @code{array2table} and @code{cell2table} take each column of the input array and turn it into a separate table variable in the resulting @code{table}. @code{struct2table} takes the fields of a struct and puts them into table variables. @node Tables vs SQL @section Tables vs SQL Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave @code{table} operations. In this table, @code{t} is a variable holding a @code{table} array, and @code{ix} is some indexing expression. @multitable @columnfractions .33 .33 .33 @headitem SQL @tab Relational @tab Octave @code{table} @item SELECT @tab PROJECT @tab @code{subsetvars}, @code{t(:,ix)} @item WHERE @tab RESTRICT @tab @code{subsetrows}, @code{t(ix,:)} @item INNER JOIN @tab JOIN @tab @code{innerjoin} @item OUTER JOIN @tab OUTER JOIN @tab @code{outerjoin} @item FROM @code{@var{table1}, @var{table2}, @dots{}} @tab Cartesian product @tab @code{cartesian} @item GROUP BY @tab SUMMARIZE @tab @code{groupby} @item DISTINCT @tab (automatic) @tab @code{unique(t)} @end multitable Note that there is one big difference between relational algebra and SQL & Octave @code{table}: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit @code{DISTINCT}/@code{unique()} on its results, and there‘s no @code{ORDER BY}/@code{sort()}. This is not the case in SQL or Octave @code{table}. Note for users coming from Matlab: Matlab does not provide a general @code{groupby} function. Instead, you have to variously use @code{rowfun}, @code{grpstats}, @code{groupsummary}, and manual code to accomplish “group by” operations. Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke @node Date and Time Representation @chapter Date and Time Representation Tablicious provides the @code{datetime} class for representing points in time. There’s also @code{duration} and @code{calendarDuration} for representing periods or durations of time. Like vector quantities along the time line, as opposed to @code{datetime} being a point along the time line. @node datetime Class @section @code{datetime} Class A @code{datetime} is an array object that represents points in time in the familiar Gregorian calendar. This is an attempt to reproduce the functionality of Matlab's @code{datetime}. It also contains some Octave-specific extensions. The underlying representation is that of a datenum (a @code{double} containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a @code{datetime} inclues an optional @code{TimeZone} property indicating what time zone the datetimes are in. So, basically, a @code{datetime} is an object wrapper around a datenum array, plus time zone support. @menu * Datenum Compatibility:: @end menu @node Datenum Compatibility @subsection Datenum Compatibility While the underlying data representation of @code{datetime} is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations. This is because of the signature of the @code{datetime} constructor. When combining objects and primitive types like @code{double}, the primitive type is promoted to an object by calling the other object's one-argument constructor on it. However, the one-argument numeric-input consstructor for @code{datetime} does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab's part; for compatibility, Octave does not alter that interface. To combine @code{datetime}s with datenums, you can convert the datenums to @code{datetime}s by calling @code{datetime.ofDatenum} or @code{datetime(x, 'ConvertFrom', 'datenum')}, or you can convert the @code{datetime}s to datenums by accessing its @code{dnums} field with @code{x.dnums}. Examples: @example dt = datetime('2011-03-04') dn = datenum('2017-01-01') [dt dn] @result{} error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND] [dt datetime.ofDatenum(dn)] @result{} 04-Mar-2011 01-Jan-2017 @end example Also, if you have a zoned @code{datetime}, you can’t combine it with a datenum, because datenums do not carry time zone information. @node Time Zones @section Time Zones Tablicious has support for representing dates in time zones and for converting between time zones. A @code{datetime} may be "zoned" or "zoneless". A zoneless @code{datetime} does not have a time zone associated with it. This is represented by an empty @code{TimeZone} property on the @code{datetime} object. A zoneless @code{datetime} represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts). A zoned @code{datetime} is associated with a time zone. It is represented by having the time zone's IANA zone identifier (e.g. @code{'UTC'} or @code{'America/New_York'}) in its @code{TimeZone} property. A zoned @code{datetime} represents the local time in that time zone. By default, the @code{datetime} constructor creates unzoned @code{datetime}s. To make a zoned @code{datetime}, either pass the @code{'TimeZone'} option to the constructor, or set the @code{TimeZone} property after object creation. Setting the @code{TimeZone} property on a zoneless @code{datetime} declares that it's a local time in that time zone. Setting the @code{TimeZone} property on a zoned @code{datetime} turns it back into a zoneless @code{datetime} without changing the local time it represents. You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned @code{datetime}s. @example % Create an unzoned datetime d = datetime('2011-03-04 06:00:00') @result{} 04-Mar-2011 06:00:00 % Create a zoned datetime d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York') @result{} 04-Mar-2011 06:00:00 America/New_York % This is equivalent d_ny = datetime('2011-03-04 06:00:00'); d_ny.TimeZone = 'America/New_York' @result{} 04-Mar-2011 06:00:00 America/New_York % Convert it to Chicago time d_chi.TimeZone = 'America/Chicago' @result{} 04-Mar-2011 05:00:00 America/Chicago @end example When you combine two zoned @code{datetime}s via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input. @example d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York') d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles') d_la - d_ny @result{} 03:00:00 @end example You cannot combine a zoned and an unzoned @code{datetime}. This results in an error being raised. @quotation Warning Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined. @end quotation @menu * Defined Time Zones:: @end menu @node Defined Time Zones @subsection Defined Time Zones Tablicious's time zone data is drawn from the @uref{https://www.iana.org/time-zones, IANA Time Zone Database}, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do. You can use the @code{timezones} function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows). @quotation Note The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for @code{datetime}s outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.) @end quotation @node Durations @section Durations @menu * duration Class:: * calendarDuration Class:: @end menu @node duration Class @subsection @code{duration} Class A @code{duration} represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.) A @code{duration} has a resolution of about a nanosecond for typical dates. The underlying representation is a @code{double} representing the number of days elapsed, similar to a datenum, except it's interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch. You can add or subtract a @code{duration} to a @code{datetime} to get another @code{datetime}. You can also add or subtract @code{durations} to each other. @node calendarDuration Class @subsection @code{calendarDuration} Class A @code{calendarDuration} represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A @code{calendarDuration} does arithmetic with "whole" calendar periods. @code{calendarDuration}s and @code{duration}s cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow @code{duration}s to be interpreted as numbers of days when combined with @code{calendarDuration}s.) @example d = datetime('2011-03-04 00:00:00') @result{} 04-Mar-2011 cdur = calendarDuration(1, 3, 0) @result{} 1y 3mo d2 = d + cdur @result{} 04-Jun-2012 @end example @node Validation Functions @chapter Validation Functions Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs. These validation functions are named following the pattern @code{mustBeXxx}, where @code{Xxx} is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs. The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there. Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider. When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with @code{inputname()}, so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested. @example % Validation of a simple variable does not need a label mustBeScalar (x); % Validation of a field or property reference does need a label mustBeScalar (this.foo, 'this.foo'); @end example @node Example Data Sets @chapter Example Data Sets Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the @code{tblish.datasets} and @code{tblish.dataset} classes. To see a list of the available data sets, run @code{tblish.datasets.list()}. Then to load one of the example data sets, run @code{tblish.datasets.load('examplename')}. For example: @example tblish.datasets.list t = tblish.datasets.load('cupcake') @end example You can also load it by calling @code{tblish.dataset.}. This does the same thing. For example: @example t = tblish.dataset.cupcake @end example When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs). Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the @code{doc} command on @code{tblish.dataset.}, where @var{} is the name of the data set. For example: @example doc tblish.dataset.cupcake @end example (The command @code{help tblish.dataset.} ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s @code{help} command.) @node Data Sets from R @section Data Sets from R Many of Tablicious’ example data sets are based on the example datasets found in R’s @code{datasets} package. R can be found at @url{https://www.r-project.org/}, and documentation for its @code{datasets} is at @url{https://rdrr.io/r/datasets/datasets-package.html}. Thanks to the R developers for producing the original data sets here. Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another. Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code. @node Missing Functionality @chapter Missing Functionality Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently: @itemize @item File I/O like @code{readtable()} and @code{writetable()} @item @code{summary()} @code{categorical} @item Assignment to table variables using @code{.}-indexing @item @code{timetable} @item POSIX time zone support for years outside the IANA time zone database coverage @item Week-of-year (ISO calendar) calculations @item Various @code{'ConvertFrom'} forms for @code{datetime} and @code{duration} constructors @item Support for LDML formatting for @code{datetime} @item Various functions: @itemize @item @code{between} @item @code{caldiff} @item @code{dateshift} @item @code{week} @end itemize @item @code{isdst}, @code{isweekend} @item @code{calendarDuration.split} @item @code{duration.Format} support @item Moving window methods in @code{fillmissing} @item @code{UTCOffset} and @code{DSTOffset} fields in the output of @code{timezones()} @item Plotting support @item Things omitted for compatibility: @itemize @item @code{ismissing} function @end itemize @end itemize A global @code{ismissing} function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. @code{ismissing} methods for various classes in Tablicious are defined. Tablicious also supplies an @code{isnanny} function with behavior similar to @code{ismissing} for clients which which wish to have @code{ismissing}-like behavior using a dependency only on Tablicious. It is the author’s hope that many of these will be implemented some day. These areas of missing functionality are tracked on the Tablicious issue tracker at @url{https://github.com/apjanke/octave-tablicious/issues} and @url{https://github.com/users/apjanke/projects/3}. @node API Reference @chapter API Reference @REFERENCE_SECTION(Tablicious) @node Copying @chapter Copying @section Package Copyright Tablicious for GNU Octave is covered by the GNU GPLv3 and other Free and Open Source Software licenses. The main code of Tablicious is licensed under the GNU GPL version 3 or later. Certain files in the build tools are licensed under the GNU GPL version 2 or later. This includes the @code{mktexi.pl} and @code{OctTexiDoc.pm} files in the @code{doc/} directory. The tzinfo database file is Public Domain. The date/time portion of Tablicious includes some Unicode data files licensed under the Unicode License Agreement - Data Files and Software license. The Tablicious test suite contains some files, specifically some table-related tests using MP-Test like @code{t/t_01_table.m}, which are BSD 3-Clause licensed, and are adapted from MATPOWER written by Ray Zimmerman. The Fisher Iris dataset is Public Domain. @section Manual Copyright @insertcopying @bye apjanke-octave-tablicious-8a1b10f/doc/tablicious.html000066400000000000000000027523651515050116100227520ustar00rootroot00000000000000 Tablicious v0.4.7

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.7.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.7 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support
    • Things omitted for compatibility:
      • ismissing function

    A global ismissing function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. ismissing methods for various classes in Tablicious are defined. Tablicious also supplies an isnanny function with behavior similar to ismissing for clients which which wish to have ismissing-like behavior using a dependency only on Tablicious.

    It is the author’s hope that many of these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like.

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.

    8.1.9 Uncategorized

    caldays

    Create a ‘calendarDuration’ that is a given number of calendar days long.

    See caldays.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 caldays

    Function File: out = caldays (x)

    Create a calendarDuration that is a given number of calendar days long.

    Input x is a numeric array specifying the number of calendar days.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, 0, x).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.3 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.3.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.3.2 calendarDuration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert a calendarDuration to a datevec whose elements represent its components of. The components are the year, month, day, hour, minute, and second quantities of this calendarDuration.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.


    8.2.3.3 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.3.4 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.3.5 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.3.6 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.3.7 calendarDuration.mtimes

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    This does not do true matrix multiplication, so at least one of the input arguments must be scalar.

    Returns a calendarDuration.


    8.2.3.8 calendarDuration.plus

    Method: out = plus (obj, B)

    Addition: add to a calendarDuration.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    B may be a calendarDuration, duration, or numeric. If B is numeric, it is converted to a calendarDuration using caldays(B).

    Returns a calendarDuration.


    8.2.3.9 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor B.

    Returns a calendarDuration.


    8.2.3.10 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj, which is equivalent to negating each of its components.


    8.2.4 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.5 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.6 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.6.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.6.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.6.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.6.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.6.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.6.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.


    8.2.6.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.6.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.6.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.6.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.6.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.6.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.6.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.6.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.6.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.6.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.6.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.6.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.6.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.6.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.6.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.7 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.8 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.9 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.10 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.10.1 datetime.colon

    Method: out = colon (lo, hi)
    Method: out = colon (hi, inc, hi)

    Generate a sequence of uniformly-spaced values.

    This method implements the behavior for the colon operator (lo:hi or lo:inc:hi calls) for the datetime type.

    "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time.

    The inc argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with duration.ofDays (inc). The default value for inc, used in the two-arg lo:hi is 1, that is, 1 day of exactly 24 hours.

    Returns a datetime vector.

    WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if inc is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.


    8.2.10.2 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.10.3 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time.

    Returns double array of same size as this.


    8.2.10.4 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.10.5 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.10.6 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.10.7 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.10.8 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.10.9 datetime.datevec

    Method: out = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert this to a datevec that represent the same local wall time.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.


    8.2.10.10 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.10.11 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.10.12 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.13 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.14 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.10.15 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.16 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a datetime. These are the time of day components. The Year, Month, and Day components are ignored, and not incorporated in to the result.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10.17 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.10.18 datetime.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, the special NaT value is considered missing. This is equivalent to a NaN used as a datenum.

    Returns logical array the same size as obj.


    8.2.10.19 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.10.20 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.10.21 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.22 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.10.23 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.10.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.25 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.10.26 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.10.27 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.28 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.10.29 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.10.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy.

    Returns datetime array the same size as A.


    8.2.10.31 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.10.32 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.10.33 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.10.34 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.10.35 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.10.36 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10.37 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.11 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.12 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.13 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.14 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.14.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.14.2 duration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert obj to a datevec whose elements represent the components of this duration. The components are the year, month, days, hour, minute, and second quantities of this duration. The years are in terms of fixed size years that are 365.2425 days long, and days are fixed size 24-hour days. The fixed size year size can be found in the FixedSizeYearDays constant class property on the duration class. The month component is always zero, since months are variable lengths and there is no equivalent fixed size month. Thus, the days component may be more than 31.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.


    8.2.14.3 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.14.4 duration.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second values of a duration. These are the hour, minute, and second values that when combined are equal to the same duration value.

    Returns double arrays the same size as obj.


    8.2.14.5 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.6 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.14.7 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.8 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.9 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.14.10 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.11 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.18 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.22 isfile

    Not documented


    8.2.23 isfolder

    Not documented


    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like.

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.
    3. Octave does not define an ismissing function, but the Octave Forge statistics package does, and adding an ismissing function to Tablicious would conflict with that in hard-to-resolve ways.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.25 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.26 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.27 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.28 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.28.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.28.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.28.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.28.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.28.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.28.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.28.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.28.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.28.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.28.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.28.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.29 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.30 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.31 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.31.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.31.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.32 mustBeA

    Not documented


    8.2.33 mustBeCellstr

    Not documented


    8.2.34 mustBeCharvec

    Not documented


    8.2.35 mustBeFinite

    Not documented


    8.2.36 mustBeInteger

    Not documented


    8.2.37 mustBeMember

    Not documented


    8.2.38 mustBeNonempty

    Not documented


    8.2.39 mustBeNumeric

    Not documented


    8.2.40 mustBeReal

    Not documented


    8.2.41 mustBeSameSize

    Not documented


    8.2.42 mustBeScalar

    Not documented


    8.2.43 mustBeScalarLogical

    Not documented


    8.2.44 mustBeVector

    Not documented


    8.2.45 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.46 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.47 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.48 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.49 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.50 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.51 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.52 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.53 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.53.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.53.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.53.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.53.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.53.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.53.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.53.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.53.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.53.9 string.endsWith

    Method: out = endsWith (obj, pattern)
    Method: out = endsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string ends with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.


    8.2.53.10 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.53.11 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.53.12 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.53.13 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.53.14 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.53.15 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.53.16 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat


    8.2.53.17 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.53.18 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.53.19 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.53.20 string.startsWith

    Method: out = startsWith (obj, pattern)
    Method: out = startsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string starts with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.


    8.2.53.21 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.53.22 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.53.23 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.53.24 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.53.25 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.53.26 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.53.27 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.53.28 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.54 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.55 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    8.2.55.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.55.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.55.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.55.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.55.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.55.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.55.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.55.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.55.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.55.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.55.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.55.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.55.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.55.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.55.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.55.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.55.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.55.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.55.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.55.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.55.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.55.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.55.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.55.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.55.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.55.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.55.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.55.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.55.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.55.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.


    8.2.55.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.55.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.55.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.55.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.55.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.55.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.55.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.55.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.55.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.


    8.2.55.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.55.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.55.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.55.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.55.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.55.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.55.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.55.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.56 tableOuterFillValue

    Not documented


    8.2.57 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.58 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.58.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.58.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.58.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.58.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.58.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.58.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.58.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.58.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.58.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.58.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.58.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.58.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.58.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.58.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.58.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.58.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.58.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.58.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.58.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.58.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.58.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.58.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.58.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.58.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.58.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.58.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.58.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.58.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.58.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.58.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.58.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.58.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.58.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.58.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.58.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.58.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.58.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.58.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.58.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.58.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.58.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.58.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.58.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.58.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.58.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.58.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.58.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.58.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.58.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.58.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.58.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.58.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.58.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.58.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.58.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.58.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.58.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.58.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.58.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.58.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.58.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.58.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.58.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.58.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.58.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.58.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.58.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.58.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.58.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.58.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.58.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.58.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.58.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.58.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.58.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.58.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.58.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.58.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.58.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.58.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.58.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.59 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.59.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.59.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.59.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.60 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.61 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.62 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.63 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.64 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.65 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.66 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.67 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.68 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.69 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.70 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/doc/tablicious.info000066400000000000000000011717351515050116100227340ustar00rootroot00000000000000This is tablicious.info, produced by makeinfo version 7.2 from tablicious.texi. This manual is for Tablicious, version 0.4.7. Copyright © 2019, 2023, 2024, 2025, 2026 Andrew Janke Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions. INFO-DIR-SECTION Math START-INFO-DIR-ENTRY * Tablicious: (tablicious). Tablicious package for Octave END-INFO-DIR-ENTRY  File: tablicious.info, Node: Top, Next: Introduction, Up: (dir) Tablicious for GNU Octave ************************* This manual is for Tablicious, version 0.4.7. * Menu: * Introduction:: * Getting Started:: * Table Representation:: * Date and Time Representation:: * Validation Functions:: * Example Data Sets:: * Data Sets from R:: * Missing Functionality:: * API Reference:: * Copying::  File: tablicious.info, Node: Introduction, Next: Getting Started, Up: Top 1 Introduction ************** Time is an illusion. Lunchtime doubly so. -- _Douglas Adams_ This is the manual for the Tablicious package version 0.4.7 for GNU Octave. Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a ‘table’ class with support for filtering and join operations; ‘datetime’, ‘duration’, and related classes; Missing Data support; ‘string’ and ‘categorical’ data types; and other miscellaneous things. This document is a work in progress. You are invited to help improve it and submit patches. Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types. Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page (https://github.com/apjanke/octave-tablicious).  File: tablicious.info, Node: Getting Started, Next: Table Representation, Prev: Introduction, Up: Top 2 Getting Started ***************** The easiest way to obtain Tablicious is by using Octave's ‘pkg’ package manager. To install the development prerelease of Tablicious, run this in Octave: pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz (Check the releases page at to find out what the actual latest release number is.) For development, you can obtain the source code for Tablicious from the project repo on GitHub at . Make a local clone of the repo. Then add the ‘inst’ directory in the repo to your Octave path.  File: tablicious.info, Node: Table Representation, Next: Date and Time Representation, Prev: Getting Started, Up: Top 3 Table Representation ********************** Tablicious provides the ‘table’ class for representing tabular data. A ‘table’ is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records. A ‘table’ is composed of multiple “variables”, each with a name, which all have the same number of rows. (A ‘table’ variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the I-th element or row of each variable compose a single record or observation. Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a ‘table’ is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way. Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using ‘table’ arrays. It’s like having your own in-memory SQL engine. * Menu: * Table Construction:: * Tables vs SQL::  File: tablicious.info, Node: Table Construction, Next: Tables vs SQL, Up: Table Representation 3.1 Table Construction ====================== There are two main ways to construct a ‘table’ array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a ‘table’. To build an array from multiple variables, use the ‘table(...)’ constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new ‘table’ object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the ‘'VariableNames'’ option. To convert a tabular-organized array of another type into a ‘table’, use the conversion functions like ‘array2table’, ‘struct2table’ and ‘cell2table’. ‘array2table’ and ‘cell2table’ take each column of the input array and turn it into a separate table variable in the resulting ‘table’. ‘struct2table’ takes the fields of a struct and puts them into table variables.  File: tablicious.info, Node: Tables vs SQL, Prev: Table Construction, Up: Table Representation 3.2 Tables vs SQL ================= Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave ‘table’ operations. In this table, ‘t’ is a variable holding a ‘table’ array, and ‘ix’ is some indexing expression. SQL Relational Octave ‘table’ --------------------------------------------------------------------------- SELECT PROJECT ‘subsetvars’, ‘t(:,ix)’ WHERE RESTRICT ‘subsetrows’, ‘t(ix,:)’ INNER JOIN JOIN ‘innerjoin’ OUTER JOIN OUTER JOIN ‘outerjoin’ FROM ‘TABLE1, TABLE2, Cartesian product ‘cartesian’ ...’ GROUP BY SUMMARIZE ‘groupby’ DISTINCT (automatic) ‘unique(t)’ Note that there is one big difference between relational algebra and SQL & Octave ‘table’: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit ‘DISTINCT’/‘unique()’ on its results, and there‘s no ‘ORDER BY’/‘sort()’. This is not the case in SQL or Octave ‘table’. Note for users coming from Matlab: Matlab does not provide a general ‘groupby’ function. Instead, you have to variously use ‘rowfun’, ‘grpstats’, ‘groupsummary’, and manual code to accomplish “group by” operations. Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke  File: tablicious.info, Node: Date and Time Representation, Next: Validation Functions, Prev: Table Representation, Up: Top 4 Date and Time Representation ****************************** Tablicious provides the ‘datetime’ class for representing points in time. There’s also ‘duration’ and ‘calendarDuration’ for representing periods or durations of time. Like vector quantities along the time line, as opposed to ‘datetime’ being a point along the time line. * Menu: * datetime Class:: * Time Zones:: * Durations::  File: tablicious.info, Node: datetime Class, Next: Time Zones, Up: Date and Time Representation 4.1 ‘datetime’ Class ==================== A ‘datetime’ is an array object that represents points in time in the familiar Gregorian calendar. This is an attempt to reproduce the functionality of Matlab's ‘datetime’. It also contains some Octave-specific extensions. The underlying representation is that of a datenum (a ‘double’ containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a ‘datetime’ inclues an optional ‘TimeZone’ property indicating what time zone the datetimes are in. So, basically, a ‘datetime’ is an object wrapper around a datenum array, plus time zone support. * Menu: * Datenum Compatibility::  File: tablicious.info, Node: Datenum Compatibility, Up: datetime Class 4.1.1 Datenum Compatibility --------------------------- While the underlying data representation of ‘datetime’ is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations. This is because of the signature of the ‘datetime’ constructor. When combining objects and primitive types like ‘double’, the primitive type is promoted to an object by calling the other object's one-argument constructor on it. However, the one-argument numeric-input consstructor for ‘datetime’ does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab's part; for compatibility, Octave does not alter that interface. To combine ‘datetime’s with datenums, you can convert the datenums to ‘datetime’s by calling ‘datetime.ofDatenum’ or ‘datetime(x, 'ConvertFrom', 'datenum')’, or you can convert the ‘datetime’s to datenums by accessing its ‘dnums’ field with ‘x.dnums’. Examples: dt = datetime('2011-03-04') dn = datenum('2017-01-01') [dt dn] ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND] [dt datetime.ofDatenum(dn)] ⇒ 04-Mar-2011 01-Jan-2017 Also, if you have a zoned ‘datetime’, you can’t combine it with a datenum, because datenums do not carry time zone information.  File: tablicious.info, Node: Time Zones, Next: Durations, Prev: datetime Class, Up: Date and Time Representation 4.2 Time Zones ============== Tablicious has support for representing dates in time zones and for converting between time zones. A ‘datetime’ may be "zoned" or "zoneless". A zoneless ‘datetime’ does not have a time zone associated with it. This is represented by an empty ‘TimeZone’ property on the ‘datetime’ object. A zoneless ‘datetime’ represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts). A zoned ‘datetime’ is associated with a time zone. It is represented by having the time zone's IANA zone identifier (e.g. ‘'UTC'’ or ‘'America/New_York'’) in its ‘TimeZone’ property. A zoned ‘datetime’ represents the local time in that time zone. By default, the ‘datetime’ constructor creates unzoned ‘datetime’s. To make a zoned ‘datetime’, either pass the ‘'TimeZone'’ option to the constructor, or set the ‘TimeZone’ property after object creation. Setting the ‘TimeZone’ property on a zoneless ‘datetime’ declares that it's a local time in that time zone. Setting the ‘TimeZone’ property on a zoned ‘datetime’ turns it back into a zoneless ‘datetime’ without changing the local time it represents. You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned ‘datetime’s. % Create an unzoned datetime d = datetime('2011-03-04 06:00:00') ⇒ 04-Mar-2011 06:00:00 % Create a zoned datetime d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York') ⇒ 04-Mar-2011 06:00:00 America/New_York % This is equivalent d_ny = datetime('2011-03-04 06:00:00'); d_ny.TimeZone = 'America/New_York' ⇒ 04-Mar-2011 06:00:00 America/New_York % Convert it to Chicago time d_chi.TimeZone = 'America/Chicago' ⇒ 04-Mar-2011 05:00:00 America/Chicago When you combine two zoned ‘datetime’s via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input. d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York') d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles') d_la - d_ny ⇒ 03:00:00 You cannot combine a zoned and an unzoned ‘datetime’. This results in an error being raised. Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined. * Menu: * Defined Time Zones::  File: tablicious.info, Node: Defined Time Zones, Up: Time Zones 4.2.1 Defined Time Zones ------------------------ Tablicious's time zone data is drawn from the IANA Time Zone Database (https://www.iana.org/time-zones), also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do. You can use the ‘timezones’ function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows). Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for ‘datetime’s outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)  File: tablicious.info, Node: Durations, Prev: Time Zones, Up: Date and Time Representation 4.3 Durations ============= * Menu: * duration Class:: * calendarDuration Class::  File: tablicious.info, Node: duration Class, Next: calendarDuration Class, Up: Durations 4.3.1 ‘duration’ Class ---------------------- A ‘duration’ represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.) A ‘duration’ has a resolution of about a nanosecond for typical dates. The underlying representation is a ‘double’ representing the number of days elapsed, similar to a datenum, except it's interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch. You can add or subtract a ‘duration’ to a ‘datetime’ to get another ‘datetime’. You can also add or subtract ‘durations’ to each other.  File: tablicious.info, Node: calendarDuration Class, Prev: duration Class, Up: Durations 4.3.2 ‘calendarDuration’ Class ------------------------------ A ‘calendarDuration’ represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A ‘calendarDuration’ does arithmetic with "whole" calendar periods. ‘calendarDuration’s and ‘duration’s cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow ‘duration’s to be interpreted as numbers of days when combined with ‘calendarDuration’s.) d = datetime('2011-03-04 00:00:00') ⇒ 04-Mar-2011 cdur = calendarDuration(1, 3, 0) ⇒ 1y 3mo d2 = d + cdur ⇒ 04-Jun-2012  File: tablicious.info, Node: Validation Functions, Next: Example Data Sets, Prev: Date and Time Representation, Up: Top 5 Validation Functions ********************** Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs. These validation functions are named following the pattern ‘mustBeXxx’, where ‘Xxx’ is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs. The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there. Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider. When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with ‘inputname()’, so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested. % Validation of a simple variable does not need a label mustBeScalar (x); % Validation of a field or property reference does need a label mustBeScalar (this.foo, 'this.foo');  File: tablicious.info, Node: Example Data Sets, Next: Missing Functionality, Prev: Validation Functions, Up: Top 6 Example Data Sets ******************* Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the ‘tblish.datasets’ and ‘tblish.dataset’ classes. To see a list of the available data sets, run ‘tblish.datasets.list()’. Then to load one of the example data sets, run ‘tblish.datasets.load('examplename')’. For example: tblish.datasets.list t = tblish.datasets.load('cupcake') You can also load it by calling ‘tblish.dataset.’. This does the same thing. For example: t = tblish.dataset.cupcake When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs). Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the ‘doc’ command on ‘tblish.dataset.’, where is the name of the data set. For example: doc tblish.dataset.cupcake (The command ‘help tblish.dataset.’ ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s ‘help’ command.) * Menu: * Data Sets from R::  File: tablicious.info, Node: Data Sets from R, Next: Missing Functionality, Prev: Example Data Sets, Up: Example Data Sets 6.1 Data Sets from R ==================== Many of Tablicious’ example data sets are based on the example datasets found in R’s ‘datasets’ package. R can be found at , and documentation for its ‘datasets’ is at . Thanks to the R developers for producing the original data sets here. Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another. Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.  File: tablicious.info, Node: Missing Functionality, Next: API Reference, Prev: Example Data Sets, Up: Top 7 Missing Functionality *********************** Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently: • File I/O like ‘readtable()’ and ‘writetable()’ • ‘summary()’ ‘categorical’ • Assignment to table variables using ‘.’-indexing • ‘timetable’ • POSIX time zone support for years outside the IANA time zone database coverage • Week-of-year (ISO calendar) calculations • Various ‘'ConvertFrom'’ forms for ‘datetime’ and ‘duration’ constructors • Support for LDML formatting for ‘datetime’ • Various functions: • ‘between’ • ‘caldiff’ • ‘dateshift’ • ‘week’ • ‘isdst’, ‘isweekend’ • ‘calendarDuration.split’ • ‘duration.Format’ support • Moving window methods in ‘fillmissing’ • ‘UTCOffset’ and ‘DSTOffset’ fields in the output of ‘timezones()’ • Plotting support • Things omitted for compatibility: • ‘ismissing’ function A global ‘ismissing’ function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. ‘ismissing’ methods for various classes in Tablicious are defined. Tablicious also supplies an ‘isnanny’ function with behavior similar to ‘ismissing’ for clients which which wish to have ‘ismissing’-like behavior using a dependency only on Tablicious. It is the author’s hope that many of these will be implemented some day. These areas of missing functionality are tracked on the Tablicious issue tracker at and .  File: tablicious.info, Node: API Reference, Next: Copying, Prev: Missing Functionality, Up: Top 8 API Reference *************** * Menu: * API by Category:: * API Alphabetically::  File: tablicious.info, Node: API by Category, Next: API Alphabetically, Up: API Reference 8.1 API by Category =================== 8.1.1 Tables ------------ table Tabular data array containing multiple columnar variables. *Note table::. array2table Convert an array to a table. *Note array2table::. cell2table Convert a cell array to a table. *Note cell2table::. struct2table Convert struct to a table. *Note struct2table::. tableOuterFillValue *Note tableOuterFillValue::. vartype Filter by variable type for use in suscripting. *Note vartype::. istable True if input is a ‘table’ array or other table-like type, false otherwise. *Note istable::. istimetable True if input is a ‘timetable’ array or other timetable-like type, false otherwise. *Note istimetable::. istabular True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them. *Note istabular::. tblish.evalWithTableVars Evaluate an expression against a table array’s variables. *Note tblish.evalWithTableVars::. tblish.table.grpstats Statistics by group for a table array. *Note tblish.table.grpstats::. 8.1.2 Strings and Categoricals ------------------------------ string A string array of Unicode strings. *Note string::. NaS “Not-a-String". *Note NaS::. contains Test if strings contain a pattern. *Note contains::. dispstrs Display strings for array. *Note dispstrs::. categorical Categorical variable array. *Note categorical::. iscategorical True if input is a ‘categorical’ array, false otherwise. *Note iscategorical::. NaC “Not-a-Categorical". *Note NaC::. discretize Group data into discrete bins or categories. *Note discretize::. 8.1.3 Dates and Times --------------------- datetime Represents points in time using the Gregorian calendar. *Note datetime::. NaT “Not-a-Time”. *Note NaT::. todatetime Convert input to a Tablicious datetime array, with convenient interface. *Note todatetime::. localdate Represents a complete day using the Gregorian calendar. *Note localdate::. isdatetime True if input is a ‘datetime’ array, false otherwise. *Note isdatetime::. calendarDuration Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. *Note calendarDuration::. iscalendarduration True if input is a ‘calendarDuration’ array, false otherwise. *Note iscalendarduration::. calmonths Create a ‘calendarDuration’ that is a given number of calendar months long. *Note calmonths::. calyears Construct a ‘calendarDuration’ a given number of years long. *Note calyears::. days Duration in days. *Note days::. duration Represents durations or periods of time as an amount of fixed-length time (i.e. *Note duration::. hours Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. *Note hours::. isduration True if input is a ‘duration’ array, false otherwise. *Note isduration::. milliseconds Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X. *Note milliseconds::. minutes Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. *Note minutes::. seconds Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X. *Note seconds::. timezones List all the time zones defined on this system. *Note timezones::. years Create a ‘duration’ X years long, or get the years in a ‘duration’ X. *Note years::. 8.1.4 Missing Data ------------------ missing Generic auto-converting missing value. *Note missing::. isnanny Test if elements are NaN or NaN-like. *Note isnanny::. eqn Determine element-wise equality, treating NaNs as equal *Note eqn::. 8.1.5 Validation Functions -------------------------- mustBeA *Note mustBeA::. mustBeCellstr *Note mustBeCellstr::. mustBeCharvec *Note mustBeCharvec::. mustBeFinite *Note mustBeFinite::. mustBeInteger *Note mustBeInteger::. mustBeMember *Note mustBeMember::. mustBeNonempty *Note mustBeNonempty::. mustBeNumeric *Note mustBeNumeric::. mustBeReal *Note mustBeReal::. mustBeSameSize *Note mustBeSameSize::. mustBeScalar *Note mustBeScalar::. mustBeScalarLogical *Note mustBeScalarLogical::. mustBeVector *Note mustBeVector::. 8.1.6 Miscellaneous ------------------- colvecfun Apply a function to column vectors in array. *Note colvecfun::. dispstrs Display strings for array. *Note dispstrs::. head Get first K rows of an array. *Note head::. isfile *Note isfile::. isfolder *Note isfolder::. pp Alias for prettyprint, for interactive use. *Note pp::. scalarexpand Expand scalar inputs to match size of non-scalar inputs. *Note scalarexpand::. size2str Format an array size for display. *Note size2str::. splitapply Split data into groups and apply function. *Note splitapply::. tail Get last K rows of an array. *Note tail::. vecfun Apply function to vectors in array along arbitrary dimension. *Note vecfun::. tblish.sizeof2 Approximate size of an array in bytes, with object support. *Note tblish.sizeof2::. 8.1.7 Example Datasets ---------------------- tblish.datasets Example dataset collection. *Note tblish.datasets::. tblish.dataset The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious. *Note tblish.dataset::. 8.1.8 Example Code ------------------ tblish.examples.coplot Conditioning plot. *Note tblish.examples.coplot::. tblish.examples.plot_pairs Plot pairs of variables against each other. *Note tblish.examples.plot_pairs::. tblish.examples.SpDb The classic Suppliers-Parts example database. *Note tblish.examples.SpDb::. 8.1.9 Uncategorized ------------------- caldays Create a ‘calendarDuration’ that is a given number of calendar days long. *Note caldays::.  File: tablicious.info, Node: API Alphabetically, Prev: API by Category, Up: API Reference 8.2 API Alphabetically ====================== * Menu: * array2table:: Convert an array to a table. * caldays:: Create a ‘calendarDuration’ that is a given number of calendar days long. * calendarDuration:: Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. * calmonths:: Create a ‘calendarDuration’ that is a given number of calendar months long. * calyears:: Construct a ‘calendarDuration’ a given number of years long. * categorical:: Categorical variable array. * cell2table:: Convert a cell array to a table. * colvecfun:: Apply a function to column vectors in array. * contains:: Test if strings contain a pattern. * datetime:: Represents points in time using the Gregorian calendar. * days:: Duration in days. * discretize:: Group data into discrete bins or categories. * dispstrs:: Display strings for array. * duration:: Represents durations or periods of time as an amount of fixed-length time (i.e. * eqn:: Determine element-wise equality, treating NaNs as equal * head:: Get first K rows of an array. * hours:: Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. * iscalendarduration:: True if input is a ‘calendarDuration’ array, false otherwise. * iscategorical:: True if input is a ‘categorical’ array, false otherwise. * isdatetime:: True if input is a ‘datetime’ array, false otherwise. * isduration:: True if input is a ‘duration’ array, false otherwise. * isfile:: * isfolder:: * isnanny:: Test if elements are NaN or NaN-like. * istable:: True if input is a ‘table’ array or other table-like type, false otherwise. * istabular:: True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them. * istimetable:: True if input is a ‘timetable’ array or other timetable-like type, false otherwise. * localdate:: Represents a complete day using the Gregorian calendar. * milliseconds:: Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X. * minutes:: Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. * missing:: Generic auto-converting missing value. * mustBeA:: * mustBeCellstr:: * mustBeCharvec:: * mustBeFinite:: * mustBeInteger:: * mustBeMember:: * mustBeNonempty:: * mustBeNumeric:: * mustBeReal:: * mustBeSameSize:: * mustBeScalar:: * mustBeScalarLogical:: * mustBeVector:: * NaC:: “Not-a-Categorical". * NaS:: “Not-a-String". * NaT:: “Not-a-Time”. * pp:: Alias for prettyprint, for interactive use. * scalarexpand:: Expand scalar inputs to match size of non-scalar inputs. * seconds:: Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X. * size2str:: Format an array size for display. * splitapply:: Split data into groups and apply function. * string:: A string array of Unicode strings. * struct2table:: Convert struct to a table. * table:: Tabular data array containing multiple columnar variables. * tableOuterFillValue:: * tail:: Get last K rows of an array. * tblish.dataset:: The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious. * tblish.datasets:: Example dataset collection. * tblish.evalWithTableVars:: Evaluate an expression against a table array’s variables. * tblish.examples.coplot:: Conditioning plot. * tblish.examples.plot_pairs:: Plot pairs of variables against each other. * tblish.examples.SpDb:: The classic Suppliers-Parts example database. * tblish.sizeof2:: Approximate size of an array in bytes, with object support. * tblish.table.grpstats:: Statistics by group for a table array. * timezones:: List all the time zones defined on this system. * todatetime:: Convert input to a Tablicious datetime array, with convenient interface. * vartype:: Filter by variable type for use in suscripting. * vecfun:: Apply function to vectors in array along arbitrary dimension. * years:: Create a ‘duration’ X years long, or get the years in a ‘duration’ X.  File: tablicious.info, Node: array2table, Next: caldays, Up: API Alphabetically 8.2.1 array2table ----------------- -- Function: OUT = array2table (C) -- Function: OUT = array2table (..., 'VariableNames', VARIABLENAMES) -- Function: OUT = array2table (..., 'RowNames', ROWNAMES) Convert an array to a table. Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array. You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use ‘cell2table’ instead, columns of the cell array which can be condensed into primitive arrays will be. With ‘array2table’, they won't be. See also: *note cell2table::, *note table::, *note struct2table::  File: tablicious.info, Node: caldays, Next: calendarDuration, Prev: array2table, Up: API Alphabetically 8.2.2 caldays ------------- -- Function File: OUT = caldays (X) Create a ‘calendarDuration’ that is a given number of calendar days long. Input X is a numeric array specifying the number of calendar days. This is a shorthand alternative to calling the ‘calendarDuration’ constructor with ‘calendarDuration(0, 0, x)’. Returns a new ‘calendarDuration’ object of the same size as X. *Note calendarDuration::.  File: tablicious.info, Node: calendarDuration, Next: calmonths, Prev: caldays, Up: API Alphabetically 8.2.3 calendarDuration ---------------------- -- Class: calendarDuration Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.) -- Instance Variable of calendarDuration: char Format The format to display this ‘calendarDuration’ in. Currently unsupported. This is a single value that applies to the whole array. * Menu: * calendarDuration.calendarDuration:: * calendarDuration.datevec:: * calendarDuration.dispstrs:: * calendarDuration.ismissing:: * calendarDuration.isnan:: * calendarDuration.minus:: * calendarDuration.mtimes:: * calendarDuration.plus:: * calendarDuration.times:: * calendarDuration.uminus::  File: tablicious.info, Node: calendarDuration.calendarDuration, Next: calendarDuration.datevec, Up: calendarDuration 8.2.3.1 calendarDuration.calendarDuration ......................................... -- Constructor: OBJ = calendarDuration () Constructs a new scalar ‘calendarDuration’ of zero elapsed time. -- Constructor: OBJ = calendarDuration (Y, M, D) -- Constructor: OBJ = calendarDuration (Y, M, D, H, MI, S) Constructs new ‘calendarDuration’ arrays based on input values.  File: tablicious.info, Node: calendarDuration.datevec, Next: calendarDuration.dispstrs, Prev: calendarDuration.calendarDuration, Up: calendarDuration 8.2.3.2 calendarDuration.datevec ................................ -- Method: [DVEC] = datevec (OBJ) -- Method: [Y, M, D, H, MN, S] = datevec (OBJ) Convert a ‘calendarDuration’ to a datevec whose elements represent its components of. The components are the year, month, day, hour, minute, and second quantities of this ‘calendarDuration’. When nargout is 0 or 1, returns a double array of size n-by-6, where n is ‘numel(obj)’. When nargout is 2 or more, returns double arrays the same size as OBJ.  File: tablicious.info, Node: calendarDuration.dispstrs, Next: calendarDuration.ismissing, Prev: calendarDuration.datevec, Up: calendarDuration 8.2.3.3 calendarDuration.dispstrs ................................. -- Method: OUT = dispstrs (OBJ) Get display strings for each element of OBJ. Returns a cellstr the same size as OBJ.  File: tablicious.info, Node: calendarDuration.ismissing, Next: calendarDuration.isnan, Prev: calendarDuration.dispstrs, Up: calendarDuration 8.2.3.4 calendarDuration.ismissing .................................. -- Method: OUT = ismissing (OBJ) True if input elements are missing. This is equivalent to ‘ismissing’. Returns logical array the same size as OBJ.  File: tablicious.info, Node: calendarDuration.isnan, Next: calendarDuration.minus, Prev: calendarDuration.ismissing, Up: calendarDuration 8.2.3.5 calendarDuration.isnan .............................. -- Method: OUT = isnan (OBJ) True if input elements are NaN. This is equivalent to ‘ismissing’, and is provided for compatibility and polymorphic programming purposes. Returns logical array the same size as OBJ.  File: tablicious.info, Node: calendarDuration.minus, Next: calendarDuration.mtimes, Prev: calendarDuration.isnan, Up: calendarDuration 8.2.3.6 calendarDuration.minus .............................. -- Method: OUT = times (A, B) Subtraction: Subtracts one ‘calendarDuration’ from another. Returns a ‘calendarDuration’.  File: tablicious.info, Node: calendarDuration.mtimes, Next: calendarDuration.plus, Prev: calendarDuration.minus, Up: calendarDuration 8.2.3.7 calendarDuration.mtimes ............................... -- Method: OUT = times (OBJ, B) Multiplication: Multiplies a ‘calendarDuration’ by a numeric factor. This does not do true matrix multiplication, so at least one of the input arguments must be scalar. Returns a ‘calendarDuration’.  File: tablicious.info, Node: calendarDuration.plus, Next: calendarDuration.times, Prev: calendarDuration.mtimes, Up: calendarDuration 8.2.3.8 calendarDuration.plus ............................. -- Method: OUT = plus (OBJ, B) Addition: add to a ‘calendarDuration’. All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs. B may be a ‘calendarDuration’, ‘duration’, or numeric. If B is numeric, it is converted to a ‘calendarDuration’ using ‘caldays(B)’. Returns a ‘calendarDuration’.  File: tablicious.info, Node: calendarDuration.times, Next: calendarDuration.uminus, Prev: calendarDuration.plus, Up: calendarDuration 8.2.3.9 calendarDuration.times .............................. -- Method: OUT = times (OBJ, B) Multiplication: Multiplies a ‘calendarDuration’ by a numeric factor B. Returns a ‘calendarDuration’.  File: tablicious.info, Node: calendarDuration.uminus, Prev: calendarDuration.times, Up: calendarDuration 8.2.3.10 calendarDuration.uminus ................................ -- Method: OUT = uminus (OBJ) Unary minus. Negates the sign of OBJ, which is equivalent to negating each of its components.  File: tablicious.info, Node: calmonths, Next: calyears, Prev: calendarDuration, Up: API Alphabetically 8.2.4 calmonths --------------- -- Function File: OUT = calmonths (X) Create a ‘calendarDuration’ that is a given number of calendar months long. Input X is a numeric array specifying the number of calendar months. This is a shorthand alternative to calling the ‘calendarDuration’ constructor with ‘calendarDuration(0, x, 0)’. Returns a new ‘calendarDuration’ object of the same size as X. *Note calendarDuration::.  File: tablicious.info, Node: calyears, Next: categorical, Prev: calmonths, Up: API Alphabetically 8.2.5 calyears -------------- -- Function: OUT = calyears (X) Construct a ‘calendarDuration’ a given number of years long. This is a shorthand for calling ‘calendarDuration(X, 0, 0)’. *Note calendarDuration::.  File: tablicious.info, Node: categorical, Next: cell2table, Prev: calyears, Up: API Alphabetically 8.2.6 categorical ----------------- -- Class: categorical Categorical variable array. A ‘categorical’ array represents an array of values of a categorical variable. Each ‘categorical’ array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array). In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a ‘NaN’ value. This class is not fully implemented yet. Missing stuff: • gt, ge, lt, le • Ordinal support in general • countcats • summary -- Instance Variable of categorical: uint16 code The numeric codes of the array element values. These are indexes into the ‘cats’ category list. This is a planar property. -- Instance Variable of categorical: logical tfMissing A logical mask indicating whether each element of the array is missing (that is, undefined). This is a planar property. -- Instance Variable of categorical: cellstr cats The names of the categories in this array. This is the list into which the ‘code’ values are indexes. -- Instance Variable of categorical: scalar_logical isOrdinal A scalar logical indicating whether the categories in this array have an ordinal relationship. * Menu: * categorical.addcats:: * categorical.categorical:: * categorical.categories:: * categorical.cellstr:: * categorical.dispstrs:: * categorical.double:: * categorical.iscategory:: * categorical.ismissing:: * categorical.isnanny:: * categorical.isordinal:: * categorical.isundefined:: * categorical.mergecats:: * categorical.missing:: * categorical.removecats:: * categorical.renamecats:: * categorical.reordercats:: * categorical.setcats:: * categorical.squeezecats:: * categorical.string:: * categorical.summary:: * categorical.undefined::  File: tablicious.info, Node: categorical.addcats, Next: categorical.categorical, Up: categorical 8.2.6.1 categorical.addcats ........................... -- Method: OUT = addcats (OBJ, NEWCATS) Add categories to categorical array. Adds the specified categories to OBJ, without changing any of its values. NEWCATS is a cellstr listing the category names to add to OBJ.  File: tablicious.info, Node: categorical.categorical, Next: categorical.categories, Prev: categorical.addcats, Up: categorical 8.2.6.2 categorical.categorical ............................... -- Constructor: OBJ = categorical () Constructs a new scalar categorical whose value is undefined. -- Constructor: OBJ = categorical (VALS) -- Constructor: OBJ = categorical (VALS, VALUESET) -- Constructor: OBJ = categorical (VALS, VALUESET, CATEGORY_NAMES) -- Constructor: OBJ = categorical (..., 'Ordinal', ORDINAL) -- Constructor: OBJ = categorical (..., 'Protected', PROTECTED) Constructs a new categorical array from the given values. VALS is the array of values to convert to categoricals. VALUESET is the set of all values from which VALS is drawn. If omitted, it defaults to the unique values in VALS. CATEGORY_NAMES is a list of category names corresponding to VALUESET. If omitted, it defaults to VALUESET, converted to strings. ORDINAL is a logical indicating whether the category values in OBJ have a numeric ordering relationship. Defaults to false. PROTECTED indicates whether OBJ should be protected, which prevents the addition of new categories to the array. Defaults to false.  File: tablicious.info, Node: categorical.categories, Next: categorical.cellstr, Prev: categorical.categorical, Up: categorical 8.2.6.3 categorical.categories .............................. -- Method: OUT = categories (OBJ) Get a list of the categories in OBJ. Gets a list of the categories in OBJ, identified by their category names. Returns a cellstr column vector.  File: tablicious.info, Node: categorical.cellstr, Next: categorical.dispstrs, Prev: categorical.categories, Up: categorical 8.2.6.4 categorical.cellstr ........................... -- Method: OUT = cellstr (OBJ) Convert to cellstr. Converts OBJ to a cellstr array. The strings will be the category names for corresponding values, or ‘''’ for undefined values. Returns a cellstr array the same size as OBJ.  File: tablicious.info, Node: categorical.dispstrs, Next: categorical.double, Prev: categorical.cellstr, Up: categorical 8.2.6.5 categorical.dispstrs ............................ -- Method: OUT = dispstrs (OBJ) Display strings. Gets display strings for each element in OBJ. The display strings are either the category string, or ‘''’ for undefined values. Returns a cellstr array the same size as OBJ.  File: tablicious.info, Node: categorical.double, Next: categorical.iscategory, Prev: categorical.dispstrs, Up: categorical 8.2.6.6 categorical.double .......................... -- Method: OUT = double (OBJ) Convert to double array, by getting the underlying code values. Converts OBJ to a string array. The doubles will be the underlying numeric code values of OBJ, or ‘NaN’ for undefined values. The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering. Returns a ‘double’ array the same size as OBJ.  File: tablicious.info, Node: categorical.iscategory, Next: categorical.ismissing, Prev: categorical.double, Up: categorical 8.2.6.7 categorical.iscategory .............................. -- Method: OUT = iscategory (OBJ, CATNAMES) Test whether input is a category on a categorical array. CATNAMES is a cellstr listing the category names to check against OBJ. Returns a logical array the same size as CATNAMES.  File: tablicious.info, Node: categorical.ismissing, Next: categorical.isnanny, Prev: categorical.iscategory, Up: categorical 8.2.6.8 categorical.ismissing ............................. -- Method: OUT = ismissing (OBJ) Test whether elements are missing. For categorical arrays, undefined elements are considered to be missing. Returns a logical array the same size as OBJ.  File: tablicious.info, Node: categorical.isnanny, Next: categorical.isordinal, Prev: categorical.ismissing, Up: categorical 8.2.6.9 categorical.isnanny ........................... -- Method: OUT = isnanny (OBJ) Test whethere elements are NaN-ish. Checks where each element in OBJ is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not. Returns a logical array the same size as OBJ.  File: tablicious.info, Node: categorical.isordinal, Next: categorical.isundefined, Prev: categorical.isnanny, Up: categorical 8.2.6.10 categorical.isordinal .............................. -- Method: OUT = isordinal (OBJ) Whether OBJ is ordinal. Returns true if OBJ is ordinal (as determined by its ‘IsOrdinal’ property), and false otherwise.  File: tablicious.info, Node: categorical.isundefined, Next: categorical.mergecats, Prev: categorical.isordinal, Up: categorical 8.2.6.11 categorical.isundefined ................................ -- Method: OUT = isundefined (OBJ) Test whether elements are undefined. Checks whether each element in OBJ is undefined. "Undefined" is a special value defined by ‘categorical’. It is equivalent to a ‘NaN’ or a ‘missing’ value. Returns a logical array the same size as OBJ.  File: tablicious.info, Node: categorical.mergecats, Next: categorical.missing, Prev: categorical.isundefined, Up: categorical 8.2.6.12 categorical.mergecats .............................. -- Method: OUT = mergecats (OBJ, OLDCATS) -- Method: OUT = mergecats (OBJ, OLDCATS, NEWCAT) Merge multiple categories. Merges the categories OLDCATS into a single category. If NEWCAT is specified, that new category is added if necessary, and all of OLDCATS are merged into it. NEWCAT must be an existing category in OBJ if OBJ is ordinal. If NEWCAT is not provided, all of ODCATS are merged into ‘oldcats{1}’.  File: tablicious.info, Node: categorical.missing, Next: categorical.removecats, Prev: categorical.mergecats, Up: categorical 8.2.6.13 categorical.missing ............................ -- Static Method: OUT = categorical.missing () -- Static Method: OUT = categorical.missing (sz) Create an array of missing (undefined) categoricals. Creates a categorical array whose elements are all missing (). This is a convenience alias for *note categorical.undefined::, so you can call it generically. It returns strictly the same results as calling *note categorical.undefined:: with the same arguments. Returns a categorical array. See also: categorical.undefined  File: tablicious.info, Node: categorical.removecats, Next: categorical.renamecats, Prev: categorical.missing, Up: categorical 8.2.6.14 categorical.removecats ............................... -- Method: OUT = removecats (OBJ) Removes all unused categories from OBJ. This is equivalent to ‘out = squeezecats (obj)’. -- Method: OUT = removecats (OBJ, OLDCATS) Remove categories from categorical array. Removes the specified categories from OBJ. Elements of OBJ whose values belonged to those categories are replaced with undefined. NEWCATS is a cellstr listing the category names to add to OBJ.  File: tablicious.info, Node: categorical.renamecats, Next: categorical.reordercats, Prev: categorical.removecats, Up: categorical 8.2.6.15 categorical.renamecats ............................... -- Method: OUT = renamecats (OBJ, NEWCATS) -- Method: OUT = renamecats (OBJ, OLDCATS, NEWCATS) Rename categories. Renames some or all of the categories in OBJ, without changing any of its values.  File: tablicious.info, Node: categorical.reordercats, Next: categorical.setcats, Prev: categorical.renamecats, Up: categorical 8.2.6.16 categorical.reordercats ................................ -- Method: OUT = reordercats (OBJ) -- Method: OUT = reordercats (OBJ, NEWCATS) Reorder categories. Reorders the categories in OBJ to match NEWCATS. NEWCATS is a cellstr that must be a reordering of OBJ’s existing category list. If NEWCATS is not supplied, sorts the categories in alphabetical order.  File: tablicious.info, Node: categorical.setcats, Next: categorical.squeezecats, Prev: categorical.reordercats, Up: categorical 8.2.6.17 categorical.setcats ............................ -- Method: OUT = setcats (OBJ, NEWCATS) Set categories for categorical array. Sets the categories to use for OBJ. If any current categories are absent from the NEWCATS list, current values of those categories become undefined.  File: tablicious.info, Node: categorical.squeezecats, Next: categorical.string, Prev: categorical.setcats, Up: categorical 8.2.6.18 categorical.squeezecats ................................ -- Method: OUT = squeezecats (OBJ) Remove unused categories. Removes all categories which have no corresponding values in OBJ’s elements. This is currently unimplemented.  File: tablicious.info, Node: categorical.string, Next: categorical.summary, Prev: categorical.squeezecats, Up: categorical 8.2.6.19 categorical.string ........................... -- Method: OUT = string (OBJ) Convert to string array. Converts OBJ to a string array. The strings will be the category names for corresponding values, or for undefined values. Returns a ‘string’ array the same size as OBJ.  File: tablicious.info, Node: categorical.summary, Next: categorical.undefined, Prev: categorical.string, Up: categorical 8.2.6.20 categorical.summary ............................ -- Method: summary (OBJ) Display summary of array’s values. Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.  File: tablicious.info, Node: categorical.undefined, Prev: categorical.summary, Up: categorical 8.2.6.21 categorical.undefined .............................. -- Static Method: OUT = categorical.undefined () -- Static Method: OUT = categorical.undefined (sz) Create an array of undefined categoricals. Creates a categorical array whose elements are all . SZ is the size of the array to create. If omitted or empty, creates a scalar. Returns a categorical array. See also: categorical.missing  File: tablicious.info, Node: cell2table, Next: colvecfun, Prev: categorical, Up: API Alphabetically 8.2.7 cell2table ---------------- -- Function: OUT = cell2table (C) -- Function: OUT = cell2table (..., 'VariableNames', VARIABLENAMES) -- Function: OUT = cell2table (..., 'RowNames', ROWNAMES) Convert a cell array to a table. Converts a 2-dimensional cell matrix into a table. Each column in the input C becomes a variable in OUT. For columns that contain all scalar values of ‘cat’-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type. See also: *note array2table::, *note table::, *note struct2table::  File: tablicious.info, Node: colvecfun, Next: contains, Prev: cell2table, Up: API Alphabetically 8.2.8 colvecfun --------------- -- Function: OUT = colvecfun (FCN, X) Apply a function to column vectors in array. Applies the given function FCN to each column vector in the array X, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array. FCN must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as X. Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.  File: tablicious.info, Node: contains, Next: datetime, Prev: colvecfun, Up: API Alphabetically 8.2.9 contains -------------- -- Function: OUT = colvecfun (STR, PATTERN) -- Function: OUT = colvecfun (..., 'IgnoreCase', IGNORECASE) Test if strings contain a pattern. Tests whether the given strings contain the given pattern(s). STR (char, cellstr, or string) is a list of strings to compare against pattern. PATTERN (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them. Returns a logical array of the same size as the string array represented by STR. See also: startsWith, endsWith  File: tablicious.info, Node: datetime, Next: days, Prev: contains, Up: API Alphabetically 8.2.10 datetime --------------- -- Class: datetime Represents points in time using the Gregorian calendar. The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times. A ‘datetime’ array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array. This is an attempt to reproduce the functionality of Matlab's ‘datetime’. It also contains some Octave-specific extensions. -- Instance Variable of datetime: double dnums The underlying datenums that represent the points in time. These are always in UTC. This is a planar property: the size of ‘dnums’ is the same size as the containing ‘datetime’ array object. -- Instance Variable of datetime: char TimeZone The time zone this ‘datetime’ array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does. Setting the ‘TimeZone’ of a ‘datetime’ array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent. -- Instance Variable of datetime: char Format The format to display this ‘datetime’ in. Currently unsupported. * Menu: * datetime.colon:: * datetime.convertDatenumTimeZone:: * datetime.datenum:: * datetime.datenum2posix:: * datetime.datestr:: * datetime.datestrs:: * datetime.datestruct:: * datetime.datetime:: * datetime.datevec:: * datetime.diff:: * datetime.dispstrs:: * datetime.eq:: * datetime.ge:: * datetime.gmtime:: * datetime.gt:: * datetime.hms:: * datetime.isbetween:: * datetime.ismissing:: * datetime.isnan:: * datetime.isnat:: * datetime.le:: * datetime.linspace:: * datetime.localtime:: * datetime.lt:: * datetime.minus:: * datetime.NaT:: * datetime.ne:: * datetime.ofDatenum:: * datetime.ofDatestruct:: * datetime.plus:: * datetime.posix2datenum:: * datetime.posixtime:: * datetime.proxyKeys:: * datetime.timeofday:: * datetime.week:: * datetime.ymd:: * datetime.ymdhms::  File: tablicious.info, Node: datetime.colon, Next: datetime.convertDatenumTimeZone, Up: datetime 8.2.10.1 datetime.colon ....................... -- Method: OUT = colon (LO, HI) -- Method: OUT = colon (HI, INC, HI) Generate a sequence of uniformly-spaced values. This method implements the behavior for the colon operator (‘lo:hi’ or ‘lo:inc:hi’ calls) for the datetime type. "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time. The INC argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with ‘duration.ofDays (inc)’. The default value for INC, used in the two-arg ‘lo:hi’ is 1, that is, 1 day of exactly 24 hours. Returns a datetime vector. WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if INC is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.  File: tablicious.info, Node: datetime.convertDatenumTimeZone, Next: datetime.datenum, Prev: datetime.colon, Up: datetime 8.2.10.2 datetime.convertDatenumTimeZone ........................................ -- Static Method: OUT = datetime.convertDatenumTimeZone (DNUM, FROMZONEID, TOZONEID) Convert a datenum from one time zone to another. DNUM is a datenum array to convert. FROMZONEID is a charvec containing the IANA Time Zone identifier for the time zone to convert from. TOZONEID is a charvec containing the IANA Time Zone identifier for the time zone to convert to. Returns a datenum array the same size as DNUM.  File: tablicious.info, Node: datetime.datenum, Next: datetime.datenum2posix, Prev: datetime.convertDatenumTimeZone, Up: datetime 8.2.10.3 datetime.datenum ......................... -- Method: OUT = datenum (OBJ) Convert this to datenums that represent the same local time. Returns double array of same size as this.  File: tablicious.info, Node: datetime.datenum2posix, Next: datetime.datestr, Prev: datetime.datenum, Up: datetime 8.2.10.4 datetime.datenum2posix ............................... -- Static Method: OUT = datetime.datenum2posix (DNUMS) Converts Octave datenums to Unix dates. The input datenums are assumed to be in UTC. Returns a double, which may have fractional seconds.  File: tablicious.info, Node: datetime.datestr, Next: datetime.datestrs, Prev: datetime.datenum2posix, Up: datetime 8.2.10.5 datetime.datestr ......................... -- Method: OUT = datestr (OBJ) -- Method: OUT = datestr (OBJ, ...) Format OBJ as date strings. Supports all arguments that core Octave's ‘datestr’ does. Returns date strings as a 2-D char array.  File: tablicious.info, Node: datetime.datestrs, Next: datetime.datestruct, Prev: datetime.datestr, Up: datetime 8.2.10.6 datetime.datestrs .......................... -- Method: OUT = datestrs (OBJ) -- Method: OUT = datestrs (OBJ, ...) Format OBJ as date strings, returning cellstr. Supports all arguments that core Octave's ‘datestr’ does. Returns a cellstr array the same size as OBJ.  File: tablicious.info, Node: datetime.datestruct, Next: datetime.datetime, Prev: datetime.datestrs, Up: datetime 8.2.10.7 datetime.datestruct ............................ -- Method: OUT = datestruct (OBJ) Converts this to a "datestruct" broken-down time structure. A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents. The values in the returned broken-down time are those of the local time in this' defined time zone, if it has one. Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.  File: tablicious.info, Node: datetime.datetime, Next: datetime.datevec, Prev: datetime.datestruct, Up: datetime 8.2.10.8 datetime.datetime .......................... -- Constructor: OBJ = datetime () Constructs a new scalar ‘datetime’ containing the current local time, with no time zone attached. -- Constructor: OBJ = datetime (DATEVEC) -- Constructor: OBJ = datetime (DATESTRS) -- Constructor: OBJ = datetime (IN, 'ConvertFrom', INTYPE) -- Constructor: OBJ = datetime (Y, M, D, H, MI, S) -- Constructor: OBJ = datetime (Y, M, D, H, MI, MS) -- Constructor: OBJ = datetime (..., 'Format', FORMAT, 'InputFormat', INPUTFORMAT, 'Locale', INPUTLOCALE, 'PivotYear', PIVOTYEAR, 'TimeZone', TIMEZONE) Constructs a new ‘datetime’ array based on input values.  File: tablicious.info, Node: datetime.datevec, Next: datetime.diff, Prev: datetime.datetime, Up: datetime 8.2.10.9 datetime.datevec ......................... -- Method: OUT = datevec (OBJ) -- Method: [Y, M, D, H, MN, S] = datevec (OBJ) Convert this to a datevec that represent the same local wall time. When nargout is 0 or 1, returns a double array of size n-by-6, where n is ‘numel(obj)’. When nargout is 2 or more, returns double arrays the same size as OBJ.  File: tablicious.info, Node: datetime.diff, Next: datetime.dispstrs, Prev: datetime.datevec, Up: datetime 8.2.10.10 datetime.diff ....................... -- Method: OUT = diff (OBJ) Differences between elements. Computes the difference between each successive element in OBJ, as a ‘duration’. Returns a ‘duration’ array the same size as OBJ.  File: tablicious.info, Node: datetime.dispstrs, Next: datetime.eq, Prev: datetime.diff, Up: datetime 8.2.10.11 datetime.dispstrs ........................... -- Method: OUT = dispstrs (OBJ) Get display strings for each element of OBJ. Returns a cellstr the same size as OBJ.  File: tablicious.info, Node: datetime.eq, Next: datetime.ge, Prev: datetime.dispstrs, Up: datetime 8.2.10.12 datetime.eq ..................... -- Method: OUT = eq (A, B) True if A is equal to B. This defines the ‘==’ operator for ‘datetime’s. Inputs are implicitly converted to ‘datetime’ using the one-arg constructor or conversion method. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.ge, Next: datetime.gmtime, Prev: datetime.eq, Up: datetime 8.2.10.13 datetime.ge ..................... -- Method: OUT = ge (A, B) True if A is greater than or equal to B. This defines the ‘>=’ operator for ‘datetime’s. Inputs are implicitly converted to ‘datetime’ using the one-arg constructor or conversion method. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.gmtime, Next: datetime.gt, Prev: datetime.ge, Up: datetime 8.2.10.14 datetime.gmtime ......................... -- Method: OUT = gmtime (OBJ) Convert to TM_STRUCT structure in UTC time. Converts OBJ to a TM_STRUCT style structure array. The result is in UTC time. If OBJ is unzoned, it is assumed to be in UTC time. Returns a struct array in TM_STRUCT style.  File: tablicious.info, Node: datetime.gt, Next: datetime.hms, Prev: datetime.gmtime, Up: datetime 8.2.10.15 datetime.gt ..................... -- Method: OUT = gt (A, B) True if A is greater than B. This defines the ‘>’ operator for ‘datetime’s. Inputs are implicitly converted to ‘datetime’ using the one-arg constructor or conversion method. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.hms, Next: datetime.isbetween, Prev: datetime.gt, Up: datetime 8.2.10.16 datetime.hms ...................... -- Method: [H, M, S] = hms (OBJ) Get the Hour, Minute, and Second components of a DATETIME. These are the time of day components. The Year, Month, and Day components are ignored, and not incorporated in to the result. For zoned ‘datetime’s, these will be local times in the associated time zone. Returns double arrays the same size as ‘obj’.  File: tablicious.info, Node: datetime.isbetween, Next: datetime.ismissing, Prev: datetime.hms, Up: datetime 8.2.10.17 datetime.isbetween ............................ -- Method: OUT = isbetween (OBJ, LOWER, UPPER) Tests whether the elements of OBJ are between LOWER and UPPER. All inputs are implicitly converted to ‘datetime’ arrays, and are subject to scalar expansion. Returns a logical array the same size as the scalar expansion of the inputs.  File: tablicious.info, Node: datetime.ismissing, Next: datetime.isnan, Prev: datetime.isbetween, Up: datetime 8.2.10.18 datetime.ismissing ............................ -- Method: OUT = ismissing (OBJ) Test whether array elements are missing. For ‘string’ arrays, the special NaT value is considered missing. This is equivalent to a NaN used as a datenum. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.isnan, Next: datetime.isnat, Prev: datetime.ismissing, Up: datetime 8.2.10.19 datetime.isnan ........................ -- Method: OUT = isnan (OBJ) True if input elements are NaT. This is an alias for ‘isnat’ to support type compatibility and polymorphic programming. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.isnat, Next: datetime.le, Prev: datetime.isnan, Up: datetime 8.2.10.20 datetime.isnat ........................ -- Method: OUT = isnat (OBJ) True if input elements are NaT. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.le, Next: datetime.linspace, Prev: datetime.isnat, Up: datetime 8.2.10.21 datetime.le ..................... -- Method: OUT = le (A, B) True if A is less than or equal toB. This defines the ‘<=’ operator for ‘datetime’s. Inputs are implicitly converted to ‘datetime’ using the one-arg constructor or conversion method. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.linspace, Next: datetime.localtime, Prev: datetime.le, Up: datetime 8.2.10.22 datetime.linspace ........................... -- Method: OUT = linspace (FROM, TO, N) Linearly-spaced values in date/time space. Constructs a vector of ‘datetime’s that represent linearly spaced points starting at FROM and going up to TO, with N points in the vector. FROM and TO are implicitly converted to ‘datetime’s. N is how many points to use. If omitted, defaults to 100. Returns an N-long ‘datetime’ vector.  File: tablicious.info, Node: datetime.localtime, Next: datetime.lt, Prev: datetime.linspace, Up: datetime 8.2.10.23 datetime.localtime ............................ -- Method: OUT = localtime (OBJ) Convert to TM_STRUCT structure in UTC time. Converts OBJ to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on OBJ. If OBJ is unzoned, it is assumed to be in UTC time. Returns a struct array in TM_STRUCT style. Example: dt = datetime; dt.TimeZone = datetime.SystemTimeZone; tm_struct = localtime (dt);  File: tablicious.info, Node: datetime.lt, Next: datetime.minus, Prev: datetime.localtime, Up: datetime 8.2.10.24 datetime.lt ..................... -- Method: OUT = lt (A, B) True if A is less than B. This defines the ‘<’ operator for ‘datetime’s. Inputs are implicitly converted to ‘datetime’ using the one-arg constructor or conversion method. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.minus, Next: datetime.NaT, Prev: datetime.lt, Up: datetime 8.2.10.25 datetime.minus ........................ -- Method: OUT = minus (A, B) Subtraction (‘-’ operator). Subtracts a ‘duration’, ‘calendarDuration’ or numeric B from a ‘datetime’ A, or subtracts two ‘datetime’s from each other. If both inputs are ‘datetime’, then the output is a ‘duration’. Otherwise, the output is a ‘datetime’. Numeric B inputs are implicitly converted to ‘duration’ using ‘duration.ofDays’. Returns an array the same size as A.  File: tablicious.info, Node: datetime.NaT, Next: datetime.ne, Prev: datetime.minus, Up: datetime 8.2.10.26 datetime.NaT ...................... -- Static Method: OUT = datetime.NaT () -- Static Method: OUT = datetime.NaT (SZ) “Not-a-Time”: Creates NaT-valued arrays. Constructs a new ‘datetime’ array of all ‘NaT’ values of the given size. If no input SZ is given, the result is a scalar ‘NaT’. ‘NaT’ is the ‘datetime’ equivalent of ‘NaN’. It represents a missing or invalid value. ‘NaT’ values never compare equal to, greater than, or less than any value, including other ‘NaT’s. Doing arithmetic with a ‘NaT’ and any other value results in a ‘NaT’.  File: tablicious.info, Node: datetime.ne, Next: datetime.ofDatenum, Prev: datetime.NaT, Up: datetime 8.2.10.27 datetime.ne ..................... -- Method: OUT = ne (A, B) True if A is not equal to B. This defines the ‘!=’ operator for ‘datetime’s. Inputs are implicitly converted to ‘datetime’ using the one-arg constructor or conversion method. Returns logical array the same size as OBJ.  File: tablicious.info, Node: datetime.ofDatenum, Next: datetime.ofDatestruct, Prev: datetime.ne, Up: datetime 8.2.10.28 datetime.ofDatenum ............................ -- Static Method: OBJ = datetime.ofDatenum (DNUMS) Converts a datenum array to a datetime array. Returns an unzoned ‘datetime’ array of the same size as the input.  File: tablicious.info, Node: datetime.ofDatestruct, Next: datetime.plus, Prev: datetime.ofDatenum, Up: datetime 8.2.10.29 datetime.ofDatestruct ............................... -- Static Method: OBJ = datetime.ofDatestruct (DSTRUCT) Converts a datestruct to a datetime array. A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype. Returns an unzoned ‘datetime’ array.  File: tablicious.info, Node: datetime.plus, Next: datetime.posix2datenum, Prev: datetime.ofDatestruct, Up: datetime 8.2.10.30 datetime.plus ....................... -- Method: OUT = plus (A, B) Addition (‘+’ operator). Adds a ‘duration’, ‘calendarDuration’, or numeric B to a ‘datetime’ A. A must be a ‘datetime’. Numeric B inputs are implicitly converted to ‘duration’ using ‘duration.ofDays’. WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy. Returns ‘datetime’ array the same size as A.  File: tablicious.info, Node: datetime.posix2datenum, Next: datetime.posixtime, Prev: datetime.plus, Up: datetime 8.2.10.31 datetime.posix2datenum ................................ -- Static Method: DNUMS = datetime.posix2datenum (PDATES) Converts POSIX (Unix) times to datenums Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.  File: tablicious.info, Node: datetime.posixtime, Next: datetime.proxyKeys, Prev: datetime.posix2datenum, Up: datetime 8.2.10.32 datetime.posixtime ............................ -- Method: OUT = posixtime (OBJ) Converts this to POSIX time values (seconds since the Unix epoch) Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC. Returns double array of same size as this.  File: tablicious.info, Node: datetime.proxyKeys, Next: datetime.timeofday, Prev: datetime.posixtime, Up: datetime 8.2.10.33 datetime.proxyKeys ............................ -- Method: [KEYSA, KEYSB] = proxyKeys (A, B) Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs. This is primarily for Tablicious's internal use; users will typically not need to call it or know how it works. Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.  File: tablicious.info, Node: datetime.timeofday, Next: datetime.week, Prev: datetime.proxyKeys, Up: datetime 8.2.10.34 datetime.timeofday ............................ -- Method: OUT = timeofday (OBJ) Get the time of day (elapsed time since midnight). For zoned ‘datetime’s, these will be local times in the associated time zone. Returns a ‘duration’ array the same size as ‘obj’.  File: tablicious.info, Node: datetime.week, Next: datetime.ymd, Prev: datetime.timeofday, Up: datetime 8.2.10.35 datetime.week ....................... -- Method: OUT = week (OBJ) Get the week of the year. This method is unimplemented.  File: tablicious.info, Node: datetime.ymd, Next: datetime.ymdhms, Prev: datetime.week, Up: datetime 8.2.10.36 datetime.ymd ...................... -- Method: [Y, M, D] = ymd (OBJ) Get the Year, Month, and Day components of OBJ. For zoned ‘datetime’s, these will be local times in the associated time zone. Returns double arrays the same size as ‘obj’.  File: tablicious.info, Node: datetime.ymdhms, Prev: datetime.ymd, Up: datetime 8.2.10.37 datetime.ymdhms ......................... -- Method: [Y, M, D, H, MI, S] = ymdhms (OBJ) Get the Year, Month, Day, Hour, Minute, and Second components of a OBJ. For zoned ‘datetime’s, these will be local times in the associated time zone. Returns double arrays the same size as ‘obj’.  File: tablicious.info, Node: days, Next: discretize, Prev: datetime, Up: API Alphabetically 8.2.11 days ----------- -- Function: OUT = days (X) Duration in days. If X is numeric, then OUT is a ‘duration’ array in units of fixed-length 24-hour days, with the same size as X. If X is a ‘duration’, then returns a ‘double’ array the same size as X indicating the number of fixed-length days that each duration is.  File: tablicious.info, Node: discretize, Next: dispstrs, Prev: days, Up: API Alphabetically 8.2.12 discretize ----------------- -- Function: [Y, E] = discretize (X, N) -- Function: [Y, E] = discretize (X, EDGES) -- Function: [Y, E] = discretize (X, DUR) -- Function: [Y, E] = discretize (..., 'categorical') -- Function: [Y, E] = discretize (..., 'IncludedEdge', INCLUDEDEDGE) Group data into discrete bins or categories. N is the number of bins to group the values into. EDGES is an array of edge values defining the bins. DUR is a ‘duration’ value indicating the length of time of each bin. If ‘'categorical'’ is specified, the resulting values are a ‘categorical’ array instead of a numeric array of bin indexes. Returns: Y - the bin index or category of each value from X E - the list of bin edge values  File: tablicious.info, Node: dispstrs, Next: duration, Prev: discretize, Up: API Alphabetically 8.2.13 dispstrs --------------- -- Function: OUT = dispstrs (X) Display strings for array. Gets the display strings for each element of X. The display strings should be short, one-line, human-presentable strings describing the value of that element. The default implementation of ‘dispstrs’ can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects. This is a polymorphic method that user-defined classes may override with their own custom display that is more informative. Returns a cell array the same size as X.  File: tablicious.info, Node: duration, Next: eqn, Prev: dispstrs, Up: API Alphabetically 8.2.14 duration --------------- -- Class: duration Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time. This is an attempt to reproduce the functionality of Matlab's ‘duration’. It also contains some Octave-specific extensions. Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times. -- Instance Variable of duration: double days The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days. This is a planar property: the size of ‘days’ is the same size as the containing ‘duration’ array object. -- Instance Variable of duration: char Format The format to display this ‘duration’ in. Currently unsupported. * Menu: * duration.char:: * duration.datevec:: * duration.dispstrs:: * duration.hms:: * duration.hours:: * duration.linspace:: * duration.milliseconds:: * duration.minutes:: * duration.ofDays:: * duration.seconds:: * duration.years::  File: tablicious.info, Node: duration.char, Next: duration.datevec, Up: duration 8.2.14.1 duration.char ...................... -- Method: OUT = char (OBJ) Convert to char. The contents of the strings will be the same as returned by ‘dispstrs’. This is primarily a convenience method for use on scalar OBJs. Returns a 2-D char array with one row per element in OBJ.  File: tablicious.info, Node: duration.datevec, Next: duration.dispstrs, Prev: duration.char, Up: duration 8.2.14.2 duration.datevec ......................... -- Method: [DVEC] = datevec (OBJ) -- Method: [Y, M, D, H, MN, S] = datevec (OBJ) Convert OBJ to a datevec whose elements represent the components of this duration. The components are the year, month, days, hour, minute, and second quantities of this duration. The years are in terms of fixed size years that are 365.2425 days long, and days are fixed size 24-hour days. The fixed size year size can be found in the FixedSizeYearDays constant class property on the duration class. The month component is always zero, since months are variable lengths and there is no equivalent fixed size month. Thus, the days component may be more than 31. When nargout is 0 or 1, returns a double array of size n-by-6, where n is ‘numel(obj)’. When nargout is 2 or more, returns double arrays the same size as OBJ.  File: tablicious.info, Node: duration.dispstrs, Next: duration.hms, Prev: duration.datevec, Up: duration 8.2.14.3 duration.dispstrs .......................... -- Method: OUT = duration (OBJ) Get display strings for each element of OBJ. Returns a cellstr the same size as OBJ.  File: tablicious.info, Node: duration.hms, Next: duration.hours, Prev: duration.dispstrs, Up: duration 8.2.14.4 duration.hms ..................... -- Method: [H, M, S] = hms (OBJ) Get the Hour, Minute, and Second values of a DURATION. These are the hour, minute, and second values that when combined are equal to the same duration value. Returns double arrays the same size as ‘obj’.  File: tablicious.info, Node: duration.hours, Next: duration.linspace, Prev: duration.hms, Up: duration 8.2.14.5 duration.hours ....................... -- Method: OUT = hours (OBJ) Equivalent number of hours. Gets the number of fixed-length 60-minute hours that is equivalent to this duration. Returns double array the same size as OBJ.  File: tablicious.info, Node: duration.linspace, Next: duration.milliseconds, Prev: duration.hours, Up: duration 8.2.14.6 duration.linspace .......................... -- Method: OUT = linspace (FROM, TO, N) Linearly-spaced values in time duration space. Constructs a vector of ‘duration’s that represent linearly spaced points starting at FROM and going up to TO, with N points in the vector. FROM and TO are implicitly converted to ‘duration’s. N is how many points to use. If omitted, defaults to 100. Returns an N-long ‘datetime’ vector.  File: tablicious.info, Node: duration.milliseconds, Next: duration.minutes, Prev: duration.linspace, Up: duration 8.2.14.7 duration.milliseconds .............................. -- Method: OUT = milliseconds (OBJ) Equivalent number of milliseconds. Gets the number of milliseconds that is equivalent to this duration. Returns double array the same size as OBJ.  File: tablicious.info, Node: duration.minutes, Next: duration.ofDays, Prev: duration.milliseconds, Up: duration 8.2.14.8 duration.minutes ......................... -- Method: OUT = minutes (OBJ) Equivalent number of minutes. Gets the number of fixed-length 60-second minutes that is equivalent to this duration. Returns double array the same size as OBJ.  File: tablicious.info, Node: duration.ofDays, Next: duration.seconds, Prev: duration.minutes, Up: duration 8.2.14.9 duration.ofDays ........................ -- Static Method: OBJ = duration.ofDays (DNUMS) Converts a double array representing durations in whole and fractional days to a ‘duration’ array. This is the method that is used for implicit conversion of numerics in many cases. Returns a ‘duration’ array of the same size as the input.  File: tablicious.info, Node: duration.seconds, Next: duration.years, Prev: duration.ofDays, Up: duration 8.2.14.10 duration.seconds .......................... -- Method: OUT = seconds (OBJ) Equivalent number of seconds. Gets the number of seconds that is equivalent to this duration. Returns double array the same size as OBJ.  File: tablicious.info, Node: duration.years, Prev: duration.seconds, Up: duration 8.2.14.11 duration.years ........................ -- Method: OUT = years (OBJ) Equivalent number of years. Gets the number of fixed-length 365.2425-day years that is equivalent to this duration. Returns double array the same size as OBJ.  File: tablicious.info, Node: eqn, Next: head, Prev: duration, Up: API Alphabetically 8.2.15 eqn ---------- -- Function: OUT = eqn (A, B) Determine element-wise equality, treating NaNs as equal out = eqn (A, B) ‘eqn’ is just like ‘eq’ (the function that implements the ‘==’ operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of ‘isequaln’. ‘eqn’ uses ‘isnanny’ to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish. Developer's note: the name “‘eqn’” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the ‘isequaln’ pattern of appending an “n” to the corresponding non-NaN-equivocating function. See also: ‘eq’, ‘isequaln’, *note isnanny::  File: tablicious.info, Node: head, Next: hours, Prev: eqn, Up: API Alphabetically 8.2.16 head ----------- -- Function: OUT = head (A) -- Function: OUT = head (A, K) Get first K rows of an array. Returns the array A, subsetted to its first K rows. This means subsetting it to the first ‘(min (k, size (A, 1)))’ elements along dimension 1, and leaving all other dimensions unrestricted. A is the array to subset. K is the number of rows to get. K defaults to 8 if it is omitted or empty. If there are less than K rows in A, returns all rows. Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type. See also: tail  File: tablicious.info, Node: hours, Next: iscalendarduration, Prev: head, Up: API Alphabetically 8.2.17 hours ------------ -- Function File: OUT = hours (X) Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. If input is numeric, returns a ‘duration’ array that is that many hours in time. If input is a ‘duration’, converts the ‘duration’ to a number of hours. Returns an array the same size as X.  File: tablicious.info, Node: iscalendarduration, Next: iscategorical, Prev: hours, Up: API Alphabetically 8.2.18 iscalendarduration ------------------------- -- Function: OUT = iscalendarduration (X) True if input is a ‘calendarDuration’ array, false otherwise. Respects ‘iscalendarduration’ override methods on user-defined classes, even if they do not inherit from ‘calendarDuration’ or were known to Tablicious at authoring time. Returns a scalar logical.  File: tablicious.info, Node: iscategorical, Next: isdatetime, Prev: iscalendarduration, Up: API Alphabetically 8.2.19 iscategorical -------------------- -- Function: OUT = iscategorical (X) True if input is a ‘categorical’ array, false otherwise. Respects ‘iscategorical’ override methods on user-defined classes, even if they do not inherit from ‘categorical’ or were known to Tablicious at authoring time. Returns a scalar logical.  File: tablicious.info, Node: isdatetime, Next: isduration, Prev: iscategorical, Up: API Alphabetically 8.2.20 isdatetime ----------------- -- Function: OUT = isdatetime (X) True if input is a ‘datetime’ array, false otherwise. Respects ‘isdatetime’ override methods on user-defined classes, even if they do not inherit from ‘datetime’ or were known to Tablicious at authoring time. Returns a scalar logical.  File: tablicious.info, Node: isduration, Next: isfile, Prev: isdatetime, Up: API Alphabetically 8.2.21 isduration ----------------- -- Function: OUT = isduration (X) True if input is a ‘duration’ array, false otherwise. Respects ‘isduration’ override methods on user-defined classes, even if they do not inherit from ‘duration’ or were known to Tablicious at authoring time. Returns a scalar logical.  File: tablicious.info, Node: isfile, Next: isfolder, Prev: isduration, Up: API Alphabetically 8.2.22 isfile ------------- _Not documented_  File: tablicious.info, Node: isfolder, Next: isnanny, Prev: isfile, Up: API Alphabetically 8.2.23 isfolder --------------- _Not documented_  File: tablicious.info, Node: isnanny, Next: istable, Prev: isfolder, Up: API Alphabetically 8.2.24 isnanny -------------- -- Function: OUT = isnanny (X) Test if elements are NaN or NaN-like. Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if ‘isnan()’ or ‘isnat()’ returns true, and is false for types that do not support ‘isnan()’ or ‘isnat()’. This function only exists because: a. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and b. isnan() errors out for some types that do not support isnan(), like cells. c. Octave does not define an ‘ismissing’ function, but the Octave Forge statistics package does, and adding an ‘ismissing’ function to Tablicious would conflict with that in hard-to-resolve ways. ‘isnanny()’ smooths over those differences so you can call it polymorphically on any input type. Hopefully. Under normal operation, ‘isnanny()’ should not throw an error for any type or value of input. See also: ismissing, ‘isnan’, ‘isnat’, *note eqn::, ‘isequaln’  File: tablicious.info, Node: istable, Next: istabular, Prev: isnanny, Up: API Alphabetically 8.2.25 istable -------------- -- Function: OUT = istable (X) True if input is a ‘table’ array or other table-like type, false otherwise. Respects ‘istable’ override methods on user-defined classes, even if they do not inherit from ‘table’ or were known to Tablicious at authoring time. User-defined classes should only override ‘istable’ to return true if they conform to the ‘table’ public interface. That interface is not well-defined or documented yet, so maybe you don't want to do that yet. Returns a scalar logical.  File: tablicious.info, Node: istabular, Next: istimetable, Prev: istable, Up: API Alphabetically 8.2.26 istabular ---------------- -- Function: OUT = istabular (X) True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them. Respects ‘istable’ and ‘istimetable’ override methods on user-defined classes, even if they do not inherit from ‘table’ or were known to Tablicious at authoring time. Returns a scalar logical.  File: tablicious.info, Node: istimetable, Next: localdate, Prev: istabular, Up: API Alphabetically 8.2.27 istimetable ------------------ -- Function: OUT = istimetable (X) True if input is a ‘timetable’ array or other timetable-like type, false otherwise. Respects ‘istimetable’ override methods on user-defined classes, even if they do not inherit from ‘table’ or were known to Tablicious at authoring time. User-defined classes should only override ‘istimetable’ to return true if they conform to the ‘table’ public interface. That interface is not well-defined or documented yet, so maybe you don't want to do that yet. Returns a scalar logical.  File: tablicious.info, Node: localdate, Next: milliseconds, Prev: istimetable, Up: API Alphabetically 8.2.28 localdate ---------------- -- Class: localdate Represents a complete day using the Gregorian calendar. This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes. -- Instance Variable of localdate: double dnums The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents. These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component. -- Instance Variable of localdate: char Format The format to display this ‘localdate’ in. Currently unsupported. * Menu: * localdate.datenum:: * localdate.datestr:: * localdate.datestrs:: * localdate.datestruct:: * localdate.dispstrs:: * localdate.isnan:: * localdate.isnat:: * localdate.localdate:: * localdate.NaT:: * localdate.posixtime:: * localdate.ymd::  File: tablicious.info, Node: localdate.datenum, Next: localdate.datestr, Up: localdate 8.2.28.1 localdate.datenum .......................... -- Method: OUT = datenum (OBJ) Convert this to datenums that represent midnight on OBJ’s days. Returns double array of same size as this.  File: tablicious.info, Node: localdate.datestr, Next: localdate.datestrs, Prev: localdate.datenum, Up: localdate 8.2.28.2 localdate.datestr .......................... -- Method: OUT = datestr (OBJ) -- Method: OUT = datestr (OBJ, ...) Format OBJ as date strings. Supports all arguments that core Octave's ‘datestr’ does. Returns date strings as a 2-D char array.  File: tablicious.info, Node: localdate.datestrs, Next: localdate.datestruct, Prev: localdate.datestr, Up: localdate 8.2.28.3 localdate.datestrs ........................... -- Method: OUT = datestrs (OBJ) -- Method: OUT = datestrs (OBJ, ...) Format OBJ as date strings, returning cellstr. Supports all arguments that core Octave's ‘datestr’ does. Returns a cellstr array the same size as OBJ.  File: tablicious.info, Node: localdate.datestruct, Next: localdate.dispstrs, Prev: localdate.datestrs, Up: localdate 8.2.28.4 localdate.datestruct ............................. -- Method: OUT = datestruct (OBJ) Converts this to a “datestruct” broken-down time structure. A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by ‘datetime’ in that it lacks Hour, Minute, and Second components. This is done for efficiency. The values in the returned broken-down time are those of the local time in OBJ’s defined time zone, if it has one. Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.  File: tablicious.info, Node: localdate.dispstrs, Next: localdate.isnan, Prev: localdate.datestruct, Up: localdate 8.2.28.5 localdate.dispstrs ........................... -- Method: OUT = dispstrs (OBJ) Get display strings for each element of OBJ. Returns a cellstr the same size as OBJ.  File: tablicious.info, Node: localdate.isnan, Next: localdate.isnat, Prev: localdate.dispstrs, Up: localdate 8.2.28.6 localdate.isnan ........................ -- Method: OUT = isnan (OBJ) True if input elements are NaT. This is an alias for ‘isnat’ to support type compatibility and polymorphic programming. Returns logical array the same size as OBJ.  File: tablicious.info, Node: localdate.isnat, Next: localdate.localdate, Prev: localdate.isnan, Up: localdate 8.2.28.7 localdate.isnat ........................ -- Method: OUT = isnat (OBJ) True if input elements are NaT. Returns logical array the same size as OBJ.  File: tablicious.info, Node: localdate.localdate, Next: localdate.NaT, Prev: localdate.isnat, Up: localdate 8.2.28.8 localdate.localdate ............................ -- Constructor: OBJ = localdate () Constructs a new scalar ‘localdate’ containing the current local date. -- Constructor: OBJ = localdate (DATENUMS) -- Constructor: OBJ = localdate (DATESTRS) -- Constructor: OBJ = localdate (Y, M, D) -- Constructor: OBJ = localdate (..., 'Format', FORMAT) Constructs a new ‘localdate’ array based on input values.  File: tablicious.info, Node: localdate.NaT, Next: localdate.posixtime, Prev: localdate.localdate, Up: localdate 8.2.28.9 localdate.NaT ...................... -- Static Method: OUT = localdate.NaT () -- Static Method: OUT = localdate.NaT (SZ) “Not-a-Time”: Creates NaT-valued arrays. Constructs a new ‘datetime’ array of all ‘NaT’ values of the given size. If no input SZ is given, the result is a scalar ‘NaT’. ‘NaT’ is the ‘datetime’ equivalent of ‘NaN’. It represents a missing or invalid value. ‘NaT’ values never compare equal to, greater than, or less than any value, including other ‘NaT’s. Doing arithmetic with a ‘NaT’ and any other value results in a ‘NaT’. This static method is provided because the global ‘NaT’ function creates ‘datetime’s, not ‘localdate’s  File: tablicious.info, Node: localdate.posixtime, Next: localdate.ymd, Prev: localdate.NaT, Up: localdate 8.2.28.10 localdate.posixtime ............................. -- Method: OUT = posixtime (OBJ) Converts this to POSIX time values for midnight of OBJ’s days. Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on OBJ’s days. Returns double array of same size as this.  File: tablicious.info, Node: localdate.ymd, Prev: localdate.posixtime, Up: localdate 8.2.28.11 localdate.ymd ....................... -- Method: [Y, M, D] = ymd (OBJ) Get the Year, Month, and Day components of OBJ. Returns double arrays the same size as ‘obj’.  File: tablicious.info, Node: milliseconds, Next: minutes, Prev: localdate, Up: API Alphabetically 8.2.29 milliseconds ------------------- -- Function File: OUT = milliseconds (X) Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X. If input is numeric, returns a ‘duration’ array that is that many milliseconds in time. If input is a ‘duration’, converts the ‘duration’ to a number of milliseconds. Returns an array the same size as X.  File: tablicious.info, Node: minutes, Next: missing, Prev: milliseconds, Up: API Alphabetically 8.2.30 minutes -------------- -- Function File: OUT = hours (X) Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.  File: tablicious.info, Node: missing, Next: mustBeA, Prev: minutes, Up: API Alphabetically 8.2.31 missing -------------- -- Class: missing Generic auto-converting missing value. ‘missing’ is a generic missing value that auto-converts to other types. A ‘missing’ array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations. This class is currently EXPERIMENTAL. Use at your own risk. Note: This class does not actually work for assignment. If you do this: x = 1:5 x(3) = missing It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it. * Menu: * missing.dispstrs:: * missing.ismissing:: * missing.isnan:: * missing.isnanny:: * missing.missing::  File: tablicious.info, Node: missing.dispstrs, Next: missing.ismissing, Up: missing 8.2.31.1 missing.dispstrs ......................... -- Method: OUT = dispstrs (OBJ) Display strings. Gets display strings for each element in OBJ. For ‘missing’, the display strings are always ‘''’. Returns a cellstr the same size as OBJ.  File: tablicious.info, Node: missing.ismissing, Next: missing.isnan, Prev: missing.dispstrs, Up: missing 8.2.31.2 missing.ismissing .......................... -- Method: OUT = ismissing (OBJ) Test whether elements are missing values. ‘ismissing’ is always true for ‘missing’ arrays. Returns a logical array the same size as OBJ.  File: tablicious.info, Node: missing.isnan, Next: missing.isnanny, Prev: missing.ismissing, Up: missing 8.2.31.3 missing.isnan ...................... -- Method: OUT = isnan (OBJ) Test whether elements are NaN. ‘isnan’ is always true for ‘missing’ arrays. Returns a logical array the same size as OBJ.  File: tablicious.info, Node: missing.isnanny, Next: missing.missing, Prev: missing.isnan, Up: missing 8.2.31.4 missing.isnanny ........................ -- Method: OUT = isnanny (OBJ) Test whether elements are NaN-like. ‘isnanny’ is always true for ‘missing’ arrays. Returns a logical array the same size as OBJ.  File: tablicious.info, Node: missing.missing, Prev: missing.isnanny, Up: missing 8.2.31.5 missing.missing ........................ -- Constructor: OBJ = missing () Constructs a scalar ‘missing’ array. The constructor takes no arguments, since there’s only one ‘missing’ value.  File: tablicious.info, Node: mustBeA, Next: mustBeCellstr, Prev: missing, Up: API Alphabetically 8.2.32 mustBeA -------------- _Not documented_  File: tablicious.info, Node: mustBeCellstr, Next: mustBeCharvec, Prev: mustBeA, Up: API Alphabetically 8.2.33 mustBeCellstr -------------------- _Not documented_  File: tablicious.info, Node: mustBeCharvec, Next: mustBeFinite, Prev: mustBeCellstr, Up: API Alphabetically 8.2.34 mustBeCharvec -------------------- _Not documented_  File: tablicious.info, Node: mustBeFinite, Next: mustBeInteger, Prev: mustBeCharvec, Up: API Alphabetically 8.2.35 mustBeFinite ------------------- _Not documented_  File: tablicious.info, Node: mustBeInteger, Next: mustBeMember, Prev: mustBeFinite, Up: API Alphabetically 8.2.36 mustBeInteger -------------------- _Not documented_  File: tablicious.info, Node: mustBeMember, Next: mustBeNonempty, Prev: mustBeInteger, Up: API Alphabetically 8.2.37 mustBeMember ------------------- _Not documented_  File: tablicious.info, Node: mustBeNonempty, Next: mustBeNumeric, Prev: mustBeMember, Up: API Alphabetically 8.2.38 mustBeNonempty --------------------- _Not documented_  File: tablicious.info, Node: mustBeNumeric, Next: mustBeReal, Prev: mustBeNonempty, Up: API Alphabetically 8.2.39 mustBeNumeric -------------------- _Not documented_  File: tablicious.info, Node: mustBeReal, Next: mustBeSameSize, Prev: mustBeNumeric, Up: API Alphabetically 8.2.40 mustBeReal ----------------- _Not documented_  File: tablicious.info, Node: mustBeSameSize, Next: mustBeScalar, Prev: mustBeReal, Up: API Alphabetically 8.2.41 mustBeSameSize --------------------- _Not documented_  File: tablicious.info, Node: mustBeScalar, Next: mustBeScalarLogical, Prev: mustBeSameSize, Up: API Alphabetically 8.2.42 mustBeScalar ------------------- _Not documented_  File: tablicious.info, Node: mustBeScalarLogical, Next: mustBeVector, Prev: mustBeScalar, Up: API Alphabetically 8.2.43 mustBeScalarLogical -------------------------- _Not documented_  File: tablicious.info, Node: mustBeVector, Next: NaC, Prev: mustBeScalarLogical, Up: API Alphabetically 8.2.44 mustBeVector ------------------- _Not documented_  File: tablicious.info, Node: NaC, Next: NaS, Prev: mustBeVector, Up: API Alphabetically 8.2.45 NaC ---------- -- Function: OUT = NaC () -- Function: OUT = NaC (SZ) “Not-a-Categorical". Creates missing-valued categorical arrays. Returns a new ‘categorical’ array of all missing values of the given size. If no input SZ is given, the result is a scalar missing categorical. ‘NaC’ is the ‘categorical’ equivalent of ‘NaN’ or ‘NaT’. It represents a missing, invalid, or null value. ‘NaC’ values never compare equal to any value, including other ‘NaC’s. ‘NaC’ is a convenience function which is strictly a wrapper around ‘categorical.undefined’ and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values. See also: categorical.undefined  File: tablicious.info, Node: NaS, Next: NaT, Prev: NaC, Up: API Alphabetically 8.2.46 NaS ---------- -- Function: OUT = NaS () -- Function: OUT = NaS (SZ) “Not-a-String". Creates missing-valued string arrays. Returns a new ‘string’ array of all missing values of the given size. If no input SZ is given, the result is a scalar missing string. ‘NaS’ is the ‘string’ equivalent of ‘NaN’ or ‘NaT’. It represents a missing, invalid, or null value. ‘NaS’ values never compare equal to any value, including other ‘NaS’s. ‘NaS’ is a convenience function which is strictly a wrapper around ‘string.missing’ and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values. See also: string.missing  File: tablicious.info, Node: NaT, Next: pp, Prev: NaS, Up: API Alphabetically 8.2.47 NaT ---------- -- Function: OUT = NaT () -- Function: OUT = NaT (SZ) “Not-a-Time”. Creates missing-valued datetime arrays. Constructs a new ‘datetime’ array of all ‘NaT’ values of the given size. If no input SZ is given, the result is a scalar ‘NaT’. ‘NaT’ is the ‘datetime’ equivalent of ‘NaN’. It represents a missing or invalid value. ‘NaT’ values never compare equal to, greater than, or less than any value, including other ‘NaT’s. Doing arithmetic with a ‘NaT’ and any other value results in a ‘NaT’. ‘NaT’ currently cannot create NaT arrays of type ‘localdate’. To do that, use *note localdate.NaT:: instead.  File: tablicious.info, Node: pp, Next: scalarexpand, Prev: NaT, Up: API Alphabetically 8.2.48 pp --------- -- Function: pp (X) -- Function: pp (A, B, C, ...) -- Function: pp ('A', 'B', 'C', ...) -- Function: pp A B C ... Alias for prettyprint, for interactive use. This is an alias for prettyprint(), with additional name-conversion magic. If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.  File: tablicious.info, Node: scalarexpand, Next: seconds, Prev: pp, Up: API Alphabetically 8.2.49 scalarexpand ------------------- -- Function: [OUT1, OUT2, ..., OUTN] = scalarexpand (X1, X2, ..., XN) Expand scalar inputs to match size of non-scalar inputs. Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. ‘repmat’ is used to do the expansion. Works on any input types that support ‘size’, ‘isscalar’, and ‘repmat’. It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs. Returns as many output arguments as there were input arguments. Examples: x1 = rand(3); x2 = 42; x3 = magic(3); [x1, x2, x3] = scalarexpand (x1, x2, x3)  File: tablicious.info, Node: seconds, Next: size2str, Prev: scalarexpand, Up: API Alphabetically 8.2.50 seconds -------------- -- Function File: OUT = seconds (X) Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X. If input is numeric, returns a ‘duration’ array that is that many seconds in time. If input is a ‘duration’, converts the ‘duration’ to a number of seconds. Returns an array the same size as X.  File: tablicious.info, Node: size2str, Next: splitapply, Prev: seconds, Up: API Alphabetically 8.2.51 size2str --------------- -- Function: OUT = size2str (SZ) Format an array size for display. Formats the given array size SZ as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by SZ. SZ is an array of dimension sizes, in the format returned by the ‘size’ function. Returns a charvec. Examples: str = size2str (size (magic (4))) ⇒ str = 4-by-4  File: tablicious.info, Node: splitapply, Next: string, Prev: size2str, Up: API Alphabetically 8.2.52 splitapply ----------------- -- Function: OUT = splitapply (FUNC, X, G) -- Function: OUT = splitapply (FUNC, X1, ..., XN, G) -- Function: [Y1, ..., YM] = splitapply (...) Split data into groups and apply function. FUNC is a function handle to call on each group of inputs in turn. X, X1, ..., XN are the input variables that are split into groups for the function calls. If X is a ‘table’, then its contained variables are “popped out” and considered to be the X1 ... XN input variables. G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored. Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture. Returns the concatenated outputs of applying FUNC to each group. See also: *note table.groupby::, *note table.splitapply::  File: tablicious.info, Node: string, Next: struct2table, Prev: splitapply, Up: API Alphabetically 8.2.53 string ------------- -- Class: string A string array of Unicode strings. A string array is an array of strings, where each array element is a single string. The string class represents strings, where: • Each element of a string array is a single string • A single string is a 1-dimensional row vector of Unicode characters • Those characters are encoded in UTF-8 • This last bit depends on the fact that Octave chars are UTF-8 now This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave. String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL. This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.) Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points. This class really serves three roles: 1. It is a type-safe object wrapper around Octave’s base primitive character types. 2. It adds ismissing() semantics. 3. And it introduces Unicode support. Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars. “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests. TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave's existing char/string-handling functions. TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware. * Menu: * string.cell:: * string.cellstr:: * string.char:: * string.cmp:: * string.decode:: * string.dispstrs:: * string.empty:: * string.encode:: * string.endsWith:: * string.erase:: * string.ismissing:: * string.isnanny:: * string.isstring:: * string.lower:: * string.missing:: * string.plus:: * string.regexprep:: * string.reverse:: * string.reverse_bytes:: * string.startsWith:: * string.strcat:: * string.strcmp:: * string.strfind:: * string.string:: * string.strlength:: * string.strlength_bytes:: * string.strrep:: * string.upper::  File: tablicious.info, Node: string.cell, Next: string.cellstr, Up: string 8.2.53.1 string.cell .................... -- Method: OUT = cell (OBJ) Convert to cell array. Converts this to a cell, which will be a cellstr. Missing values are converted to ‘''’. This method returns the same values as ‘cellstr(obj)’; it is just provided for interface compatibility purposes. Returns a cell array of the same size as OBJ.  File: tablicious.info, Node: string.cellstr, Next: string.char, Prev: string.cell, Up: string 8.2.53.2 string.cellstr ....................... -- Method: OUT = cellstr (OBJ) Convert to cellstr. Converts OBJ to a cellstr. Missing values are converted to ‘''’. Returns a cellstr array of the same size as OBJ.  File: tablicious.info, Node: string.char, Next: string.cmp, Prev: string.cellstr, Up: string 8.2.53.3 string.char .................... -- Method: OUT = char (OBJ) Convert to char array. Converts OBJ to a 2-D char array. It will have as many rows as OBJ has elements. It is an error to convert missing-valued ‘string’ arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.) Returns 2-D char array.  File: tablicious.info, Node: string.cmp, Next: string.decode, Prev: string.char, Up: string 8.2.53.4 string.cmp ................... -- Method: [OUT, OUTA, OUTB] = cmp (A, B) Value ordering comparison, returning -1/0/+1. Compares each element of A and B, returning for each element ‘i’ whether ‘A(i)’ was less than (-1), equal to (0), or greater than (1) the corresponding ‘B(i)’. TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings. Returns a numeric array OUT of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1. Also returns scalar-expanded copies of A and B as OUTA and OUTB, as a programming convenience.  File: tablicious.info, Node: string.decode, Next: string.dispstrs, Prev: string.cmp, Up: string 8.2.53.5 string.decode ...................... -- Static Method: OUT = string.decode (BYTES, CHARSETNAME) Decode encoded text from bytes. Decodes the given encoded text in BYTES according to the specified encoding, given by CHARSETNAME. Returns a scalar string. See also: *note string.encode::  File: tablicious.info, Node: string.dispstrs, Next: string.empty, Prev: string.decode, Up: string 8.2.53.6 string.dispstrs ........................ -- Method: OUT = dispstrs (OBJ) Display strings for array elements. Gets display strings for all the elements in OBJ. These display strings will either be the string contents of the element, enclosed in ‘"..."’, and with CR/LF characters replaced with ‘'\r'’ and ‘'\n'’ escape sequences, or ‘""’ for missing values. Returns a cellstr of the same size as OBJ.  File: tablicious.info, Node: string.empty, Next: string.encode, Prev: string.dispstrs, Up: string 8.2.53.7 string.empty ..................... -- Function: OUT = empty (SZ) Get an empty string array of a specified size. The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0]. The size may also be supplied as multiple arguments containing scalar numerics. Returns an empty string array of the requested size.  File: tablicious.info, Node: string.encode, Next: string.endsWith, Prev: string.empty, Up: string 8.2.53.8 string.encode ...................... -- Method: OUT = encode (OBJ, CHARSETNAME) Encode string in a given character encoding. OBJ must be scalar. CHARSETNAME (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.) Returns the encoded string as a ‘uint8’ vector. See also: *note string.decode::.  File: tablicious.info, Node: string.endsWith, Next: string.erase, Prev: string.encode, Up: string 8.2.53.9 string.endsWith ........................ -- Method: OUT = endsWith (OBJ, PATTERN) -- Method: OUT = endsWith (OBJ, PATTERN, 'IgnoreCase', true/false) Test if string ends with pattern. Returns a logical array the size of the scalar expansion of OBJ and PATTERN.  File: tablicious.info, Node: string.erase, Next: string.ismissing, Prev: string.endsWith, Up: string 8.2.53.10 string.erase ...................... -- Method: OUT = erase (OBJ, MATCH) Erase matching substring. Erases the substrings in OBJ which match the MATCH input. Returns a string array of the same size as OBJ.  File: tablicious.info, Node: string.ismissing, Next: string.isnanny, Prev: string.erase, Up: string 8.2.53.11 string.ismissing .......................... -- Method: OUT = ismissing (OBJ) Test whether array elements are missing. For ‘string’ arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs. Returns a logical array the same size as ‘obj’.  File: tablicious.info, Node: string.isnanny, Next: string.isstring, Prev: string.ismissing, Up: string 8.2.53.12 string.isnanny ........................ -- Method: OUT = isnanny (OBJ) Test whether array elements are NaN-like. Missing values are considered nannish; any other string value is not. Returns a logical array of the same size as OBJ.  File: tablicious.info, Node: string.isstring, Next: string.lower, Prev: string.isnanny, Up: string 8.2.53.13 string.isstring ......................... -- Method: OUT = isstring (OBJ) Test if input is a string array. ‘isstring’ is always true for ‘string’ inputs. Returns a scalar logical.  File: tablicious.info, Node: string.lower, Next: string.missing, Prev: string.isstring, Up: string 8.2.53.14 string.lower ...................... -- Method: OUT = lower (OBJ) Convert to lower case. Converts all the characters in all the strings in OBJ to lower case. This currently delegates to Octave’s own ‘lower()’ function to do the conversion, so whatever character class handling it has, this has. Returns a string array of the same size as OBJ.  File: tablicious.info, Node: string.missing, Next: string.plus, Prev: string.lower, Up: string 8.2.53.15 string.missing ........................ -- Static Method: OUT = string.missing (SZ) Missing string value. Creates a string array of all-missing values of the specified size SZ. If SZ is omitted, creates a scalar missing string. Returns a string array of size SZ or [1 1]. See also: NaS  File: tablicious.info, Node: string.plus, Next: string.regexprep, Prev: string.missing, Up: string 8.2.53.16 string.plus ..................... -- Method: OUT = plus (A, B) String concatenation via plus operator. Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays. The concatenation is done by calling 'strcat' on the inputs, and has the same behavior. Returns a string array the same size as the scalar expansion of its inputs. See also: string.strcat  File: tablicious.info, Node: string.regexprep, Next: string.reverse, Prev: string.plus, Up: string 8.2.53.17 string.regexprep .......................... -- Method: OUT = regexprep (OBJ, PAT, REPSTR) -- Method: OUT = regexprep (..., VARARGIN) Replace based on regular expression matching. Replaces all the substrings matching a given regexp pattern PAT with the given replacement text REPSTR. Returns a string array of the same size as OBJ.  File: tablicious.info, Node: string.reverse, Next: string.reverse_bytes, Prev: string.regexprep, Up: string 8.2.53.18 string.reverse ........................ -- Method: OUT = reverse (OBJ) Reverse string, character-wise. Reverses the characters in each string in OBJ. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output. Returns a string array the same size as OBJ.  File: tablicious.info, Node: string.reverse_bytes, Next: string.startsWith, Prev: string.reverse, Up: string 8.2.53.19 string.reverse_bytes .............................. -- Method: OUT = reverse_bytes (OBJ) Reverse string, byte-wise. Reverses the bytes in each string in OBJ. This operates on bytes (Unicode code units), not characters. This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence. You probably do not want to use this method. You probably want to use ‘string.reverse’ instead. Returns a string array the same size as OBJ. See also: *note string.reverse::  File: tablicious.info, Node: string.startsWith, Next: string.strcat, Prev: string.reverse_bytes, Up: string 8.2.53.20 string.startsWith ........................... -- Method: OUT = startsWith (OBJ, PATTERN) -- Method: OUT = startsWith (OBJ, PATTERN, 'IgnoreCase', true/false) Test if string starts with pattern. Returns a logical array the size of the scalar expansion of OBJ and PATTERN.  File: tablicious.info, Node: string.strcat, Next: string.strcmp, Prev: string.startsWith, Up: string 8.2.53.21 string.strcat ....................... -- Method: OUT = strcat (VARARGIN) String concatenation. Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays. The semantics of concatenating missing strings with non-missing strings has not been determined yet. Returns a string array the same size as the scalar expansion of its inputs.  File: tablicious.info, Node: string.strcmp, Next: string.strfind, Prev: string.strcat, Up: string 8.2.53.22 string.strcmp ....................... -- Method: OUT = strcmp (A, B) String comparison. Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other. This does the same comparison as ‘A == B’, but is not polymorphic. Generally, there is no reason to use ‘strcmp’ instead of ‘==’ or ‘eq’ on string arrays, unless you want to be compatible with cellstr inputs as well. Returns logical array the size of the scalar expansion of A and B.  File: tablicious.info, Node: string.strfind, Next: string.string, Prev: string.strcmp, Up: string 8.2.53.23 string.strfind ........................ -- Method: OUT = strfind (OBJ, PATTERN) -- Method: OUT = strfind (..., VARARGIN) Find pattern in string. Finds the locations where PATTERN occurs in the strings of OBJ. TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out. Returns either an index vector, or a cell array of index vectors.  File: tablicious.info, Node: string.string, Next: string.strlength, Prev: string.strfind, Up: string 8.2.53.24 string.string ....................... -- Constructor: OBJ = string () -- Constructor: OBJ = string (IN) Construct a new string array. The zero-argument constructor creates a new scalar string array whose value is the empty string. The other constructors construct a new string array by converting various types of inputs. • chars and cellstrs are converted via cellstr() • numerics are converted via num2str() • datetimes are converted via datestr()  File: tablicious.info, Node: string.strlength, Next: string.strlength_bytes, Prev: string.string, Up: string 8.2.53.25 string.strlength .......................... -- Method: OUT = strlength (OBJ) String length in characters (actually, UTF-16 code units). Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each. The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility. This is the string length method you probably want to use, not ‘strlength_bytes’. Returns double array of the same size as OBJ. Returns NaNs for missing strings. See also: *note string.strlength_bytes::  File: tablicious.info, Node: string.strlength_bytes, Next: string.strrep, Prev: string.strlength, Up: string 8.2.53.26 string.strlength_bytes ................................ -- Method: OUT = strlength_bytes (OBJ) String length in bytes. Gets the length of each string in OBJ, counted in Unicode UTF-8 code units (bytes). This is the same as ‘numel(str)’ for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want ‘strlength’ instead. Returns double array of the same size as OBJ. Returns NaNs for missing strings. See also: *note string.strlength::  File: tablicious.info, Node: string.strrep, Next: string.upper, Prev: string.strlength_bytes, Up: string 8.2.53.27 string.strrep ....................... -- Method: OUT = strrep (OBJ, MATCH, REPLACEMENT) -- Method: OUT = strrep (..., VARARGIN) Replace occurrences of pattern with other string. Replaces matching substrings in OBJ with a given replacement string. VARARGIN is passed along to the core Octave ‘strrep’ function. This supports whatever options it does. TODO: Maybe document what those options are. Returns a string array of the same size as OBJ.  File: tablicious.info, Node: string.upper, Prev: string.strrep, Up: string 8.2.53.28 string.upper ...................... -- Method: OUT = upper (OBJ) Convert to upper case. Converts all the characters in all the strings in OBJ to upper case. This currently delegates to Octave’s own ‘upper()’ function to do the conversion, so whatever character class handling it has, this has. Returns a string array of the same size as OBJ.  File: tablicious.info, Node: struct2table, Next: table, Prev: string, Up: API Alphabetically 8.2.54 struct2table ------------------- -- Function: OUT = struct2table (S) -- Function: OUT = struct2table (..., 'AsArray', ASARRAY) Convert struct to a table. Converts the input struct S to a ‘table’. S may be a scalar struct or a nonscalar struct array. The ASARRAY option is not implemented yet. Returns a ‘table’.  File: tablicious.info, Node: table, Next: tableOuterFillValue, Prev: struct2table, Up: API Alphabetically 8.2.55 table ------------ -- Class: table Tabular data array containing multiple columnar variables. A ‘table’ is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous. A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas. A table is an array in itself: its size is NROWS-by-NVARIABLES, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2. A note on accessing properties of a ‘table’ array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do ‘t.Properties.’ for a table ‘t’. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a ‘table’ with a variable named ‘Properties’. Try to avoid that.) WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious. We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn't been fully thought through or tested. See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb -- Instance Variable of table: cellstr VariableNames The names of the variables in the table, as a cellstr row vector. -- Instance Variable of table: cell VariableValues A cell vector containing the values for each of the variables. ‘VariableValues(i)’ corresponds to ‘VariableNames(i)’. -- Instance Variable of table: cellstr RowNames An optional list of row names that identify each row in the table. This is a cellstr column vector, if present. -- Instance Variable of table: cellstr DimensionNames Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to ‘{"Row", "Variables"}’. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that's what Matlab uses, so Tablicious uses it too, for Matlab compatibility.) * Menu: * table.addvars:: * table.antijoin:: * table.cartesian:: * table.convertvars:: * table.findgroups:: * table.getvar:: * table.getvars:: * table.groupby:: * table.height:: * table.horzcat:: * table.innerjoin:: * table.intersect:: * table.isempty:: * table.ismember:: * table.ismissing:: * table.istable:: * table.join:: * table.mergevars:: * table.movevars:: * table.ndims:: * table.numel:: * table.outerfillvals:: * table.outerjoin:: * table.prettyprint:: * table.realjoin:: * table.removevars:: * table.renamevars:: * table.repelem:: * table.repmat:: * table.restrict:: * table.rowfun:: * table.rows2vars:: * table.semijoin:: * table.setdiff:: * table.setDimensionNames:: * table.setRowNames:: * table.setvar:: * table.setVariableNames:: * table.setxor:: * table.size:: * table.splitapply:: * table.splitvars:: * table.squeeze:: * table.stack:: * table.summary:: * table.table:: * table.table2array:: * table.table2cell:: * table.table2struct:: * table.union:: * table.varfun:: * table.varnames:: * table.vertcat:: * table.width::  File: tablicious.info, Node: table.addvars, Next: table.antijoin, Up: table 8.2.55.1 table.addvars ...................... -- Method: OUT = addvars (OBJ, VAR1, ..., VARN) -- Method: OUT = addvars (..., 'Before', BEFORE) -- Method: OUT = addvars (..., 'After', AFTER) -- Method: OUT = addvars (..., 'NewVariableNames', NEWVARIABLENAMES) Add variables to table. Adds the specified variables to a table.  File: tablicious.info, Node: table.antijoin, Next: table.cartesian, Prev: table.addvars, Up: table 8.2.55.2 table.antijoin ....................... -- Method: [OUTA, IXA, OUTB, IXB] = antijoin (A, B) Natural antijoin (AKA “semidifference”). Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input. Returns: OUTA - all the rows in A with no matching row in B IXA - the row indexes into A which produced OUTA OUTB - all the rows in B with no matching row in A IXB - the row indexes into B which produced OUTB This is a Tablicious/Octave extension, not defined in the Matlab table interface.  File: tablicious.info, Node: table.cartesian, Next: table.convertvars, Prev: table.antijoin, Up: table 8.2.55.3 table.cartesian ........................ -- Method: [OUT, IXS] = cartesian (A, B) Cartesian product of two tables. Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B. Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do. The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result. This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct. The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance. This is a Tablicious/Octave extension, not defined in the Matlab table interface.  File: tablicious.info, Node: table.convertvars, Next: table.findgroups, Prev: table.cartesian, Up: table 8.2.55.4 table.convertvars .......................... -- Method: OUT = convertvars (OBJ, VARS, DATATYPE) Convert variables to specified data type. Converts the variables in OBJ specified by VARS to the specified data type. VARS is a cellstr or numeric vector specifying which variables to convert. DATATYPE specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables' current types as input, or a conversion method of that name defined on the specified variables' current type. Returns a table with the same variable names as OBJ, but with converted types.  File: tablicious.info, Node: table.findgroups, Next: table.getvar, Prev: table.convertvars, Up: table 8.2.55.5 table.findgroups ......................... -- Method: [G, TID] = findgroups (OBJ) Find groups within a table’s row values. Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements. Returns: G - A double column vector of group numbers created from OBJ. TID - A table containing the row values corresponding to the group numbers.  File: tablicious.info, Node: table.getvar, Next: table.getvars, Prev: table.findgroups, Up: table 8.2.55.6 table.getvar ..................... -- Method: [OUT, NAME] = getvar (OBJ, VARREF) Get value and name for single table variable. VARREF is a variable reference. It may be a name or an index. It may only specify a single table variable. Returns: OUT – the value of the referenced table variable NAME – the name of the referenced table variable  File: tablicious.info, Node: table.getvars, Next: table.groupby, Prev: table.getvar, Up: table 8.2.55.7 table.getvars ...................... -- Method: [OUT1, ...] = getvars (OBJ, VARREF) Get values for one ore more table variables. VARREF is a variable reference in the form of variable names or indexes. Returns as many outputs as VARREF referenced variables. Each output contains the contents of the corresponding table variable.  File: tablicious.info, Node: table.groupby, Next: table.height, Prev: table.getvars, Up: table 8.2.55.8 table.groupby ...................... -- Method: [OUT] = groupby (OBJ, GROUPVARS, AGGCALCS) Find groups in table data and apply functions to variables within groups. This works like an SQL ‘"SELECT ... GROUP BY ..."’ statement. GROUPVARS (cellstr, numeric) is a list of the grouping variables, identified by name or index. AGGCALCS is a specification of the aggregate calculations to perform on them, in the form ‘{’OUT_VAR‘,’ FCN‘,’ IN_VARS‘; ...}’, where: OUT_VAR (char) is the name of the output variable FCN (function handle) is the function to apply to produce it IN_VARS (cellstr) is a list of the input variables to pass to fcn Returns a table. This is a Tablicious/Octave extension, not defined in the Matlab table interface.  File: tablicious.info, Node: table.height, Next: table.horzcat, Prev: table.groupby, Up: table 8.2.55.9 table.height ..................... -- Method: OUT = height (OBJ) Number of rows in table. For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.  File: tablicious.info, Node: table.horzcat, Next: table.innerjoin, Prev: table.height, Up: table 8.2.55.10 table.horzcat ....................... -- Method: OUT = horzcat (VARARGIN) Horizontal concatenation. Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names. Output has the same RowNames as ‘varargin{1}’. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.  File: tablicious.info, Node: table.innerjoin, Next: table.intersect, Prev: table.horzcat, Up: table 8.2.55.11 table.innerjoin ......................... -- Method: [OUT, IXA, IXB] = innerjoin (A, B) -- Method: [...] = innerjoin (A, B, ...) Combine two tables by rows using key variables. Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output. TODO: Document options. Returns: OUT - A table that is the result of joining A and B IX - Indexes into A for each row in out IXB - Indexes into B for each row in out  File: tablicious.info, Node: table.intersect, Next: table.isempty, Prev: table.innerjoin, Up: table 8.2.55.12 table.intersect ......................... -- Method: [C, IA, IB] = intersect (A, B) Set intersection. Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables. Returns: C - A table containing all the unique row values present in both A and B. IA - Row indexes into A of the rows from A included in C. IB - Row indexes into B of the rows from B included in C.  File: tablicious.info, Node: table.isempty, Next: table.ismember, Prev: table.intersect, Up: table 8.2.55.13 table.isempty ....................... -- Method: OUT = isempty (OBJ) Test whether array is empty. For tables, ‘isempty’ is true if the number of rows is 0 or the number of variables is 0.  File: tablicious.info, Node: table.ismember, Next: table.ismissing, Prev: table.isempty, Up: table 8.2.55.14 table.ismember ........................ -- Method: [TF, LOC] = ismember (A, B) Set membership. Finds rows in A that are members of B. Returns: TF - A logical vector indicating whether each A(i,:) was present in B. LOC - Indexes into B of rows that were found.  File: tablicious.info, Node: table.ismissing, Next: table.istable, Prev: table.ismember, Up: table 8.2.55.15 table.ismissing ......................... -- Method: OUT = ismissing (OBJ) -- Method: OUT = ismissing (OBJ, INDICATOR) Find missing values. Finds missing values in OBJ’s variables. If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables. All variables in this must be vectors. (This is due to the requirement that ‘size(out) == size(obj)’.) Returns a logical array the same size as OBJ.  File: tablicious.info, Node: table.istable, Next: table.join, Prev: table.ismissing, Up: table 8.2.55.16 table.istable ....................... -- Method: TF = istable (OBJ) True if input is a table.  File: tablicious.info, Node: table.join, Next: table.mergevars, Prev: table.istable, Up: table 8.2.55.17 table.join .................... -- Method: [C, IB] = join (A, B) -- Method: [C, IB] = join (A, B, ...) Combine two tables by rows using key variables, in a restricted form. This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join. You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead. See also: *note table.innerjoin::, *note table.outerjoin::  File: tablicious.info, Node: table.mergevars, Next: table.movevars, Prev: table.join, Up: table 8.2.55.18 table.mergevars ......................... -- Method: OUT = mergevars (OBJ, VARS) -- Method: OUT = mergevars (..., 'NewVariableName', NEWVARIABLENAME) -- Method: OUT = mergevars (..., 'MergeAsTable', MERGEASTABLE) Merge table variables into a single variable.  File: tablicious.info, Node: table.movevars, Next: table.ndims, Prev: table.mergevars, Up: table 8.2.55.19 table.movevars ........................ -- Method: OUT = movevars (OBJ, VARS, RELLOCATION, LOCATION) Move around variables in a table. VARS is a list of variables to move, specified by name or index. RELLOCATION is ‘'Before'’ or ‘'After'’. LOCATION indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from OBJ, not the original full list of variables in OBJ. Returns a table with the same variables as OBJ, but in a different order.  File: tablicious.info, Node: table.ndims, Next: table.numel, Prev: table.movevars, Up: table 8.2.55.20 table.ndims ..................... -- Method: OUT = ndims (OBJ) Number of dimensions For tables, ‘ndims(obj)’ is always 2, because table arrays are always 2-D (rows-by-columns).  File: tablicious.info, Node: table.numel, Next: table.outerfillvals, Prev: table.ndims, Up: table 8.2.55.21 table.numel ..................... -- Method: OUT = numel (OBJ) Total number of elements in table (actually 1). For compatibility reasons with Octave's OOP interface and subsasgn behavior, table's numel is defined to always return 1. It is not useful for client code to query a table's size using numel. This is an incompatibility with Matlab.  File: tablicious.info, Node: table.outerfillvals, Next: table.outerjoin, Prev: table.numel, Up: table 8.2.55.22 table.outerfillvals ............................. -- Method: OUT = outerfillvals (OBJ) Get fill values for outer join. Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.  File: tablicious.info, Node: table.outerjoin, Next: table.prettyprint, Prev: table.outerfillvals, Up: table 8.2.55.23 table.outerjoin ......................... -- Method: [OUT, IXA, IXB] = outerjoin (A, B) -- Method: [...] = outerjoin (A, B, ...) Combine two tables by rows using key variables, retaining unmatched rows. Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values. TODO: Document options. Returns: OUT - A table that is the result of the outer join of A and B IXA - indexes into A for each row in out IXB - indexes into B for each row in out  File: tablicious.info, Node: table.prettyprint, Next: table.realjoin, Prev: table.outerjoin, Up: table 8.2.55.24 table.prettyprint ........................... -- Method: prettyprint (OBJ) Display table's values in tabular format. This prints the contents of the table in human-readable, tabular form. Variables which contain objects are displayed using the strings returned by their ‘dispstrs’ method, if they define one.  File: tablicious.info, Node: table.realjoin, Next: table.removevars, Prev: table.prettyprint, Up: table 8.2.55.25 table.realjoin ........................ -- Method: [OUT, IXS] = realjoin (A, B) -- Method: [...] = realjoin (A, B, ...) "Real" relational inner join, without key restrictions Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes. Currently does not support tables which have RowNames. This may be added in the future. This is a Tablicious/Octave extension, not defined in the Matlab table interface. Name/value option arguments are: KEYS, LEFTKEYS, RIGHTKEYS, LEFTVARIABLES, RIGHTVARIABLES. FIXME: Document those options. Returns: OUT - A table that is the result of joining A and B IXS - Indexes into A for each row in out  File: tablicious.info, Node: table.removevars, Next: table.renamevars, Prev: table.realjoin, Up: table 8.2.55.26 table.removevars .......................... -- Method: OUT = removevars (OBJ, VARS) Remove variables from table. Deletes the variables specified by VARS from OBJ. VARS may be a char, cellstr, numeric index vector, or logical index vector.  File: tablicious.info, Node: table.renamevars, Next: table.repelem, Prev: table.removevars, Up: table 8.2.55.27 table.renamevars .......................... -- Method: OUT = renamevars (OBJ, RENAMEMAP) Rename variables in a table. Renames selected variables in the table OBJ based on the mapping provided in RENAMEMAP. RENAMEMAP is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column. Variables which are not included in RENAMEMAP are not modified. It is an error if any variables named in the first column of RENAMEMAP are not present in OBJ. Renames  File: tablicious.info, Node: table.repelem, Next: table.repmat, Prev: table.renamevars, Up: table 8.2.55.28 table.repelem ....................... -- Method: OUT = repelem (OBJ, R) -- Method: OUT = repelem (OBJ, R_1, R_2) Replicate elements of matrix. Replicates elements of this table matrix by applying repelem to each of its variables. This Only two dimensions are supported for ‘repelem’ on tables.  File: tablicious.info, Node: table.repmat, Next: table.restrict, Prev: table.repelem, Up: table 8.2.55.29 table.repmat ...................... -- Method: OUT = repmat (OBJ, SZ) Replicate matrix. Repmats a table by repmatting each of its variables vertically. For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table. Returns a new table with the same variable names and types as tbl, but with a possibly different row count.  File: tablicious.info, Node: table.restrict, Next: table.rowfun, Prev: table.repmat, Up: table 8.2.55.30 table.restrict ........................ -- Method: OUT = restrict (OBJ, EXPR) -- Method: OUT = restrict (OBJ, IX) Subset rows using variable expression or index. Subsets a table row-wise, using either an index vector or an expression involving OBJ’s variables. If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with 'subsetrows (this, index)'.) If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with ‘tblish.evalWithTableVars’. The output of expr must be a numeric or logical index vector (This form is a shorthand for ‘out = subsetrows (this, tblish.evalWithTableVars (this, expr))’.) TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra. Examples: [s,p,sp] = tblish.examples.SpDb; prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")')) This is a Tablicious/Octave extension, not defined in the Matlab table interface. See also: tblish.evalWithTableVars  File: tablicious.info, Node: table.rowfun, Next: table.rows2vars, Prev: table.restrict, Up: table 8.2.55.31 table.rowfun ...................... -- Method: OUT = varfun (FUNC, OBJ) -- Method: OUT = varfun (..., 'OptionName', OPTIONVALUE, ...) Apply function to rows in table and collect outputs. This applies the function FUNC to the elements of each row of OBJ’s variables, and collects the concatenated output(s) into the variable(s) of a new table. FUNC is a function handle. It should take as many inputs as there are variables in OBJ. Or, it can take a single input, and you must specify ‘'SeparateInputs', false’ to have the input variables concatenated before being passed to FUNC. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the ‘'NumOutputs'’ or ‘'OutputVariableNames'’ options. Supported name/value options: ‘'OutputVariableNames'’ Names of table variables to store combined function output arguments in. ‘'NumOutputs'’ Number of output arguments to call function with. If omitted, defaults to number of items in OUTPUTVARIABLENAMES if it is supplied, otherwise defaults to 1. ‘'SeparateInputs'’ If true, input variables are passed as separate input arguments to FUNC. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true. ‘'ErrorHandler'’ A function to call as a fallback when calling FUNC results in an error. It is passed the caught exception, along with the original inputs passed to FUNC, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings. ‘'ExtractCellContents'’ Whether to “pop out” the contents of the elements of cell variables in OBJ, or to leave them as cells. True/false; default is false. If you specify this option, then OBJ may not have any multi-column cell-valued variables. ‘'InputVariables'’ If specified, only these variables from OBJ are used as the function inputs, instead of using all variables. ‘'GroupingVariables'’ Not yet implemented. ‘'OutputFormat'’ The format of the output. May be ‘'table'’ (the default), ‘'uniform'’, or ‘'cell'’. If it is ‘'uniform'’ or ‘'cell'’, the output variables are returned in multiple output arguments from ‘'rowfun'’. Returns a ‘table’ whose variables are the collected output arguments of FUNC if OUTPUTFORMAT is ‘'table'’. Otherwise, returns multiple output arguments of whatever type FUNC returned (if OUTPUTFORMAT is ‘'uniform'’) or cells (if OUTPUTFORMAT is ‘'cell'’).  File: tablicious.info, Node: table.rows2vars, Next: table.semijoin, Prev: table.rowfun, Up: table 8.2.55.32 table.rows2vars ......................... -- Method: OUT = rows2vars (OBJ) -- Method: OUT = rows2vars (OBJ, 'VariableNamesSource', VARIABLENAMESSOURCE) -- Method: OUT = rows2vars (..., 'DataVariables', DATAVARIABLES) Reorient table, swapping rows and variables dimensions. This flips the dimensions of the given table OBJ, swapping the orientation of the contained data, and swapping the row names/labels and variable names. The variable names become a new variable named “OriginalVariableNames”. The row names are drawn from the column VARIABLENAMESSOURCE if it is specified. Otherwise, if OBJ has row names, they are used. Otherwise, new variable names in the form “VarN” are generated. If all the variables in OBJ are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.  File: tablicious.info, Node: table.semijoin, Next: table.setdiff, Prev: table.rows2vars, Up: table 8.2.55.33 table.semijoin ........................ -- Method: [OUTA, IXA, OUTB, IXB] = semijoin (A, B) Natural semijoin. Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names. This method also computes the semijoin of B and A, for convenience. Returns: OUTA - all the rows in A with matching row(s) in B IXA - the row indexes into A which produced OUTA OUTB - all the rows in B with matching row(s) in A IXB - the row indexes into B which produced OUTB This is a Tablicious/Octave extension, not defined in the Matlab table interface.  File: tablicious.info, Node: table.setdiff, Next: table.setDimensionNames, Prev: table.semijoin, Up: table 8.2.55.34 table.setdiff ....................... -- Method: [C, IA] = setdiff (A, B) Set difference. Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B. Returns: C - A table containing the unique row values in A that were not in B. IA - Row indexes into A of the rows from A included in C.  File: tablicious.info, Node: table.setDimensionNames, Next: table.setRowNames, Prev: table.setdiff, Up: table 8.2.55.35 table.setDimensionNames ................................. -- Method: OUT = setDimensionNames (OBJ, NAMES) -- Method: OUT = setDimensionNames (OBJ, IX, NAMES) Set dimension names. Sets the ‘DimensionNames’ for this table to a new list of names. NAMES is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned. IX is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in IX may never be higher than 2. This method exists because the ‘obj.Properties.DimensionNames = ...’ assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the ‘obj.Properties.DimensionNames = ...’ assignment form.  File: tablicious.info, Node: table.setRowNames, Next: table.setvar, Prev: table.setDimensionNames, Up: table 8.2.55.36 table.setRowNames ........................... -- Method: OUT = setRowNames (OBJ, NAMES) Set row names. Sets the row names on OBJ to NAMES. NAMES is a cellstr column vector, with the same number of rows as OBJ has.  File: tablicious.info, Node: table.setvar, Next: table.setVariableNames, Prev: table.setRowNames, Up: table 8.2.55.37 table.setvar ...................... -- Method: OUT = setvar (OBJ, VARREF, VALUE) Set value for a variable in table. This sets (adds or replaces) the value for a variable in OBJ. It may be used to change the value of an existing variable, or add a new variable. This method exists primarily because I cannot get ‘obj.foo = value’ to work, apparently due to an issue with Octave's subsasgn support. VARREF is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index. VALUE is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in OBJ.  File: tablicious.info, Node: table.setVariableNames, Next: table.setxor, Prev: table.setvar, Up: table 8.2.55.38 table.setVariableNames ................................ -- Method: OUT = setVariableNames (OBJ, NAMES) -- Method: OUT = setVariableNames (OBJ, IX, NAMES) Set variable names. Sets the ‘VariableNames’ for this table to a new list of names. NAMES is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned. IX is an index vector indicating which variable names to set. If omitted, it sets all of them present in OBJ. This method exists because the ‘obj.Properties.VariableNames = ...’ assignment form does not work, possibly due to an Octave bug.  File: tablicious.info, Node: table.setxor, Next: table.size, Prev: table.setVariableNames, Up: table 8.2.55.39 table.setxor ...................... -- Method: [C, IA, IB] = setxor (A, B) Set exclusive OR. Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both. Returns: C - A table containing all the unique row values in the set XOR of A and B. IA - Row indexes into A of the rows from A included in C. IB - Row indexes into B of the rows from B included in C.  File: tablicious.info, Node: table.size, Next: table.splitapply, Prev: table.setxor, Up: table 8.2.55.40 table.size .................... -- Method: SZ = size (OBJ) -- Method: [NR, NV] = size (OBJ) -- Method: [NR, NV, ...] = size (OBJ) Gets the size of a table. For tables, the size is [number-of-rows x number-of-variables]. This is the same as ‘[height(obj), width(obj)]’.  File: tablicious.info, Node: table.splitapply, Next: table.splitvars, Prev: table.size, Up: table 8.2.55.41 table.splitapply .......................... -- Method: OUT = splitapply (FUNC, OBJ, G) -- Method: [Y1, ..., YM] = splitapply (FUNC, OBJ, G) Split table data into groups and apply function. Performs a splitapply, using the variables in OBJ as the input X variables to the ‘splitapply’ function call. See also: splitapply, table.groupby, tblish.table.grpstats  File: tablicious.info, Node: table.splitvars, Next: table.squeeze, Prev: table.splitapply, Up: table 8.2.55.42 table.splitvars ......................... -- Method: OUT = splitvars (OBJ) -- Method: OUT = splitvars (OBJ, VARS) -- Method: OUT = splitvars (..., 'NewVariableNames', NEWVARIABLENAMES) Split multicolumn table variables. Splits multicolumn table variables into new single-column variables. If VARS is supplied, splits only those variables. If VARS is not supplied, splits all multicolumn variables.  File: tablicious.info, Node: table.squeeze, Next: table.stack, Prev: table.splitvars, Up: table 8.2.55.43 table.squeeze ....................... -- Method: OBJ = squeeze (OBJ) Remove singleton dimensions. For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.  File: tablicious.info, Node: table.stack, Next: table.summary, Prev: table.squeeze, Up: table 8.2.55.44 table.stack ..................... -- Method: OUT = stack (OBJ, VARS) -- Method: OUT = stack (..., 'NewDataVariableName', NEWDATAVARIABLENAME) -- Method: OUT = stack (..., 'IndexVariableName', INDEXVARIABLENAME) Stack multiple table variables into a single variable.  File: tablicious.info, Node: table.summary, Next: table.table, Prev: table.stack, Up: table 8.2.55.45 table.summary ....................... -- Method: summary (OBJ) Display a summary of a table's data. Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use. This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of 'summary', Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.  File: tablicious.info, Node: table.table, Next: table.table2array, Prev: table.summary, Up: table 8.2.55.46 table.table ..................... -- Constructor: OBJ = table () Constructs a new empty (0 rows by 0 variables) table. -- Constructor: OBJ = table (VAR1, VAR2, ..., VARN) Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used. Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value '__tblish_backdoor__', that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious. -- Constructor: OBJ = table ('Size', SZ, 'VariableTypes', VARTYPES) Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type. -- Constructor: OBJ = table (..., 'VariableNames', VARNAMES) -- Constructor: OBJ = table (..., 'RowNames', ROWNAMES) Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.  File: tablicious.info, Node: table.table2array, Next: table.table2cell, Prev: table.table, Up: table 8.2.55.47 table.table2array ........................... -- Method: S = table2struct (OBJ) Converts OBJ to a homogeneous array.  File: tablicious.info, Node: table.table2cell, Next: table.table2struct, Prev: table.table2array, Up: table 8.2.55.48 table.table2cell .......................... -- Method: C = table2cell (OBJ) Converts table to a cell array. Each variable in OBJ becomes one or more columns in the output, depending on how many columns that variable has. Returns a cell array with the same number of rows as OBJ, and with as many or more columns as OBJ has variables.  File: tablicious.info, Node: table.table2struct, Next: table.union, Prev: table.table2cell, Up: table 8.2.55.49 table.table2struct ............................ -- Method: S = table2struct (OBJ) -- Method: S = table2struct (..., 'ToScalar', TRUEORFALSE) Converts OBJ to a scalar structure or structure array. Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, 'ToScalar', true); s.RowNames = tbl.Properties.RowNames; Returns a scalar struct or struct array, depending on the value of the ‘ToScalar’ option.  File: tablicious.info, Node: table.union, Next: table.varfun, Prev: table.table2struct, Up: table 8.2.55.50 table.union ..................... -- Method: [C, IA, IB] = union (A, B) Set union. Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables. Returns: C - A table containing all the unique row values present in A or B. IA - Row indexes into A of the rows from A included in C. IB - Row indexes into B of the rows from B included in C.  File: tablicious.info, Node: table.varfun, Next: table.varnames, Prev: table.union, Up: table 8.2.55.51 table.varfun ...................... -- Method: OUT = varfun (FCN, OBJ) -- Method: OUT = varfun (..., 'OutputFormat', OUTPUTFORMAT) -- Method: OUT = varfun (..., 'InputVariables', VARS) -- Method: OUT = varfun (..., 'ErrorHandler', ERRORFCN) Apply function to table variables. Applies the given function FCN to each variable in OBJ, collecting the output in a table, cell array, or array of another type.  File: tablicious.info, Node: table.varnames, Next: table.vertcat, Prev: table.varfun, Up: table 8.2.55.52 table.varnames ........................ -- Method: OUT = varnames (OBJ) -- Method: OUT = varnames (OBJ, VARNAMES) Get or set variable names for a table. Returns cellstr in the getter form. Returns an updated datetime in the setter form.  File: tablicious.info, Node: table.vertcat, Next: table.width, Prev: table.varnames, Up: table 8.2.55.53 table.vertcat ....................... -- Method: OUT = vertcat (VARARGIN) Vertical concatenation. Combines tables by vertically concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a 'vertcat()' on the variables from the corresponding input tables, in the order they were input in.  File: tablicious.info, Node: table.width, Prev: table.vertcat, Up: table 8.2.55.54 table.width ..................... -- Method: OUT = width (OBJ) Number of variables in table. Note that this is not the sum of the number of columns in each variable. It is just the number of variables.  File: tablicious.info, Node: tableOuterFillValue, Next: tail, Prev: table, Up: API Alphabetically 8.2.56 tableOuterFillValue -------------------------- _Not documented_  File: tablicious.info, Node: tail, Next: tblish.dataset, Prev: tableOuterFillValue, Up: API Alphabetically 8.2.57 tail ----------- -- Function: OUT = tail (A) -- Function: OUT = tail (A, K) Get last K rows of an array. Returns the array A, subsetted to its last K rows. This means subsetting it to the last ‘(min (k, size (A, 1)))’ elements along dimension 1, and leaving all other dimensions unrestricted. A is the array to subset. K is the number of rows to get. K defaults to 8 if it is omitted or empty. If there are less than K rows in A, returns all rows. Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type. See also: head  File: tablicious.info, Node: tblish.dataset, Next: tblish.datasets, Prev: tail, Up: API Alphabetically 8.2.58 tblish.dataset --------------------- -- Class: tblish.dataset The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious. This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list. * Menu: * tblish.dataset.airmiles:: * tblish.dataset.AirPassengers:: * tblish.dataset.airquality:: * tblish.dataset.anscombe:: * tblish.dataset.attenu:: * tblish.dataset.attitude:: * tblish.dataset.austres:: * tblish.dataset.beavers:: * tblish.dataset.BJsales:: * tblish.dataset.BOD:: * tblish.dataset.cars:: * tblish.dataset.ChickWeight:: * tblish.dataset.chickwts:: * tblish.dataset.co2:: * tblish.dataset.crimtab:: * tblish.dataset.cupcake:: * tblish.dataset.discoveries:: * tblish.dataset.DNase:: * tblish.dataset.esoph:: * tblish.dataset.euro:: * tblish.dataset.eurodist:: * tblish.dataset.EuStockMarkets:: * tblish.dataset.faithful:: * tblish.dataset.Formaldehyde:: * tblish.dataset.freeny:: * tblish.dataset.HairEyeColor:: * tblish.dataset.Harman23cor:: * tblish.dataset.Harman74cor:: * tblish.dataset.Indometh:: * tblish.dataset.infert:: * tblish.dataset.InsectSprays:: * tblish.dataset.iris:: * tblish.dataset.islands:: * tblish.dataset.JohnsonJohnson:: * tblish.dataset.LakeHuron:: * tblish.dataset.lh:: * tblish.dataset.LifeCycleSavings:: * tblish.dataset.Loblolly:: * tblish.dataset.longley:: * tblish.dataset.lynx:: * tblish.dataset.morley:: * tblish.dataset.mtcars:: * tblish.dataset.nhtemp:: * tblish.dataset.Nile:: * tblish.dataset.nottem:: * tblish.dataset.npk:: * tblish.dataset.occupationalStatus:: * tblish.dataset.Orange:: * tblish.dataset.OrchardSprays:: * tblish.dataset.PlantGrowth:: * tblish.dataset.precip:: * tblish.dataset.presidents:: * tblish.dataset.pressure:: * tblish.dataset.Puromycin:: * tblish.dataset.quakes:: * tblish.dataset.randu:: * tblish.dataset.rivers:: * tblish.dataset.rock:: * tblish.dataset.sleep:: * tblish.dataset.stackloss:: * tblish.dataset.state:: * tblish.dataset.sunspot_month:: * tblish.dataset.sunspot_year:: * tblish.dataset.sunspots:: * tblish.dataset.swiss:: * tblish.dataset.Theoph:: * tblish.dataset.Titanic:: * tblish.dataset.ToothGrowth:: * tblish.dataset.treering:: * tblish.dataset.trees:: * tblish.dataset.UCBAdmissions:: * tblish.dataset.UKDriverDeaths:: * tblish.dataset.UKgas:: * tblish.dataset.UKLungDeaths:: * tblish.dataset.USAccDeaths:: * tblish.dataset.USArrests:: * tblish.dataset.USJudgeRatings:: * tblish.dataset.USPersonalExpenditure:: * tblish.dataset.uspop:: * tblish.dataset.VADeaths:: * tblish.dataset.volcano:: * tblish.dataset.warpbreaks:: * tblish.dataset.women:: * tblish.dataset.WorldPhones:: * tblish.dataset.WWWusage:: * tblish.dataset.zCO2::  File: tablicious.info, Node: tblish.dataset.airmiles, Next: tblish.dataset.AirPassengers, Up: tblish.dataset 8.2.58.1 tblish.dataset.airmiles ................................ -- Static Method: OUT = airmiles () Passenger Miles on Commercial US Airlines, 1937-1960 Description ........... The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960. Source ...... ‘F.A.A. Statistical Handbook of Aviation’. Examples ........ t = tblish.dataset.airmiles; plot (t.year, t.miles); title ("airmiles data"); xlabel ("Passenger-miles flown by U.S. commercial airlines") ylabel ("airmiles");  File: tablicious.info, Node: tblish.dataset.AirPassengers, Next: tblish.dataset.airquality, Prev: tblish.dataset.airmiles, Up: tblish.dataset 8.2.58.2 tblish.dataset.AirPassengers ..................................... -- Static Method: OUT = AirPassengers () Monthly Airline Passenger Numbers 1949-1960 Description ........... The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960. Source ...... Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). ‘Time Series Analysis, Forecasting and Control’. Third Edition. San Francisco: Holden-Day. Series G. Examples ........ ## TODO: This example needs to be ported from R.  File: tablicious.info, Node: tblish.dataset.airquality, Next: tblish.dataset.anscombe, Prev: tblish.dataset.AirPassengers, Up: tblish.dataset 8.2.58.3 tblish.dataset.airquality .................................. -- Static Method: OUT = airquality () New York Air Quality Measurements from 1973 Description ........... Daily air quality measurements in New York, May to September 1973. Format ...... ‘Ozone’ Ozone concentration (ppb) ‘SolarR’ Solar R (lang) ‘Wind’ Wind (mph) ‘Temp’ Temperature (degrees F) ‘Month’ Month (1-12) ‘Day’ Day of month (1-31) Source ...... New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data). References .......... Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). ‘Graphical Methods for Data Analysis’. Belmont, CA: Wadsworth. Examples ........ t = tblish.dataset.airquality # Plot a scatter-plot plus a fitted line, for each combination of measurements vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"}; n_vars = numel (vars); figure; for i = 1:n_vars for j = 1:n_vars if (i == j) continue endif ix_subplot = (n_vars * (j - 1) + i); hax = subplot (n_vars, n_vars, ix_subplot); var_x = vars{i}; var_y = vars{j}; x = t.(var_x); y = t.(var_y); scatter (hax, x, y, 10); # Fit a cubic line to these points # TODO: Find out exactly what kind of fitted line R's example is using, and # port that. hold on p = polyfit (x, y, 3); x_hat = unique(x); p_y = polyval (p, x_hat); plot (hax, x_hat, p_y, "r"); endfor endfor  File: tablicious.info, Node: tblish.dataset.anscombe, Next: tblish.dataset.attenu, Prev: tblish.dataset.airquality, Up: tblish.dataset 8.2.58.4 tblish.dataset.anscombe ................................ -- Static Method: OUT = anscombe () Anscombe’s Quartet of “Identical” Simple Linear Regressions Description ........... Four sets of x/y pairs which have the same statistical properties, but are very different. Format ...... The data comes in an array of 4 structs, each with fields as follows: ‘x’ The X values for this pair. ‘y’ The Y values for this pair. Source ...... Tufte, Edward R. (1989). ‘The Visual Display of Quantitative Information’. 13–14. Cheshire, CT: Graphics Press. References .......... Anscombe, Francis J. (1973). Graphs in statistical analysis. ‘The American Statistician’, 27, 17–21. Examples ........ data = tblish.dataset.anscombe # Pick good limits for the plots all_x = [data.x]; all_y = [data.y]; x_limits = [min(0, min(all_x)) max(all_x)*1.2]; y_limits = [min(0, min(all_y)) max(all_y)*1.2]; # Do regression on each pair and plot the input and results figure; haxs = NaN (1, 4); for i_pair = 1:4 x = data(i_pair).x; y = data(i_pair).y; # TODO: Port the anova and other characterizations from the R code # TODO: Do a linear regression and plot its line hax = subplot (2, 2, i_pair); haxs(i_pair) = hax; xlabel (sprintf ("x%d", i_pair)); ylabel (sprintf ("y%d", i_pair)); scatter (x, y, "r"); endfor # Fiddle with the plot axes parameters linkaxes (haxs); xlim (haxs(1), x_limits); ylim (haxs(1), y_limits);  File: tablicious.info, Node: tblish.dataset.attenu, Next: tblish.dataset.attitude, Prev: tblish.dataset.anscombe, Up: tblish.dataset 8.2.58.5 tblish.dataset.attenu .............................. -- Static Method: OUT = attenu () Joyner-Boore Earthquake Attenuation Data Description ........... Event data for 23 earthquakes in California, showing peak accelerations. Format ...... ‘event’ Event number ‘mag’ Moment magnitude ‘station’ Station identifier ‘dist’ Station-hypocenter distance (km) ‘accel’ Peak acceleration (g) Source ...... Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA. References .......... Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. ‘Bulletin of the Seismological Society of America’, 72, S269–S268. Examples ........ # TODO: Port the example code from R # It does coplot() and pairs(), which are higher-level plotting tools # than core Octave provides. This could turn into a long example if we # just use base Octave here.  File: tablicious.info, Node: tblish.dataset.attitude, Next: tblish.dataset.austres, Prev: tblish.dataset.attenu, Up: tblish.dataset 8.2.58.6 tblish.dataset.attitude ................................ -- Static Method: OUT = attitude () The Chatterjee-Price Attitude Data Description ........... Aggregated data from a survey of clerical employees at a large financial organization. Format ...... ‘rating’ Overall rating. ‘complaints’ Handling of employee complaints. ‘privileges’ Does not allow special privileges. ‘learning’ Opportunity to learn. ‘raises’ Raises based on performance. ‘critical’ Too critical. ‘advance’ Advancement. Source ...... Chatterjee, S. and Price, B. (1977). ‘Regression Analysis by Example’. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).) Examples ........ t = tblish.dataset.attitude tblish.examples.plot_pairs (t); # TODO: Display table summary # TODO: Whatever those statistical linear-model plots are that R is doing  File: tablicious.info, Node: tblish.dataset.austres, Next: tblish.dataset.beavers, Prev: tblish.dataset.attitude, Up: tblish.dataset 8.2.58.7 tblish.dataset.austres ............................... -- Static Method: OUT = austres () Australian Population Description ........... Numbers of Australian residents measured quarterly from March 1971 to March 1994. Format ...... ‘date’ The month of the observation. ‘residents’ The number of residents. Source ...... Brockwell, P. J. and Davis, R. A. (1996). ‘Introduction to Time Series and Forecasting’. New York: Springer-Verlag. Examples ........ t = tblish.dataset.austres plot (datenum (t.date), t.residents); datetick x xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");  File: tablicious.info, Node: tblish.dataset.beavers, Next: tblish.dataset.BJsales, Prev: tblish.dataset.austres, Up: tblish.dataset 8.2.58.8 tblish.dataset.beavers ............................... -- Static Method: OUT = beavers () Body Temperature Series of Two Beavers Description ........... Body temperature readings for two beavers. Format ...... ‘day’ Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2). ‘time’ Time of observation, in the form 0330 for 3:30am ‘temp’ Measured body temperature in degrees Celsius. ‘activ’ Indicator of activity outside the retreat. Source ...... P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) ‘Case Studies in Biometry’. New York: John Wiley and Sons. Examples ........ # TODO: This example needs to be ported from R.  File: tablicious.info, Node: tblish.dataset.BJsales, Next: tblish.dataset.BOD, Prev: tblish.dataset.beavers, Up: tblish.dataset 8.2.58.9 tblish.dataset.BJsales ............................... -- Static Method: OUT = BJsales () Sales Data with Leading Indicator Description ........... Sales Data with Leading Indicator Format ...... ‘record’ Index of the record. ‘lead’ Leading indicator. ‘sales’ Sales volume. Source ...... The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at . References .......... Box, G. E. P. and Jenkins, G. M. (1976). ‘Time Series Analysis, Forecasting and Control’. San Francisco: Holden-Day. p. 537. Brockwell, P. J. and Davis, R. A. (1991). ‘Time Series: Theory and Methods’, Second edition. New York: Springer-Verlag. p. 414. Examples ........ # TODO: Come up with example code here  File: tablicious.info, Node: tblish.dataset.BOD, Next: tblish.dataset.cars, Prev: tblish.dataset.BJsales, Up: tblish.dataset 8.2.58.10 tblish.dataset.BOD ............................ -- Static Method: OUT = BOD () Biochemical Oxygen Demand Description ........... Contains biochemical oxygen demand versus time in an evaluation of water quality. Format ...... ‘Time’ Time of the measurement (in days). ‘demand’ Biochemical oxygen demand (mg/l). Source ...... Bates, D.M. and Watts, D.G. (1988). ‘Nonlinear Regression Analysis and Its Applications’. New York: John Wiley & Sons. Appendix A1.4. Originally from: Marske (1967). ‘Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface’, M.Sc. Thesis, University of Wisconsin – Madison. Examples ........ # TODO: Port this example from R  File: tablicious.info, Node: tblish.dataset.cars, Next: tblish.dataset.ChickWeight, Prev: tblish.dataset.BOD, Up: tblish.dataset 8.2.58.11 tblish.dataset.cars ............................. -- Static Method: OUT = cars () Speed and Stopping Distances of Cars Description ........... Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s. Format ...... ‘speed’ Speed (mph). ‘dist’ Stopping distance (ft). Source ...... Ezekiel, M. (1930). ‘Methods of Correlation Analysis’. New York: Wiley. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.cars; # TODO: Add Lowess smoothed lines to the plots figure; plot (t.speed, t.dist, "o"); xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)"); title ("cars data"); figure; loglog (t.speed, t.dist, "o"); xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)"); title ("cars data (logarithmic scales)"); # TODO: Do the linear model plot # Polynomial regression figure; plot (t.speed, t.dist, "o"); xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)"); title ("cars polynomial regressions"); hold on xlim ([0 25]); x2 = linspace (0, 25, 200); for degree = 1:4 [P, S, mu] = polyfit (t.speed, t.dist, degree); y2 = polyval(P, x2, [], mu); plot (x2, y2); endfor  File: tablicious.info, Node: tblish.dataset.ChickWeight, Next: tblish.dataset.chickwts, Prev: tblish.dataset.cars, Up: tblish.dataset 8.2.58.12 tblish.dataset.ChickWeight .................................... -- Static Method: OUT = ChickWeight () Weight versus age of chicks on different diets Format ...... ‘weight’ a numeric vector giving the body weight of the chick (gm). ‘Time’ a numeric vector giving the number of days since birth when the measurement was made. ‘Chick’ an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet. ‘Diet’ a factor with levels 1, ..., 4 indicating which experimental diet the chick received. Source ...... Crowder, M. and Hand, D. (1990). ‘Analysis of Repeated Measures’. London: Chapman and Hall. (example 5.3) Hand, D. and Crowder, M. (1996), ‘Practical Longitudinal Data Analysis’. London: Chapman and Hall. (table A.2) Pinheiro, J. C. and Bates, D. M. (2000) ‘Mixed-effects Models in S and S-PLUS’. New York: Springer. Examples ........ t = tblish.dataset.ChickWeight tblish.examples.coplot (t, "Time", "weight", "Chick");  File: tablicious.info, Node: tblish.dataset.chickwts, Next: tblish.dataset.co2, Prev: tblish.dataset.ChickWeight, Up: tblish.dataset 8.2.58.13 tblish.dataset.chickwts ................................. -- Static Method: OUT = chickwts () Chicken Weights by Feed Type Description ........... An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens. Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types. Format ...... ‘weight’ Chick weight at six weeks (gm). ‘feed’ Feed type. Source ...... Anonymous (1948) ‘Biometrika’, 35, 214. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ # This example requires the statistics package from Octave Forge t = tblish.dataset.chickwts # Boxplot by group figure g = groupby (t, "feed", { "weight", @(x) {x}, "weight" }); boxplot (g.weight, 1); xlabel ("feed"); ylabel ("Weight at six weeks (gm)"); xticklabels ([{""} cellstr(g.feed')]); # Linear model # TODO: This linear model thing and anova  File: tablicious.info, Node: tblish.dataset.co2, Next: tblish.dataset.crimtab, Prev: tblish.dataset.chickwts, Up: tblish.dataset 8.2.58.14 tblish.dataset.co2 ............................ -- Static Method: OUT = co2 () Mauna Loa Atmospheric CO2 Concentration Description ........... Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997. Format ...... ‘date’ Date of the month of the observation, as datetime. ‘co2’ CO2 concentration (ppm). Details ....... The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964. Source ...... Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220. . References .......... Cleveland, W. S. (1993). ‘Visualizing Data’. New Jersey: Summit Press. Examples ........ t = tblish.dataset.co2; plot (datenum (t.date), t.co2); datetick ("x"); xlabel ("Time"); ylabel ("Atmospheric concentration of CO2"); title ("co2 data set");  File: tablicious.info, Node: tblish.dataset.crimtab, Next: tblish.dataset.cupcake, Prev: tblish.dataset.co2, Up: tblish.dataset 8.2.58.15 tblish.dataset.crimtab ................................ -- Static Method: OUT = crimtab () Student’s 3000 Criminals Data Description ........... Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales. Format ...... This dataset contains three separate variables. The ‘finger_length’ and ‘body_height’ variables correspond to the rows and columns of the ‘count’ matrix. ‘finger_length’ Midpoints of intervals of finger lengths (cm). ‘body_height’ Body heights (cm). ‘count’ Number of prisoners in this bin. Details ....... Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations: “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.” The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4' 7"9/16 - 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4' 8"). MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.” Source ...... thanks to Jean R. Lobry and Anne-Béatrice Dufour. References .......... Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. ‘The Journal of the Anthropological Institute of Great Britain and Ireland’, 30, 161–198. MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. ‘Biometrika’, 1(2), 177–227. Student (1908). The probable error of a mean. ‘Biometrika’, 6, 1–25. Examples ........ # TODO: Port this from R  File: tablicious.info, Node: tblish.dataset.cupcake, Next: tblish.dataset.discoveries, Prev: tblish.dataset.crimtab, Up: tblish.dataset 8.2.58.16 tblish.dataset.cupcake ................................ -- Static Method: OUT = cupcake () Google Search popularity for "cupcake", 2004-2019 Description ........... Monthly popularity of worldwide Google search results for "cupcake", 2004-2019. Format ...... ‘Month’ Month when searches took place ‘Cupcake’ An indicator of search volume, in unknown units Source ...... Google Trends, , retrieved 2019-05-04 by Andrew Janke. Examples ........ t = tblish.dataset.cupcake plot (datenum (t.Month), t.Cupcake) title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");  File: tablicious.info, Node: tblish.dataset.discoveries, Next: tblish.dataset.DNase, Prev: tblish.dataset.cupcake, Up: tblish.dataset 8.2.58.17 tblish.dataset.discoveries .................................... -- Static Method: OUT = discoveries () Yearly Numbers of Important Discoveries Description ........... The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959. Format ...... ‘year’ Year. ‘discoveries’ Number of “great” discoveries that year. Source ...... ‘The World Almanac and Book of Facts’, 1975 Edition, pages 315–318. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.discoveries; plot (t.year, t.discoveries); xlabel ("Time"); ylabel ("Number of important discoveries"); title ("discoveries data set");  File: tablicious.info, Node: tblish.dataset.DNase, Next: tblish.dataset.esoph, Prev: tblish.dataset.discoveries, Up: tblish.dataset 8.2.58.18 tblish.dataset.DNase .............................. -- Static Method: OUT = DNase () Elisa assay of DNase Description ........... Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum. Format ...... ‘Run’ Ordered ‘categorical’ indicating the assay run. ‘conc’ Known concentration of the protein (ng/ml). ‘density’ Measured optical density in the assay (dimensionless). Source ...... Davidian, M. and Giltinan, D. M. (1995). ‘Nonlinear Models for Repeated Measurement Data’. London: Chapman & Hall. (section 5.2.4, p. 134) Pinheiro, J. C. and Bates, D. M. (2000). ‘Mixed-effects Models in S and S-PLUS’. New York: Springer. Examples ........ t = tblish.dataset.DNase; # TODO: Port this from R tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter); tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ... "PlotArgs", {"o"});  File: tablicious.info, Node: tblish.dataset.esoph, Next: tblish.dataset.euro, Prev: tblish.dataset.DNase, Up: tblish.dataset 8.2.58.19 tblish.dataset.esoph .............................. -- Static Method: OUT = esoph () Smoking, Alcohol and Esophageal Cancer Description ........... Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France. Format ...... ‘item’ Age group (years). ‘alcgp’ Alcohol consumption (gm/day). ‘tobgp’ Tobacco consumption (gm/day). ‘ncases’ Number of cases. ‘ncontrols’ Number of controls Source ...... Breslow, N. E. and Day, N. E. (1980) ‘Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies’. Oxford: IARC Lyon / Oxford University Press. Examples ........ # TODO: Port this from R # TODO: Port the anova output # TODO: Port the fancy plot # This involves a "mosaic plot", which is not supported by Octave, so this will # take some work.  File: tablicious.info, Node: tblish.dataset.euro, Next: tblish.dataset.eurodist, Prev: tblish.dataset.esoph, Up: tblish.dataset 8.2.58.20 tblish.dataset.euro ............................. -- Static Method: OUT = euro () Conversion Rates of Euro Currencies Description ........... Conversion rates between the various Euro currencies. Format ...... This data comes in two separate variables. ‘euro’ An 11-long vector of the value of 1 Euro in all participating currencies. ‘euro_cross’ An 11-by-11 matrix of conversion rates between various Euro currencies. ‘euro_date’ The date upon which these Euro conversion rates were fixed. Details ....... The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits. Source ...... Unknown. This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source. Examples ........ # TODO: Port this from R # TODO: Example conversion # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa  File: tablicious.info, Node: tblish.dataset.eurodist, Next: tblish.dataset.EuStockMarkets, Prev: tblish.dataset.euro, Up: tblish.dataset 8.2.58.21 tblish.dataset.eurodist ................................. -- Static Method: OUT = eurodist () Distances Between European Cities and Between US Cities Description ........... ‘eurodist’ gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia. ‘UScitiesD’ gives “straight line” distances between 10 cities in the US. Format ...... ‘eurodist’ ????? TODO: Finish this. Source ...... Crystal, D. Ed. (1990). ‘The Cambridge Encyclopaedia’. Cambridge: Cambridge University Press. The US cities distances were provided by Pierre Legendre. Examples ........  File: tablicious.info, Node: tblish.dataset.EuStockMarkets, Next: tblish.dataset.faithful, Prev: tblish.dataset.eurodist, Up: tblish.dataset 8.2.58.22 tblish.dataset.EuStockMarkets ....................................... -- Static Method: OUT = EuStockMarkets () Daily Closing Prices of Major European Stock Indices Description ........... Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted. Format ...... A multivariate time series with 1860 observations on 4 variables. The starting date is the 130th day of 1991, with a frequency of 260 observations per year. Source ...... The data were kindly provided by Erste Bank AG, Vienna, Austria. Examples ........ t = tblish.dataset.EuStockMarkets; # The fact that we're doing this munging means that table might have # been the wrong structure for this data in the first place t2 = removevars (t, "day"); index_names = t2.Properties.VariableNames; day = 1:height (t2); price = table2array (t2); price0 = price(1,:); rel_price = price ./ repmat (price0, [size(price, 1) 1]); figure; plot (day, rel_price); legend (index_names); xlabel ("Business day"); ylabel ("Relative price");  File: tablicious.info, Node: tblish.dataset.faithful, Next: tblish.dataset.Formaldehyde, Prev: tblish.dataset.EuStockMarkets, Up: tblish.dataset 8.2.58.23 tblish.dataset.faithful ................................. -- Static Method: OUT = faithful () Old Faithful Geyser Data Description ........... Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA. Format ...... ‘eruptions’ Eruption time (mins). ‘waiting’ Waiting time to next eruption (mins). Source ...... W. Härdle. References .......... Härdle, W. (1991). ‘Smoothing Techniques with Implementation in S’. New York: Springer. Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. ‘Applied Statistics’, 39, 357–365. Examples ........ t = tblish.dataset.faithful; # Munge the data, rounding eruption time to the second e60 = 60 * t.eruptions; ne60 = round (e60); # TODO: Port zapsmall to Octave eruptions = ne60 / 60; # TODO: Display mean relative difference and bins summary # Histogram of rounded eruption times figure hist (ne60, max (ne60)) xlabel ("Eruption time (sec)") ylabel ("n") title ("faithful data: Eruptions of Old Faithful") # Scatter plot of eruption time vs waiting time figure scatter (t.eruptions, t.waiting) xlabel ("Eruption time (min)") ylabel ("Waiting time to next eruption (min)") title ("faithful data: Eruptions of Old Faithful") # TODO: Port Lowess smoothing to Octave  File: tablicious.info, Node: tblish.dataset.Formaldehyde, Next: tblish.dataset.freeny, Prev: tblish.dataset.faithful, Up: tblish.dataset 8.2.58.24 tblish.dataset.Formaldehyde ..................................... -- Static Method: OUT = Formaldehyde () Determination of Formaldehyde Description ........... These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer. Format ...... ‘record’ Observation record number. ‘carb’ Carbohydrate (ml). ‘optden’ Optical Density Source ...... Bennett, N. A. and N. L. Franklin (1954). ‘Statistical Analysis in Chemistry and the Chemical Industry’. New York: Wiley. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.Formaldehyde; figure scatter (t.carb, t.optden) # TODO: Add a linear model line xlabel ("Carbohydrate (ml)") ylabel ("Optical Density") title ("Formaldehyde data") # TODO: Add linear model summary output # TOD: Add linear model summary plot  File: tablicious.info, Node: tblish.dataset.freeny, Next: tblish.dataset.HairEyeColor, Prev: tblish.dataset.Formaldehyde, Up: tblish.dataset 8.2.58.25 tblish.dataset.freeny ............................... -- Static Method: OUT = freeny () Freeny's Revenue Data Description ........... Freeny’s data on quarterly revenue and explanatory variables. Format ...... Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential). ‘date’ Start date of the quarter for the observation. ‘y’ Observed quarterly revenue. TODO: Determine units (probably millions of USD?) ‘lag_quarterly_revenue’ Quarterly revenue (‘y’), lagged 1 quarter. ‘price_index’ A price index ‘income_level’ ??? TODO: Fill this in ‘market_potential’ ??? TODO: Fill this in Source ...... Freeny, A. E. (1977). ‘A Portable Linear Regression Package with Test Programs’. Bell Laboratories memorandum. References .......... Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). ‘The New S Language’. Monterey: Wadsworth & Brooks/Cole. Examples ........ t = tblish.dataset.freeny; summary (t) tblish.examples.plot_pairs (removevars (t, "date")) # TODO: Create linear model and print summary # TODO: Linear model plot  File: tablicious.info, Node: tblish.dataset.HairEyeColor, Next: tblish.dataset.Harman23cor, Prev: tblish.dataset.freeny, Up: tblish.dataset 8.2.58.26 tblish.dataset.HairEyeColor ..................................... -- Static Method: OUT = HairEyeColor () Hair and Eye Color of Statistics Students Description ........... Distribution of hair and eye color and sex in 592 statistics students. Format ...... This data set comes in multiple variables ‘n’ A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex. ‘hair’ Hair colors for the indexes along dimension 1. ‘eye’ Eye colors for the indexes along dimension 2. ‘sex’ Sexes for the indexes along dimension 3. Details ....... The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes. This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots. Source ...... Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000). References .......... Snee, R. D. (1974). Graphical display of two-way contingency tables. ‘The American Statistician’, 28, 9–12. Friendly, M. (1992a). Graphical methods for categorical data. ‘SAS User Group International Conference Proceedings’, 17, 190–200. Friendly, M. (1992b). Mosaic displays for loglinear models. ‘Proceedings of the Statistical Graphics Section’, American Statistical Association, pp. 61–68. Friendly, M. (2000). ‘Visualizing Categorical Data’. SAS Institute, ISBN 1-58025-660-0. Examples ........ tblish.dataset.HairEyeColor # TODO: Aggregate over sex and display a table of counts # TODO: Port mosaic plot to Octave  File: tablicious.info, Node: tblish.dataset.Harman23cor, Next: tblish.dataset.Harman74cor, Prev: tblish.dataset.HairEyeColor, Up: tblish.dataset 8.2.58.27 tblish.dataset.Harman23cor .................................... -- Static Method: OUT = Harman23cor () Harman Example 2.3 Description ........... A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen. Format ...... ‘cov’ An 8-by-8 correlation matrix. ‘names’ Names of the variables corresponding to the indexes of the correlation matrix’s dimensions. Source ...... Harman, H. H. (1976). ‘Modern Factor Analysis’, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3. Examples ........ tblish.dataset.Harman23cor; # TODO: Port factanal to Octave  File: tablicious.info, Node: tblish.dataset.Harman74cor, Next: tblish.dataset.Indometh, Prev: tblish.dataset.Harman23cor, Up: tblish.dataset 8.2.58.28 tblish.dataset.Harman74cor .................................... -- Static Method: OUT = Harman74cor () Harman Example 7.4 Description ........... A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford. Format ...... ‘cov’ A 2-dimensional correlation matrix. ‘vars’ Names of the variables corresponding to the indexes along the dimensions of ‘cov’. Source ...... Harman, H. H. (1976). ‘Modern Factor Analysis’, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4. Examples ........ tblish.dataset.Harman74cor; # TODO: Port factanal to Octave  File: tablicious.info, Node: tblish.dataset.Indometh, Next: tblish.dataset.infert, Prev: tblish.dataset.Harman74cor, Up: tblish.dataset 8.2.58.29 tblish.dataset.Indometh ................................. -- Static Method: OUT = Indometh () Pharmacokinetics of Indomethacin Description ........... Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’). Format ...... ‘Subject’ Subject identifier. ‘time’ Time since drug administration at which samples were drawn (hours). ‘conc’ Plasma concentration of indomethacin (mcg/ml). Details ....... Each of the six subjects were given an intravenous injection of indometacin. Source ...... Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. ‘Journal of Pharmacokinetics and Biopharmaceutics’ 4, 255–280. Davidian, M. and Giltinan, D. M. (1995). ‘Nonlinear Models for Repeated Measurement Data’. London: Chapman & Hall. (section 5.2.4, p. 129) Pinheiro, J. C. and Bates, D. M. (2000). ‘Mixed-effects Models in S and S-PLUS’. New York: Springer.  File: tablicious.info, Node: tblish.dataset.infert, Next: tblish.dataset.InsectSprays, Prev: tblish.dataset.Indometh, Up: tblish.dataset 8.2.58.30 tblish.dataset.infert ............................... -- Static Method: OUT = infert () Infertility after Spontaneous and Induced Abortion Description ........... This is a matched case-control study dating from before the availability of conditional logistic regression. Format ...... ‘education’ Index of the record. ‘age’ Age in years of case. ‘parity’ Count. ‘induced’ Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”. ‘case_status’ 0 = control, 1 = case. ‘spontaneous’ Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”. ‘stratum’ Matched set number. ‘pooled_stratum’ Stratum number. Note .... One case with two prior spontaneous abortions and two prior induced abortions is omitted. Source ...... Trichopoulos et al (1976). ‘Br. J. of Obst. and Gynaec.’ 83, 645–650. Examples ........ t = tblish.dataset.infert; # TODO: Port glm() (generalized linear model) stuff to Octave  File: tablicious.info, Node: tblish.dataset.InsectSprays, Next: tblish.dataset.iris, Prev: tblish.dataset.infert, Up: tblish.dataset 8.2.58.31 tblish.dataset.InsectSprays ..................................... -- Static Method: OUT = InsectSprays () Effectiveness of Insect Sprays Description ........... The counts of insects in agricultural experimental units treated with different insecticides. Format ...... ‘spray’ The type of spray. ‘count’ Insect count. Source ...... Beall, G., (1942). The Transformation of data from entomological field experiments. ‘Biometrika’, 29, 243–262. References .......... McNeil, D. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.InsectSprays; # TODO: boxplot # TODO: AOV plots  File: tablicious.info, Node: tblish.dataset.iris, Next: tblish.dataset.islands, Prev: tblish.dataset.InsectSprays, Up: tblish.dataset 8.2.58.32 tblish.dataset.iris ............................. -- Static Method: OUT = iris () The Fisher Iris dataset: measurements of various flowers Description ........... This is the classic Fisher Iris dataset. Format ...... ‘Species’ The species of flower being measured. ‘SepalLength’ Length of sepals, in centimeters. ‘SepalWidth’ Width of sepals, in centimeters. ‘PetalLength’ Length of petals, in centimeters. ‘PetalWidth’ Width of petals, in centimeters. Source ...... References .......... Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in ‘Contributions to Mathematical Statistics’ (John Wiley, NY, 1950). Duda, R.O., & Hart, P.E. (1973). ‘Pattern Classification and Scene Analysis’. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218. The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. ‘Bulletin of the American Iris Society’, 59, 2–5. Examples ........ # TODO: Port this example from R  File: tablicious.info, Node: tblish.dataset.islands, Next: tblish.dataset.JohnsonJohnson, Prev: tblish.dataset.iris, Up: tblish.dataset 8.2.58.33 tblish.dataset.islands ................................ -- Static Method: OUT = islands () Areas of the World's Major Landmasses Description ........... The areas in thousands of square miles of the landmasses which exceed 10,000 square miles. Format ...... ‘name’ The name of the island. ‘area’ The area, in thousands of square miles. Source ...... ‘The World Almanac and Book of Facts’, 1975, page 406. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.islands; # TODO: Port dot chart to Octave  File: tablicious.info, Node: tblish.dataset.JohnsonJohnson, Next: tblish.dataset.LakeHuron, Prev: tblish.dataset.islands, Up: tblish.dataset 8.2.58.34 tblish.dataset.JohnsonJohnson ....................................... -- Static Method: OUT = JohnsonJohnson () Quarterly Earnings per Johnson & Johnson Share Description ........... Quarterly earnings (dollars) per Johnson & Johnson share 1960–80. Format ...... ‘date’ Start date of the quarter. ‘earnings’ Earnings per share (USD). Source ...... Shumway, R. H. and Stoffer, D. S. (2000). ‘Time Series Analysis and its Applications’. Second Edition. New York: Springer. Example 1.1. Examples ........ t = tblish.dataset.JohnsonJohnson # TODO: Yikes, look at all those plots. Port them to Octave.  File: tablicious.info, Node: tblish.dataset.LakeHuron, Next: tblish.dataset.lh, Prev: tblish.dataset.JohnsonJohnson, Up: tblish.dataset 8.2.58.35 tblish.dataset.LakeHuron .................................. -- Static Method: OUT = LakeHuron () Level of Lake Huron 1875-1972 Description ........... Annual measurements of the level, in feet, of Lake Huron 1875–1972. Format ...... ‘year’ Year of the measurement ‘level’ Lake level (ft). Source ...... Brockwell, P. J. and Davis, R. A. (1991). ‘Time Series and Forecasting Methods’. Second edition. New York: Springer. Series A, page 555. Brockwell, P. J. and Davis, R. A. (1996). ‘Introduction to Time Series and Forecasting’. New York: Springer. Sections 5.1 and 7.6. Examples ........ t = tblish.dataset.LakeHuron; plot (t.year, t.level) xlabel ("Year") ylabel ("Lake level (ft)") title ("Level of Lake Huron")  File: tablicious.info, Node: tblish.dataset.lh, Next: tblish.dataset.LifeCycleSavings, Prev: tblish.dataset.LakeHuron, Up: tblish.dataset 8.2.58.36 tblish.dataset.lh ........................... -- Static Method: OUT = lh () Luteinizing Hormone in Blood Samples Description ........... A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples. Format ...... ‘sample’ The number of the observation. ‘lh’ Level of luteinizing hormone. Source ...... P.J. Diggle (1990). ‘Time Series: A Biostatistical Introduction’. Oxford. Table A.1, series 3. Examples ........ t = tblish.dataset.lh; plot (t.sample, t.lh); xlabel ("Sample Number"); ylabel ("lh level");  File: tablicious.info, Node: tblish.dataset.LifeCycleSavings, Next: tblish.dataset.Loblolly, Prev: tblish.dataset.lh, Up: tblish.dataset 8.2.58.37 tblish.dataset.LifeCycleSavings ......................................... -- Static Method: OUT = LifeCycleSavings () Intercountry Life-Cycle Savings Data Description ........... Data on the savings ratio 1960–1970. Format ...... ‘country’ Name of the country. ‘sr’ Aggregate personal savings. ‘pop15’ Percentage of population under 15. ‘pop75’ Percentage of population over 75. ‘dpi’ Real per-capita disposable income. ‘ddpi’ Percent growth rate of dpi. Details ....... Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations. Source ...... The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977). References .......... Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology. Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). ‘Regression Diagnostics’. New York: Wiley. Examples ........ t = tblish.dataset.LifeCycleSavings; # TODO: linear model # TODO: pairs plot with Lowess smoothed line  File: tablicious.info, Node: tblish.dataset.Loblolly, Next: tblish.dataset.longley, Prev: tblish.dataset.LifeCycleSavings, Up: tblish.dataset 8.2.58.38 tblish.dataset.Loblolly ................................. -- Static Method: OUT = Loblolly () Growth of Loblolly pine trees Description ........... Records of the growth of Loblolly pine trees. Format ...... ‘height’ Tree height (ft). ‘age’ Tree age (years). ‘Seed’ Seed source for the tree. Ordering is according to increasing maximum height. Source ...... Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. ‘Proceedings of the Statistical Computing Section’, American Statistical Association, 340–343. Pinheiro, J. C. and Bates, D. M. (2000). ‘Mixed-effects Models in S and S-PLUS’. New York: Springer. Examples ........ t = tblish.dataset.Loblolly; t2 = t(t.Seed == "329",:); scatter (t2.age, t2.height) xlabel ("Tree age (yr)"); ylabel ("Tree height (ft)"); title ("Loblolly data and fitted curve (Seed 329 only)") # TODO: Compute and plot fitted curve  File: tablicious.info, Node: tblish.dataset.longley, Next: tblish.dataset.lynx, Prev: tblish.dataset.Loblolly, Up: tblish.dataset 8.2.58.39 tblish.dataset.longley ................................ -- Static Method: OUT = longley () Longley’s Economic Regression Data Description ........... A macroeconomic data set which provides a well-known example for a highly collinear regression. Format ...... ‘Year’ The year. ‘GNP_deflator’ GNP implicit price deflator (1954=100). ‘GNP’ Gross National Product. ‘Unemployed’ Number of unemployed. ‘Armed_Forces’ Number of people in the armed forces. ‘Population’ “Noninstitutionalized” population ≥ 14 years of age. ‘Employed’ Number of people employed. Source ...... J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. ‘Journal of the American Statistical Association’, 62, 819–841. References .......... Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). ‘The New S Language’. Monterey: Wadsworth & Brooks/Cole. Examples ........ t = tblish.dataset.longley; # TODO: Linear model # TODO: opar plot  File: tablicious.info, Node: tblish.dataset.lynx, Next: tblish.dataset.morley, Prev: tblish.dataset.longley, Up: tblish.dataset 8.2.58.40 tblish.dataset.lynx ............................. -- Static Method: OUT = lynx () Annual Canadian Lynx trappings 1821-1934 Description ........... Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977). Format ...... ‘year’ Year of the record. ‘lynx’ Number of lynx trapped. Source ...... Brockwell, P. J. and Davis, R. A. (1991). ‘Time Series and Forecasting Methods’. Second edition. New York: Springer. Series G (page 557). References .......... Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). ‘The New S Language’. Monterey: Wadsworth & Brooks/Cole. Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. ‘Journal of the Royal Statistical Society series A’, 140, 411–431. Examples ........ t = tblish.dataset.lynx; plot (t.year, t.lynx); xlabel ("Year"); ylabel ("Lynx Trapped");  File: tablicious.info, Node: tblish.dataset.morley, Next: tblish.dataset.mtcars, Prev: tblish.dataset.lynx, Up: tblish.dataset 8.2.58.41 tblish.dataset.morley ............................... -- Static Method: OUT = morley () Michelson Speed of Light Data Description ........... A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted). Format ...... ‘Expt’ The experiment number, from 1 to 5. ‘Run’ The run number within each experiment. ‘Speed’ Speed-of-light measurement. Details ....... The data is here viewed as a randomized block experiment with ‘experiment’ and ‘run’ as the factors. ‘run’ may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment. Source ...... A. J. Weekes (1986). ‘A Genstat Primer’. London: Edward Arnold. S. M. Stigler (1977). Do robust estimators work with real data? ‘Annals of Statistics’ 5, 1055–1098. (See Table 6.) A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. ‘Astronomic Papers’, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.). Examples ........ t = tblish.dataset.morley; # TODO: Port to Octave  File: tablicious.info, Node: tblish.dataset.mtcars, Next: tblish.dataset.nhtemp, Prev: tblish.dataset.morley, Up: tblish.dataset 8.2.58.42 tblish.dataset.mtcars ............................... -- Static Method: OUT = mtcars () Motor Trend 1974 Car Road Tests Description ........... The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models). Format ...... ‘mpg’ Fuel efficiency in miles/gallon ‘cyl’ Number of cylinders ‘disp’ Displacement (cu. in.) ‘hp’ Gross horsepower ‘drat’ Rear axle ratio ‘wt’ Weight (1,000 lbs) ‘qsec’ 1/4 mile time ‘vs’ Engine type (0 = V-shaped, 1 = straight) ‘am’ Transmission type (0 = automatic, 1 = manual) ‘gear’ Number of forward gears ‘carb’ Number of carburetors Note .... Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.” Source ...... Henderson and Velleman (1981). Building multiple regression models interactively. ‘Biometrics’, 37, 391–411. Examples ........ # TODO: Port this example from R  File: tablicious.info, Node: tblish.dataset.nhtemp, Next: tblish.dataset.Nile, Prev: tblish.dataset.mtcars, Up: tblish.dataset 8.2.58.43 tblish.dataset.nhtemp ............................... -- Static Method: OUT = nhtemp () Average Yearly Temperatures in New Haven Description ........... The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971. Format ...... ‘year’ Year of the observation. ‘temp’ Mean annual temperature (degrees F). Source ...... Vaux, J. E. and Brinker, N. B. (1972) ‘Cycles’, 1972, 117–121. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.nhtemp; plot (t.year, t.temp); title ("nhtemp data"); xlabel ("Mean annual temperature in New Haven, CT (deg. F)");  File: tablicious.info, Node: tblish.dataset.Nile, Next: tblish.dataset.nottem, Prev: tblish.dataset.nhtemp, Up: tblish.dataset 8.2.58.44 tblish.dataset.Nile ............................. -- Static Method: OUT = Nile () Flow of the River Nile Description ........... Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249). Format ...... ‘year’ Year of the record. ‘flow’ Annual flow (cubic meters). Source ...... Durbin, J. and Koopman, S. J. (2001). ‘Time Series Analysis by State Space Methods’. Oxford: Oxford University Press. References .......... Balke, N. S. (1993). Detecting level shifts in time series. ‘Journal of Business and Economic Statistics’, 11, 81–92. Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. ‘Biometrika’ 65, 243–51. Examples ........ t = tblish.dataset.Nile; figure plot (t.year, t.flow); # TODO: Port the rest of the example to Octave  File: tablicious.info, Node: tblish.dataset.nottem, Next: tblish.dataset.npk, Prev: tblish.dataset.Nile, Up: tblish.dataset 8.2.58.45 tblish.dataset.nottem ............................... -- Static Method: OUT = nottem () Average Monthly Temperatures at Nottingham, 1920-1939 Description ........... A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years. Format ...... ‘record’ Index of the record. ‘lead’ Leading indicator. ‘sales’ Sales volume. Source ...... Anderson, O. D. (1976). ‘Time Series Analysis and Forecasting: The Box-Jenkins approach’. London: Butterworths. Series R. Examples ........ # TODO: Come up with example code here  File: tablicious.info, Node: tblish.dataset.npk, Next: tblish.dataset.occupationalStatus, Prev: tblish.dataset.nottem, Up: tblish.dataset 8.2.58.46 tblish.dataset.npk ............................ -- Static Method: OUT = npk () Classical N, P, K Factorial Experiment Description ........... A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots. Format ...... ‘block’ Which block (1 to 6). ‘N’ Indicator (0/1) for the application of nitrogen. ‘P’ Indicator (0/1) for the application of phosphate. ‘K’ Indicator (0/1) for the application of potassium. ‘yield’ Yield of peas, in pounds/plot. Plots were 1/70 acre. Source ...... Imperial College, London, M.Sc. exercise sheet. References .......... Venables, W. N. and Ripley, B. D. (2002). ‘Modern Applied Statistics with S’. Fourth edition. New York: Springer. Examples ........ t = tblish.dataset.npk; # TODO: Port aov() and LM to Octave  File: tablicious.info, Node: tblish.dataset.occupationalStatus, Next: tblish.dataset.Orange, Prev: tblish.dataset.npk, Up: tblish.dataset 8.2.58.47 tblish.dataset.occupationalStatus ........................................... -- Static Method: OUT = occupationalStatus () Occupational Status of Fathers and their Sons Description ........... Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status. Format ...... An 8-by-8 matrix of counts, with classifying fators ‘origin’ (father’s occupational status, levels 1:8) and ‘destination’ (son’s occupational status, levels 1:8). Source ...... Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. ‘J. Am. Stat. Assoc.’, 74 (367), 537–552. Examples ........ # TODO: Come up with example code here  File: tablicious.info, Node: tblish.dataset.Orange, Next: tblish.dataset.OrchardSprays, Prev: tblish.dataset.occupationalStatus, Up: tblish.dataset 8.2.58.48 tblish.dataset.Orange ............................... -- Static Method: OUT = Orange () Growth of Orange Trees Description ........... Records of the growth of orange trees. Format ...... ‘Tree’ A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter. ‘age’ Age of the tree (days since 1968-12-31). ‘circumference’ Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry. Source ...... The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at . References .......... Draper, N. R. and Smith, H. (1998). ‘Applied Regression Analysis (3rd ed)’. New York: Wiley. (exercise 24.N). Pinheiro, J. C. and Bates, D. M. (2000). ‘Mixed-effects Models in S and S-PLUS’. New York: Springer. Examples ........ t = tblish.dataset.Orange; # TODO: Port coplot to Octave # TODO: Linear model  File: tablicious.info, Node: tblish.dataset.OrchardSprays, Next: tblish.dataset.PlantGrowth, Prev: tblish.dataset.Orange, Up: tblish.dataset 8.2.58.49 tblish.dataset.OrchardSprays ...................................... -- Static Method: OUT = OrchardSprays () Potency of Orchard Sprays Description ........... An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design. Format ...... ‘rowpos’ Row of the design. ‘colpos’ Column of the design ‘treatment’ Treatment level. ‘decrease’ Response. Details ....... Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur. The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells. An 8 x 8 Latin square design was used and the treatments were coded as follows: A – highest level of lime sulphur B – next highest level of lime sulphur ... G – lowest level of lime sulphur H – no lime sulphur Source ...... Finney, D. J. (1947). ‘Probit Analysis’. Cambridge. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.OrchardSprays; tblish.examples.plot_pairs (t);  File: tablicious.info, Node: tblish.dataset.PlantGrowth, Next: tblish.dataset.precip, Prev: tblish.dataset.OrchardSprays, Up: tblish.dataset 8.2.58.50 tblish.dataset.PlantGrowth .................................... -- Static Method: OUT = PlantGrowth () Results from an Experiment on Plant Growth Description ........... Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions. Format ...... ‘group’ Treatment condition group. ‘weight’ Weight of plants. Source ...... Dobson, A. J. (1983). ‘An Introduction to Statistical Modelling’. London: Chapman and Hall. Examples ........ t = tblish.dataset.PlantGrowth; # TODO: Port anova to Octave  File: tablicious.info, Node: tblish.dataset.precip, Next: tblish.dataset.presidents, Prev: tblish.dataset.PlantGrowth, Up: tblish.dataset 8.2.58.51 tblish.dataset.precip ............................... -- Static Method: OUT = precip () Annual Precipitation in US Cities Description ........... The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities. Format ...... ‘city’ City observed. ‘precip’ Annual precipitation (in). Source ...... ‘Statistical Abstracts of the United States’, 1975. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.precip; # TODO: Port dot plot to Octave  File: tablicious.info, Node: tblish.dataset.presidents, Next: tblish.dataset.pressure, Prev: tblish.dataset.precip, Up: tblish.dataset 8.2.58.52 tblish.dataset.presidents ................................... -- Static Method: OUT = presidents () Quarterly Approval Ratings of US Presidents Description ........... The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974. Format ...... ‘date’ Approximate date of the observation. ‘approval’ Approval rating (%). Details ....... The data are actually a fudged version of the approval ratings. See McNeil’s book for details. Source ...... The Gallup Organisation. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.presidents; figure plot (datenum (t.date), t.approval) datetick ("x") xlabel ("Date") ylabel ("Approval rating (%)") title ("presidents data")  File: tablicious.info, Node: tblish.dataset.pressure, Next: tblish.dataset.Puromycin, Prev: tblish.dataset.presidents, Up: tblish.dataset 8.2.58.53 tblish.dataset.pressure ................................. -- Static Method: OUT = pressure () Vapor Pressure of Mercury as a Function of Temperature Description ........... Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury). Format ...... ‘temperature’ Temperature (deg C). ‘pressure’ Pressure (mm Hg). Source ...... Weast, R. C., ed. (1973). ‘Handbook of Chemistry and Physics’. Cleveland: CRC Press. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.pressure; figure plot (t.temperature, t.pressure) xlabel ("Temperature (deg C)") ylabel ("Pressure (mm of Hg)") title ("pressure data: Vapor Pressure of Mercury") figure semilogy (t.temperature, t.pressure) xlabel ("Temperature (deg C)") ylabel ("Pressure (mm of Hg)") title ("pressure data: Vapor Pressure of Mercury")  File: tablicious.info, Node: tblish.dataset.Puromycin, Next: tblish.dataset.quakes, Prev: tblish.dataset.pressure, Up: tblish.dataset 8.2.58.54 tblish.dataset.Puromycin .................................. -- Static Method: OUT = Puromycin () Reaction Velocity of an Enzymatic Reaction Description ........... Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin. Format ...... ‘state’ Whether the cell was treated. ‘conc’ Substrate concentrations (ppm). ‘rate’ Instantaneous reaction rates (counts/min/min). Details ....... Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated. Source ...... The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at . References .......... Bates, D.M. and Watts, D.G. (1988). ‘Nonlinear Regression Analysis and Its Applications’. New York: Wiley. Appendix A1.3. Treloar, M. A. (1974). ‘Effects of Puromycin on Galactosyltransferase in Golgi Membranes’. M.Sc. Thesis, U. of Toronto. Examples ........ t = tblish.dataset.Puromycin; # TODO: Port example to Octave  File: tablicious.info, Node: tblish.dataset.quakes, Next: tblish.dataset.randu, Prev: tblish.dataset.Puromycin, Up: tblish.dataset 8.2.58.55 tblish.dataset.quakes ............................... -- Static Method: OUT = quakes () Locations of Earthquakes off Fiji Description ........... The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964. Format ...... ‘lat’ Latitude of event. ‘long’ Longitude of event. ‘depth’ Depth (km). ‘mag’ Richter magnitude. ‘stations’ Number of stations reporting. Details ....... There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations. Source ...... This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University. References .......... G. E. P. Box and G. M. Jenkins (1976). ‘Time Series Analysis, Forecasting and Control’. San Francisco: Holden-Day. p. 537. P. J. Brockwell and R. A. Davis (1991). ‘Time Series: Theory and Methods’. Second edition. New York: Springer-Verlag. p. 414. Examples ........ # TODO: Come up with example code here  File: tablicious.info, Node: tblish.dataset.randu, Next: tblish.dataset.rivers, Prev: tblish.dataset.quakes, Up: tblish.dataset 8.2.58.56 tblish.dataset.randu .............................. -- Static Method: OUT = randu () Random Numbers from Congruential Generator RANDU Description ........... 400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5. Format ...... ‘record’ Index of the record. ‘x’ X value of the triple. ‘y’ Y value of the triple. ‘z’ Z value of the triple. Details ....... In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator. These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places. Under VMS versions 2.0 and higher, this problem has been fixed. Source ...... David Donoho Examples ........ t = tblish.dataset.randu;  File: tablicious.info, Node: tblish.dataset.rivers, Next: tblish.dataset.rock, Prev: tblish.dataset.randu, Up: tblish.dataset 8.2.58.57 tblish.dataset.rivers ............................... -- Static Method: OUT = rivers () Lengths of Major North American Rivers Description ........... This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey. Format ...... ‘rivers’ A vector containing 141 observations. Source ...... ‘World Almanac and Book of Facts’, 1975, page 406. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ tblish.dataset.rivers; longest_river = max (rivers) shortest_river = min (rivers)  File: tablicious.info, Node: tblish.dataset.rock, Next: tblish.dataset.sleep, Prev: tblish.dataset.rivers, Up: tblish.dataset 8.2.58.58 tblish.dataset.rock ............................. -- Static Method: OUT = rock () Measurements on Petroleum Rock Samples Description ........... Measurements on 48 rock samples from a petroleum reservoir. Format ...... ‘area’ Area of pores space, in pixels out of 256 by 256. ‘peri’ Perimeter in pixels. ‘shape’ Perimeter/sqrt(area). ‘perm’ Permeability in milli-Darcies. Details ....... Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape. Source ...... Data from BP Research, image analysis by Ronit Katz, U. Oxford. Examples ........ t = tblish.dataset.rock; figure scatter (t.area, t.perm) xlabel ("Area of pores space (pixels out of 256x256)") ylabel ("Permeability (milli-Darcies)")  File: tablicious.info, Node: tblish.dataset.sleep, Next: tblish.dataset.stackloss, Prev: tblish.dataset.rock, Up: tblish.dataset 8.2.58.59 tblish.dataset.sleep .............................. -- Static Method: OUT = sleep () Student’s Sleep Data Description ........... Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients. Format ...... ‘id’ Patient ID. ‘group’ Drug given. ‘extra’ Increase in hours of sleep. Details ....... The ‘group’ variable name may be misleading about the data: They represent measurements on 10 persons, not in groups. Source ...... Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. ‘The Journal of Physiology’, 32, 501–510. Student (1908). The probable error of the mean. ‘Biometrika’, 6, 20. References .......... Scheffé, Henry (1959). ‘The Analysis of Variance’. New York, NY: Wiley. Examples ........ t = tblish.dataset.sleep; # TODO: Port to Octave  File: tablicious.info, Node: tblish.dataset.stackloss, Next: tblish.dataset.state, Prev: tblish.dataset.sleep, Up: tblish.dataset 8.2.58.60 tblish.dataset.stackloss .................................. -- Static Method: OUT = stackloss () Brownlee's Stack Loss Plant Data Description ........... Operational data of a plant for the oxidation of ammonia to nitric acid. Format ...... ‘AirFlow’ Flow of cooling air. ‘WaterTemp’ Cooling Water Inlet temperature. ‘AcidConc’ Concentration of acid (per 1000, minus 500). ‘StackLoss’ Stack loss Details ....... “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.) ‘AirFlow’ represents the rate of operation of the plant. ‘WaterTemp’ is the temperature of cooling water circulated through coils in the absorption tower. ‘AcidConc’ is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. ‘StackLoss’ (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant. Source ...... Brownlee, K. A. (1960, 2nd ed. 1965). ‘Statistical Theory and Methodology in Science and Engineering’. New York: Wiley. pp. 491–500. References .......... Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). ‘The New S Language’. Monterey: Wadsworth & Brooks/Cole. Dodge, Y. (1996). The guinea pig of multiple regression. In: ‘Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday’, 1996, ‘Lecture Notes in Statistics’ 109, Springer-Verlag, New York. Examples ........ t = tblish.dataset.stackloss; # TODO: Create linear model and print summary  File: tablicious.info, Node: tblish.dataset.state, Next: tblish.dataset.sunspot_month, Prev: tblish.dataset.stackloss, Up: tblish.dataset 8.2.58.61 tblish.dataset.state .............................. -- Static Method: OUT = state () US State Facts and Figures Description ........... Data related to the 50 states of the United States of America. Format ...... ‘abb’ State abbreviation. ‘name’ State name. ‘area’ Area (sq mi). ‘lat’ Approximate center (latitude). ‘lon’ Approximate center (longitude). ‘division’ State division. ‘revion’ State region. ‘Population’ Population estimate as of July 1, 1975. ‘Income’ Per capita income (1974). ‘Illiteracy’ Illiteracy as of 1970 (percent of population). ‘LifeExp’ Lfe expectancy in years (1969-71). ‘Murder’ Murder and non-negligent manslaughter rate per 100,000 population (1976). ‘HSGrad’ Percent high-school graduates (1970). ‘Frost’ Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city. Source ...... U.S. Department of Commerce, Bureau of the Census (1977) ‘Statistical Abstract of the United States’. U.S. Department of Commerce, Bureau of the Census (1977) ‘County and City Data Book’. References .......... Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). ‘The New S Language’. Monterey: Wadsworth & Brooks/Cole. Examples ........ t = tblish.dataset.state;  File: tablicious.info, Node: tblish.dataset.sunspot_month, Next: tblish.dataset.sunspot_year, Prev: tblish.dataset.state, Up: tblish.dataset 8.2.58.62 tblish.dataset.sunspot_month ...................................... -- Static Method: OUT = sunspot_month () Monthly Sunspot Data, from 1749 to “Present” Description ........... Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available. Format ...... ‘month’ Month of the observation. ‘sunspots’ Number of sunspots. Source ...... WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at . Examples ........ t = tblish.dataset.sunspot_month;  File: tablicious.info, Node: tblish.dataset.sunspot_year, Next: tblish.dataset.sunspots, Prev: tblish.dataset.sunspot_month, Up: tblish.dataset 8.2.58.63 tblish.dataset.sunspot_year ..................................... -- Static Method: OUT = sunspot_year () Yearly Sunspot Data, 1700-1988 Description ........... Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit). Format ...... ‘year’ Year of the observation. ‘sunspots’ Number of sunspots. Source ...... H. Tong (1996) ‘Non-Linear Time Series’. Clarendon Press, Oxford, p. 471. Examples ........ t = tblish.dataset.sunspot_year; figure plot (t.year, t.sunspots) xlabel ("Year") ylabel ("Sunspots")  File: tablicious.info, Node: tblish.dataset.sunspots, Next: tblish.dataset.swiss, Prev: tblish.dataset.sunspot_year, Up: tblish.dataset 8.2.58.64 tblish.dataset.sunspots ................................. -- Static Method: OUT = sunspots () Monthly Sunspot Numbers, 1749-1983 Description ........... Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory. Format ...... ‘month’ Month of the observation. ‘sunspots’ Number of observed sunspots. Source ...... Andrews, D. F. and Herzberg, A. M. (1985) ‘Data: A Collection of Problems from Many Fields for the Student and Research Worker’. New York: Springer-Verlag. Examples ........ t = tblish.dataset.sunspots; figure plot (datenum (t.month), t.sunspots) datetick ("x") xlabel ("Date") ylabel ("Monthly sunspot numbers") title ("sunspots data")  File: tablicious.info, Node: tblish.dataset.swiss, Next: tblish.dataset.Theoph, Prev: tblish.dataset.sunspots, Up: tblish.dataset 8.2.58.65 tblish.dataset.swiss .............................. -- Static Method: OUT = swiss () Swiss Fertility and Socioeconomic Indicators (1888) Data Description ........... Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888. Format ...... ‘Fertility’ Ig, ‘common standardized fertility measure’. ‘Agriculture’ % of males involved in agriculture as occupation. ‘Examination’ % draftees receiving highest mark on army examination. ‘Education’ % education beyond primary school for draftees. ‘Catholic’ % ‘Catholic’ (as opposed to ‘Protestant’). ‘InfantMortality’ Live births who live less than 1 year. All variables but ‘Fertility’ give proportions of the population. Source ...... (paraphrasing Mosteller and Tukey): Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries. The data collected are for 47 French-speaking “provinces” at about 1888. Here, all variables are scaled to [0, 100], where in the original, all but ‘Catholic’ were scaled to [0, 1]. Note .... Files for all 182 districts in 1888 and other years have been available at . They state that variables ‘Examination’ and ‘Education’ are averages for 1887, 1888 and 1889. References .......... Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). ‘The New S Language’. Monterey: Wadsworth & Brooks/Cole. Examples ........ t = tblish.dataset.swiss; # TODO: Port linear model to Octave  File: tablicious.info, Node: tblish.dataset.Theoph, Next: tblish.dataset.Titanic, Prev: tblish.dataset.swiss, Up: tblish.dataset 8.2.58.66 tblish.dataset.Theoph ............................... -- Static Method: OUT = Theoph () Pharmacokinetics of Theophylline Description ........... An experiment on the pharmacokinetics of theophylline. Format ...... ‘Subject’ Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed. ‘Wt’ Weight of the subject (kg). ‘Dose’ Dose of theophylline administerred orally to the subject (mg/kg). ‘Time’ Time since drug administration when the sample was drawn (hr). ‘conc’ Theophylline concentration in the sample (mg/L). Details ....... Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours. These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available. Source ...... The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at . References .......... Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). ‘NONMEM Users Guide: Part V’. NONMEM Project Group, University of California, San Francisco. Davidian, M. and Giltinan, D. M. (1995). ‘Nonlinear Models for Repeated Measurement Data’. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176) Pinheiro, J. C. and Bates, D. M. (2000). ‘Mixed-effects Models in S and S-PLUS’. New York: Springer. (Appendix A.29) Examples ........ t = tblish.dataset.Theoph; # TODO: Coplot # TODO: Yet another linear model to port to Octave  File: tablicious.info, Node: tblish.dataset.Titanic, Next: tblish.dataset.ToothGrowth, Prev: tblish.dataset.Theoph, Up: tblish.dataset 8.2.58.67 tblish.dataset.Titanic ................................ -- Static Method: OUT = Titanic () Survival of passengers on the Titanic Description ........... This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival. Format ...... ‘n’ is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables: ‘Class’ 1st, 2nd, 3rd, Cre. ‘Sex’ Male, Female. ‘Age’ Child, Adult. ‘Survived’ No, Yes. Details ....... The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger. These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost. Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (). Source ...... Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. ‘Journal of Statistics Education’, 3. The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in: British Board of Trade (1990). ‘Report on the Loss of the ‘Titanic’ (S.S.)’. British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing. Examples ........ tblish.dataset.Titanic; # TODO: Port mosaic plot to Octave # TODO: Check for higher survival rates in children and females  File: tablicious.info, Node: tblish.dataset.ToothGrowth, Next: tblish.dataset.treering, Prev: tblish.dataset.Titanic, Up: tblish.dataset 8.2.58.68 tblish.dataset.ToothGrowth .................................... -- Static Method: OUT = ToothGrowth () The Effect of Vitamin C on Tooth Growth in Guinea Pigs Description ........... The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as ‘VC’). Format ...... ‘supp’ Supplement type. ‘dose’ Dose (mg/day). ‘len’ Tooth length. Source ...... C. I. Bliss (1952). ‘The Statistics of Bioassay’. Academic Press. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. ‘The Journal of Nutrition’, 33(5), 491–504. Examples ........ t = tblish.dataset.ToothGrowth; tblish.examples.coplot (t, "dose", "len", "supp"); # TODO: Port Lowess smoothing to Octave  File: tablicious.info, Node: tblish.dataset.treering, Next: tblish.dataset.trees, Prev: tblish.dataset.ToothGrowth, Up: tblish.dataset 8.2.58.69 tblish.dataset.treering ................................. -- Static Method: OUT = treering () Yearly Treering Data, -6000-1979 Description ........... Contains normalized tree-ring widths in dimensionless units. Format ...... A univariate time series with 7981 observations. Each tree ring corresponds to one year. Details ....... The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California. Source ...... Time Series Data Library: , series ‘CA535.DAT’. References .......... For some photos of Methuselah Walk see . Examples ........ t = tblish.dataset.treering;  File: tablicious.info, Node: tblish.dataset.trees, Next: tblish.dataset.UCBAdmissions, Prev: tblish.dataset.treering, Up: tblish.dataset 8.2.58.70 tblish.dataset.trees .............................. -- Static Method: OUT = trees () Diameter, Height and Volume for Black Cherry Trees Description ........... This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground. Format ...... ‘Girth’ Tree diameter (rather than girth, actually) in inches. ‘Height’ Height in ft. ‘Volume’ Volume of timber in cubic feet. Source ...... Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). ‘The Minitab Student Handbook’. Duxbury Press. References .......... Atkinson, A. C. (1985). ‘Plots, Transformations and Regression’. Oxford: Oxford University Press. Examples ........ t = tblish.dataset.trees; figure tblish.examples.plot_pairs (t); figure loglog (t.Girth, t.Volume) xlabel ("Girth") ylabel ("Volume") # TODO: Transform to log space for the coplot # TODO: Linear model  File: tablicious.info, Node: tblish.dataset.UCBAdmissions, Next: tblish.dataset.UKDriverDeaths, Prev: tblish.dataset.trees, Up: tblish.dataset 8.2.58.71 tblish.dataset.UCBAdmissions ...................................... -- Static Method: OUT = UCBAdmissions () Student Admissions at UC Berkeley Description ........... Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex. Format ...... A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows: ‘Admit’ Admitted, Rejected. ‘Gender’ Male, Female. ‘Dept’ A, B, C, D, E, F. Details ....... This data set is frequently used for illustrating Simpson's paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates). Source ...... The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at . References .......... Bickel, P. J., Hammel, E. A., and O'Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. ‘Science’, 187, 398–403. . Examples ........ tblish.dataset.UCBAdmissions; # TODO: Port mosaic plot to Octave  File: tablicious.info, Node: tblish.dataset.UKDriverDeaths, Next: tblish.dataset.UKgas, Prev: tblish.dataset.UCBAdmissions, Up: tblish.dataset 8.2.58.72 tblish.dataset.UKDriverDeaths ....................................... -- Static Method: OUT = UKDriverDeaths () Road Casualties in Great Britain 1969-84 Description ........... ‘UKDriverDeaths’ is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983. ‘Seatbelts’ is more information on the same problem. Format ...... ‘UKDriverDeaths’ is a table with the following variables: ‘month’ Month of the observation. ‘deaths’ Number of deaths. ‘Seatbelts’ is a table with the following variables: ‘month’ Month of the observation. ‘DriversKilled’ Car drivers killed. ‘drivers’ Same as ‘UKDriverDeaths’ ‘deaths’ count. ‘front’ Front-seat passengers killed or seriously injured. ‘rear’ Rear-seat passengers killed or seriously injured. ‘kms’ Distance driven. ‘PetrolPrice’ Petrol price. ‘VanKilled’ Number of van (“light goods vehicle”) drivers killed. ‘law’ 0/1: was the seatbelt law in effect that month? Source ...... Harvey, A.C. (1989). ‘Forecasting, Structural Time Series Models and the Kalman Filter’. Cambridge: Cambridge University Press. pp. 519–523. Durbin, J. and Koopman, S. J. (2001). ‘Time Series Analysis by State Space Methods’. Oxford: Oxford University Press. References .......... Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. ‘Journal of the Royal Statistical Society’ series A, 149, 187–227. Examples ........ tblish.dataset.UKDriverDeaths; d = UKDriverDeaths; s = Seatbelts; # TODO: Port the model and plots to Octave  File: tablicious.info, Node: tblish.dataset.UKgas, Next: tblish.dataset.UKLungDeaths, Prev: tblish.dataset.UKDriverDeaths, Up: tblish.dataset 8.2.58.73 tblish.dataset.UKgas .............................. -- Static Method: OUT = UKgas () UK Quarterly Gas Consumption Description ........... Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms. Format ...... ‘date’ Quarter of the observation ‘gas’ Gas consumption (MM therms). Source ...... Durbin, J. and Koopman, S. J. (2001). ‘Time Series Analysis by State Space Methods’. Oxford: Oxford University Press. . Examples ........ t = tblish.dataset.UKgas; plot (datenum (t.date), t.gas); datetick ("x") xlabel ("Month") ylabel ("Gas consumption (MM therms)")  File: tablicious.info, Node: tblish.dataset.UKLungDeaths, Next: tblish.dataset.USAccDeaths, Prev: tblish.dataset.UKgas, Up: tblish.dataset 8.2.58.74 tblish.dataset.UKLungDeaths ..................................... -- Static Method: OUT = UKLungDeaths () Monthly Deaths from Lung Diseases in the UK Description ........... Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979. Format ...... ‘date’ Month of the observation. ‘ldeaths’ Total lung deaths. ‘fdeaths’ Lung deaths among females. ‘mdeaths’ Lung deaths among males. Source ...... P. J. Diggle (1990). ‘Time Series: A Biostatistical Introduction’. Oxford. table A.3 Examples ........ t = tblish.dataset.UKLungDeaths; figure plot (datenum (t.date), t.ldeaths); title ("Total UK Lung Deaths") xlabel ("Month") ylabel ("Deaths") figure plot (datenum (t.date), [t.fdeaths t.mdeaths]); title ("UK Lung Deaths buy sex") legend ({"Female", "Male"}) xlabel ("Month") ylabel ("Deaths")  File: tablicious.info, Node: tblish.dataset.USAccDeaths, Next: tblish.dataset.USArrests, Prev: tblish.dataset.UKLungDeaths, Up: tblish.dataset 8.2.58.75 tblish.dataset.USAccDeaths .................................... -- Static Method: OUT = USAccDeaths () Accidental Deaths in the US 1973-1978 Description ........... A time series giving the monthly totals of accidental deaths in the USA. Format ...... ‘month’ Month of the observation. ‘deaths’ Accidental deaths. Source ...... Brockwell, P. J. and Davis, R. A. (1991). ‘Time Series: Theory and Methods’. New York: Springer. Examples ........ t = tblish.dataset.USAccDeaths;  File: tablicious.info, Node: tblish.dataset.USArrests, Next: tblish.dataset.USJudgeRatings, Prev: tblish.dataset.USAccDeaths, Up: tblish.dataset 8.2.58.76 tblish.dataset.USArrests .................................. -- Static Method: OUT = USArrests () Violent Crime Rates by US State Description ........... This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas. Format ...... ‘State’ State name. ‘Murder’ Murder arrests (per 100,000). ‘Assault’ Assault arrests (per 100,000). ‘UrbanPop’ Percent urban population. ‘Rape’ Rape arrests (per 100,000). Note .... ‘USArrests’ contains the data as in McNeil's monograph. For the ‘UrbanPop’ percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona). See the example below on how to correct the error and improve accuracy for the ‘.5’ percentages. Source ...... ‘World Almanac and Book of Facts 1975’. (Crime rates). ‘Statistical Abstracts of the United States 1975’, p.20, (Urban rates), possibly available as . References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.USArrests; summary (t); tblish.examples.plot_pairs (t(:,2:end)); # TODO: Difference between USArrests and its correction # TODO: +/- 0.5 to restore the original .5 percentages  File: tablicious.info, Node: tblish.dataset.USJudgeRatings, Next: tblish.dataset.USPersonalExpenditure, Prev: tblish.dataset.USArrests, Up: tblish.dataset 8.2.58.77 tblish.dataset.USJudgeRatings ....................................... -- Static Method: OUT = USJudgeRatings () Lawyers’ Ratings of State Judges in the US Superior Court Description ........... Lawyers’ ratings of state judges in the US Superior Court. Format ...... ‘CONT’ Number of contacts of lawyer with judge. ‘INTG’ Judicial integrity. ‘DMNR’ Demeanor. ‘DILG’ Diligence. ‘CFMG’ Case flow managing. ‘DECI’ Prompt decisions. ‘PREP’ Preparation for trial. ‘FAMI’ Familiarity with law. ‘ORAL’ Sound oral rulings. ‘WRIT’ Sound written rulings. ‘PHYS’ Physical ability. ‘RTEN’ Worthy of retention. Source ...... New Haven Register, 14 January, 1977 (from John Hartigan). Examples ........ t = tblish.dataset.USJudgeRatings; figure tblish.examples.plot_pairs (t(:,2:end)); title ("USJudgeRatings data")  File: tablicious.info, Node: tblish.dataset.USPersonalExpenditure, Next: tblish.dataset.uspop, Prev: tblish.dataset.USJudgeRatings, Up: tblish.dataset 8.2.58.78 tblish.dataset.USPersonalExpenditure .............................................. -- Static Method: OUT = USPersonalExpenditure () Personal Expenditure Data Description ........... This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960. Format ...... A 2-dimensional matrix ‘x’ with Category along dimension 1 and Year along dimension 2. Source ...... ‘The World Almanac and Book of Facts’, 1962, page 756. References .......... Tukey, J. W. (1977). ‘Exploratory Data Analysis’. Reading, Mass: Addison-Wesley. McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ tblish.dataset.USPersonalExpenditure; # TODO: Port medpolish() from R, whatever that is.  File: tablicious.info, Node: tblish.dataset.uspop, Next: tblish.dataset.VADeaths, Prev: tblish.dataset.USPersonalExpenditure, Up: tblish.dataset 8.2.58.79 tblish.dataset.uspop .............................. -- Static Method: OUT = uspop () Populations Recorded by the US Census Description ........... This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970. Format ...... ‘year’ Year of the census. ‘population’ Population, in millions. Source ...... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.uspop; figure semilogy (t.year, t.population) xlabel ("Year") ylabel ("U.S. Population (millions)")  File: tablicious.info, Node: tblish.dataset.VADeaths, Next: tblish.dataset.volcano, Prev: tblish.dataset.uspop, Up: tblish.dataset 8.2.58.80 tblish.dataset.VADeaths ................................. -- Static Method: OUT = VADeaths () Death Rates in Virginia (1940) Description ........... Death rates per 1000 in Virginia in 1940. Format ...... A 2-dimensional matrix ‘deaths’, with age group along dimension 1 and demographic group along dimension 2. Details ....... The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female. This provides a rather nice 3-way analysis of variance example. Source ...... Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. ‘American Sociological Review’, 12, 525–535. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ tblish.dataset.VADeaths; # TODO: Port to Octave  File: tablicious.info, Node: tblish.dataset.volcano, Next: tblish.dataset.warpbreaks, Prev: tblish.dataset.VADeaths, Up: tblish.dataset 8.2.58.81 tblish.dataset.volcano ................................ -- Static Method: OUT = volcano () Topographic Information on Auckland’s Maunga Whau Volcano Description ........... Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid. Format ...... A matrix ‘volcano’ with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north. Source ...... Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate. References .......... Box, G. E. P. and Jenkins, G. M. (1976). ‘Time Series Analysis, Forecasting and Control’. San Francisco: Holden-Day. p. 537. Brockwell, P. J. and Davis, R. A. (1991). ‘Time Series: Theory and Methods’. Second edition. New York: Springer-Verlag. p. 414. Examples ........ tblish.dataset.volcano; # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot # should be fine. And then maybe do a 3-d mesh plot.  File: tablicious.info, Node: tblish.dataset.warpbreaks, Next: tblish.dataset.women, Prev: tblish.dataset.volcano, Up: tblish.dataset 8.2.58.82 tblish.dataset.warpbreaks ................................... -- Static Method: OUT = warpbreaks () The Number of Breaks in Yarn during Weaving Description ........... This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn. Format ...... ‘wool’ Type of wool (A or B). ‘tension’ The level of tension (L, M, H). ‘breaks’ Number of breaks. There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH). Source ...... Tippett, L. H. C. (1950). ‘Technological Applications of Statistics’. New York: Wiley. Page 106. References .......... Tukey, J. W. (1977). ‘Exploratory Data Analysis’. Reading, Mass: Addison-Wesley. McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.warpbreaks; summary (t) # TODO: Port the plotting code and OPAR to Octave  File: tablicious.info, Node: tblish.dataset.women, Next: tblish.dataset.WorldPhones, Prev: tblish.dataset.warpbreaks, Up: tblish.dataset 8.2.58.83 tblish.dataset.women .............................. -- Static Method: OUT = women () Average Heights and Weights for American Women Description ........... This data set gives the average heights and weights for American women aged 30–39. Format ...... ‘height’ Height (in). ‘weight’ Weight (lbs). Details ....... The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year. The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”. Source ...... ‘The World Almanac and Book of Facts’, 1975. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ t = tblish.dataset.women; figure scatter (t.height, t.weight) xlabel ("Height (in)") ylabel ("Weight (lb") title ("women data: American women aged 30-39")  File: tablicious.info, Node: tblish.dataset.WorldPhones, Next: tblish.dataset.WWWusage, Prev: tblish.dataset.women, Up: tblish.dataset 8.2.58.84 tblish.dataset.WorldPhones .................................... -- Static Method: OUT = WorldPhones () The World’s Telephones Description ........... The number of telephones in various regions of the world (in thousands). Format ...... A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year. The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America. The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961. Source ...... AT&T (1961) ‘The World’s Telephones’. References .......... McNeil, D. R. (1977). ‘Interactive Data Analysis’. New York: Wiley. Examples ........ tblish.dataset.WorldPhones; # TODO: Port matplot() to Octave  File: tablicious.info, Node: tblish.dataset.WWWusage, Next: tblish.dataset.zCO2, Prev: tblish.dataset.WorldPhones, Up: tblish.dataset 8.2.58.85 tblish.dataset.WWWusage ................................. -- Static Method: OUT = WWWusage () WWWusage Description ........... A time series of the numbers of users connected to the Internet through a server every minute. Format ...... A time series of length 100. Source ...... Durbin, J. and Koopman, S. J. (2001). ‘Time Series Analysis by State Space Methods’. Oxford: Oxford University Press. References .......... Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). ‘Forecasting: Methods and Applications’. New York: Wiley. Examples ........ # TODO: Come up with example code here  File: tablicious.info, Node: tblish.dataset.zCO2, Prev: tblish.dataset.WWWusage, Up: tblish.dataset 8.2.58.86 tblish.dataset.zCO2 ............................. -- Static Method: OUT = zCO2 () Carbon Dioxide Uptake in Grass Plants Description ........... The ‘CO2’ data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli. Format ...... Details ....... The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted. Source ...... Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. ‘Ecology’, 71, 1389–1400. Pinheiro, J. C. and Bates, D. M. (2000). ‘Mixed-effects Models in S and S-PLUS’. New York: Springer. Examples ........ t = tblish.dataset.zCO2; # TODO: Coplot # TODO: Port the linear model to Octave  File: tablicious.info, Node: tblish.datasets, Next: tblish.evalWithTableVars, Prev: tblish.dataset, Up: API Alphabetically 8.2.59 tblish.datasets ---------------------- -- Class: tblish.datasets Example dataset collection. ‘tblish.datasets’ is a collection of example datasets to go with the Tablicious package. The ‘tblish.datasets’ class provides methods for listing and loading the example datasets. * Menu: * datasets.description:: * datasets.list:: * datasets.load::  File: tablicious.info, Node: datasets.description, Next: datasets.list, Up: tblish.datasets 8.2.59.1 datasets.description ............................. -- Static Method: description (DATASETNAME) -- Static Method: OUT = description (DATASETNAME) Get or display the description for a dataset. Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.  File: tablicious.info, Node: datasets.list, Next: datasets.load, Prev: datasets.description, Up: tblish.datasets 8.2.59.2 datasets.list ...................... -- Static Method: list () -- Static Method: OUT = list () List all datasets. Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list. Returns a table with variables Name, Description, and possibly more.  File: tablicious.info, Node: datasets.load, Prev: datasets.list, Up: tblish.datasets 8.2.59.3 datasets.load ...................... -- Static Method: load (DATASETNAME) -- Static Method: OUT = load (DATASETNAME) Load a specified dataset. DATASETNAME is the name of the dataset to load, as found in the ‘Name’ column of the dataset list.  File: tablicious.info, Node: tblish.evalWithTableVars, Next: tblish.examples.coplot, Prev: tblish.datasets, Up: API Alphabetically 8.2.60 tblish.evalWithTableVars ------------------------------- -- Function: OUT = tblish.evalWithTableVars (TBL, EXPR) Evaluate an expression against a table array’s variables. Evaluates the M-code expression EXPR in a workspace where all of TBL’s variables have been assigned to workspace variables. EXPR is a charvec containing an Octave expression. As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names. Returns the result of the evaluation. Examples: [s,p,sp] = tblish.examples.SpDb tmp = join (sp, p); shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight") See also: *note table.restrict::  File: tablicious.info, Node: tblish.examples.coplot, Next: tblish.examples.plot_pairs, Prev: tblish.evalWithTableVars, Up: API Alphabetically 8.2.61 tblish.examples.coplot ----------------------------- -- Function: [FIG, HAX] = tblish.examples.coplot (TBL, XVAR, YVAR, GVAR) -- Function: [FIG, HAX] = tblish.examples.coplot (FIG, TBL, XVAR, YVAR, GVAR) -- Function: [FIG, HAX] = tblish.examples.coplot (..., OPTIONNAME, OPTIONVALUE, ...) Conditioning plot. ‘tblish.examples.coplot’ produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot. TBL is a ‘table’ containing the data to plot. XVAR is the name of the table variable within TBL to use as the X values. May be a variable name or index. YVAR is the name of the table variable within TBL to use as the Y values. May be a variable name or index. GVAR is the name of the table variable or variables within TBL to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. GVAR may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored. FIG is the figure handle to plot into. If FIG is not provided, a new figure is created. Name/Value options: ‘PlotFcn’ The plotting function to use, supplied as a function handle. Defaults to ‘@plot’. It must be a function that provides the signature ‘fcn(hax, X, Y, ...)’. ‘PlotArgs’ A cell array of arguments to pass in to the plotting function, following the HAX, X, and Y arguments. Returns: FIG – the figure handle it plotted into HAX – array of axes handles to all the axes for the subplots  File: tablicious.info, Node: tblish.examples.plot_pairs, Next: tblish.examples.SpDb, Prev: tblish.examples.coplot, Up: API Alphabetically 8.2.62 tblish.examples.plot_pairs --------------------------------- -- Function: OUT = tblish.examples.plot_pairs (DATA) -- Function: OUT = tblish.examples.plot_pairs (DATA, PLOT_TYPE) -- Function: OUT = tblish.examples.plot_pairs (FIG, ...) Plot pairs of variables against each other. DATA is the data holding the variables to plot. It may be either a ‘table’ or a struct. Each variable or field in the ‘table’ or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size. PLOT_TYPE is a charvec indicating what plot type to do in each subplot. (‘"scatter"’ is the default.) Valid PLOT_TYPE values are: ‘"scatter"’ A plain scatter plot. ‘"smooth"’ A scatter plot + fitted line, like R's ‘panel.smooth’ does. FIG is an optional figure handle to plot into. If omitted, a new figure is created. Returns the created figure, if the output is captured.  File: tablicious.info, Node: tblish.examples.SpDb, Next: tblish.sizeof2, Prev: tblish.examples.plot_pairs, Up: API Alphabetically 8.2.63 tblish.examples.SpDb --------------------------- -- Function: SPDB = tblish.examples.SpDb () -- Function: [S, P, SP] = tblish.examples.SpDb () The classic Suppliers-Parts example database. Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date's "An Introduction to Database Systems" textbook. Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (S, P, SP).  File: tablicious.info, Node: tblish.sizeof2, Next: tblish.table.grpstats, Prev: tblish.examples.SpDb, Up: API Alphabetically 8.2.64 tblish.sizeof2 --------------------- -- Function: OUT = tblish.sizeof2 (X) Approximate size of an array in bytes, with object support. This is an alternative to Octave's ‘sizeof’ function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions. This may be supplemented or replaced by ‘sizeof’ override methods on Tablicious's classes. I'm not sure whether Octave's ‘sizeof’ supports extension by method overrides, so I'm not doing that yet. If that happens, this ‘sizeof2’ function will stick around in a deprecated state for a while, and it will respect those override methods. For tables, this returns the sum of ‘sizeof’ for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in OBJ. This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious's objects to a separate function. This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases. X is an array of any type. Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported. See also: sizeof  File: tablicious.info, Node: tblish.table.grpstats, Next: timezones, Prev: tblish.sizeof2, Up: API Alphabetically 8.2.65 tblish.table.grpstats ---------------------------- -- Function: [OUT] = tblish.table.grpstats (TBL, GROUPVAR) -- Function: [OUT] = tblish.table.grpstats (..., 'DataVars', DATAVARS) Statistics by group for a table array. This is a table-specific implementation of ‘grpstats’ that works on table arrays. It is supplied as a function in the +TBLISH package to avoid colliding with the global ‘grpstats’ function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its ‘grpstats’ function. This function is supplied as an alternative you can use in an environment where ‘table’ arrays are not supported by the ‘grpstats’ that you have, though you need to make code changes and call it as ‘tblish.table.grpstats(tbl)’ instead of with a plain ‘grpstats(tbl)’. See also: table.groupby, table.findgroups, table.splitapply  File: tablicious.info, Node: timezones, Next: todatetime, Prev: tblish.table.grpstats, Up: API Alphabetically 8.2.66 timezones ---------------- -- Function: OUT = timezones () -- Function: OUT = timezones (AREA) List all the time zones defined on this system. This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from ‘/usr/share/zoneinfo’. On Windows, it will be the database redistributed with the Tablicious package. If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors: ‘Name’ The IANA zone name, as cellstr. ‘Area’ The geographical area the zone is in, as cellstr. Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.  File: tablicious.info, Node: todatetime, Next: vartype, Prev: timezones, Up: API Alphabetically 8.2.67 todatetime ----------------- -- Function: OUT = todatetime (X) Convert input to a Tablicious datetime array, with convenient interface. This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious's author likes better. This mainly exists because datetime's constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab's interface.) I think that's less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that's not the same size as the input. Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".  File: tablicious.info, Node: vartype, Next: vecfun, Prev: todatetime, Up: API Alphabetically 8.2.68 vartype -------------- -- Function: OUT = vartype (TYPE) Filter by variable type for use in suscripting. Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type. TYPE is the name of a type as charvec. This may be anything that the ‘isa’ function accepts, or ‘'cellstr'’ to select cellstrs, as determined by ‘iscellstr’. Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a ‘table’ object.  File: tablicious.info, Node: vecfun, Next: years, Prev: vartype, Up: API Alphabetically 8.2.69 vecfun ------------- -- Function: OUT = vecfun (FCN, X, DIM) Apply function to vectors in array along arbitrary dimension. This function is not implemented yet. Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension. FCN is a function handle to apply. X is an array of arbitrary type which is to be sliced and passed in to FCN. DIM is the dimension along which the vector slices lay. Returns the collected output of the FCN calls, which will be the same size as X, but not necessarily the same type.  File: tablicious.info, Node: years, Prev: vecfun, Up: API Alphabetically 8.2.70 years ------------ -- Function File: OUT = years (X) Create a ‘duration’ X years long, or get the years in a ‘duration’ X. If input is numeric, returns a ‘duration’ array in units of fixed-length years of 365.2425 days each. If input is a ‘duration’, converts the ‘duration’ to a number of fixed-length years as double. Note: ‘years’ creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use ‘calyears’. *Note calyears::.  File: tablicious.info, Node: Copying, Prev: API Reference, Up: Top 9 Copying ********* 9.1 Package Copyright ===================== Tablicious for GNU Octave is covered by the GNU GPLv3 and other Free and Open Source Software licenses. The main code of Tablicious is licensed under the GNU GPL version 3 or later. Certain files in the build tools are licensed under the GNU GPL version 2 or later. This includes the ‘mktexi.pl’ and ‘OctTexiDoc.pm’ files in the ‘doc/’ directory. The tzinfo database file is Public Domain. The date/time portion of Tablicious includes some Unicode data files licensed under the Unicode License Agreement - Data Files and Software license. The Tablicious test suite contains some files, specifically some table-related tests using MP-Test like ‘t/t_01_table.m’, which are BSD 3-Clause licensed, and are adapted from MATPOWER written by Ray Zimmerman. The Fisher Iris dataset is Public Domain. 9.2 Manual Copyright ==================== This manual is for Tablicious, version 0.4.7. Copyright © 2019, 2023, 2024, 2025, 2026 Andrew Janke Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions.  Tag Table: Node: Top924 Node: Introduction1323 Node: Getting Started2693 Node: Table Representation3505 Node: Table Construction5064 Node: Tables vs SQL6293 Node: Date and Time Representation8241 Node: datetime Class8788 Node: Datenum Compatibility9752 Node: Time Zones11284 Node: Defined Time Zones14145 Node: Durations15142 Node: duration Class15324 Node: calendarDuration Class16081 Node: Validation Functions16990 Node: Example Data Sets19301 Node: Data Sets from R20742 Node: Missing Functionality21651 Node: API Reference23626 Node: API by Category23815 Node: API Alphabetically30295 Node: array2table34462 Node: caldays35375 Node: calendarDuration35950 Node: calendarDuration.calendarDuration36848 Node: calendarDuration.datevec37360 Node: calendarDuration.dispstrs38064 Node: calendarDuration.ismissing38414 Node: calendarDuration.isnan38805 Node: calendarDuration.minus39254 Node: calendarDuration.mtimes39601 Node: calendarDuration.plus40076 Node: calendarDuration.times40743 Node: calendarDuration.uminus41107 Node: calmonths41423 Node: calyears42012 Node: categorical42356 Node: categorical.addcats44690 Node: categorical.categorical45089 Node: categorical.categories46362 Node: categorical.cellstr46762 Node: categorical.dispstrs47205 Node: categorical.double47660 Node: categorical.iscategory48346 Node: categorical.ismissing48788 Node: categorical.isnanny49193 Node: categorical.isordinal49659 Node: categorical.isundefined50032 Node: categorical.mergecats50552 Node: categorical.missing51205 Node: categorical.removecats51927 Node: categorical.renamecats52570 Node: categorical.reordercats52988 Node: categorical.setcats53523 Node: categorical.squeezecats53969 Node: categorical.string54364 Node: categorical.summary54815 Node: categorical.undefined55268 Node: cell2table55815 Node: colvecfun56543 Node: contains57267 Node: datetime58085 Node: datetime.colon60502 Node: datetime.convertDatenumTimeZone62221 Node: datetime.datenum62897 Node: datetime.datenum2posix63235 Node: datetime.datestr63634 Node: datetime.datestrs64029 Node: datetime.datestruct64448 Node: datetime.datetime65250 Node: datetime.datevec66064 Node: datetime.diff66564 Node: datetime.dispstrs66947 Node: datetime.eq67243 Node: datetime.ge67679 Node: datetime.gmtime68129 Node: datetime.gt68560 Node: datetime.hms68998 Node: datetime.isbetween69540 Node: datetime.ismissing70030 Node: datetime.isnan70466 Node: datetime.isnat70846 Node: datetime.le71122 Node: datetime.linspace71573 Node: datetime.localtime72168 Node: datetime.lt72891 Node: datetime.minus73331 Node: datetime.NaT73975 Node: datetime.ne74726 Node: datetime.ofDatenum75168 Node: datetime.ofDatestruct75526 Node: datetime.plus76038 Node: datetime.posix2datenum76689 Node: datetime.posixtime77167 Node: datetime.proxyKeys77708 Node: datetime.timeofday78360 Node: datetime.week78785 Node: datetime.ymd79042 Node: datetime.ymdhms79434 Node: days79852 Node: discretize80318 Node: dispstrs81203 Node: duration81987 Node: duration.char83452 Node: duration.datevec83854 Node: duration.dispstrs84894 Node: duration.hms85192 Node: duration.hours85613 Node: duration.linspace85982 Node: duration.milliseconds86585 Node: duration.minutes86977 Node: duration.ofDays87365 Node: duration.seconds87851 Node: duration.years88206 Node: eqn88558 Node: head89633 Node: hours90408 Node: iscalendarduration90893 Node: iscategorical91402 Node: isdatetime91886 Node: isduration92344 Node: isfile92795 Node: isfolder92943 Node: isnanny93092 Node: istable94370 Node: istabular95070 Node: istimetable95570 Node: localdate96304 Node: localdate.datenum97617 Node: localdate.datestr97919 Node: localdate.datestrs98314 Node: localdate.datestruct98739 Node: localdate.dispstrs99671 Node: localdate.isnan99980 Node: localdate.isnat100363 Node: localdate.localdate100650 Node: localdate.NaT101204 Node: localdate.posixtime102098 Node: localdate.ymd102660 Node: milliseconds102945 Node: minutes103480 Node: missing103738 Node: missing.dispstrs104776 Node: missing.ismissing105149 Node: missing.isnan105514 Node: missing.isnanny105851 Node: missing.missing106199 Node: mustBeA106512 Node: mustBeCellstr106665 Node: mustBeCharvec106836 Node: mustBeFinite107012 Node: mustBeInteger107186 Node: mustBeMember107361 Node: mustBeNonempty107536 Node: mustBeNumeric107715 Node: mustBeReal107890 Node: mustBeSameSize108059 Node: mustBeScalar108235 Node: mustBeScalarLogical108416 Node: mustBeVector108609 Node: NaC108779 Node: NaS109709 Node: NaT110591 Node: pp111414 Node: scalarexpand112020 Node: seconds112937 Node: size2str113436 Node: splitapply114039 Node: string115150 Node: string.cell118340 Node: string.cellstr118807 Node: string.char119147 Node: string.cmp119672 Node: string.decode120646 Node: string.dispstrs121074 Node: string.empty121650 Node: string.encode122184 Node: string.endsWith122692 Node: string.erase123087 Node: string.ismissing123430 Node: string.isnanny123908 Node: string.isstring124286 Node: string.lower124611 Node: string.missing125117 Node: string.plus125548 Node: string.regexprep126118 Node: string.reverse126592 Node: string.reverse_bytes127067 Node: string.startsWith127806 Node: string.strcat128223 Node: string.strcmp128805 Node: string.strfind129499 Node: string.string130019 Node: string.strlength130650 Node: string.strlength_bytes131618 Node: string.strrep132291 Node: string.upper132904 Node: struct2table133385 Node: table133846 Node: table.addvars138073 Node: table.antijoin138497 Node: table.cartesian139239 Node: table.convertvars140602 Node: table.findgroups141587 Node: table.getvar142169 Node: table.getvars142661 Node: table.groupby143133 Node: table.height144071 Node: table.horzcat144486 Node: table.innerjoin145108 Node: table.intersect145772 Node: table.isempty146385 Node: table.ismember146713 Node: table.ismissing147115 Node: table.istable147797 Node: table.join148012 Node: table.mergevars148761 Node: table.movevars149144 Node: table.ndims149870 Node: table.numel150181 Node: table.outerfillvals150671 Node: table.outerjoin151101 Node: table.prettyprint151910 Node: table.realjoin152369 Node: table.removevars153247 Node: table.renamevars153632 Node: table.repelem154333 Node: table.repmat154774 Node: table.restrict155519 Node: table.rowfun156823 Node: table.rows2vars159904 Node: table.semijoin161009 Node: table.setdiff161866 Node: table.setDimensionNames162414 Node: table.setRowNames163640 Node: table.setvar164006 Node: table.setVariableNames164894 Node: table.setxor165675 Node: table.size166314 Node: table.splitapply166721 Node: table.splitvars167225 Node: table.squeeze167770 Node: table.stack168167 Node: table.summary168565 Node: table.table169578 Node: table.table2array170916 Node: table.table2cell171160 Node: table.table2struct171650 Node: table.union172271 Node: table.varfun172840 Node: table.varnames173378 Node: table.vertcat173750 Node: table.width174457 Node: tableOuterFillValue174769 Node: tail174947 Node: tblish.dataset175744 Node: tblish.dataset.airmiles178715 Node: tblish.dataset.AirPassengers179469 Node: tblish.dataset.airquality180237 Node: tblish.dataset.anscombe182337 Node: tblish.dataset.attenu184313 Node: tblish.dataset.attitude185752 Node: tblish.dataset.austres186981 Node: tblish.dataset.beavers187894 Node: tblish.dataset.BJsales189039 Node: tblish.dataset.BOD190146 Node: tblish.dataset.cars191117 Node: tblish.dataset.ChickWeight192848 Node: tblish.dataset.chickwts194339 Node: tblish.dataset.co2195828 Node: tblish.dataset.crimtab197315 Node: tblish.dataset.cupcake200789 Node: tblish.dataset.discoveries201761 Node: tblish.dataset.DNase202792 Node: tblish.dataset.esoph204070 Node: tblish.dataset.euro205235 Node: tblish.dataset.eurodist206906 Node: tblish.dataset.EuStockMarkets207816 Node: tblish.dataset.faithful209352 Node: tblish.dataset.Formaldehyde211187 Node: tblish.dataset.freeny212623 Node: tblish.dataset.HairEyeColor214232 Node: tblish.dataset.Harman23cor216760 Node: tblish.dataset.Harman74cor217684 Node: tblish.dataset.Indometh218650 Node: tblish.dataset.infert219977 Node: tblish.dataset.InsectSprays221384 Node: tblish.dataset.iris222327 Node: tblish.dataset.islands223865 Node: tblish.dataset.JohnsonJohnson224755 Node: tblish.dataset.LakeHuron225655 Node: tblish.dataset.lh226722 Node: tblish.dataset.LifeCycleSavings227611 Node: tblish.dataset.Loblolly229512 Node: tblish.dataset.longley230806 Node: tblish.dataset.lynx232192 Node: tblish.dataset.morley233598 Node: tblish.dataset.mtcars235331 Node: tblish.dataset.nhtemp237068 Node: tblish.dataset.Nile238056 Node: tblish.dataset.nottem239344 Node: tblish.dataset.npk240201 Node: tblish.dataset.occupationalStatus241491 Node: tblish.dataset.Orange242517 Node: tblish.dataset.OrchardSprays243901 Node: tblish.dataset.PlantGrowth245737 Node: tblish.dataset.precip246622 Node: tblish.dataset.presidents247503 Node: tblish.dataset.pressure248716 Node: tblish.dataset.Puromycin250049 Node: tblish.dataset.quakes251871 Node: tblish.dataset.randu253427 Node: tblish.dataset.rivers254677 Node: tblish.dataset.rock255569 Node: tblish.dataset.sleep256788 Node: tblish.dataset.stackloss258009 Node: tblish.dataset.state260271 Node: tblish.dataset.sunspot_month262055 Node: tblish.dataset.sunspot_year263020 Node: tblish.dataset.sunspots263868 Node: tblish.dataset.swiss264968 Node: tblish.dataset.Theoph267057 Node: tblish.dataset.Titanic269389 Node: tblish.dataset.ToothGrowth272062 Node: tblish.dataset.treering273484 Node: tblish.dataset.trees274577 Node: tblish.dataset.UCBAdmissions275994 Node: tblish.dataset.UKDriverDeaths278159 Node: tblish.dataset.UKgas280484 Node: tblish.dataset.UKLungDeaths281429 Node: tblish.dataset.USAccDeaths282704 Node: tblish.dataset.USArrests283470 Node: tblish.dataset.USJudgeRatings285442 Node: tblish.dataset.USPersonalExpenditure286756 Node: tblish.dataset.uspop287970 Node: tblish.dataset.VADeaths288888 Node: tblish.dataset.volcano290263 Node: tblish.dataset.warpbreaks291661 Node: tblish.dataset.women292916 Node: tblish.dataset.WorldPhones294222 Node: tblish.dataset.WWWusage295282 Node: tblish.dataset.zCO2296192 Node: tblish.datasets297434 Node: datasets.description297954 Node: datasets.list298506 Node: datasets.load299015 Node: tblish.evalWithTableVars299382 Node: tblish.examples.coplot300338 Node: tblish.examples.plot_pairs302412 Node: tblish.examples.SpDb303602 Node: tblish.sizeof2304452 Node: tblish.table.grpstats306634 Node: timezones307789 Node: todatetime308843 Node: vartype309837 Node: vecfun310551 Node: years311278 Node: Copying311955  End Tag Table  Local Variables: coding: utf-8 End: apjanke-octave-tablicious-8a1b10f/doc/tablicious.pdf000066400000000000000000016420011515050116100225370ustar00rootroot00000000000000%PDF-1.7 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 275 /Filter /FlateDecode >> stream xڍAO! xQۤOvk6n/mh}3Uy :D+QD["G D .#9_xMơd H="뗱ݖ t sby}_Mr/[\Evc7Ӂ,RP2% z'5-u5Оk)0%tgE#[po2_[s`iצjJ7%֡.!t(i*bڤv[ߵ@gk j})jj endstream endobj 13 0 obj << /Length 668 /Filter /FlateDecode >> stream x}TKo@WpR!J9U `{ֲ8ʿbcǍ8071xT(2-U݊yEDNIOML(YxV,,-YɣjPi^ljou";ݯEO@,j]XLmiBih,o9%|rYRq-ݚ 2\F,"(xܨeމLvg`9* .dv1ؐk'ݿb3"UJPI2ն3#կXaS,wtmC7AW>3:k^&'HRGÖdnO j_7c/SQG;dF%B+0H4gO}N=q~͐mE*'n0s {pC!7dJ/S/hDl DkD45>Ã9$A+$lۻwfaK햪s.,j; :ݏ}f3;Ze@ݭI6݃w޵lY³EQwZN#q8mG{ endstream endobj 35 0 obj << /Length 506 /Filter /FlateDecode >> stream xO0+|t;6I6R5Ej*1966ՠ~}RDsf /ĸ;ٻS  +d$Lq&ɒ6줼=H2}) #3Rx)eD\l%)גoۄuF]#"3Fݐ뜞 u$ű^Cn 5Ipz⾽M>a#藩%K XӂPpfk+,'Vaz %~Ɲ p{շ]g{zzDq8~P\!"X9d]u\6իe:{X&#AX\a<} `85cUɏj[GZza$bT+b?7}%wW(s-Tp5B>Dᅵs{i;ۮz9/x<l؏A^y?Q?/Ye& endstream endobj 115 0 obj << /Length 1260 /Filter /FlateDecode >> stream xMsF:JT훴[ętڙ&9AFkW3 `veL 1A,/@$AFH,(&=Z?Ȝ7Gkg4኱%H C,Dt덋6,J oܺ'bUwr#BƑa~7шd,y6R,{KјQ P9 ?+9,b9iJX%|Yc4ByI7~^9Խ'4@MX+^6MY=h`7M^71=I1zN1 ᠛CLń8 a kX/\Qyft+d Rg J6d/CHBT>Y4z2HZEWy!G=: YP &y7(@wp#X76oL>˫B0.g6ŵm܆1y5d!{6 #B̩首j MpGZ|D"V=?%Z>Ҷ-_E˙)>gPaߕӲp~%-?7qJ7V~[NtrWδ,2h+uxYM2궩CS{-FCrRܻ٣5Ġ΍(`ēB ŮCh6\Q}=7Sʵo]2 'LƯbW1%/ #D3=a Bue-L'f*^KsS>Y'˼gp@lcbt|eS}u uhҸ^7M <9Fju0 |v6Ge2v75ѠPޠA5U8ֽy6䭃;!"paЧ̼*̻E,<_X NJΗŰٿh17 p'}e0ky[u K9ƒ;\#B &zc51 [*$%!;F7>ߵ#5gL}3?׃axȂrOsU^yk:ssmNp)4(__L` o:9u!T}n:%ݰ`^3ZO['> endstream endobj 233 0 obj << /Length 1181 /Filter /FlateDecode >> stream xKsFA1T)X:T px| ۛ-FtAs?XBDVࡸc1xyw?n\qsR2 sۤ}/w?mRwG dd{&⑈j Xl2M]yUFif {A)`tk}w=ƨBt(yjںAhIQ|--nM qI Wy壟WDf$%Iʤ3\Q~4g61pE^!i W{Ф(]B+>Kc iG<%hY-25`W!,ZuSPO`.rɯ<6H>jGό"zdbj㧽$@ϻ#Rix BNX=Vuv8 ~#Lu[%ibfr jChADuGl9!%٤ 凝\# 99JlmR唜UtϏXNlBeǴ>m3L8aqi6"@=`f+͜^6$GHv9j")^eRJo@R!"lp=X:K,|၉KA3ӮL dH) ݄!?GXdcFT//N[`]\d9:+>& lDǝ]XIAx;z'"zol&,)ρ&lM(_:K1.[YHcmCR%[_(/~o ~yr3 z؅˶[&h[6Dp&?51}v_|KPvoBul*|Rng*sC߲Ҡr!u̹L%OۅE4wam IknP$ ْԜn-aWlǿU%_0fMvh;RL9}H.&xބؐ$?\VM7V+kwTR45壆NӀ? ]ͮqG]Y,FrmZ- HzFs$Uf|ΘkA}*I봠#<(o?ELJ'^ endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 832 /Length 2713 /Filter /FlateDecode >> stream x[o~_ >pIph/̓boRdH! 999 hZ7 ƙ`3Ćb0DC2>M $g SY5|]0ޥw0P {^#EΆ#Lp«D ^W*/d?Dr <<\yp-К]Z i[h5{x: q hB:z&> N,]N\eEw{{>$^<{XXn7 bjoowp^}d:?+[sH3Ϟt7KS}DQgHB c c c c0c7<33vbԥ.%u)KI]JRRԥ.%w)K]JRrܥ.%w)K)]JRJRҥ.t)K)]JRjRڥ.v)K]JRjR+zz S~Ԋy|='1v .q&bK"'bXWR3jyp{F2foL%B8.963$8Ff1dl%gxDF1>ro&JĈD!l[lx:C=fFyT=kGERr+agtNɁi ٢>2ۄ$ 'gD6~Uz:́2V}' G` 8$)uHbАOCX] 쉘P(a -IHuG#1rP X6Cɞc* dbv epl5c0 }Q\?m~5HH0=YsX$f4.kĐ#̎tp?tH=Yvx; #C%R| "'+̗ks7ۏݣA0: Ȑdm!M>%Ȗ,!_lCG^M~}TQhǧWd8D}q"} xo~2}X$EF~Ooj*,8=:nDfV;@YsAN‚/XחDfmE^ҶK|FL.)m$mUrwgIWtz`MG6tZ%V}IAxU*_K5{Ң=i՞lOZ'-ܓVIK{=i|OZ'-VIK*Oe|:>i!OZ'I*O }Ғ>iMOZ'-I T#*Ok}>iyOZ'IkT3!]=U~*?k???L_ät f=Azuxx> stream xMoF,3=ڭJ=TE=PLT0^u}gqk8׃"9$ABA<z1cK˻n=_t'!<*T[=xzj//?V:IPz#ɉgɨIgʀ !K? :i6/`7ۦ}Ƌ>OW~7:C>ϴ|-T"\)}'*s@_2ѓ!{?f앜1Gs9CʅDعR왌&tVe1+O" 91%+DqcAh{ qaJ hFOcPz$mԡڻ6`˼(&Ks,IP|Əϻ ulu 5#^[ jYv%6 Ȝ XgcFHj4'$x=l1GIg*ʽ3N T=e 6b{ &~f)|taX7iRduRɄəHۏ|=Vu%.`5cmȿ= endstream endobj 242 0 obj << /Type /ObjStm /N 100 /First 913 /Length 2423 /Filter /FlateDecode >> stream x[Mܸ17`,ù$!YÇ<ȴ;>Qc)iWKdŶ>*O:6+mQZ0*8֪T*?8ULA~0eE.)("ST.7ʳT\d|`2)`9`JU dSV!TBtzĀŪYB*VUQdIXH, =ٍ-Qb|OV1, z`&Mƪ`dBHTbwx:LP)A? )-LVxr.*{rH|TN#tC \  $U權C8UȨqFdUIDp&%\ıb351p(qM2D'B/"d@;ʁk KFܡ-"~ >~Yk]K/{-}8sn^l2xlﮟ./pR ^[qqm`a-z㭈t6|^RwjھV=z]Qynu^gz(92r'@e~'Y BM).%k!䨃"UI%ҙGtؐ.Brq1]y` uuI<)߆ݩb:V.AZ\& t' ˗xڃA'xuy -'y򤘵ŌВqi5 4<1Z1:ȡ*$f1|Iq#I &hn'kyT1Vд\!Jx2|9uA8ko$k!jRI_@W4ª go`q~z:  +o1JEx]J^?ٷN:4]k{O78IEb]Mw%}u,Pw+Tjyt1B"dAo +siT֥0+PRP#P*nqqLj6F @h Sa8= Rk2Dc mɞW-A/9L$kh*d >z\\$]bOkπU94-85/:[xCO-GbeM [CPsQGO7ШUI41C'bOʹ͓dU>_N.˛mcu&TMw/iԟ-W_jKbw#2B1Ox3g'o'7:fH@Pֹnly5)gl71{xD7|~]~px=ǥc72Md1.R;Ȧ '&Uլ7C@0VxL :fwr> stream xnF~ .9s.Z^B6Nĸ D*HQARsFڂ50 [d7?"b? 2$Rh"ͣhŇ߮>1<͵k$@Ӈ7GwWN~W=%L)0NiJ$E5.xs-Yw p$ U<|^j fr=5耂PMV%ʈs#_ u'(tHі'DJˠKc^uU x+pm2[.'T?&!=kqFbР-:L,`c8A!-37c+#WzeOQ*B;) )gT&6aųum&`!"Fn]8wKmp/4v.[_F[}eope+׉Trr/\!*[rV2//ʻn9Ӻav )jYZ\\fDVT閷鰑RD /^tm(}&ơz7wzCqNq{M &4)M WLZ^Uwfa#[;,'+8e#88On^_eYTlW`6St3 ۭ`q`tyGA =Hh! < KހJJZ7n2a@t_^6%=ѪHE.r3 Q< Vqce7uiUbG[M}Yㄠ|v> f;jx1IPpԻ2#䌟h?:Hɟb $8f8̶ U!Td_M[a 8W-[m:~>Itl39 yS> stream xڽ[ˮ+L6U|31E0l/^htcatI7U@KL|V}N⣊l*T6΄e6bbհ#3)Tdv()ţ;ʨ=Et $wkE6\TsJ&zg|ф!a 2^Ljbc`pR_ P;c;)TIdC.˝bȋ7Xt`hc0NG2T/bdR9X c 'Lp,N &91$ϴh4Qd)qNjI)AUr&4Yԁ9,LanRN&*br\Mq_%gJ 7Ed_pMaT"&^#w)UΦ:1'2LTBhR| [Ϭ\0 ,2{WĝwxWQ4K|44 *e8x~| MChYC8ڇ,h\ ^-^~۟??nv?/?|tbnXG2Vn,:}o^2fY6yXqn:~贮➴'9 AE]'h$wd힜 .^+y>:f+3MEL:EV^Մ}>!YX!{8F`qÄzN.P f|E*ok+y?9+@dCjmr77c'߄=j'DZF<ҍ@Շ>Gr> 1% N[dwHTAAF'['p+N>PsO>@b^꺶 `׍?NɟzRFO$(`+Xs<>tM,̓nB]e/H}sװWȽyM51ϥmDf:em8DLH1|EE?!"ѹ_b;iB2AS8^ͫMIG"yQZx>N}ّXޝtv/W!uf:tҬM<ԓm{do}] NՀ}6I>³6[tޣ O驘ڮd BMG&~I7BGIkm=z@ߔ=iwȋ &Dm"bC}hB?";Ė,}&駀9X/êWdE\= ޏM= '.r#K$2:mM]'rA^Lc36weu V,ˆoOXau@UD|tȱ t-8 ?XG_C|μ3˿o:3X~wjo0x$Pm_`Y},? _O{iX,aw:rr:+Ϸ4> stream xnF~ .9s. 4k+ 7 Zbd$4y)Eьyfd7pj`,?BFddp-7do/~#_ܼy+D0@x `z:b⧛3 J/pdZgR?\S0KBTѮood1w9H_uuGjs*Lznęv]i6գL_&PL? ΔbGޭ[u0 's1*Z)v pRXV "I aKl|*H.0jݍ}恟QߗyF 3_`L74Wn'!Ƈ8(.1)#i$yC5qa*"aU!arz4rYJ|C-3LZzYbK nB(GZW5m (k]Ρ-KW{tn抦y:6!ú}UA 8&bXҿ}G}Ӟ*0XA6ٯ7?OSeڞJFXflV mrT,8bRCsi`M& vYSi9RrAD(x6`;[a;Cdڀȹo-WT!B".|jR^ B%N+.,4 R=(-Z\e@'G@eA,)gRvh Rv3Q3n#49UyeϚcɴI^ɗ6T~I˞ݦzɶt0t+(V43wHBҼ(".QϢ\g(T yz$ >lo &qڬ|>. zeH~M |t@_G#NirU4e#8aҀn]\d@>̊2J9J+?Fҩ4mG mJXrXsAе }pЦ5is[\cIE佖/(2xp6xϥ_m?]yXpSh*Î%`ғ z|E83b>s/ƹ }[mwQdJĕA{X"ys endstream endobj 538 0 obj << /Type /ObjStm /N 100 /First 912 /Length 2399 /Filter /FlateDecode >> stream xڽ[ێ}W1yX;`, 5 $1ixhH{LwjcZ)*v+` !6m6DD$\39Wd @8(UH=l(eA)kꁟa09Æ=ô 5G=Eé5Eʆؗ.A5 H3;6g6>BX*@]'Ƞ9'#Eq wשta9+r\Lt΄#q$Y)qLȕL& $J@׉q:Ԉ!^I1șlR'R|@GG&b&W181$.dŞ+΋j !Z"\S}LY)MySH dJEH@J9ftpОЃ58a} |Ȅ#4$|"\F7+r\~AG'C2ȣ#Hz4.""0,aDP#pP/C]o,Bѥ ЧrPEtIL:NPV/^ fr?V뫇OVW|rja>OW),%E㚗 2>plN5?¿?FO>6qdaFLβatL<&4,G?yfȜ)ل`![ӄc'  O>d= l Cmu}6<\:yAh^XԂD=- v6GzΊc, O>p:z-I>gs6l;Ԁ急GXmɒuA`CNc`KqOڱdLm&Ddg :9@hXҀ X#sF|_e'!Z,s%Z;_O^F4K0yEˡ/%glv{I_-Rq0YbTE(vӪ770OĠI421=A@I 4WUJj vؑ48}Jr rʍ'(h<"#S1f Z/G?9,XpF9BXL*RgojxI6朴b)ɲYfx_])^yXLRjlqpG-aTd۳‚&)z2Cv*LG{IwBn,`TI!)G&|I9jpJsI8fn&\ٛE'ݲU4jYK3iV{!I9ˮcnmMe'XAn96NMbcmeEhnWuG{!I{rNMj6f]/V[ߥ:YpzwzԡԢt Qq =תlΏ]p(}o'I`׿6ٙnyajXo1<ڷI"Xd߼5ד[a7_5ІhRf]׃rS? 7ͫ׳D Go9]|u& `疴sBfmz_W>s*^QxEUūW*^UxU3^rN[ҖmI۬mVHHHHHHHH=ߓ=+Ybcccc+W> stream xOoF=Y&AX ٽZ'o͛#Y\"$D`!s|Up3k՛өl(e>e۽ )X{8 >[yrUok?D}% 5&KuݤԂC;JbIWJGo{!үdN6 /!͹vSKl#rvGoj˯fUD]0gGw?&luUG9\nT HTUR'Ue~J9ץI&Rz@QbdhRlm d~6mNJ*-Rt! > CUedvt()lCTAWTur}G7.}K endstream endobj 685 0 obj << /Type /ObjStm /N 100 /First 914 /Length 2366 /Filter /FlateDecode >> stream xڽ[ێ}cH@0`GP^@"n{5lϢgV9Ůn@c8 9NMVqرeT,QYW`r1۳SE1Zsukpᕵ> @J|+ }{C&-YYes&3hN*g=8*vdr)[" |J6+om*9#8|0┏|ʧw E SqB*YE 1z\XS B!#D{ KZ]IEW "cG&HA[$W̠}j__J<'* Xg Ud. ˜kg@6̅䊓.'ah.8P1DN q}⤨raU1VBhx#U,#J)LW BVkyZGyB|‘`nџL'TWk*(25d9yU\?j:͛|-Ĩ56K.̋lTy' -Vͪ{Z[tιfx!A,*jꮇSva0xԔ%¤ÙRV_uTGmr5aI`ՇχtW}Wl9f2m?DZ D*Ǻa{5mߣj.C+@ߋ|UEG8xor?NFn^7lmo]Y{Uw*vsf)6y>*Wʼ?.U{'U({|;qks|8>.UxU5W_ 5N\nQ< Fg*z`%e H;x:}>P_c@8`ET"_' Ȑ#y4\?n_\ѯFGmH pj_w镎ͽOȏުXۮrhKI{񐇠oV6O?s?1 endstream endobj 964 0 obj << /Length 1263 /Filter /FlateDecode >> stream x[OHy<$gfK]ĶiP3!#;vwЊsơ ;B"~c6ው,i!VQ|)F崇CcgA.W W:$H#\d(e^ j?44ZMLzrK ?@d;k*Cp.>‘ &CLvYsc 6S}16t(ha%<-fx̰AKlD X\.JHPHbcRECӺ@p1ut|57k8%, .ܝn]z|qWci0"g;eyyp:oJB^wC}}5* %,M_:f%òpxv$ga-x#R RA[}j(v^n:{2Xps2ccv KlQ"T8a]R_mit -!}Wi"ͯƌ4i2or<屻)$,;Tiq~2[2EvjZ, D"(XEQrn ~F6> 5|rǪ0-Q2p`{r{ endstream endobj 833 0 obj << /Type /ObjStm /N 100 /First 914 /Length 2458 /Filter /FlateDecode >> stream x[[ܶ~_0YlM H~ʶlf4_pa|R$%Eg9M@e6(2(ơ"z?%Rte;ggF".GGD=6^!B'S=Y'(a4@c:0NU  &19APVAC IXPDJXiC maC-f" )hH{p&#rL9MY')Ť W%#\Vy}n$'|ᓼ;CWb'J'8Y I2Ee#[lEjv"8r/Y'2j/UB=$N\syNU*UL)(tFS,E$"4bV*ifTN6"GB[iFi: ZL,6tUp *h*#QpxZh*ڇ}>>`HGQZ'Ej#$f5nr{FKG<.'|BjC(~(0, ɓկX?j|7Vg}[f~oF,!+H;ʬ y*<bëX߈?ݶ~gw+kdm\KjE5u%G,2xg _ķ5)'TA=:'" ;Iw.e'_?aSK8ÓFгhe4@Fhir^?|z{WEwYvPGDIj|{3KgEz+Yb4d4di > FسvÜIFM\L..۷3|zVnİ%w4L2Go]? bk}&RЖ2#m>Mgg <264@kA0{#)}!@$y|>j^h< 9 FfgЇT3vQwC/a?l{xZI93(ʛQי㾵AgcPo7([5fڙh}1./W_}_3|zVѥ7%V+~nl.NMZ/n+:n<(hRTv [I6-gi"P۴L)=n㱫ULho?;m*]ۍ2)l̠ }o#xP6Gġ8P'Actv):QVE| Y5FH 9dF'i6Ֆn<U(wSMEy#Y;rYF.Z4M5 7G-O /t3xX,6VUrt2on{4H- .`D;rHHo?  ]g;4uM_AS_f|{fKtJp j;(&1,̷1Z@t yw:w}Lq 2j זn~9wa09ɋQ/byIEƘ"?mJ# +xt "%ta?ط?[ܸe~~Vx/N@ t)ReQq#_cXK9^x%8^x%8^xe9^xe9^xe/R\j. Kǥ2pL\r<4c3gen;]) 3p< 3p< 3r<,dzr<,dzr<sq<sq<ss<<s<}QhaG/ @yi<֚ N<9^  ={c(]}6x/s@-{wFfzg=uղG1 d*6ѓ%^ǛJ>0CC%x,fVQ{ M'̡X~_9! WY.ˡI 2kH|~|G?{_iaRx̞`ܢ)AFSīl˧R㘈CZE"zGd]E`* g> stream x[S8~LbFKۙ,[By``5ĩ픖O_ɹ,qtD౒߹ &d, #RGgnݹu;! aLb_,@7Nm$AK;YAxhkBv{!jpIp"YNYw]>G:t{E_S>6=c)۰ Xڍ~G] &65vȳtxt-NJ}Erm!i,%9L E7>J ^̆ # c>nrTڃYR& Kc,nϰXH` n`ݦ;Hqt;#X&KϜdZkV3m‘[lY1rcV׍¡J$4T8I044˄\7՝(+$8;%hLCzTDWk-U1$!M*z z dxh+`q(} SGq)Gk$9b M]b.^`9*'Sqb b+ƚ5T9Usmn[}>fnOdyRʰu~IuF4wUg e[>Q%Ok64ku$$(5t ђC8zҭy߼>NMiMV^%?0H-Tnrf.vrCန7OJ%{Σ/xy49k1kPnώom@Q[D<&횼lƚĈHLJ`@6,nTՖL6K&o/z6LEޅ6l9v>]vs`C}ȉӢP߶r79EZ6~fd6+wG[urd27`ovF#/WN1_ CkXL>)j v"LzѩmEWNOl.I4|3UVFb(vGM->}훿MnWs?an91T6̞C7DȖ-u8\5,kcC] t^RFjƖXֿD&4~^7B??o} ;cϒ!v$^8}:78roߺƣEZj?Uvb6gdO ud90='|aj{nUpvMvIOYW" EͣL4QyN;im@.1n` sl~rufw!ήEz/a鮟Șݤ;+mM G 2xkiN->Tp_Xٜ[~ŴZ ty &|m!(I}| endstream endobj 980 0 obj << /Type /ObjStm /N 100 /First 948 /Length 2503 /Filter /FlateDecode >> stream xś_ܶS}ᐗ#@bI Yx0 yVvvh]E^X:H^JʅQ8e+ ʕmTx?-YET1FY"VYnS ϜF"$)8$9$"CȆDQD(X;dVQH)%d,)> ڒpQ9˜'+t[G(2`M!׌FAyQE#I8sV>AE,Ψ` g`F-q*K!f踠B|<.UCqYE2lqQxOaʦxR10sȗ / HkՐ}R˙Q CYL)ä,6aD6*qԸP}s&rȃͧ _f'płpDn8:)hV8([79q#գX=O\ KdO R.GEZjXleODidRM"Q-YrQQۖPL(ڀ8/lao+PY_,β*Ź.\25\FeJr/6wO~sb&>̂8B. šO$4Wmq /J q? 1T#ֆ܈Fܡ~ȏۡ=pZȓzrG/J9htR@<S? y2TOֆp,誽:4u?6]Ȑ K')1Au,@>m{|^ T-~r؏I a…i>?>/C/S0ez[1C+a n)Ozro1N8%,QؒkpL`x Sq)a{lR Ybr#HP?Bs2^09 P[SZNͫnyT?2P#碎fUN_ʍ&5^L+N2+ܟn)#Fj xaC n7{wW@-M]N9ϊ ?/wmP!@ՏkL4VV($<; 6oKm zTCjdQ.^YLfœ㗅|!kL. A84NfMyc/FúB/~D. vMP)Չu&'ej"K59BFl % ~MgacXh)T kL.-?Ƙ1!Ⳙg( #Fa] 1b5?=tp÷t#Ca'd%?-Y nw~j}wlC3O Y2"UK39d#j_*qIQclk? 2bTWE@2?yuZL2<}-51T?". z#bRCs~߿}U†!n-Y0HiVԷ2NķRKt(_VŨDFχ;U5ut:;d޼z/y|n7ۗPkÉK{Wvc&_/#og@钯zwBnMu͸u[_jAQIYeLIIBIIIII(;QvDىe'N(;QEًe/^({QE9r A(QD9r(S}EQE9r(Q('QND9r$I('QNE9r,Y(gQ΢E9r"E(Q.\Dr2*[c$a%A(.2"2vhնh(ٙ]i2pG>ߙW|srDT\ӹ_h%Ս&/B@-\pfus#IucuG!*z veĨf09,Y庞y^w煌)L>X&at ֛omT1"LN(>O0 0]hbd.Yx0f𤖒Kzz9C.oE}M|U ]VVAu0(fpN BRXb#Vœtj"8I2,4Ūs#5QF4p:OOGĤ PM*$/.6b]!' khۦ_Ȗr p#^5,fNd 1at)x S"~/֟ՊU )zs+>zw.-ň?-K>01Ի;Ks endstream endobj 1168 0 obj << /Length 415 /Filter /FlateDecode >> stream x_K0)<$_'HߊenusM7iT M{w (9e)╴QqsʎzCڲżWV⥛(~);vR7C+(&AuU;3n/G >{_t[^^vH Ki3)BysJ2Lu ںh|Le1ð[4MT)~Z!v+tLԬY@[C0}/BOR!3 endstream endobj 1128 0 obj << /Type /ObjStm /N 100 /First 1011 /Length 2211 /Filter /FlateDecode >> stream xZmo_s_V$%hb5(hE|I~}l.0r}gݝ!W+Z9#$Xa" N8I£B!H{% ? c(Gc F:zTxŵx NXBg0RF'0֐qx*(a|64ZOeFTZeXrH}*. :Rֳ! Ydt9h4F8GYֆoF\L7FIx&G,N xɎ1 g^GE=@O%E4^d(֑$ݷ"@\e%BP#kL2#Bb^QTf'v7{ n_EI`h.s13HZ$ANɊd7O$,A1 ɣ ʜ(jHhHdt`PPJ0dj@p@u"r\sm9R9s`Ι%2_ %dԑ܁՚Y!KIS"W4Ki0-g2h0!wЖi0KuvFh3/7'^G ;'$FLe׷$O{. nl~a[ͦjgeϯVgU,k¾E+~sJZ.>vy4y&>s1Y]Tb~*Us-E[4e+/VmY-?N&%]< GU/ ttXG1p@/˲^m&|@a i/qɜX DTt("x_LD&DZ&Ǡg˛UӬT|thGA2b8^pTʈ3Ɂǡi-Ӳh"<1/>8lޅqpP0!GE`4 *4xF䔑6q(^6WSGx +8EȘHަxgŤtX1pCѼ/ BLqH,u]6TtHs4&K#y*_-"H0)e`)I NZ eH8geTbmY]]NDP zTDO&`<AgƠ5j;/ h!'cz _Mv@c䟼z18nTq`. gR<DHǠuY>_@Q+ʎCRݔ@0GE0^LCT2Q盪^/ϮTox'.Izm>1>hayfW=& 6lJȑqN4*x򓙈3qLZgCa ` FdV7S-3p,()kN'Af,EڶjݲCAσq{J?NC@ 8rNNYESt_Wr";dT+_ }M!\3om~j/uKQOHS/X^ff.j`6âߟPk[& 8N Ec4r"6:Q < < U5HhVD!S8vH>!NpY $е=J^ۦ-zLQ4d#w85xlثtyT:{Sct >P 2{r tI꧱LZOQJWFn~7zQmZVSڷ}?%P 1(߷Ɲ!%O0ZiJɞՋ_/ᲿUz:hC7e`YQ&1c =`:!B선zA 8a?ۯ 7K?8OEMNZot5*~J!kpr[.&JzlU9X,3) t/ Wdap-*4 lQdN퇯ڒb)GP]`D{km4 }RN!hG);įۼ/Nzvܦ~%O~/Now6m]-w%M>+eFjxb*C%* 0{]n?,U`c֟Zr _};OqSeY2nb\ف7 >9,n> stream xڝUn6+xl/!)X,شEfS/dR ɋ_7#Feb f< imRJ](VTU+m=ҥe#* S(c#FH70Han(AYKlDeKrsQ8YJv&|!Pq`<1-w%Z)ZjfV$WTBf(4 W`\f{ 㼊ZEZE}<8~!<~A08ďbТ #ǖ"EP^ك*"Ͻ!"XQJX\!~w愔{~|^,q]2 x(O|-Q KeL@"X,+1kF8 ,4#U#̠clbxxyM1R?H<[`qi,[KEFA5rx."豠`)AAbx"d2UYSsiaP{ჺ{Pwt_:uw~tl9߅->o1ߞEnmj몿_f3mS~޷3r3v/^X!*˜Ǽg(n?53ߚahs8:u}WIRMH͠\tsd,C3'/6 yaqLg c)˚Σ444Սwz=2ov[/8 SvsֿζkF.6f UWf&NqKW^O[;w{`oi!|Cia i3T'j> stream xڍTF+6;Jʉ/rF 2Ptb鄜VUZYqb8Aو*FHVyA2=a yy\y.;Ǽexv;%1Tb \efuvaWX)J{?-fR;% Kn52gpJhnKn񰽯3.0{͙wZT[ht2ۄrE-5~Gk!P/2y?^fie.4e.>&4fB`?.`u@fX 9{ endstream endobj 1510 0 obj << /Type /ObjStm /N 100 /First 953 /Length 941 /Filter /FlateDecode >> stream xڍVnH W{䲗hgXFrFE!&zMVWlj[{@ڀIۂCp!Aa4CR%cÁ F* *bpF9rGCF')loEڼe9΂OqP@աT"`]"!(͆!x:\p"D*!ʽB 1It$nP I*E*-qLQ^,*LE>*i#ЖyH)"Eёr'& AE1KTJ/b_"qtШ4ۈ'# oAn0j9(H'eA|7TA0t2TAbQ d+E=/UHۧ'if$-Fˋ)v()ZZ]ŃB#4"RdIr!k(1:(t@4Bh-;W4WEIxS.ûw/<~jOxpsq(8}y\FtGWu/]+K#;J3`yM]5Kq, +U]W]yl2h/Bs˵x@SjԷ|-UWl)sYceVuǢ.Sqo"]v6}u.GoqU򵪧boqT^&mi^Gl{f] O-&uasV캥r3YibPһdmevOGrؗ|CovᷦOechGvՏ'u~=:VS{}jɱB f+f fU嫻v_dX˺9S8?1s(jqgH?)嬦::ű= endstream endobj 1661 0 obj << /Type /ObjStm /N 100 /First 950 /Length 970 /Filter /FlateDecode >> stream xڅTMoF W^67C[vu Ş&*dYm__cq.=ʹ *PiКL௃ gB NbQ\8FlD@BK-s,J\ r!r@є(s(сU ZP*l lhpd8pF.\8^)91 x B%.٣!dJ8"7ӣpfk+dceY3g.rSxM2e9MQihBXq Ql=k訩P(*93 aɡ4x|$=8(xU JOkoON|n72dOCf|X8s5ovީ;eMvi8ؗ\sy{}_gh!ל%gH߭򚡲b7ь UzX\#H fqu]uo Մ5%%U{'2!%z>oO(1[yA˺o鸘@ۘ[Sc}{tm=.TS, Qռsrl}ԽZpF?w'rQf8b'qN]x*)t4[Z44u& endstream endobj 1812 0 obj << /Type /ObjStm /N 100 /First 956 /Length 975 /Filter /FlateDecode >> stream x}VrH +渹J唪ʝG >$e ̡]DTTJHD:DrxXSQ P^c`J+" m IB(Ld0 !ㅥ\PuXUI V 9T y>6 <<)!F8+8/kvID;"Vry'D")Z0 H4J*F[iEHrPLA.@F^FEح6ȋV!rDp10@{/%ybg$%pq$gNю64Cӄ00G? LCTKK-r(,\m^q(pp.E`̋Q6@BثG$ GxXpD+ Pk"<a12 P`5wPv&ז6 v;as40pqPrxG<|c0=WI|3C=|*+3ڮ5 r?^ P,i-Xo,.[k>@V5aTji*6y(% kqFfŶiᘷrZ1n psMpiQ.So2Ӑ4pukQj.꺪ܖm/o iùیQ_m2*x\0V3=ՇC)!^ns7}Ƹny[ +7_WVTCt_͉ǯߊsSSOzOS{ySq.psVCbW_0TW禹zW| ў;x֢`pnĂn;wh? endstream endobj 1963 0 obj << /Type /ObjStm /N 100 /First 963 /Length 1068 /Filter /FlateDecode >> stream xڍMs687f2ii&M2N{%"]JwAɶ5gw*:%B+z:a=E% _Jk2f(QyK}PBiw#h%HJhWЁSQ@) 09i*RXKQH䨅Sy (qtE A\a[T e%`(#à-K!/rg0*)KeV,i*aټB*R(U"ETX63B @14*0:19FVg k)I[3r>[xIMGFU:æ?+ln$&N,rw_Qia^pۺ6z9~:m o!?H eCsP|jfcޭmC(rMCy._ǘVPDžZ9 M6zln8hcƾ;<.^p˰'nSܦM+oN,i-GT5-HࢷTAb ͔EA6_rYb p}0 endstream endobj 2114 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1106 /Filter /FlateDecode >> stream xڍMo6<GX-An Ffm!Jt_ߙ.e"<d %02Gq)ڠwFC2!ijasͤV`8&m +3% 0G*Kʹ˴hL;tV3GIf+d%2RʱZ+V^pf%sfp4 s5fk+ ݌aX5f\p,X7Ask"VUEQ5`iLEQ,d䊱5dkȇ c( ca( jNPjBs@qy2pg!*pC +=k¶: AfJ@HMk8@5q(AifPhdlƇMx00C`hC@5p",vyh 2 @8o `}|c``&eE{( uRV[_ +,|`9*),)%]h 5H~HI3Ň]~w]^CN'?M|jcf}xq[e*di;Lh~\f@%My/i%0tajOM>4m0!؝^]-qǐi'0MUs"!6xJSB~4J1>汋S38)1Ry"M? 1}{sq.5$ΤMHg襝3)uC9;Hh&iEFi}˶Xi alU.Cf闫<s=߯ݿ>g.eρP)W's(nlO?5¿F%2rsC7Cȯ߇/4,7J)ՉG.(ϱk|7x0eO.Sȟ J)>f^do&?s|K,BtLobfl<;oC|<쓎iDD\,> stream xڍW[4~_#4NV,+Ay@;NdXk<iazEB bMzQ:=qU:,>[e6^XS[IAN3^M=: #G/eL@ Gw+M=X$O90\8 71 RX؆8%{`dp5 >X,9ϗ˥|\!tZ#x<3HQ~+Ѝ7U~fY'Eu֎|q׵Sz1TqS!^kyp['Yw`Y;b–*!XAdYZYxu UgL}Oke#~ci m6D+$O |Z`nM s^Qj|܏*-.s endstream endobj 2302 0 obj << /Length 828 /Filter /FlateDecode >> stream xڕTM0W#'N|p"$nmæqH]gqC҉=y3ް  $(V &q>@ՆyϗMF%J*lor*XmH?f,Ӏ4e۔*/9e_E"Oɕ2a|6r48#Ғ&z{PI%VM_ô 2LK3ކeFkV!#=H;yBh`~ |g1]vkf pȽ({GFsqddx,L0dQwlz0Qu ȉsHLr{5vHW祿T9x9Bx @ ^ Ӌ8޷0hVܩȬb~}wZ6]B9-P \}e&а"SNT,$*Fl>^K wK"W,!&#o7akIX[)HL, ,9zFC80W"+&sl0("vơI HϞivy2̲N/ጜ1ֱy>.,E`rፓ- Gyf 8EMFGb ?k.OUk;k c@%ey-щ=$ Bz{yFIӮc םl4פc?aG5YuB\ғM'7]eO)azq=O@ ⅂, 쉍qit/C endstream endobj 2307 0 obj << /Length 2591 /Filter /FlateDecode >> stream xڥْ6_B)%I2._;7kGH)BRs(RCJ@t7nH|%a8Gh}ԮG<홒}8ie_xܟv4b5-^?\4 F 4d8B,*I< xzMǓ0k8 :sS"Sdυ8%27 f]7Zpڸ>bR*ByccJu^Pv/2˓UVgSD 0XɇzcʟvY"qx k FEjy#N̞'d4:v hj _RSbZ7YeõYkP)Q;ΟFм_qM ׅJߖ xNÓ}GZl;qw,(ϲg`Y]((%kW G"xt:frI+0eA0i\+L BܠJNopWÁ 8H(C{Tz٬1:o-0>jF%ւ^V XJ 0hcݘs䘿f%ˉ [SwihIbw ٠5\hKV4)e=~YwT3PO AQBzq&q bI$1le k, L<*Prv(F ҽ+ ]OU*,%d4n6#QG*,{ 88!(>H%?$}NNa~ǀg݀Հ7,]D+Q9 v1FW5\51vM/rKt?f,Rqj_RXewslʤ Lo-O\#ԋ: MVߕNЫ^^CBװ ҹw}qq}5Y3k9.^w׬ށzT󰗆g3[R?M^~] I2ShtbRNz9>=&q!:F]0K_eUqCc SNc;u^̿?}`P ޾꿗"Nw7/54S endstream endobj 2313 0 obj << /Length 946 /Filter /FlateDecode >> stream xڕVo8 ~_a&sfǿv;t[q_Sl5f[>InHQMn(PQ$~$?҉" LC>67 /ÈMC$<%%(%y* )"f^(e8G FnZ-~bTA2v6zY%p~g6>jښgQf Q@  0a ]ky]jR5B@iZKTUlT--bm9"%ZPl0nzX=Jsc$0i4)eDsv%{!%w`*? #c8rXa4n\FSszFٓ@䄛fKUk Rr݁T>WYsJqҿx:l=P:pᾦ9м@M^`0=1>t5u;Fӹ_gq>^,aOʒE ڥ!X{iaKT{b3/w/W~yLWvc H78(3#;Vj#-_8r)zKNyX;O n8"ýu endstream endobj 2317 0 obj << /Length 2289 /Filter /FlateDecode >> stream xڵn6_1oVwiZ!M&&.ZHSr=Rƒ]( X!yxN /M$.-7,$gF˳e( v.\7YY.͕m\tvq9"Oވ;\Yƛ(KJ */ JR-Y{o[?)2O5.>ˣlIaT"psr[&nTDIuKNB̭)+XL2HmWtjDORoNX;2{ևyl {h tvydZ#y䉦VzЫ"(hd[ E4{-"Å'9JxO#Ie> //,#M2ƕA8cVFSh:. FZ%PZy<=zY+F &lR9*#Z-N^r!ߊ.I aAĻ0n"Ǜ?GtEl|]6n^Q#Y)=Wk#&5F ?mbnᥙYDO V#$K{qP?jyi%%8WYp[V\by8FG.SdхC[Fdih0~/w>+-IbXձj;g*CZc{փaVGψ70u[ފB/P:xHE@ fXhI6f {tm #]y)rWm%yh!Y l* %e]C+#z 0hMQNm]299_·,ғlJV ,ۭD1{gROZdž%ycO&{tLw6+޳p̚%mrq̀V.Ń~pC{ /9S]+ʦ4C/L3CZϘOwb3vY5eȜ~#G%'bqria%]BjkU9 }egMIf#s Ǒ-ۄ|Z !?w ʦqCؚ'ŋU_}ÀZ[u7Paxc4=&u#WgAY=fs$u_ #q]fcIQUh6 Tg"4B wDjԥ X c1ڦ_ T 'hsփE^R2.%zOg;v4; m"ӾcUcbXQض ,6a"#6Pb+bvՀFA >Z$ȵ)G$ⶳz)c8{ ؂նaNj@n%T@Emh1ޟtHU8|)׮ʰ$1oU˕:0yhSqe7>AALsytljYljFD}[kc#Y; -2řG%aaT'ک'8FhR_<23q, pAX֝fF#d?̷nGwa`~Lp_/^>O/׿ѻON~x/=,A } Qr?`mT&yv*'R(CaG|AI)L熹InS{m'9n'OTlW{M WqO3ȓ1TL9y:!&<1Vg>[tl1BB?P8#? endstream endobj 2323 0 obj << /Length 2037 /Filter /FlateDecode >> stream xYm(PN(~\"E{@AD)Gʖiq5C g3 i \*UϣlU+|;y0|sٟx%?rlǢ6;fWnמRJD^j>)_c;ma&laƬ0@$mrI8 _8|yd( IREyk/NBY{Rzi$ݡ"kdYg`þ.4Y xDhZ˔mvl~m]ǜ0ɒJHDD'XPʆD}t$„d mq hmC@H2fheE鋏:9nզve:z'!l߂a,P 1C)bfa:[0 DAȣL < \&yEd~BAh=\y&ILWv qC{g~^1鲚ܩM۴_{vԧp.$?_ܑh'(_g碵1wa;^շd-/x-A3hŹjl4+154x{ `#MaKϩ7WPʦ$pS]t]h:b{W5ޞJp^]wH5JSˇ'w[ѕ@zTw?ϣf{y[N79euϓd_ ݛGlTkq.uYG!" ejj{ww{?bf~y0t=CN\ŋd>Э߂HL+1tH1?{o\ѩ+O]uC߽fn[JgFl-NWCW15 ¥AM{(ۋ)g\ 8ug^}ڽ|̷')x CCk.iɼ X uǖO4Vt(@f|#餤c_!bH80"1MW􀱛v> stream xڵXݏ۸_aKe4֊%&E?6}ZܵYt))^_%Y.,r8 7CYjf$ W:"~+%| `\8|4(\E+5}ou[wk/$ B4xoZS<-DvmcyiKWq(XsqBőB<$@u<*Lkxl b_3-/{nΣteYF܋K7}ǷXC56٧(Hx`Ӷ\77>D"E-RWڄ?ޠ\ SAnS5ϵl0-HO]3WkC9:Htz<+ yFJ0+kyrٴtH?F(8Y[I(=60^'V޺ R ̪E5$ '=H]{+1޵Vl7RΓhGaQlrq'1kIUnͳ?F ho0[V{Ţ#vu (DnFP)R,8g|\,v}{8r߻$FU+o,$9k© 'n)5̾q^8`ˇ[|A uzֆ?p ouH(Zحt3$C&+9*nZ<}kB-'OuQ}p ,-:DRItOWk-zުLEEWCq%8ÀtMr"|$/ хt׈ )G_up IHE,"Qq(#'2t)1TČ\48 (QG!=.Hs5% ٺ GQO1]e endstream endobj 2333 0 obj << /Length 1861 /Filter /FlateDecode >> stream xڥXI6ϯ Į]mH/@Gm6hh%oL5Ab0 H{V;Sbʢh[lnvD+ 0n<ۻ?$JŮP*Q6j)v|Q"r^=+mC$VE17I" tm+=X׮7QEmz->]!Wݭs㡶ucĻ,8un Q7H1q$HhKts ~{׽-=&0ATAz+W!TR@ܿnzp%bfdO~"H%/:6Xh-a4 `EBs)瑜<$H0_%?f{Lgo)t9rJ̾q( Z70A`LZdf >圜XMaNAsFC- vq|YeZwGD-(2`JXXҩ:DbLFgLcΤ0!u$e"PD\AT̷ #Sb{@8ep2Faړ{ɂǫPR^(ޤZ=:: x4 P*gA."F6u1b0. Zl2yA*M\u;\(hpvKP 9@-]w=.)}pSVex&$(sJ/E" |J̳^r=h$/4x…X^vK1 O`>A*qx$ ]r%4N=Ğ^DQ,s n1m= &oVPLX  5֥k+{޶BR{ʥȝ-G⩤`-뱚Yy)=aTXR9NX &Ŷ [" NHд!,T 5 ;o#VkId5"U(ejfK;&=~wP>s팹סip2]cMA o 2ˉ'm1@pɣc w[ゾE¸>ܒAdd8)u]O1MiYh }}'bAjSpDvY-Y?Z endstream endobj 2339 0 obj << /Length 1803 /Filter /FlateDecode >> stream xڥ]oF콿Ke Vql!@j=\sF ҩN#eKdT<Gi?zuHYƳaAo|[j@oQ=7R-"?v#m/NgǛ͑Q)/Lv?x%'CAUr;OKߑe]*\GGi$AiQsA qymI"rݵULʂs͞jdA[ݭP,ì^~,? "kq3.t\hi*wUfr]Y Q%?t'dPMex1TA7r%l w~,Sm:-a̾Þ^UU%رݻhv_6q ^e;2/M ?e+0;MWM+tgqί^?i'( */FW1@^IPX]PB@1sAdpRB8hH>njdSx(YWgYs$*ȢN }1~n&"f chϸW[h).sk̺^Hlxmj&_ ̟ OXp$ rQUCpLT-- (Ո ֲ0&t|7!g&k 1  4ڵZxETz+LVrdzňUeg{4EfFi["(9 uLj^fgv&:Z)<#Hw#WEMQOL{bڬqq[E r ӯɩ_ 7{jPn $שǡ(Rn2f; u藄-̸t1F&{]'YCv4  t|Nr>̴pMWQEUY}uJbh Yɍ8 (g($ ,==h{=l]"tY\6s1u߬kE1=a8;a0%q˽KǀM@jk}:S69mf,C߶h-7[lx*"PiHҀgGGÉv. ksSxKVlݦh3[B(R#4vHp%DEd{{QQDM[A{iJH%}PCBݤ klD (P ^ iO<<ΘZ6+ 8yOAOnIYWrI8kh&)&73--0q^10xLOxͶi\_7׽G`.7e1,zlr> 5cqq5W5eGU@`_Mdaَ&+rZrilŹ jh V4>mT ) ܍]a}JOa18.Vx\rDYӯ C*ՒaAFө8/&8r*GsENz;1_$+sfqnT,v;-QLoUV;%q0qZ8*Vg3xЃcmL%4Iyo>}µ 1Kr]m@Jl=T623;ʡhA*!4Y X~-[~CxQ^4z qG z4 endstream endobj 2345 0 obj << /Length 1532 /Filter /FlateDecode >> stream xڭXKs6Wrw:S$$@.ҔMv8ž.I"_$I^zWl&f/gQ~XM/t"Xz˖jYL8ae)WDg2$Q&(Ɖ7s4k &Б޸^gD0ܱltGt^m->~a5[ZXz7JUm=\v~,!$$F#Z } ˞{=0cV]BduAD?ʼ) B<jPQGsXy@ױbQ}mp)B('.GD+.OOןB`p4io=k?$i;{_ZsiIIO$.C-/KF{RwT0񩽁T4{ J3wӎf-yYGge[FbNN7Pcʇ;hJvwS@=)>:Im J'ŸE٫4oi1! aˬh^#;h4.;5PI endstream endobj 2364 0 obj << /Length 1029 /Filter /FlateDecode >> stream xڝWێ6}߯PE4H!-b7}meTɑ-Y6Xf ċxEeEϽj۷r㹛< 0X|}x$ r%D涷Z>{O>!oG+45s,$fM*yDwA dYk!ž&#Sj+"' W#C{[ji @0FizeP0\5B9r/XV8?m a5B8ƱkJ oK]R2 v}߸w;kt}o1æ{oAT .> $R/$IHh!sZJװ#%dc{:\33DNܪ]KZly rYc)ϓCoߟ^ߢT,݊i>&^5FuW84⓽j&ߡOP  *j|SG;f⣚6=ucq߰`60=܁\ωo&+umwVay>@E| \Ni֥n]h 'rrueg`eA)aܞZbvg1tRw4l´C?>Áa:Yz:pI;pޗ=Dp!b- endstream endobj 2382 0 obj << /Length 1095 /Filter /FlateDecode >> stream xڭWMo8W"U{&`Pned&`K$jTKNl,5$<7w2I)v7~[l|{B;#9{q'_ ʗ#}K?.0اa7R* pE#qx3׌x#8:8 =ʅHY+u,\g4`i^ߐ5muQ!1h/[HL NxQ]) VW%J=e8t{V)B٥S/in䐉V^&*Y)_ۮ~ 9 ٪uUBn+H9nڟ(Z>ol>^C[Ώ˜'Y7g2i>\G)&&ŐbJnj7uaJnƳ|w&O?/UJnL /h}"W#J`,lkQV \=a,eKVhĊq M}2P5'wчϩp@`>0gD)-z_F`M5Ar\K0X( Z5 I3x{cM@U{;di۪r)+-ymUWp~`Cл+r'b0z  ??U뾎XzsS,LBWڙ3i$3*n7s.UKMoX,.->%'.`-mq0gyq0!ԾnMсu,4d*RJx4ysdbl:nFagx?gE 23gPni[׍aUjHi]f4@ݼ˙'NM՚r  )A;Lk0yʘV\zm]<* b2.6nӨN$^ 4Fm0h|×w[[^UJWqB>7PVUc$n䴩ך3v vF棊dvV1RW/WRU8z9xmF%dBӜy䌶>@蚃H<7iMzdDG2nbo|/ d endstream endobj 2265 0 obj << /Type /ObjStm /N 100 /First 943 /Length 2063 /Filter /FlateDecode >> stream xZK6W R&vM*Uv^h 3XHʏ5(x,%:Ah|rB c(Q8kP"XjVhx6y@B{̓ 4! ifLTB'̊"x/ W5fd:$1qRKO$ipפI$| *-uPP~Umda yb(FQ vwj92 < /)X.jVq)0 ³0>>B!or> O%CFW'!h%e |F:O[A" [/- . y]pKI3|Ay,4lP79e?SMpUHy~E ?lŔ1zעx*g(/?j|3v, 6w[oʦ{!nՆoѼf[?ܢxX߼_zodT[WU57?uܢ0/Q<Y^uժk9XXD'If^}~.w;\.!30i5ժ}8ã>m/fPNɬn.^Nn10:r BkRd9>gOG93 h<:" 1T雬EۮG'*%Ւޙ۪ioܸM[)P- o/"s*^pܫ& #9FNf0\a= 0 ~LuonɄ҇$UI:'~2ڋq"1:GwSNeӔ̈́:H$ (_NjTK'4FFZG .vzM*]i#f4* G$ZwUsX.)뉔 he㧄ǝJ|x,q`t%FSk 2!Xm'=DŽ )+s?l&admjJwޔ_~~ND%FGV$)E ȫ&vPkX+'23b]3cknWt+="B9E7]qGT}r; NC!ӐP0a( Ps8sSD $'2P{,> stream xڭWێ6}߯[)RH%ݠEQHa6QY;ɲeFji̙3?8H)s 6:>.͛{$+݈]+0m1ѻ?Jֲ\0JR1"4|v˼ɓLpf eRIJ Nb -i< "S䳔V\xi8 ?|*~;M Cvld5qB'ϪNZU𑡥yeVmA'-CUvR1 !Q!u9V sb9 {5L̇ɹs& SaT]h?3nk)Z'"+b,r £lEGń\X9A٤DG`f ՝T+O]8a~>Pfn< c\Yp 9%ipҢFDБmhvL_]+.x6.1 ^(抄 6<*)Dqީ9M=@4X60j}Dؾm2(g7W f#ju*5/v Iccvb#H']Ia$l*ȇHpS>vPNгV׋4uEQ\s#`=n\jx}3ԕ !@f?*Li,L< JFt/w+itFO:ً1^%gWf~1>c5{N endstream endobj 2424 0 obj << /Length 776 /Filter /FlateDecode >> stream xڝKs0L ţM2iN'baN~,1V [yV@Њ}[-nNz1žybi=/lde;R~8~_<ʕdK!~^|,v>9!')t~\LlM\&jX[.t.f˸I\  ]R_O> stream xWKo6WsŇ^zh %`iqXȒ*ɦC H8!83Ll{__>0'H0X@ evlj{N՝n$? )CgEFӎB{ XLdUQQqJNY%8\9K03>rҧWLMryݥѥLeFX[7zC&T;'YoSf.׮i)O Afd' ixf#>> 54:γ̍f&fd9X"6%sY½y;c4)+Lĸ7!8NӇ^r cO<}nfn{K"vXke̥SҮK rP,FrZe6ݼtS%`LHa1 _"2`J@Ws1.\֫a^~wko,&CK!MtscZ?Wٷ5{^ܙGyEGT TH9 rV7e],nS.L;Qׄkߖw[ێvg&Z?`_&LMΐ#|3TȈNi"a~M!K|); \ L,Mto2o~;[s1혦qs>Dd2rA2!"qTΙR#$$??ĕ(A@a0wӬU`!7 g } XkƿnY>z&/a endstream endobj 2443 0 obj << /Length 1897 /Filter /FlateDecode >> stream x]o6=oXDɖaK-Z ipLB<}qxGYvn lx/7`ÿ`0)i 3@}\r0G=̟n^] ? 7}V7L\jj8R(bW\G$}7|ɌH3E؝ I2" gD7YY q q"H&'m+fC,~UUj6./>$<;'F .oR}RD[4@ F􂘝A_EB3<nlhٔK}S@/biF(ʆk@*0BA\9A:%BDC LEF#Xt b!DQ#0 E+>Bj)'|dMM[{{hRs]kb''k_<,qf0ȰHP*t_l.uvL jd rv")-)8-.(#b%VU̚Þd$cH'i$eĹ31Rįi q!;)d,F/&9K J=0}( h:4q=JQ"x&v#N57[p#7LIKI]$ h2&A>]PUPC3^Г4%mFe3s8A61y׊/n샋J *CRR <7}&2gې8؂sDqկI!Ze b|\'ޑk ]äQ}bOBq~EX$g'eSn e0N(+5Pxb9byu88`Yl3Ef|4G4afP^rca9u;ړb; 8KT4( b**3GNwFvxM̅o»ؓ D*C$2=+sqAɊ[c uRja±'m\d-10z1hvE8Rg`?v9uJ#4{q){eY-Us\ޤ=z Uso oVףH\Uɉ\ڢnW0AV^h"2opӍ=lc-N\7R{;0y4yIim;4>3994םB>r% /']uVt_B$#Ѧ;=+wodק]P<ӵ:W߳4;եfwٺnx.i=wFw<&9݂c{c'rω~ -ieosLٙx1唻1̳C7VڶhQŖJ*]kmjݛK#ԎJy#yǖnt,K c ?CgRl^AP e!ӻlh\z ]ԿZ~BFw#]CS+moe@ endstream endobj 2448 0 obj << /Length 1242 /Filter /FlateDecode >> stream xXo6_G T}K.d[h0dh$j.{QINtq70>x;-\yHYb[* \= ruM-> BHv+ˊ潯FDs0 5-o9;n,;g^Ix]0 8Ib:8-YQK+iEdFS:4u&Ys* $bsQk .ՁQZ:#򓥇 ;>u2FP4[fB;(5{]FyYM nhht4&>Zw=DE[`Ҿ]S9`p].x]!^x9|yhJ"[3cYuFcȲ=8-eZ%u[ .Hӛg.0%8Uh%-Oހυ\j$g1Ťc0ƪ*)[1&[QT yȽJ^DwpW@^ҢPf3ZYi@BL_"$sR?$޷yëjX}j!Ae2ݧ%4"BK% 1 5tiN`VP6sn诪 ;mHT%NvFԵ {OԵ6~T^io(!"F;I*?mѾ#se|X4,̍=BEH" LtiY+JO ZlXl ]A_15wȤ纡ӓL7Mgxi+1$gtx4CR G^wMtmzmф6 hL5HNr޹>T+U8w0tl٨'pT!,w3087hTW:<p蘀fwwA?fShw/- endstream endobj 2454 0 obj << /Length 1623 /Filter /FlateDecode >> stream xXKsF WhzZΘ,ߏtzHҦ$$a-$R%__`(iHMڎgLgYyEjF7 Dշod^v95uݱkQu(Xq8a/!{sa$> ro50<9<.gA.c/b.B7IC6畐 з\TY9 2sfnyAB#g{(H?rW>72ө}8S@G?m+OVڪ{e] l9s/ (}MUuVǣ;w~MÉ(Uﴑ %ZK>WMklǫga " շ+E@K"ӥ|Q?ξ.0+ۖO#TyjdS/b1<+߮uE).ݺi!ravMB]p+*A7gld^-x,fV@הkʉ ɇ*v+x ԘObwqצ/#ݥ8˜ F"M0{ _OLF"e ޞhqݣ̀jх }_3H6j<7ȝ: Q'Ŧ I١{'f@9A:lƾ\+u6TFY,N>1Ֆةxysa/VlZ 8~@Sm= 9rD[t4-؏L紜4.|젯\CE%qEF3Ǻ$#qzW"imZ`QtgX rRh[9͞GYR K*/4Z? ;(׶;"dw< |{~_ 1> stream xY_6 OGh%9=t6t r- _\9vj+ۏ迱s)6pd#ia̋}o9Em7]<7x C%.{߯oQJ4c歷}VԻ#/wAj䜓RI^yުTQeb',^_|ú=S'RP?d^ ʸp"޽.jX!L,"N*Ks\)F(y;A6Vemޑ^Fc) B'D8ff ɦL d26w )AD{RMiIRU9\>dTj,R$?.tYI"U5'eKٝ79+d{xIn ȳZS˒hFYHSMyR$h)"`!OlC'ٜM+o~f!<֔~F{lsoꁱۀd go ۓ*͊iX+dQay8P:`u` 10ӝGO- n)Qz;TLʢenNM hHLO4I9QD|r~i@"܅G=䝅;@}'ٓIz{\NǙؕ̇@ۅ"A&00@`L Wb>!/QxjuqnS5Jn%Ńz#zYVLPB ((+IORwnyҡtak} νrhz/uu貚q=ތs}L91Tig6ҞZ֪5*%R6q.ąO}UiGU5 cNka ɜN`cS}p+T|4:>1 R]țjMwQ'-f@OE nr??d@⚤(+z WHRJsޕ/<#1nJ(&L U |y3"ET@UF9}(l2Uk벮zc}:iIeIN?=Q&cAMä2+zRx b,4Xq7atp& 99l gZW QoIy͋T6`A _xYn;lp+SXBRWZ[+ecr:J> ! .}U8$"!Dl0Q`&F95r]uYi kW =PYj+Ӄ ]W=w  tƪXKt!tSKwmLHsۜk)uP W&3ص8no"?H&V K endstream endobj 2383 0 obj << /Type /ObjStm /N 100 /First 971 /Length 2430 /Filter /FlateDecode >> stream xZmo_9 \!my %UZ{ ήؼ03=C.55X g AƇN `bwJB!+sNΜ'LNو-yʖ V`fIHb\,)q?A%C33걨jHT2XBVOr:6%VÈ`/jLJzETvT6Qr6( krYv!* S.oa6ʆ6al23a}bEgqވK>F-oSy* jv`l$cs0aT`՚ϊuʙ\)&HP)R Iw)YQ6ᭉdU<"XKdd`bh+Ġ<#O&9[/uXLE -F3uslDBXrspW:Iږ)2'k6f~k?zad:esTxXHXoT47]7M;[Mu./ ~.Wa P_QK|1Zy`,wT0q$H 74~$ƙ8sgyӊ4jj 0lj6`8`'sg;JpsA^P|NfdFO`F7ivF-Y-,sbZYi6՛(Ӌ,Ӿ:B%kII/i}%/vsYir@B-8yydD@hшhDS4)8͏8S=dɣJ@}!Jd:vUvJ@#PmiXlU-4NJE*F>^phTl?QsErI?~Te۷?+h}D3˯T_=@N4c/nv Yq 7N١ > stream xXo6 ~_GP{%mw؀"o{pm%ͱ:^#E9%fCQĦH":_L}xu> 7f4Oo`ˌ(G)/JY뷆ot='c'YL9)r#'x PԾ햧6it7:NDV|Y~8Ed_ pOٸLej H@٘m&Tuͣ`2(Z>ksF.k@ hWcws- R$n On /m1 h#Am,\E3gtŇau89*i2> J5nVƳ<{ eq,ib(JI~ӊ\ʢѣO?( EiK6 4Iw{48AYǀ7haАw`"67*bP4uO>uasjѦrF޾|g/SR_K^{̒Pݦ?~ESW~>޺֜1tþt3mXABǴ[vgpش,x1Ĭ:Sg_u+cN9כFhN 7wZJEi7qZ'ȣ#x*6&9DqSEg%~͍8A2ն2WK(>a]_H\ endstream endobj 2470 0 obj << /Length 1516 /Filter /FlateDecode >> stream xYK60zHv_@4HZac6SYrEyN%˶d'MӤ,JC΃7|2'iz(Wy[/'pr.=fW? ?٢,ܱ+ida Ǎ}5 Yr.7Hy쳀;/gOu: xKPĺ,*ѐ4eO/ `sKg8%vI]̨.(;.lsi`6)lr|ù#?9W~aO&Dc5Mr@搹o[eb%Ir_篕֪\B/qkpZֲ^Jx?f :2oV#ѠQXFG`üR>]ʈ5mMaԃhcFM28Xd kp4X*R#G*D iлsȔ=lK!uӾjq2Ƕ%V!\k4baDSyO3KsXӂdEM_EA՘Gl4Ӭn-j1(dٙQbK=E e6x$+m Btxou/>t~}FE|qM2dQ%;T mǰPa8@-A@ oѨ99pƍq(s듳~eǵ4|`V·Yp J4twpHaxpt(FpDtnS6sf{<ܬTVWOw^X!YJXjnVs̀64cKKvW;T_miaLtIa=L|gPK5ƒ($n>#L t6ŎFԦ,`5=VZ0袁.v.621SvrBg`nb5̭+_? endstream endobj 2475 0 obj << /Length 1366 /Filter /FlateDecode >> stream xYKo6WV TQԳh AZ@ݛhō(yrHiѻn8-x)r8f8O[ԳbB4HʓR_s3ys/ahaM[ݔ&nѫ";BJ OQ7tGZo1=oW7Ù_(K| 4( \L.q}7rq`;am=kmV =0`tXl)-I7-]E-(A;) Sk5hJu+ 47E!H=Bo8qm'nb9Bo8 CHtmaUʪ 1jX8wLa}V:Nkhnk;¦(5RN?t-6fjeJGER- QiPV@"ba 8u!n * wT3uvMGdab]Ƒq9e"^8K!M(o-(?Zz1:f8 }Hy:=6EЉCqL{LrbmEP)3g ׊ցS1ZeTZ1RuhБY=zKk~b}A||Ag]\,D΄VL 3s+O};S?CCQY_l{;!Mu\{\U+ސ؆#gI%F%,jm;+nJYb gMudt|>V\;VRiOk0i!p?'zܱEX<1N% L|؟GbZw0  /q֞V\zh5Wnat(9qhzWI8P 9-]SX2D]Zw^~sM߅6[ endstream endobj 2482 0 obj << /Length 1658 /Filter /FlateDecode >> stream xXݏD"⅍t6ZATJZ '^>&18v\zfvf8%GT۳;3~la.doRP㋴DDi -h䛓n΁mz%ɧ$Lĉ@QhD…4KqoEV>;QRUNkK識@HC/E'SEK'{\zobocj[ 0}-GZwHK^q,Aߍ 4e}Ip)WP@j/D:U&rF2: NTy͌sݱ"h SHkdy^+PQЀ$YFC30X7,{hîjXUmfVբ=2.~7eJW05$CmNXu'@A ?1vK'3G+f )u`*)!s*T< `7M^nGCB")XPӽ<{Ũk[f: MO)me4yZϞVְ!v}v뺷$ P9J5ݫ 0G{?;=wՇkfe%="#X,L1Nw!'A 7>g7D$Ou=C8o#Ag;7kuDT(kG3u'k\WE3CwT}?ۨ@tgh0\ W(xH۠8ݔ>0c`D.aP)e <NbDl}r1g|SwI(F.띹EOS!}{t3Svug^PaNNs! GiBѴF9T@`1`)Rr< hG-iKaҽ*P61nG7 endstream endobj 2487 0 obj << /Length 1982 /Filter /FlateDecode >> stream xko6{/XӖCE tRocӶ6Y(iw;aN2`@&E~0(p4F8I6Z^fUmF4y"s88q՛4?hZFVTI^x$w5-ȵT\$iE݋׋4H<.Fa@S7?.#>[V8=-F3@<M؏oߌkʥ:> yF8aȀ`F3i-z?ͰrnJ A} uۭWkp7%ës7$C}߿ 40ޔWuF&% 5|?c}Qfv /MԟgmMGRooψXObPLF}{ ӡ 5Z[.YsA7VO5 IgjOEb ># |䐩8,STte  :Y ENh|%TҊ `E Թ28ې4JӺexͦ5ҙdޮ2%ͪR`pu\CsnԐPtꉢaV(}7K:ny9 OWr;ꞷ&^Qm%֔nLY/QpJDk|EZA8sAZ]kt{lٲ\O;̹ 7Aإ0Z|']$%Aps Qן\~9|oZQBD(Dzīr/ Ԁ1mR`0Pn2DY*HZ|M[U]aWUV:l5; 7(0a 7E^BܹR H Vc cߑC6B=-DFU'SH1TD ǰ)x.h .+K:)ǀRU-!t]19ooqEobh>|}6BDùG2& 9pf d Ryn4 n:$8柙 '#89 6l5?qҔhrZ%OuK.RsQY6U+"DAj*4lf|mYvV)QBj~ܒľ#&FIB5kըUWʥc6prIf2E})*aMO1|.דr#Fy,Ў25͎Og`/r5ׁFFkH?{&=wWR,QQ&BZ![#2eUT7l[zEGտz.g?hC̷-["?qeVЯi9xߍlCMGMPuW?,ek endstream endobj 2491 0 obj << /Length 2033 /Filter /FlateDecode >> stream xڽYݏ6_aܓ UQ{ɵ9WI+J7J-g>3XdbE~~Xj[j~H,b-޻ <9 M&[>{z_!ʒ,>ЁV3-T-aa˹&>,--R ]@J]܀a1wG\ڴب0ێR4^? SAU Bf A}{/_̈W@NIc%:F$D,M&)e/γlHS!{?z8pa2Ed& WH9"Q}w"iq"WӏۆEJ>.c=෥»ÏЌEA>ALEALBZi ,!2cOzUQ @\ tpWvwUXoV0[c>Ie3 -qx/=RcإeNYzpyXڵKy0hvDZ,nmg'.9{;i){(& syC+ Q5A 6MOd=b96xf%}Ge(nju:ڵdžF-] AkN.5R|nuxU [۬}9&Y)YVM0’& L$INnaCZnQCL/a -\8S-.QUPH< N:⤺400ɩBCΔIj[ͯ]Ir*hF%K~vt /;~GI>8-i @|tKkQs.'8 rR %Ih5tGYޱ~J?9eO]Lu:>+ ?+׻g~*cZ]⊃^n<ܻ@BZgk?r|ұ6jyeiTן'rD]".7#Nz^ͩ6kAڄlX A^b>Pa;ut`[mɐ;hey%*0=/ .=bc]*ӑX'G1`xj$0PO8{˰,piU1 '?KzXĚ =:k]]z6OmN멙v]Lz]^6n#.`&6GrܴB_1<=I~8``MjR+ND<`*|KLR%<J|(ӦzmߵF/oCjQ쉟N䳴q_nwG0݌'B5zr_@ջo~Q|E?KUOA?3®7/dギ{?,X, endstream endobj 2496 0 obj << /Length 1508 /Filter /FlateDecode >> stream xYMs6Whz 8ARTgzHqn2.ESÞw)@\,v𓣉;+Lhf4Gl;?M? t;MW4]xYҲR"}?o>ѥmXBzѻꛁ=8|d]䍤r\0 #ߑ'"si\:6DS6קșGHՙ,!5M ҙl|Ԭ:J] ek&ns]}Ͻpܶ&(^ӆzT;ߚȉxŴ+R(ovu Oᕭ`2Tl*hKEYtXpƢ}W"JRSCRhCAzؚM Ǻ2޴eM9uS֤jM4OzOyԏ2FkX/Wܴ%@%3gu^"ACc|E8 C$C aD*,ӓQ)*l$`fel-#Ѿ#6@Ml‡^Q!, i膽O':39ы7n=oCA|iʾX\ G70CVVgԽ}3_5Vy:]Г56'ihM1ųEdESXb8fIcEyDZU/0v8@*ZDzVԻ`Bz0QϹl!y_4Z78OIЕp/u`rgCVq ̒lז3tɆgLx܋)*u^htE} IS7Q$.uX Br "Uo,2[ì"Gݸtmڞ+Cgb)BRJ8~ $*7\C"BA$] !~`X)xb"\Ǹ||5WTDf՞I,Ib{}),-~ ޓGr 6 jIWN"P|zC<߶+$up/ `,xEpc&N0(ZpC@e f4|q<Ǖ{w;\;5AvXwP-v_*2Y>dt.6ip+q[u?^C78N'b֎`uҽ ~w('N:v~ \$w*%;t䶠hRASPPߊ8ۓ:u7jGS=9up-B:Z>,Gd=z{Yonƒ^x$fַΫ%4&q89x^T|'\o׽ =Nu4tڿK endstream endobj 2500 0 obj << /Length 1305 /Filter /FlateDecode >> stream xXYo8~ϯ#DxHH$-@nb<6m+DGb;4W@ Gw"p̅3|=[.rzk'w!>8erUcHz8sY|*]F$܋5J8%:BN(8&]VʓrQ4yH+3f(J3Cn$fd%TY&.~>W@U DB1D7K; B|drbr ΎV0LuU;Ճ1y,lƲM粚o}U;_zi_TI&͔[ NśNE'r3>7>̫i$ԣ 3 L1|H|YR:$|t3!pi-2$efV&8W_F^֝P#Wt>MG*} egh(&(:ĘvԚMD;'kFH+;'Vi]5u曣"kv d2UKf v>Rڜ{Ƙ/|!Y '42"WV*&&$1ּYN[muWSTDUSuUenËGiSٱ.|a0oTC>j!Q܍GTV`qEp%\E>T_q^>i/2rCec3@pdeQ d(q4Zfv˵`k2pf[E¨,LJp 'Q]N4[RʹE]fe-gfڶUuUZ/ .AcK:43 B6S09FgvcjbN &c!_s7jW}y<q,JtzsvJW.02ja7f"ߞZ&mj\FP_5Ydwx{ O[S{os]ȐbFC>l/|g/G΍irOMBd#PE2:W|=u]7)[b::DjpzQPuoj4 5jV7/@r,XPeTW {T~mx)CNܐ/K͵@ZUH6A6>Lܾ{jo8z3XP"BGe> stream xXK6"U[EsشM(=peBW:C)K ,!.\E.bw Yd啫zwﮨAHY^}6 uR7pjqO~ܰeO-;Br{OU-ۋi/^ =_'%OKEIP?@sxYvydyɝMJ;7' (q.65؟ՃV:izRZGܓ͔=y5) [ IyF;`í K>;m礚TSg%N74x2︀p"6] ^Lnʂ#Zk[,7 z7;.ҳiC1ٷ|ҲR柌p;w"c\g#€8]|Dwy '{;_BcdpĀu'&hB`ވ w.[T8od>*y$a1d:\l?%E5Vz'OOA `HFfzEV lct]Klqxvb_s,E{\BzBU IIgGI t% niThNg{$W"L-{˪6{E{f:3~3`3v68醳'9!2oۼZj pȈ^OOzLO&dB=Ҋfr2̺4ґ 55!Ws˖haE%6_AտpBb(~y\O11-3ZS1xdbUYNV+#  LF/N *Y7jF_\2X |;S`"(@;إ#RNb*|gEt,^ @W ֚X7>۾!Y3SqDI2ʶ} &toSeZdU8}}>|8gϝx 2 o;Oֳ PI, GAQep}ٲzdh„}٩XTzY:z=ħQQ|. *>(qg?3J&sOaX9OXLuƧ&3@Ǚ%jǑŦ=w>*~USv|dFʚM4]@tډ9ǯ-<ۭ`iŠ endstream endobj 2508 0 obj << /Length 1629 /Filter /FlateDecode >> stream xXKs6W͘ 7`'iǝ&mmRӡ%b"U Eʠi::ŷo`s2$Aea,6GTG7>bf ѫahƜj(jt.u\ HzaDN~?|| (~ gC < 8 =]>Ybým̾AzY~1?r.?pA,6f^E>.r*׭4K!"?CL`"3mKƺ9.PK*+8lS/u\8i;ZT<坫4]j:"-ot?+<D-pR/:Fv!A@P뿯3?!|!kjдȕ\[^f4^OjP :̅,sl1npcxXyeyS+hv|Er=sOɆ`H=|UGM9y&iHramY, 0BA 0nA-70jh`@=V vOݓX b䳕7ŎMUޖҭb9y5epB#`_FniM 8)"/vA=LP_y6GNn?v.agb^3'̘Ssu V8'J[9 PTG#Oo&(o5Ku*%hDJ8w%;[!N!ri@< FkRDn+)Vj}qb-KƮ5ow,?A0;1XKh:Oǔ&🗷Vߌ!.{nZor,ycح^t*ӟz17|\**bpVqjWhIbovs.ܯձ?hS0jP>18vBd/ 8vD,"@hrk[BMl<)gCΛns."By7*CnmM,Id)1/ep?{1sRɓ?/Ms]vt Oj=@u:E4P B̭;yKͮHtIVҟ\ݼphrVm[UԔ,;en%4[!ÓSP,O&iڢ *"yŻC4HQpD $+텕zA0Ec L-cy-hU_qٜhXW ,ftaM,c!uUCPjGE C TZ&XQmk΅ovhnў} X<;H&#h;x y#y{Tp؎L<Sgu1ƈջya&W;uY}a:9/:5 endstream endobj 2512 0 obj << /Length 1615 /Filter /FlateDecode >> stream xYo6_"Mߖ M. aHHB<}Hݑ'Y%i( G&cMLgMBs2u#tI0%XMEtXwV[\M,К,]VxrǮ|[BaMw]Q["Lڧ,Zm W &#t~*ta5mJTFsM,@8gtzD=wmcū$R ug XIqeg#aay] 䱷qB]T4ٽ:4byw{H+wSځ{0q;ܗ@IQ%=e7v(h쫅7ӯJPB^  #Rt:j N#ef6ȗ]r޽6-a2k9^an6#n#fNT1n~ [/֊bqoZn ?Ǚo̓ +@ZGlʆ )YҋdM"l*ᓚrʁ23UA NՔjaHeV&t^5jz >W4eSTovaWZx+fiJ"ΦWwV e(u?@yI ^Nb؅WP՛ݸ-ڇwYe '}+SU߅)fֆ|{Uۊخ$5m=EH((ányJٽ'c>B %^G֙Ib:؛wDl c/Wr+5.3tC)p%V=Xk&QzOڳDb)Ҙ~/.Q>E֗Czot)- ~Pz]Ɇu궼 u}DYp(B .bA燯c6˓]u;o_J*qRV=+MzNCࠁi#R+F%(1a-.G6BEx>@.ƾ Pv! p!b9^~b4p46y7S]P6$ѤZL7hEؿGиSײkm޽ ;6,п^V>fn7o@f۟ҋ8>f1"2pq_ S?FiZ7/U@8h=h+}z:H~umcч kO endstream endobj 2516 0 obj << /Length 1509 /Filter /FlateDecode >> stream xXێ6}߯[)RE],Eri8@Mh+:_)˲v7n&@ș39̅?>[eϒU5^^p=φ`ŏ/p]g.lu34JgY&6l,}dA'hJFVl/|n}Xu = t7it܄FjsH67Ȱ$ YJuw1) $IW$!=R498LنxR6$C0ll-}(jg6y" 㩂uRzbM4)hynBj}qj vN R4x'"Pe0ϱU )Em:z'^`Mji`IUv0G lͱyS1iRJ re u)rɹ4[y A otz)Q%tx"U?<̩KCU1S`& k8ַJ0 [澻/\罀LBD1DAo\mkUIqw q_\Kɸ#;hᯒ{38y)i7)o%vAJЀEu^)tȒM}n+5Unb{$@W\L&tkC첹J$'pS/Ӫ?gM`4ד߂=_*0 endstream endobj 2461 0 obj << /Type /ObjStm /N 100 /First 926 /Length 1422 /Filter /FlateDecode >> stream xYMo7W^(r3$#@@AQC*H}PNH[sN 04KPT]pD]TvQmAőᡚ3g'L.D\4TX.W2!JB&iO9QPԬGfBH 8iw)H.J jP sNURs ^,l*q*X@I4;xМ7y IWsJ ixH9<@2Ij>RK[+}F8FSQ 8fPS# f9 CPMPaM{u.gkdބ8|,^!EJRhx&U@%c[IL؁$bqK :nL-iJA؋HBpdb^jsI,,/o"kQXZu#I.! -sU|ZD,`聀b!ż")a9QCjkiL'6 L"ggsw̨җnǛ?Y {^ܼ]Q8]2'>'F;G7yH½|^obf? %ϡ#]{zbl{{yuUM™WH|ai#[yqO~\zxFJ[_=gHR!TdvZ=R4σ})7$E%] 0'KH uWN2o9M)>χ)@Nc"0%qO+܅]6tYwBI}?xvq{ fݮ>nfx\cXygCr`& ٪5,~mo/wcmumv RAv[M`NFb)I&Q\AzOw" |2zqRh*C|_3:8x=&G/SҀ\s(!y99V?%pH(N@ݑ@Q 2nqvF>0f Y~rlnWng#:}`E!;v8$7tcƒ㜄2o}DPxc&oW.'1M0Yhhx8Wz!&hD8pq($QDhHT\~ endstream endobj 2522 0 obj << /Length 1729 /Filter /FlateDecode >> stream xYK62R=M@"Ch^+d_!g(Q]'E A,I y|{ yY"-\/pGt6O7WE u[lMV7y-ovVliad+\x÷Uʗ{k淫7?Q8Iy"]/qAa2]WmYwS`N¡k' (8P]UFN j; ZKsdxb+f\]ɛ.xu;$Ȑf@ۧ\1cL~0Sx:̙)Y3%h&I2QF%!U7cX1-72*0֤CE+Up~8cBXBr|+S?J c-rjBE"K<lY`;Iw%/2|{PeЪjz7 ų{.)W, Wc^\#@אBN9e{UED$~R[筐5-).ֆ™Jy\H3^@K&YqcAZ?AZ^OS݈$eYakԺ @hT+MV*C,oz: kGyu7tʹyׄb%ϦC"6 4'R؊i.3Y($;|o LGsːi^=xh9F)1U}DѨ&Ό?pql&݌GšeK6z @\CTF5srp$6u9_""XD"y!0'ZP)ԕW]vh[=!=!@0+K5LԃdKn щ,LNG}zPpqnbƠTM3D+Ĥ~#ug8hO_ Fdx9mN_y; endstream endobj 2526 0 obj << /Length 2115 /Filter /FlateDecode >> stream xYY6~_Qo^[>ʵ>dgv$IaA'j[嬏,OOׇ)ծIԃuP)HU mf>7E"~Cw_BFËNMpm9C^(8m$IީҪ-( 8x=S!>Q8|"].6Q KI I"f+-Mյ(VIq Z{}#g( i*g(, bFDNUgz80#&<ᑆw=+M(jI-n=O+0J>үU{oN\~Ӱ TvSK }+壊6)D׫kD"KB n{%ɯz궝ԊUãEDjNU{-i88͘4 5.iIxUK0߳PAg>gʉiD1ӪypW3XW㎃Hm%}o@(@_v HO0EFr>dg8?גM'EQ8 4Wj;;'~%?TS꺢`)£Ys?TŮ- h5odB;BQwE}[v ,Aϫ*9HE$11|w{7moJdԕ$V#w{>1^Q @ bHO18d[*]?Q754=E/i&@/ Za+ zO!΂éB3dAuZ|ppD^utC}n74 b"p&4ǦC[}lz\[wpXl14I ܲj=yʰjհ/ThEw{ ZU|4f՘eޮ[~rˀp:9s~]כUj^W泗|g3GJ8fUdE| ź y%8F 7Rf0ժ|]t]u#.3cJA=qC`R5y2Mj8Ø+p7ۦBx5XAATRx1ɓ~ϸPq'*Y]"5J7 )dъ[^W2gj?\t62|2qF,15cP[+s U %|0ٯ endstream endobj 2530 0 obj << /Length 1343 /Filter /FlateDecode >> stream xXKo6W(evE(9(2Ñ %YlA>"g .C>WzuQ~4ų-=]OJbOJ5CƥUΒZt)Sp3ɿGOE3$lĵJ٥G 6puU*V[4"b1;npl(Y `@ &>_2a0=wg#3rE`pЧ#p^-43VFh3hZN%^ .P)RaƸ/(>w-wᓺQ2إ|tw\tOE@4B^,G.bryQ=iHp-C YSM4.ÃїQIITw9(Ёȑf'웝]+t:++C|crW;ߎ_Mk^mG^'kW|l#Q;W3sI3ncH== ǟN ſ0tW&4W|`|<;̿1؂Fl#:o,\#:]`ѮRm?e5Q(6M(~Jd]a@J`mt{7&.wXbS\w@&Dz-B\鷞q&Z3^هr;ֹ^B||u GlEP endstream endobj 2535 0 obj << /Length 1744 /Filter /FlateDecode >> stream xYKo8W"%!>]lh}s{`,:V#Si~g8,RlbQyr> Y>,7 zwfFθsQ^-~yE3rf+VY͝ Xra.|OFVRcy,_Yv:#qHu?yƺE<ɺ]܉>J4yZKh˩Aixcm-))VB4/=m LeEc ( m.̘9׸O[bI3*1MjO<bRdEhM.G05ZT: C|y5*˺)|=kmkL ԉ*X2ivYC_}ubUE; |`Rk `Klyޞ;/В4blKP98GF(&Ή37@n #UjZsc^[-2#ˑci:,b~+y ʊ8xh9$E`W mad9fM :c%S ʺ&p~dMeYAPEMM[DI br~DS˶ OϜd!-(v!ދs@)ۂ f?yJ={{l/f]C?g>!G1vFTY}Sjb`SRka{w^C`;~S҈7zG endstream endobj 2539 0 obj << /Length 1075 /Filter /FlateDecode >> stream xXK6Б")Y*C_[XH-Tחál+?b7`ÙoP^PǂsΣ\dAV.~aN/4mF9YXe$l},䜓Y(DB~ JijsPه7-v>8h>A54eQ,LҘlAw8$<cq,dhj 涪4,ʓ$hv蝟W[><4)-J{)WK!8( B"0W1d0$#\rƎ[vjc|k]U~pgwy6t$)T҈R&Vfgd*]opG~Ѝ> CLjH%D[F8; [4\V/Da9Ȕ}E/4鼘Xڱa [Kda2\L VNn];vտ#GSM&6l fȤ*|6>ag9,X~f$6A<#<ٞB> stream xYݏFKA:( ,VM?UJ.y؃,b}wi`vfw>-`F٢\-Wy8]^} c)gS5|k81B'k"kÁZUw`wj8n^Uهfr~Ε#qn,2{K{[+u6%~`,#iVF+zѻ->JE;`*M]ETt7g2W+$0B3_wC zKn(Dgf;,[N% C$p~ Sʢ*e>EBԵe޻'e  GD|׼L[wS`p%[s U/#5?| lM`sGX٩)o,,oŐQ CsTS!>ٌ);+Yn^񐳩ߏUGqlt4e47\(z8.VԢL ؇vo|`h8^̆f‚{ٳj#s!ݓo5-12&vډZ3 \9ߡ%H,x7tƼy1` 'fP{B=!0go,iۣK]Z(J88K^alWaՒ:z䙍d]O> stream xXo6~_a%20i~Ҁ=tZt!Ai[$$.w;r*'inA"}ߝ$f1YϖiY1ׯ.˅ $\]|2g"ʸfjWjoi0oiZn}-ayꗋW3$yq(uBQ1[Y$Ҍ HXd\Yqme $CfUHj'nMoܞئmP~_HVZA4ztXᙝkoCPZNY^p2mS{B$7U-y2X*{\]U2+"mO J,#ꡓ| ܹۓ[ QH]BwGZf$V33h*/D;-] fieg }dHڊU#rp<B"Q*X]%QRg lIוPx43IcETyc$[j2mkpX ݴK֪۷Jv [v^iUzRV~]S򩫝ˡ2'8Z0ItP6!zF-e 3>ם>I{)n Doe MhpeH)@YFFX)D ogiNvo;{oCKE G?e߼\-W͙>$74%< fYy<\gq {޹Pf"v&w$0|8(BCd <.)$+K^;)5I##~zbO0o+m8];$<6,ud3 J l`C }yp;Xx]v"~@ lقh,\4N{L<ɲc(QυSz2{>p +3JR鮲@enC{}Ә};N 3_x IjК}rqz3MSr(wGjR$|a)ҢWUqv"9q8 3%u+ 2-hն<[z+^~[뗖4zSۊ9:3$8,@OAhe-$-ZGHYyoQB31*Jt?R2!(ic8,uTP_'2.ҨA < Lq!FI .o ձ_>г=wpg<ײmQţWP3tDi_& endstream endobj 2554 0 obj << /Length 1439 /Filter /FlateDecode >> stream xXK60r) T=([.CW`bKɁY4( %M`"pf(~dLq/x:ɶ']՗9 ^Oɯd"XojO.؋^,mqsZVzC/fA  )HV_FP%D#x0 ]U5 R3Ǚ5( [iW^ppU93V7ZD g~Ds qZ04VkF8M{w9M9 $-5;^fn5$t#w[ 4`Ae48Mc&>"dg9xI}Ci{+ ՌdDQ%irLC*%MΖ2I⺕BMў0p`k̴ix4QIxΖ!nS㼀Rd`ՖnX7qpa2ъx' ZDU -dpd-)_T v@|2boۨr $hP9-F)x$&3&F4]մZ*Fj-Wq$lM j%Bơ:8@_ cͬ%Xv  #Wv6apv s(nA {Lt%5z>ӄH:RÜH r=R٫=Vic#7:"ޤZxv!koګ>aD=xG>Z;Y}gM.:{Qv3`4T9Juӡu=N @㕢yg,^/|#8stFUԕZ=Wc &ϩ*[chOM+z{i54 U4e!sZJ#Et!fWg,hQ+,LǟrimnSdnUK<-@yBvy7 JuYƅ6G'$e~ Osыl n_ӫ=0eiX:tvQ@輣8$moInʽ`㰅Uʥk-ap Y;ŷ }m Xh<d>lDd>+= 8jJǝ=XDG ~}?%3Ε_$ptKH?vz{g+Q/Ǫ:茼f1l!<惁^F.}"q&p$bwsRP_/4K{e<-|޿+hwh:"B~Ι endstream endobj 2558 0 obj << /Length 1786 /Filter /FlateDecode >> stream xYo6~_@{ҴȰA>0bO,ɢ yM}<2Ć?g'sϳ~4Ye'n-r!:?/O~|Ƕ™,ﻮ䖝oJ<MgWחp'e̝;|{qŲ3pgSG9NdE0- `˪WHΜqm.^5Նk cD]'~O "_ua4bGS#g t 䥨6P`}  Ncr7 A躽]d7w(iD͓c 3dQi׫m7/h[a"Nb4fɊ2A:-APc:_Uq0iw0W<)Q:/*j͑;6f,3W"˵ձ!R_tmmBGv/|>w-BX p5e}QwֹwTl B{{l605[ƩpziIA ~T`IC ʦLĹXoaVSA+p=i#6MAI4YS%ڜNU.YT;EAMϡUqr5V)mL e2<(+rۡk fy27"M )yxie{^Νzh%!0T "ݥE&7G2@)wUά:KJR+q":} L ,dNkv'L#pRcKl// kYVܤ[Af bHy𘞤,t(f7*Ǖ7$+KH*ٍS Ի;/b.ꅫkd (x\cIs4mw)r#{"cNBSWlu^I}@h;:_5E\dSi,WDD^Ј*+Ӟ{([`_~a#VzyGȅЧC2vqv~oB+A=PjxSf<̰yFmJBIE6yĆyNM By,cQm˒j.@i>\_\Z*~ESI2Iw@b@J!?¹* 2d;\՜iJ'⃞9d<{%] n)!ۖ}쏽s4= endstream endobj 2562 0 obj << /Length 1048 /Filter /FlateDecode >> stream x_o6) 8RliZd!Ffl52eR$%~r7N5J*9OIxaϋ4Ot%lOsR̲r8R&CБm[S5sd0,vZsѥsb]BHmʍ5g!n@Fv{t$ {Ɠu(`Vڛ:cݫ7q#v#uuleTҘ!.R#~ ɭH3^;M4OGR8{EkwJ\Gj ; tіUKPl]Ue[=~! jgA*jc.>E5Z")BѢkA^ʵ*KRd6!odKPdqPa35"&3S)r5{4;6f,e4[-,NWn\zW$sil-Y̯TφR!cfl2F(!'[BA z+S @f ݯ֕O;'\ǒ % ^Jfݯ1=SQ,=0X<,Er)/)%quH_xZ apˮ$X9Zi v>U l ;$K3CSЮuYq4@{ŞyIk|οky}O$3m!N&֡Y?~(GUyu*{cNT;@G@.k h #Lt9Dp4E> XE,J3{-]ҵ_u^wѰ5xpuyuyh'Om3k[K9I> stream xWIo6W=Q@(QzM5ыgL;dʥ_EY3s0{+)`A$q<`Ej<;~[Bqj,LT2TGq/˔4RbKy5\-߰HuBNpF;bI84X)l%usF}v#q5Ď;/>Sm`Bc 3 H0A٠,f19lG"pI4zٹ̟nPl^)5pڶR%du/f?EH%ZrFGZL ^uFxzã+xZ']z~8m80,њ{' A;> stream x͘Mk$7+tL.C,%eC2v}jvO|0Vk.J!IJ!+IxNh/?n:LA :Cii|O0H4yJ]L d(@ *5`hbI86 w1%5Ȫx FkA0Wnf8_`tCN2 3\13˹)@yбQrie22&˽?l@RCÄ?:J|^Ơ+Z I V~CcPШ Oe @eM9![>hYG0"pi%Ṽ*%O]ܺbYr Ma)QW,@b  鲔 R@-ރqyO둂]iͣP(Dj U;Pgp 2" z1!djSq7A8 cXjPh8:Vȍa˯a@P}|>yM0EY4ȳo7(zc&&F?OͷpFWcӘ-d}pL+ q"úxeVLO<'rx>XhXGry:oeyNѰJS9$K$:CS*OҼ\! -2DPɥv ̥>Hr%k>еNm]( )6yVRrlAnzيC> stream xYKo6W,z)zpܦHF-kZiKi&3VuM pǍʽUnebʳf_^,瀠3|ym|ͽ_mƪ6Z\} Pd?(ohེSFՅZ;AǞͯ~ {Aơ3~f$\?A&>? zDZwiJ)rچCPNm YT7ժf {5tNsӀ4fnFډ@\_+Z9uwA0R4IoY(u9ha[nǁݒWz9t>K]Cc~.{olxb8ϵh?ϮK'x0nMH3-nNٵp1dw FbWZCgg@>; dZ=Zhe KUW)gid/+jl5g^"ݱ Mz?@ 1ɑ N.5{f|K6G!IuWZϒ!{ ²u<(&cJ N ?lH)Q祼\V"1͍S֯KD`%bGO*0qgn^(rOaDhaET, s6@;nэo-*e0q{ >:md龄dD>GB“~Z^j/+2ƞ2q6+m͛XZag]/;7?l>6<__w:%?_s8Sc畖ClKlvP&6YH8> 3)7==`Sg`R 8{RR;wT JLϦNnu1k%A5 nK[O@ -'?Do$T[AS4(V<ޫ]/-yKk3Ns?)Fy).eE$ swv(P)}KGch@9eGl -sF6fMF"_vtMx9 endstream endobj 2578 0 obj << /Length 1549 /Filter /FlateDecode >> stream xY_o6ϧ0$&J-V4E,k恱iG-:㑒hSI0)xwd(l4G4f<7g~V#Z|xw ]a򷫳/lhju]oĶji!YJs9)go=$yrHy]XŠn󈥜ˣ$qMPr8,At&R58O]9o0NFE,K14!Iҧ]|͐)bQ=~g!_58Ol^-QC mG(N^7I%UvBrX>!DS>dHa㓕k -Z6DB_nj;ii5qj:9&ydSeM, @$ ٗqb(8R"NU(&`Bu@o%_F\SMw4`Lܙ`|QR&1JZ.+~4<͝hLwRL^gc&P6`4/}lvql#JU|Zø)/SgWȩ$-ʪ9`|3m&`wX)ح4KMmzI٭)lvOaZi+rTuf+_h!C ;@ @>=O^d:T*b O"}7(uwpiu<B $JAGX_S 3A@Vxcr_ %EcP #b6(fH#3;wkI\dL٭ds=T*a1nyTrTؠ:\8ECOJ^=n*.8-5Fzkm6 R vN7 3& rKWc/.R g{L8Ӣ2?iGHExSlԍz Γ4.hrv s ʢkӜ{k c-nYS~CgWuɮ-;pQ q"I,ڬ.[eap_ = =#yl}̃p^V[.pOS ,!p>0¹ Op-8ōP<џnhZ_C=(p*Zn}6 cP1r"^xAd퓞GaΖ%ьMh8Za%iW!lM|$9E#֘6'|> stream xڥYݏ6_a%2҉mHn͡&\ȒJuPda057!%V!UqI*BK5 >J0W1MW" 0Xczd+8~?)Bh+Kǟ_8F7*cȂlɒ@ ).8ɻcdę5O $D$Vâ80gIIEGo*TBU8NHς(Ha==قXyց_N=KJS$mE9 [RH*y͢p`9ݏYd~7N0(yJvݗf$aQ<((ZA.dz(q 9ɝM*t1c٩.9ase[חm7e}},eٹ:=p8^{gv-43Q0TXXu7'vSczZwQfob{?p+kng}]o:"K"inh%Ѱΰ{܇IoڎucuYKy7o۵BI MH1`cU2>Rcԡ3("q!dfu!ѱj#XMns8Hen.^~ؑݪQ̥LOo?ȬG*$aPhaB\"c0qE32x{ '&7=cy6>pC4o5:,  d\Z40.du}cS׉> stream xYo6 /acq; CM~Pl]ίv)>kImEXI")[V \׊pGʫ ^t4 t{tW̶";bnj.G)[!צFpmzo/NHQbm:m۬_o>z!Gc,&,zd98"Q[3q kzqyyY22FD%m78/x]K6k1VQP'l67Du*8Ȃ[(󦕤 j1TD:[$mC_iJ+0cP t`<9 A~2nl׷"}E3w1⵽J#`u8k9 |܉B"PŬ0ZICF4i kY].Ӛ8K]cNDTDlSҨjS9(Ad`ԁcup_gd-Tr45E#r^%(Q5 M*ROCg&<Hþ3]rbVhaƑ0@)pt/65l`N;jN-dյZfu?c?OLm}{n"}fV Ez=-wK}TE:F)~@Rrs{lПgM3$ǻCBt}6qSxKF s~VÊ}A8)Br|ͼeM2`)X| Q,ӳ+(W 52}(b0㪨O. y${Ոy|{b DU>t cHj}}žŻh`qcO (zB» zƩ+񬝖t[k:}q↨D_7j )TT+ 1*lԡ߅Xpg< s@d~#/e}pi3^ބ˳퓇E EdRJW?Ҭ ~9@j6^Ԛ(&Zf*ImEle8՜}]qFSC`tmܶ`DȡګTfMUS5g>w-7Σz 1Nm`D>d}Y;cpmn`W w=-g83([<(k4jErɔ.<&C:mxKJ o =¶VA*m})}MOo_q%5vY-R'$>a:z/H(DN#uBؐDSɃ9 %z{i|=1lV"ڌ'{ LE%7`Z, :vs(va"L![ Og: Q $ル0pu4{qwe"v0M  0rKB`Ykܤ@Hg Ə|n1\8;{/+=pE͔POdegzy k,ԙ$Ur"7H#FbsIZmd [*jKeˀ5+!3>$, {u$oT]e*=Tgp.[p~8G,10(6j>aQ6EI{a^I^St.Fǚ2_LjE%ڶ endstream endobj 2595 0 obj << /Length 1483 /Filter /FlateDecode >> stream xXKoFWBoRA[EJb@*w'YRKR,m-1<7qϛI,L'UjBwggFmM<י3o2_da^J_M0k 2>ċ\+L_;?|.'^OХDM(-!Z99j[9G0QQ8Ҙ-n$EF5HS+% 1Y(nEtI(6-FTZXk‚ݮk}p#wLº"Uc=fk.`q:{]RYmJv"?Kֲ74w7A-`1K  [ri*>Q^@$m0**}Yߠ"˲;Zn=@"J1ϊK 7& bn讄RѡxQ+^sk*Agձ7vkoR:ox&)OB2qlIuM!YQ/}~b Qi̒A~=] pZwj:T.A}(^  \+ks߳JI9qD1 q$ %JJ`ʒ0ZGbɩg :|0@}VBڎך$k,#/ZDLh/ w%$3Nh^ү>,0x<`8{8,Vi1p-Pˠ1Ri8X*k X Eq}`UT2NFu\ge 34/{"젞6i1A累Ovw䌑eCZjnq#S-]CD~5OƤǍ|Ȁv֮"FCHsQ<|+9iTe!W Kk(8 N7]˲83[BoE{-nZҴmesL~P\)F”`P`?%q~] m 29%WLVPaUR*6JGJp۽=l83Bkc.=F@2r m5=)zfEղ/2 xv 2F^{˜ i㏞qB{tmwyݼӭZUu_3_)k8ޗY,*O' e*G{^FG?oY%{e@Hs(O ' endstream endobj 2599 0 obj << /Length 1220 /Filter /FlateDecode >> stream xXKo6W"UÒ[.شH|srPd:VQ^#;CGdl"f84<ܳ pabeO6~ㄓNOO;Z+k>]+ %?NF췿? 2a;~#}l3'C?qHu:ۏY^T6g82!ߢ:pg.j- ṖǾLaYvy@vTNkWi6e,jqzE Ƽ3|'9h8E!7Ԙxaz ; .MqӡM(E)6ض֘L#nP7օ3E3JB8 bq""-DjGK--)~fu%uk5i:M39#dUMkyt;匚d&ONβ-2DvvXVΦ%dVp:4NHy;eΉI|!GR ~)d UJo`P=év$_pF_IF>\ގ} Lbmw-R$4{9ܭU^Ӭ5CGV%ZSJq"sh8 ]Yc ?ѼgsS;N_U lZ*2 , ɨTQPI3"v}ZeSY +dcv-r ϲmY|M[AJ_YRR;G (*`EpUuS;2 HXmU™:]v|\2}yHTRd1Bi*E*O婉)$0?*ErncM[*`REWcz .aLWF)bczĈcM .Kg*#HYJ(ƫѕC 2jIC9d:!E)VN]]3}> stream xXYoF~[(dxMZ[AQFTw.^ #Iv,}˃?=+ C72ky}⑴^[<8=󓗯=7rߚ_ MWօjvgNv̉7,8WRϜ cώ8j~]X~zDdG̜8 lEvw۽0f d fSAE <\*}#DxCy_^M9դetR<-&ݠ  s3<b|˪\F)E7A["Q#tv @剤LgG ⿊E@a۪,H) "9M0ż7T TBYĴY4^ zlnfFxMŻ6zli "s@d3Dk,YAY[r3XySA!`A٪\t́Qם'(U`TMq(tK9yII(uW+2eFJ0U5O껝*Mwt0_ 0ϵT[S G 0|\ c.q Z:IGtR뵾Cv5AgWݧpLxd٩k ӻZJR/i騭^j'i3-ȾVr;]dK+Ϡf8H0Ab N}l0%,Q./K~d`Yr"rTx2sh6A}8uap} K0"Y4 if<`@.-; YVusJMFOTz"*$%d"xlA&Y~(ݑʉL 'M! [1xy[K9h'%<"Cz .;#|''@ `*p0ؤ&CD_J 73Dm Q|;dlr!I$߹/U}Uw% zA7ʭ08uqY+,\ޒhk>u C]N_^?#y>^y e0('|1G$m12A$ !4EdvdBr2,w/(>}Y|1A5)V(| zWj+Ў~$ʅ;*Aa %f@ߵ6xf'T{]>>)6?}: endstream endobj 2609 0 obj << /Length 1517 /Filter /FlateDecode >> stream xXKo6W\ R6@v)H@ki/8ίό)EZ ÀǼ9q*p VyX_moV4,4tzi lݭ.{~Ԣ]{qK>kъk/4`i3G?YWD00X YW~4ҭo|\!S7ʋ2. o>SJC2y+ 3O٫uq- 1@MU]퍬gy/+*bA4$+CAT65X#jeSxa'=B(IeӶB4&18z ;ڰ5UEdY!pٶ \͹yR 2,[VY\WEqƬ({Dd`W'Z-v2B6-!S)Te)8H i6Rnjonϕ%Ӵr՟(x&+vj k:fw}2=v/'BwmL8(R)6 W#"*y[ߎVէ|6'1r><(#[p|OY,u?cj?AivK#e(g{30A 9~2&񍗺3/hHu,J锢q1;ΖzucP#- 2B34X+ !1( 0GlG 'TCO\'QwN_".h搳0笩M{Ǻ QA/ t dҷxQ)JƖe; (`, ieė|Ɠa<芜uu% CMG[!])"3)j)J-*3KOMQU`QK) h6G_57NEycwύŃX_>b L@ڳ< OF|ߟ;Pi̱ e&^Kx6zܶg^SM:{n[tAHYvv_l74u /Qrz9ۯMtp앆R훮DA =0vʒԧxo:')p+q}'QM _12Cke%' D$*^teK}&>TpdtJٌ_^V=k w6@a4\A =aӇt)v @7ʨN9;e J?7pC!TR9&덢 &pZ%`?ޡz_`W#'Ö'A+ `A#Qk,5Svh%2I[5Lӧ&?%WDt&Q9X^)ei1 յ> stream xXYoF~[) dy Ї&mHCJZ[ (R7k)&h({εͮoyga.<o-n\<Bg@lu8|]zKZ Y֕|NvtDQl7F/ cώdzW8rHyO,@=."#.s7 ^8qM[ BufL-',M+*!׼(9cku2b}&J$P </椁eğ*rS~쳎 &Qy,ڝ9T*, Od)] *VOȋYΑNsèꆿZ2MT]s,_7u"trN iX5.ozwvJ'(vt&- _0-E?/|t| e#տoͫ@p{>I&&!,y[|"||~m^ayMJw `bU Zj]NABM@j4U׍D*Fˋ[}p^Pa\mNF>p9|J\|CW-ڜAE[!D F$Bs'=Ga:Ɓ ™O"4z&ЦcE fУb~d@*2:Q:W#}M#78]n{uy i 4tV&n pjϘT5TW܉VJ=32XJkA뎊+F, 6@#,%й)!zJzpK˥g2/g=z[ʤ T]Ksx-(T$cHPeS|bpғj7^ jl?:qjj ȧ#;PN-پ Y6gtd03.MBw>q9ٔl[DnF'Lv59ǰr'm=%'7liW@vAu(kUy Z=Ef>&&\L~sr= %[4 =âsH؜c muL(H@K7 {wקunRPf@_ʣu v|(KOcqޣm!> 'OnHJ&ׂ?z endstream endobj 2619 0 obj << /Length 2339 /Filter /FlateDecode >> stream xYKsܸWLNl א$U׮R.#iā4r)V/rrR9lJģn|jMzY Z~|DAw$_J^gjus7Vu[}v^5 Iv(v.ܙTYFž7|f34%X+z>'%i0bR/hIض6hmiЈs4oVnx?[Uy[Z9_y`*H]+ꓱg?vS[l ŏ ?;vvPϹRcv<%kxkMr6$)R]PK%$eC:iZDp$0ۚEUC|\xQj"7<l^6M?g9tm5CG/b<7Aol-nptR7'\7ܯZՒ%]$ienf)r`̺ԩ~Ib@q8`*њ7>Қ~eڮaY2T dDl1ۢO&|u:\;ƹA&ѷݰ;" R"'*{9`KWD[򵫜쀕|[ +*;B73nZzu/-@E|kHu˥.Kx9-Gh(V >"V=g{qn!6F3DRe?f)`cw -nG~j)w21al.6YSYC@8bz0w X9'rTPI*֠f!Ijc!h } J;/u gқoi@X"s^`F ^7 c݃&r=\ftInUSD{KS:K $=D\w\Ahg~_xg2*Tp'~8F).0 N)w\ǣ<ٟcttm$E);́TrW>6z?$-֣Xp}IڊR[4 _|eFuֿL'9<7 mKL_q)hD ,b^ EЋkX@D 2w\Gl gX@J <@hc}vnsά)\*t9O$"I:8?nF*IW8mF]H[ikl-/:5 =m- D'*o)}VewRQ^GC-Knck7k?A,-=~oHd,f6gc|lC734YKhYa@\"&c+^&3X)m~(^Bfml?8[dDFi;ykL_nju= Dwڏp}_lPt]?74%\Q@)kX-hit6s0,~8#L1uN%# L= endstream endobj 2623 0 obj << /Length 2095 /Filter /FlateDecode >> stream xYK6W450R~ȡǓ,AŠv+QK bq.T*"'X, EWܽ U}Z_sѝp^_}S,+"X7ӭy{-ҍ_/8NFnm)n$߯~\20J<0^yQL*޾m{-ӯI87;~a 7 +2kEC_MkoWu0w5ۛ +"7ODDCfwY^ Tfvnz[ +lv-eցSN]^ɞFaZx) #/yɶ|_ :NQh45R49Le%taWбW(%pg#x nO1|4@XO|Ϝ r44B8.淿a/̭;l'ڊ7xi/>(>Pr.*궄⌆Hع 7]cWHEÌ!`z^wDZ/.nl4֝Ll> Q]z"p>`$v{q°{$^CKOTE,XEf }THixHk֭PQ?ve&dwn\q +80xfUuޘԟOOnl6ɕ8/X ;`i1)ˬyS*ۜ%ɡ"BBga5=#Y~YIbYvOgwMy$7 .m%e?7f31{03ϽbJy-}D WKT&2R5;|-{8@0bu^`iz|usO"`bd_33(L]Ms,j^(#@%cEnm] RmGMKZ9fPD|3j#+TQF[ X~C뿦_ތƭ>IA)w]\\-j`* >GYp$F.gq~8scPf-3>PjVbR釓J?pE9.pG; Ӆ LL l{j%Έ<%5 *+ 3ѽƧ[VZ)g |!J0:Dl=|Ӄc\Is=}pjwPZ>7X}s_oYw]Όc>6ETyybf#F$0ҐM̢%RQ͠y[ i5NA3k e/N# R Q;ZbwsX8JnH Yzqc|q3 ZO,ZsVԛ  ]?J酚;ab@7Ɇf>{y" mɹ*Kf07Qr:RR@ |& hh@b^iYt@3xPC[rP¯K5RL"R=71M N 6JCϤ9P emoNREV޾3750Pr5@=4"t$ hI;_ܵV4lT; go[zޢR$S BVI2 endstream endobj 2627 0 obj << /Length 1863 /Filter /FlateDecode >> stream xڽYYH~_᷀4&\ 8>dsiVm6 n$6Xꪆ\Vbb ]Ad\Z,˙tK \~b]yun^,^A`%e p)sY2ҏ=Z":x pHt8"JB Bp[UuQڞu 9DYueu2c{8ZYBsKf?9.'VZnpD|MS;Ҷ%t^z Rc#AAj{)Z ([ӳjqJ[d#ȉfְ%-*uy{?i* -UUMV&ឬ dUi ɺa'qA8X]W_%U9yE 笄|eȤ$nQN5Zׅ@?`qcu>IX^ph 'D)+[@P}-8@'qT1$p,4L,&96:8Nxoj $1SEH|M5{/!b(ⰳH'3LibK͐(2KBJdrkZ[*kvtAs & =ī}*Ͱ | [}To6xjn#uoHu9rMyq[6SO؏B-;2+UN-(vPs X$?]zbdx9AA RUwo͆ř*|9,CI1o3StTQK Ÿ́{ N Er\oA Ȑ{SRhIa4_@;e8{J\mX pu\oHvk%ߛ6t~cBmU'N}_5)r(4I']B5%LXSe|4'ålu99J d7Ew5,*t׺2chѦDs)d&a6M:Nik:ˋ۔3mʋFl^}.JvyVũ}̦iwd #u5X X& d, 7ָ<` C q Dh} h̔ 4rlG)z=9u\K,E1tU# %Nw2Q>! dRR َrS^nDqcDQ!WJOt`BWp?'t# Qޡ Ǯ?k(-is\Y3cD _"~Uʀ@Μ Qli*s\*I*ݓM勱@SKW> stream xXKs6WprfB >!֩:NL(R壎.HJ8g,p0˃?f%Jwg[/ϘYBgBXs/ar3>j짙ܷ^8Aù:'¥ڨZZ8~Ąg xr)|+Õ}˜,$]npDۭ\U_-fߠ, q&c~SmV~k6cn"3iM\Um߂|zcyOx'8sx8Y7w)Ti3+)J nl94&Z/rMEihiDZVHn↾6]yU#ڊ~Y$3uq蹺(+8a0 іYoX]]C̊B8v.zϟ.i뺴şa􆦕کٷYjW%Bc+UEѴCEĶfTڥ@oK,Q6SDмrK+W0hWkھB m.ZՃ0 q>|={l}TuT˖J 2aZ_\;ZmA4|B++5G֛?ځQ8tǏ5&=Os࿇ЍD\X^z&#ZYG CL8scp 77/lUHV&-gn'Pч&6*BH8qgcGq/b= 8tM} 㙺ڔ UOfA0p@34_4 p=OF"nO}-ׅ2 -1Xxdn)@{j:Ґ5"^wٚŜP."%ˉ Q>c!z{cU.>78jkNV^%eu;L;VL^7v쮥K'M{Q61EI6zڮ.r[}hiY,1l_yW]E C7CWZU6igYe CG&ɶGz ,2llMJOm2ʷbVĶSwmO1Rߌ&v諕06(P'3Lh X~>rƐ!z\ Ӯ z)[o}0 =H% (yQ̡"S˭h-P9p딧&bMccO R5Mn"X {J5qHuN4f"zvi6ҜV~w&Mҩ?ڻ=4n:Yo3?VŲ 3UjΦӊ SGtFWXm. \'0Cn&%D֊HTE0LDɮv%52 IDaYÔDNᮂ[_~285HDK;]`zvt!3"@GN*Wn_{k{A ahh\8n4p "<zq_ ԋu|R#9ET*[tD=w?%sժ T/ara$њf$ {ZOK ᦆT.kb@{4G=y8#ST' ;Knu(><TC=[ͨ[8F``} 8N*0At73S rRol@jE8[ͯ+}T.23]_la?Nɲé!*-iYzUgu#3iJ}`L`TwꬃUݺ_.]> stream xYMo#7 W^dQ%"b7pA԰)6dQlf< Iԓ8\pQrr[QI6CD1 "57 9 Bqu:x :4S-.W(@#JeGQ̙q&-! \n]xpWk`Hmΐ0< rF[ C0chFBa-W$N* 3<Hv0~e5%7-Z[1 rc0| sI`,Y0_-p[lĩر)Xı$4b 0VBS*Ť72T`'Y U?SyS {Е,L)Gs0[Yj͔HB*&N"Jsl#eIll!LP&Ishś `PQyVЀ%tidnc!c!}`{ Q_"Xl6-ڔmF!L Wmfb)h]bS 6G7?5OHa:,?,ןtr_xo01mFP3[-mG{4,ffvnn]ڀH& m@Yfsh\Ӓ [[hj>r7g4~7_4ٜ2P>2{zC>smOnbfjo-$M[&zIF6'YnKFl\|fX}, (ΥXb>7P}lrJ>;Thc#vv0>v3UpҨ4*= X]ADC|a!`\'j8avil^î~zO/a7 q1\=n<o]&Rެύ?BꞺ->a,b70i'h` j2rK%5GABڇby 4=`SB@&@Ҁo:l#;ٶNW"4JT2$`Z|±Hcc0mD)uLVDҧV3=#~gBb7N Nu)40ɐN8P8*I0 rv~ endstream endobj 2636 0 obj << /Length 1492 /Filter /FlateDecode >> stream xYKoFW 0Y.#.PpusrEW">3;TbHEܝ7Ow,۝z/gl GWI9-cQκޤFUs}+~;@Z­ZJ^$kpaϋLyT)h{3;.څq? bst7eYM*'/澰@Ze shNl/p|M5̈f gB822=фޘ5zgORY,zya t.Akw;mJ]MGxlW10ؖQwo`d^dovW?9 &@6hV%[.^ y[n:VUiHxDNCwj̤LV  ϦU+k^ Ữw@%f҃P/8”*Vr/d~5;c3;3;wjɹDixs%I>oYZ !z`·.Vr?>bHzܛ;Z9dQM%0q wd 5߰8`~V{Y'ƛp=YX7&`D{0/Os`E!:>˶XwAeunW7;UVr(ע c[p0 jy?]W@[@{8Ҁnnu^Oƿd~9}b  U78m 8GVj}8b)̐ݡ#@yDFaUڤөnx iˆ0htӝ"`0n;-YU֬&]p^d*%X/A缢[Mzz%~|G觛e`VRVb%-hqRۼRi7mAd Q.U؝B6L49yh|wD4QN}/Wut=ߨLi-[ ]|{I9i':<;aq{Mޔl6&]9ʧzq!%]?؏Mwc i^tڮ?֟<5~4W* *ϚB?9 endstream endobj 2643 0 obj << /Length 1774 /Filter /FlateDecode >> stream x]o6=K"DI{HȰ~  ihbJIɲ_;I\9mZP }*G!y8q0Or{]w9G&8@\ y8ujt!~ʸ$c4$'ohYgOTPߎtr&Uf @o)lVT yg⌥hڀf̴eKoOu!߅J #|#;9q fBABTx~X( uAQ]dkRDxf>gvBll鴲iBA'8 zWҐWjɾ*(+6eY-VF~\/h2BfpMp;yAq 5G`O*w +Nj Z?cᷦX4B$II,AOL<ϊ8V"[W](+W] r*]IQT %o]:[aÁIq/J5<(r & {UyR1u3ưPD3`:eZH㉚F[.+C|)ӈzɆL=!\sg5.#. c* ӰT p0X\ 2ǃA^g{T3cbA}]~ =*ك/Ixh 0Pv]tLŇz,&hѴ_feZD0%;%?|`o)< ڦwF{N#5&Ū[%:jWTy)yM򬬺]G[nE5ȕz.3bg wġ,~pM+$Y ƩY[! %i$!<nPP0lM) :vm 9" hJ92%`,6%8P'Ć(_G rӖ B"iavoY6@ +M0x)F~"94}Q#R'H@;C'|-' ,{wİy-*({M]5:N/acAZ6Iin*Y;OjMvF3q b?B9=G)^u´|~a&Q+n' !iȳmTMm5*רfJ8j2RgKKa»Sdܕ!r`m$l9 )uE43֘vc8G,.BZ';qeB endstream endobj 2648 0 obj << /Length 1753 /Filter /FlateDecode >> stream xYKoFWLOLC'& (@k);3Kʡrwv3lEd-5#/\$ř%g n~;Bc@y:{eFVd/VwãVV{uu]-|k>^č(N`ջ78G ҅vM c閡gڮG҅c鸺/׹0Ve%f, giZN}/MjZ7-mF&wYLO4KgHsͷ$=kc|žϺ\~ pei,ߚճd,ol~0MGp\g'4ñE^WXgKi-~~?B -qJRJd=-tu&9睢"n HgK"o  Q-23mWKOޅwAZNjni0 BdA@qMҚ-9KheU\^ 3_L 4.cc#32h5M] _pRۗE2 uP*Us$7UnF1@0(Bewm!FBku֞5 _BpZ$T|o\kPl}nrS@&5ƎE$R0K)6bOi-z0hZ=P˜t}VjؽKfa2**cR)^| y7Ǡh D'*^d@;  V3(Z"( JY!qGœb9glFwCRYIZ:p_c㯉*4-JQ]J b@ƉqpS[iŒlƘ5fb+j&uW\rmi)] NSbsmR|˲T9g qpł X0_aMEbRWfaJVu%Y5/vԆHLźcNʠ^C8muq=)Ukh&F#qn,}4jJ~ۂw4]U6vKrnd;&ǟ0^#t۫޿v[&^ɞLa̓D2ߡl"|[6.ǔ+.nx`R6^y[ Ө \;p>:$]Jpv^t_l9e1(+*pxa!G³q s8l.A> stream x]o6=b a֡ Y=Ūr|Ͳ/iHrlInY!'ERX'VJˣlU|mVL0 ˳J^buܮ^9S ɞ(o~F S vTľ7~dA!GeJvIy"H 8tItrS)uZ@f+7|BuȜړhq7DsNTfm~XA+cIHؼ[/ҏ$E(L,#ȼl傟E,ȼ È|Z1xDj5JċlGcx|GJMFll8w"a3 n&cg#̙XWql5Tn-=( ؟i wgܭ11#G:Ae߻}t҇l[ik8X:e'M8̞B˲m{틨S4Uχ#-ىIR4m+bk'UH<|6,O{NJk:+z,y1qC!L\9.8%zUm3k9 8em۴ (wa ty@o-of~`(ȁ 2|rSp.^Nn%"(38GelRHT;*so2;ƥ@Iiɦ: ox̆sU_2 X=gwhǪ,d= #:78 Y,-$T+[|i!}ɐ+4,Il!:l*=`Z˚ lX9Tdl;B:Ii .QC75!;uzt^v"gwLB뱰'|Vt_ <9#sx%ȐosN (SqNϦMҫ]Lq})bps H$V9$9Άa8M"Kv)ITs@ȎWVnuUoM`4)q/CȢ38*aB'@v/i7A >(RL'+`뻾e)JI4ՒMo P.xe}猱 _ͱN'`9^ݦywt(@i(Ҵ>U7d3Mpil4BX{]jYju@ύ\ufD脣*I7HA[xEJ# yr gS}ɫtUD,кDod_MrF(}% M$ۆV4殰e%n83#UhvD~`J;\נ#`F_oGih[rTj>Xh{$_9AV(Q H endstream endobj 2656 0 obj << /Length 2241 /Filter /FlateDecode >> stream x]s۸=B+5c1!nڙ4Itz6$<@$$8v1/~xl]`w5z CzvP}Z?_w^#߭w8梱R/WazUޛ~ GyZ֙\6 ^{z߯gƛw2]~HˆTmZ $[OiYܤ^kL=I AC0*7aRL(2@{DH}]nv迮]^ZҌK<[䰗6+ _$"dOƲ;+'ky% voٰ5-,L˯\NKIhC{LQm 98w˱ vͻtx뽓Yq8O\?XEZT!N_o"#xv5wfg qjY%0?/q&([yIz47 Q7ˮx%89Se)3Jf6( D!D0PHb! BB&IPG.6-;CoUt}峰@)2eqU8~!9#tU8J OԠ\"g LՙvvtL" 1"{uUhCoRsZska(y"!:>XB1j!Xl܃VEFuu3ktYs{>ȻѮ0^aiDMA\ LQJ9 db"mCMV.u:ew(hrNΝKe_ :`q00_`saytm~Y`xc&:I<"EtIYI%m ڦV3iES2B \}'/i$;T%ȞYmثj[ڰ"[2Sc\^^ V7qu!A?wMq%m K۳Bqm(ܶ .E5Y-'Cc-J<[?9פCǴRGNI G2i,/\GQL[.ڡ^X9W,Dn,xK x2 9%'rB0] ۨaf@`wއ#Uc qVtL\'5d)++ E#PE?|iqIVT^Գ6,xMer u9iCbnOtC0mttĞnM3sB$)U7b' 7d7I 2pۡbbT'k7Lz poL5SC:#k\ ^pf82:|cO~'C.Ľ`l>B}GKêHժOt+>`*I.> @9n 7|܉*=^IVQAV"*Z~ 56ؼ endstream endobj 2660 0 obj << /Length 2045 /Filter /FlateDecode >> stream xYKo8W{[%Q{Hۢ 4Yd^YȒGP%KN{)| /6[ |ɹc ziY@YbK=_UgJ6lԞ$q(ɖ.+a[u)GJҔ:'Yܻ%IeQܟ>շ܁xWypLAdsJl_:,wu1/IjUX=[;J`VdHh$ g|@ҵZ`*fwb)b*u&$mP6/ lDNSC!Ğ2!Ϗ-"J?~JpZ22{`]X/N+ùBTum.$((S{TX7j[ҐfO`ؗduwmhX 2: /]= ;.o>sހHȽ!]垐^/i*6R0O5Ɲ#lE6+,93ʗcqSf쵆[˹j_chhYzͺ/@ @"loOf*")sƛbbCGu,:~$Mpg/A5r}90 _J&+}@X$W lh p= sRHW4I>_#M4 Nڠ,{Jȼ.mVʚ?EY(%YTFRrI%*_o/ endstream endobj 2665 0 obj << /Length 2062 /Filter /FlateDecode >> stream xYYܸ~H[v8&ybws%uť}Z nX,W`ÿ`7Yy87>Q#wwo$w0uWl>:OFQ߹8N?~`­>FW{n,H|' Owx׻a$ _r~]nA=.c/b.B/I(vI:?k]a~U/som!#~AwN;'Yn%Ik~I1XjiGf8F-/C9D?> }g?Uz*[^ق$`; vGk| L|./}[(uAeXOuUn![fIܝyY 3q &w"A_'|ڦf#v$uԹdz$2{TTK[]ጘTK[ܝT7[]-zh[M~'M#*N!T8[a/ M)S4r* T11|!F@xE|8_dį÷cgɓF'7d(&2Q=J=à/0~|/GV-(M`2+1ZSWT%bViUú̬-)uŬYjI6%Iag/96; _SԠ$Aan4Je<$%Ϧm~_պ>qeP Nab-{}>],XO(:*qmOI!߃wr%xDEr,Hu)SZzp.KlO}/Ձ~hޚcŪC k>Qtm`!Τq^ur%~2"DmLI- sZbqq:LKu˯5-><,DiM  'CHG 5 &PVbo~Y,7Lٴ,3.`5wDS, Zf's&FQC VZ85H?{U[uְtzru[lc`!NY|“kN|)mԵ|0p1')mߪXٯ@{M\|v4'*?ӔCJc6jQ3s ` }-k* au |BԞg2w/D[G/RlPb=zӯXRK!ڊL+N")f^S?CCQ^\R:?NYaO0kߋ6V?]٦D၃ oF/]ǿ <݁=[CV endstream endobj 2669 0 obj << /Length 1593 /Filter /FlateDecode >> stream xYo6_G 4}CEt-hAH-zdw#eɖ֠ȃw oŸ7INbu*js33Oh8ϯ~yEu27&Wd.|-ycAea^CK n~E.귳_5#$8C/p\ixAHRw Rˎb|N+ XT|[DkjNLl&)`M$ɢG![K/6R\S0&b/,AKJ[+L`EwP 8b'DZ%ߢ'BXOhʨ5B&r }YXZV_k`@}QLH?.wj/U=&q7SipUUR]Y@7] 2#Сb;,BFXUR3 |$QpW߹:+b\7bP_̰5/.b#ywE l{DzRoWoZNi /Fy#+Ha*/8΁,NLLL AHs9!7k!vh۰V\ΖknUб9JSmxڦ54lWCV4;h:9.N"qkkv^u1~_,7mw\Lj* CJꀑtWHU;D4' + 4"*DkJ#$=Bg j-:@GjЦR~P[_nP+U)5y՛ 2 +jcE@=p4 iZ3' qhE5^)Wa}c莔#UMS o]6%k~/c!0,9%j?hT[@>06ۍ=lL*[؀G\IPBʡ s@m甹ď}@e_ C!eyy-hĪǏJ *I^Ĝn+.;H$=dzyIFsz@8ńT_h0uگǯ:xwusQ{yF^#r~= .sn╕R7k_׉B3Gإ; -ٹPbao2ޓJ{ g8۱#LK^ݔw|^j. uԵz =%gi-?LKQeܓ^q4s- wM#65dN,$z!e%^J\cHCx9~\cȊ˟r"L[ؑ(ڥԩ>?vk;k;L#7p^}敧{6,pzU}0=jK0[X!QZ1^Jo;OHD:\s{ endstream endobj 2673 0 obj << /Length 2138 /Filter /FlateDecode >> stream xYo6_@Jw=l:t5(#ѶVI(iGɒIaDx<wr/X* C/U\v+"|.06O_*σf;)WW{~B0 ڍחDx-BkA;I~͸g=C/h$ HëKP sw [1EnU>^WL`fmݡG:+ϟ*cQy%y+q;W+ވiKj |fy B/o tW,׺*d7-#GF4q'ݺP:X b/':`γa@\V-ђZqCjwpr`qFOB(ёZ4M &e-[jDU] ,t$f$'vx)x'opn=ZʃFJ^@VZ{-C62*HHl}m}'-ѩR`=? m,N sIL*iŕft( -J\Y=W-w(2i/,-ŧ{Yv?t~y10—ԹX% Mi>]~pgon"[/r.j+tv@X#bIr+=\A Dg8 >ƔOT|FLP9Sna\guNR[+,. @M=z"b v$U5łU|arH@gFf2~)PoSJvK=p- 2O[ssI;]&V'\v^Wla7cIEQ^AChԦNtX\Z&.5D ̋x@xܾ9mMS!Z7FwEˎ,p'27s͊!  aX[.8I3Q6;Aܨa KR  ǦVz:(ފ.QR݁xGYݬx[G<>(r@(yf$keL}Qfݵ0対Z3̷ך#vVɆfCvǖ^OK\p)ҁwqcjvRBQnW l@!wFl9a've/ fki JBO>;X!ދo, ,},Ai-j+34>3-K:|)'A}vbHsY(apM bFFx(848 /W.V->Yj&џ ?&9J"I!7g9Lp_0zQ1*X¨^m& X1ŁCZX'Nsϲb Lٮ"sBz ̣.`a- ۘ@W@ T!BDl/*nHůPXذ,0C&@Џg1L LRB]zeJ,VN!a~@sv%p endstream endobj 2677 0 obj << /Length 1733 /Filter /FlateDecode >> stream xYo6_@[r>$Au"5X$z,w;R"76yzZ"χRCزW[99skUYJհ ֡L;0w鞾y:0rӦ+cD%qD-гމIkx1@Se5b9%/L'ldJ3%UySUfjj@YJr7PRL;<b!JR M-v0{\^ʺf>ll$tQoTaFFh!ѵ4нrW:`iC3z얁%QX\f CAc4`VAvɵPR DB|`e46r!L悦c2q)}0,ٱM厑yeUоp*{ 151Ԇcb^m 7t+[* s8a)\C>^Mٶ $qFˊvjIktMz;Q >7[e2^3ܺwӉ5=7. C ߚZa3v:8&F  `|q5h`hOeRe"5/;- %|rόw0S泾m@(s2} lՀJ\kYSd7lCv};Ы^1O= UZ ?gZ..DD=zmGnߺx箎0;Y\>uz>^n6=?7eZsEwz dp@ endstream endobj 2681 0 obj << /Length 1653 /Filter /FlateDecode >> stream xn6=_G5]miba}I X.D%~Bʒ,9ubE:<<.s")n ^x+@\0* cN.>m^Qz}ߊ~\ nc,\y7tz~/ێgy_(b>#FvXG x{1 R=2\[.\ r'X/@YI$-Nت KDum7d%2[ya61x%@ Zf]"oPupmpKٞv<XڏKX8o&~V1O50w8 =bO9VӤ}{iI?sXЙbw'R=|:sl~gLnJ5[ m+]R .ֶ㭙ں019aR!2R)C bcBɔ!TYi^]Qee?$ҿVP&R /u1#S=>~ba1D蒗T%$K2$^Vִ]Vr8Q@˩jGz0?ҭ}]L2+#];p?D-yQVٰѮhUU{(E\zd:Mj(y,EO m*ֳm)m>m đѕ9׈BH-s&UԲbjˡ) t >5ԬfAIP:poÝl05HM1>@8@N NUCxϵ ^ͤrb">C>Q+Fא&J+ Kx؋&r>0FUj^[,Z6v-9# 1!j^թ̻O,wW;ZYymA)Kc) ,_{Wd]y])T)D#o0r$$8 DSRŅ x[Cɛ$aw@H? C3wj(GUЕz` '{-<}nըU2/,22t-d e:%3!ȐӉk%erd.7nӨ~*]10sA +̀f^M.ꟛRiw4pt393}c1 1  )X97\P @8{P~|z#0V?:e. 6d|5+/Bp *tѬ''Z f% =Q8Q3F"4Q1_l.@3 ݮ}rltajO ] {ވ\/Ěgff"E5Uw<9i#CCL!fUß}ýtGzo4u>E\x;xM(73*%HmO4*+SƳYTOD~b*O^LB{z1|y:dݘD4r=of*dGʱ&ҏ)Rx6-a endstream endobj 2685 0 obj << /Length 1304 /Filter /FlateDecode >> stream xWO8XQHg;=J[+fU?a?i3㙟>bG%qLˤU'W˅V0ܒ0>c8%+h<65n\,l0cR$Ig$\əleS r2񗃳Ӟi9|]xLu{ q4ii3U7SaD' [<QJӼD '^<qN4@< %n?*h1 {L[vn`7}a}]!>vC<A^"o<άFZ8J}. sx匜qSL$9$Ջ_xq 8VP{VO/ mX(\VΏ!ݡ*|rr4̏ne%,7wA#~ ǔ}^l #!nV4*?>z*TeZ$>P<7ûw㯧_{L1\4RN=ˡg-u.r&k˒ endstream endobj 2690 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڍWmo8_$wg=E|(-Ep*v%t*rƐM$ CۓMf˪3㱗YR+}-^,3|}PAw rvYZ̚-fs>o'G}Y Q2,v8go^Ͷ>C|., ]A 7<-d9oy#Zem :>7 `0&AX瓐U[EW\b? b$ COYp;(WECk._8zBLbQJO4ϦP{ I,Xa!3^߉NU|Kf^ L`dYb)Jk#giPVB#T4Y-W) bu:@\bQazdId4b}p%1meRm$v#{DwXAVGy1f⿪S$\^gR\sUWAc)yUA5(/~$4N>r>g 5[U'X0;SU"Vl5`-E\B4ٞϫ͟H˼=:Q4AV )>>YWպ' [|^'TxvN$Te#N]R :E\# \9x鯏:vk'pRJPG-+5~D }f~Uۨj8:I{>G~]Uٚ xp)ZT/NVC1kIʮ 엢Q;9>2tvԫ{\<|J D <F, &!%)͈R:DJ~P-纋nwz>Ua#z) 3U5U ?B9$ˑqv nRo±\;kcF.Vkݡac(`|"DyӬo{#g1ijrߏ|1ߣcl[u7cJSzX˯)c- fCcS;AOwGFw1mLLU4*sҪ!CóӋGMI1gm9.%-.?Q6[S3cqq98dt0V8Nd endstream endobj 2694 0 obj << /Length 1199 /Filter /FlateDecode >> stream xڝWmo6 _t g{؇/CÆ(D9OGrb- IK'IL"#O# .n?QcgݳevtrId껚-'s hHΕD$H <&. bCеS&,bWբXO=j=AyQaz?B;ŔX`QUZ@A=$XELo6'=DGӲ$zGO-RcT\UPx~乶cwb]fm9gkgɫJy5%\j!Ev["vv5= "VUbՒI it)hY/ZQR[w+Ѫ=-ڔ(+ )naEY 0w74$5S3K9s)&"/QŤdG.>j+%gB:UԔC}-MV~UdY_]]a$ #_Ah;UT:^X6nFrl2WC|׷.S&Ⱥ%mO8ѭߝ; ΌGU+ZUuU . F׹><ֺA[lQKq**;"$+a 7&9,P@O}dMl[ ~C gkf+eM%=~l%qeqlM7lKrm^5< ~J5{F_S|X!w02݈߸z. 3eb-mDE52,{ 5yRy3b<왧kp(c~Ht1jfalkcfo}/ {O/\nYR&;"/k hV⹖|p$|a_vC%5L{mr㊞햑arXA"t86f4Zoۚ%̿S endstream endobj 2698 0 obj << /Length 1485 /Filter /FlateDecode >> stream xڕW[o6~ϯ02 uW=$MR@.և(ȢKщPnMw<FY"G(j6#| 7(n\&Ɉ :}u;y*\(؏;7nW)3^~<]L Mt4)HD4 bX-.?Iq+ '-ppYVL 0-dA7ANyg(#A\9cRt4F8h\{^Υ3?h8sV(>SmZ:|ӈЄŠwK `B mְd[x V5u](~x{QTזL.y :}JI[f U';LI[!iYj'w1]@9j\ I fa W@X8W߀&eWě<Ԅd$)g&r$' HCOעȔirML\qD%noȳcNDCїҮܛ~E ) H"D,)J76brx`uaNm~c@p!R8`JWߗPؽ;5k.mwCsؐ(P9oK%oyFҮ_NU7wANNS-`Fb@>^p.ȥ*Zv U<'WVamָm/u!ĢF C D&]z A%aԑfV=m@?G0=Z +!G81Ulf\|RJ5m\4e gQn"jH`v/|fY[`94/S;}MSZO+o&VLr=vf㳣q,bo+tuK͞aY'`@_WbeKd`%; y%ּ"$Qc%<Sٖ/[ePܳvb 'z endstream endobj 2702 0 obj << /Length 1096 /Filter /FlateDecode >> stream xVmo6_!`_$H+>s@,1P i10mk%y~w+qHU];Eβ1VkiTFxciW6A:{Q[6$CU= Iszh& We[!vï2C[y3#H$Am ܿ!l ;`Oιeݚ~J?\vV?ȶj5ccP@| #}-'1dNQkO\96u` - $gzw$2;GCBk NֆJ˚3=gɯ ߑ4TQ/B'^ao^T6;p$a#K jXПq jR[b%}u zZr$pä¿g3Pരf?rXXe#a~s`;vHlVu+C_*ׯ~(1~e;׿]أA'}\mI,A9۱.9j+#Ka=>&yO\)yYW3w3re'kݓ*o7ge|EB-uTup8#d.apPYjղQ =5"]:KF :GB8|:?Y YMeaVwD,Ɲ|zzvNaɦmnYN5-xt| I$>`ӺR^0opR/؆^2{;M +O= endstream endobj 2638 0 obj << /Type /ObjStm /N 100 /First 933 /Length 1354 /Filter /FlateDecode >> stream xXM7 W^d"E XHl/-$94]6H}4O;4DQi )P--dxRJ́r $O|oIqVLirO Z:CN9ax =f0$L Fѐ)bcH.}H-dI<ȵ w1$Y0gZ O)FieXKn@ IX 3%_@`4\WiopiP_<Vo JJhOgXgIHhXT }8B L* {aSpz >u}[]/V@(<Uw!(8_``$ aHR0K=O o܃uΩaUi31+@16<+`IzP I~l  Zܪ Ro7kA؋C!>@`ن 5Hg.eN)u}[X))f~uqZMX?{fao^~|~yx(y͓ݧp An0ځ=3< WtWz~d KQd; DE9Q$03*/uKlV;/~6U[JN||ȁ͛aF^?ٽ{ه+2_n>×iEn.rcz> dj1< hyBd#rtD!9A:G:pKB!)4 dBў9RXrPlkJy~b<"e[.R@8Le(hJ: 䗿BMI[d9y*WWDaG*6bz,S(GmӸ(+3>Ӷ 9mOF)jeE&;{[y5 4y3I*(z4i:~G)=9` endstream endobj 2707 0 obj << /Length 1366 /Filter /FlateDecode >> stream xڽWo6_!t/Pk{hml>0 %Wwǣl)Æ&y:x_|'Y|Cmޝq7Is8m92?/j;7|%7Z5DW$ #{"ԝjTT$Hx$p?/.,: 8r. .<!:S/u4 [7 YݬF`N7 |/1R+6f"xJ]r;ZumUF+jyOHu"WnGxĉ}ٺqsffw:oBZ3*f9ܝM SD_*˗@RM`/2viWY崹ZDm,kG>ϲVy3P{OY4v' uQ)( B筛b4p4Gc 0k'Z]7_LJli^5ߑRޏ>?x7r)U;?A%Y6|BDWZmY+ZJ{rd51MY۫ĥj>4PVW2p?._c)oUyC] iNoKT=h, Y%[PzN@F+D|4ʹ;m@=@Ix!PO_SLI~\!F]@&Qo$nɒ+IB EQ`rz+~*|89O# !FmejXC TSV!>8]6Ƥ kUqR¼©X-]>!aiS20&ɟf$"vӭNmA];] 7ֲCP}[ $/; sa* <^&⌫!9i]x({HqDjo$O.o[3S(|_WtuC i GWW—;h=-pSBXFF*b۞2H؂"}Kf>s (a Z!$%4Oȯgn\~v]UyK';62!0i*Yrv'c#,YPD8F_+ #F_k7f;,+KӢ,% LdK׭j^5nATz*{rlfB[ã>94UٴcÛtl^WVEl ]`|Wv*Z)EJqMn4f;Nq z0VyffF1ؼaXLͻ eɿE endstream endobj 2712 0 obj << /Length 1380 /Filter /FlateDecode >> stream xڽW[o6~ϯ00E] !.AbX-DrPN CxD<߹}焍&WbO8$y;AH/OpJJ%O|3gN~.GSt%4EI@L UuFK{`ӈsz3A4Q$neG KiSTS1J8K][yNᶓ~L3R'H̚NAJ͹uJc PnkY? k Gx˩wF $&x8$|rqEQ/ܪBIELš1甅 7J'vͰрGP;1eQJ'[DZwQ dt0YK6(MB >yGE7{T畨lv6 >-E. o*܄,!?@~4z9N8qs#0\Swswl7 8Cj.!51-ZQ@QVjq D=PXUSs RQX~@Ehڔ'3a^{vkcQPT tB݃-C6~n vMџF@Ujs8v+z4e<xԒjAxbJ6!Rr>7 a}.´qkGI5KUEҀ˩(3;8Mws1GH(oL[H_ǏE;i4\z1 FH vP e܍|oh+5}w1r40zcL ],ĶB _ iKnS>vmDn.I!0 \[q_<>-\Ҡї=4oTC$GH7g+[R­~ mX Nl 7NvD_:D!m :md%{zomnΡ% ص?Kph ܂q"^nQ -lFMq9M*AԢgn&5ΠdU?_gلP3AR i)nr a iG3lFIL&~q7U?D endstream endobj 2717 0 obj << /Length 928 /Filter /FlateDecode >> stream xV[o6~ϯ 8RuINkZ+6YHfiǛl^1tH~|91 Aʠ^_@+3?\ kxvv{A+cYw++*8MӰ,͗n.]M8)aE_/ng8ILxdW&J2(\v%H.BQ$TZ&W!H@M4sLq2qjAͧ(V;^Zqͩ <0N B<@@w?)(5'6N_!囔 b-.ܴQڸtI獩}Ϻ[MTD_4, nȮ Lݱ7*@>x樂.~ZrIUش"jQHkE#%wR3Z ︢动[Ν%EҭhX=9YFVH*MGSwI HK_7p'9iJaݯL5qp"_@ 5*)5}<ۿ#o%CU Ǵ݄,wtBЖz7i_$;D>Dnwu͘gTQ6x`+9Tؙ"VGAja]k #wۍބ*JEh~3`ZYg'y4?S)-ל&oZQ 4}˕"%9Ho[> 0gis_ 4_\Ks {Kvr9c`헃#5[\IPL#K7-sgJE ͗Vk_Mt%<~e%k lFۗ.n _zRp+z{zlӥ B}'cj 7hI# endstream endobj 2721 0 obj << /Length 1451 /Filter /FlateDecode >> stream xڽWmo6_a D,IzmҬ-!h<Blɓ8Q2C/sObOLR>a2gܬ6 ~&#nvJ,婘\Ub2.٦KL0TۛE?FW2{> w*)q(ukct%!AH&>`+њƿяxA!X‰/&ߜ̭]onh+ޱvua;Vmw^ BsW k/Pgoij`IuU5 c]lJv8pUޒ0TI_Yc2{:MCO%:~̩x}~e0<ݲ%^qG"1Kƾ^(r.hW4F5 d97!hcf˄%G}&y vdun[^дQ?o>Xck*-o\p@xTxfP9ʋRwX2Ȯ+@ݬ3(+AVA߹/E6vl׃q:w -&6pxO;s0p `HKN{5+QB5.<=cs J(Pdoi֖6l%zw3-<:"]mZWbRiz48H)/`T*8 ].J\vD2fzJ16~. 3l[o5-,ԍw@AYof:@hX `ZàSµESo7v|pfJΰXzR7cBVA4"SV< "5L.uِ,Te+Zw5F>ږdSۮ/Dա1D~فc%-cqe,9FHA; i2Ʉ;K%ilv ˵S4EG/KYD ,ة:/S:s[o|! 7HMw j]32# %% HS-eߖ-2 Ǭka-kGs]umf"LgYP?d%MzobSEz y4kCk+bP88(~M+-n )hz.р)x0q19/a ,&]v#SܔV ]WV9,ضV ][!MrV/1.|mkm(SAT ظ?oG2L@?n@a'W7{&n7Xu~kYxՎ,c:&Q] 5J[*,;< uxj28Au0ܴkO]_z&*X*6!^ƶyR6 g(F}q= endstream endobj 2725 0 obj << /Length 1360 /Filter /FlateDecode >> stream xڍWmo8 _@;pݺ6la-0}P%b[9Yi GrP)|"b(?>*Q$LQ՜EnGD|{108_ߝ~e#2*nvu7obe IūpYp;,gȶ8y$v^g/49YW#C8/X1)IJ^ɮ2jenQ?0$I8\ҨF!P6Hn)-o#E6Jv_#ʪG<1&0J;0q2z&w^j[fDbnt.hm'E*_(YQ۫YYNH'w gBXsH,;s\nzQ$1TX\ujDW, E r<ZqysAr7b7>yye" R$'|T^܈oY2xdB.{N1;.rru8}X[=-#3Or½K"+hrRA1gCvlI O+gqBa錢DFY4o?g?3VEvP$"zI k%;vk2C3COU=DG1T,gVYR^Te)OgYƐKtG[Giڵ7BĘeΖ""a>xSo$:nqY:hIw)X}ЂZۥ{ ݭ0}z7ĞЮi(m?Ϳpgc7V~!ŜF8'`&MЦ=νp $#`m:hT]+0UC]yiԃ#NPڸ1h؍d +#kըVm̉}wCDʯugD-moG( I&܁244yͽ ++T -eI endstream endobj 2730 0 obj << /Length 1421 /Filter /FlateDecode >> stream xڕWo8 _`Q-p]ŒaP%ζ ޚ'n.\TlbY F<]wrLuԇW~qy/șl L,Ze)JZL(Tɑ` I) '_8có,<(9CcDߪ O 8冽QteM#/p֕%䃵Ȧ97AʦY6tANK(TaPE#[] }к"=Ee層Αcnb/Bs9R7FJR/ Wh=N /1GE;ma&ňx,`q J@@< Q8^+(Q ff-xZ+ۍ|$$`gY֦.`س& wEQ8fr`K![J<~sDjKAIp`ն}ۆ/\X~ؕCduK9Qwek%mj)ZSqo]mT,IU=o %WRFWpp{5ZF8vVAy4z>=A)[rLbi0C><&L,)鰑0v8, k$ώ^\^j "'e,rޜu_6P݈CՃ)g`*uѕU3)FW'hDgOoH;%P*a}PV(pN7)>Я>P'QIqoyyN/W0I^;5'#$#t o`6R~"G3Gӷr-Tsr endstream endobj 2735 0 obj << /Length 2442 /Filter /FlateDecode >> stream xڕnH=_!dZX47d:1"lI А-{ߺHQ m$0`VWV "IY.Gn`0&on_E 幙f*\|r~{*'}\apňkѝn \<'I߾{v3T9.*p=PS*uE BVBT=n-`J8J,Ա`F8/,wKh>-q=nTk('|;W #wGKe|rЩixZ ;pUX^(Oe-+sTw@4mlDoOšAoW .2%S>t9y 4pt/{<ހشݶfLy!W#5rp0FAR|L./yBR7Ew5/"EV@3D'C7(=tZo#5{7lȹE ,t$= w{\@F1hNW96k)7X"P{)OTf+AJ!ٰ쩰ґG{pB-Y3gǘ3W83+} tĘeܵ|͋UqxcZ-q(p~C3HW{B(W!sH ,DwkuË`8х 勼+ Џ)p.~amva|%U'ZQJ? ,H!r^LԹE똰'j%l"FD|s//!q5GGNt=sf\qb5s&~͙eTەC a=j;(` ACaFsaX%P*:OJDO҅D@Ҝa+@#*PǟN֌dFMM+ph(`]bTJ)0R; d&gQ'r)4Qs|LoZw)l4r<_ P)1Ksob- QӽGn_8HgYNDc9P#cҮȲ+roS$:8I   b8}ig2(怍*>](=IH33&2vÊZ!NO Qfkw=srp&uk2 tj7Y4pzRƚd>N؜RR6UQv`.:$X;O3|ZUND?PDq{]͜9/ Se|O?99q `T~{L?,X(G$4 x3sz4 Xqy[eBJ%)_XpA玲*=^-} (|4TV׭阋< rCr2k4d^hb;Ӕɾs!\]O- .Yf.-GD[JO\3)Z[qq6p&c_2PG-<" C dpWxi '<\~`N|<&<80](AhAڝ5KЕWo0^=?XI &| .#ascӳ=|z  BJ;~(g 1(,|Rl%`9}"~b A3PJ> stream xڽWn8}Wv!CJ.-EIhzQIJtR?3ʖEJ gfh1O>|%Aj.B `/20+`GO!VF^eyL݌vt]K}ϣzjt|XW3=Uzݤ0XSa,qBl?D"d&e ݁;%1逰.\Xu7m _&!C2,•!̔ѯTQnMG$]gD:*ns5Dz#*Wn,J)9T)鼢-v`GՆ;Ev;4dpɑj] u)̆fVhE@rBp!i&d7cAStEjR*DF%V;_tw -&oh\$R;&0f!6q)$|гZ 4 텶c2f"eCoM/ZDN ٗ dЉ{!ElSm7Fp&Ae޹]؁{ qn"lPf_# vuӎ+껒VEi0;G6vXb݌"2&|`V1-nɡUKUѼ6 %k6N{+wZmo 0tTC5uIv|`DR'zmd+E̷:`G4g*GY#ij,Y=RhʐKO$E.-?ZtrH x%TJ o7~C> Ui?D]f]^}y sn{QoȥGu?1cx65DZ@)%`y!]X(J6!~q|W%8_Bow_-0̰msL6t?yOȤ[L 4𙗫g-ʓwaBS w߮# endstream endobj 2747 0 obj << /Length 1333 /Filter /FlateDecode >> stream xڽWmo6_!d@KJ^Z X$]&bo#Ѷ0Y(/w'R)aEEǻ.cýyI,J|s]wr>#狃'gBxьe[,ǪwM^e)30$әE_Wjs5 FR6{x}p)`Op(/ti2iDyYt) H)OgTed:zrd(yz=dWֱsխ58N3!*=3Ů)A~Np@1 | p.5x JU0 .Ҏ#s$(KlRSA'4?n!8#e X[S+PftQ5N;wdiGYtɛWc\jc'ZىQޠMY˱N='BO#;*=(:ef#GPF3[$~0Aޚ^L1N)sY=\W8)@IǭpHm8ۚ>:ɀ:u=2sQ@i0lj`g'.x9#6{z0E(,Bm}c\vZ Hboe^Qn+ն#ӱ\oMzIhCY>qD)">,c}?v{C<Ę^fJNĦn/ 'W?)Aq-F0u7bш]~jXV6VO,:֪|HёoT!_B,*>Bwbb}Ơ98:܍#`=Bp _c<Э170p0/:;PH7'~zAIl7ZٸMg ! ۧvzխΖz?Qt֔LsT)pv yv~ -dRr ̟w-LiC/"6&Yʁ7(oyvQBPP Xܩ ~݊R:R4N1i5.2d&¹#86vס>Vdejur/}^nrKoU׺rżOѠ\)>Pޡ&j>܃!i+vŽ轺9k05UU)_uoe #ݯjNmivWZmڕ}W+Mo"|L b!vmIaے/tuQf<דvñ]}ݭ1Dl󐑋mmaagF)ǻqwY/ ق endstream endobj 2751 0 obj << /Length 1631 /Filter /FlateDecode >> stream xڝWo6 _^ࢳ=ڴ^4K0uL)ǥ]1("HZ~bzq4Lȳ\8 bz~$G[fG_΢h }&eQ mѴ`Mdo~_ʪ?}}Ǟǽ0v ii9qp#8@w7ٓ,Ehy"\b$y9yf@.[E(915S{*!0Q[0 6+Jr~#vo]<۠ݎyK[=)+e lL'h.;~ٕݻz*\+xσI'd+EQ2]{G0 |;U!9c5 5rÞ=T=B@kc;@$|ȊJՏ[n=cEպi.vSs*ъ ~ cB;" C߹VK=`d#!Ww"{5v+>.>}7Gv%rҮź"6a6ݕovmVvJ~x"|$ ~ 0YY5*!P& aRPZ71>:"8cQ0U`2*Shm'Sp;L#A+N7]FAA`Cn9zcAN/&&( 0,5v`?fK'pپ% G#-l l`ik ĵO$n3e}l{mX?Ԝf3*W$U(]B:vli 'tMH$YwuFxηp#xR1i{b b˜.ew@Y*粠"/K8D8'snL腇,kVici>tYgjzּ$ v.Iz*= ۠3' |.A/1!10$vMNBJZw.|Mwjlpx&: endstream endobj 2755 0 obj << /Length 1429 /Filter /FlateDecode >> stream xWYo7~җe;@Q87N]Zb%:\ʮ;lijCp8$De4㘕I1V'ـON A0ܑ|79}xʨUzpUfqoa%1>;eTSa(rFA!_&?&7S!^JCB x"P` +)WK`Lk(X^,cnǷD^e#δ+>Š`(2GKANa7u57DwQ73ZiCۆsi!6-MMăZ(*|FA9KRЗF N~=K{}8 &X _D`KY-eh G4gI@'ҝc+rWQ!8+T aED۵Bc+v<ֹ[hW#sFt|{WIH4~PtV!wf(Yj:P60䁗rzaJq UF[\d%߆~pJƸ4]+DGOf%*zI6 hy i!sE瞕 w"s81b#q;O]x¨<-\jdϹ;ey Fٖt\F!zS.<"j7f^˜GaYI"bB(6q,X{≚ >(sܮM=ܧOs^\ \`TQĄm^4a.(D! B5S+| n;ω;`mv7G4 'QymItza=wxAתqOD_kez_L5Q nWoEʢ(o:hǖN5ŕ4a!O rJVN^I?_&\+ƍ> stream xڍVmo6_!d_$ bIʰt,uť8ٗM(]$fw=|x4q!Ni4Ϊ`m,n?L|7c`8uj9 - K/> stream xڽWKo6W, Ux1zpbiA@n\*E^w!wi0lRن dZz:$ onV{Kp;\7EVeS^ٰ&M6>y-/!5m&>)tBMSV'WHQq0+!/׎ Ys*)WY0UZД غt} :&luƦccj۪dJ/ʲeiwO&POhv\Q/ E 7On+fGc@)z!ʮC:&6XE|-܅( 7yl񋉾@_ֆIX!cGk,r&Zmtts1*ZeL뻷ą3mVԜL6k9r7kK$eVt5ÂUi&,f_ץuMD?@5~ȍ,-ݜr 6tBOs+;'kVo^>u 䜿&lw,yI+H)CiLsxrxrV3N &Q9꣭{GP/GBՍ+{GxaJROU͏ &5ڰ'9稓H.d)ߚsY}weۡ kG+=;?FqKro] .gsM ZМaOd9"@iz2#AfCO;ݏ[l*r8t!Vǰ=5c| !(fB§0]쵞׬D6U:5ĞS`G}֧d J2vp4xÏ] R&b: 큊)^<(F -0r.q t^* S kˋ(Hij4&Oୢ4GVH#8i,{$A7!l8،sbt E[1x$nRU PC8aT,O&&棜g',ώKr #Op `geط(Fy8佺u*Zpx+￯2g)D@5kR>> endstream endobj 2767 0 obj << /Length 1210 /Filter /FlateDecode >> stream xڵWmo6_ad&5'] ÚlaȊX-i~GeKu:= i:N2otO<#\|B=.hB=y̗}Sbr\XtA8{ws'%ʹ;yN_濜||FJpZt?FGiJI!7P V8P*;D~E3t @jn8UPy4BxRbg}w[T٪2gWLl۲E?_ܢ2A(B#w&?U !+/jCbY "Đj$}t{j/ezf!}(}!\@qQ@ʯWc)vG%[7bGA$ɲ!ʅlW-W䲖k& .~Lz[9ZmΔiJmVHCF׳TQmwB0dӟ/, CoSus мbbZS?5ULҪu#hSYLFaFc}fB-wl)K^CC~YVk5:.1፩"^hڃbKpr9G$K8qş#cO_ܴ(~{x@:?ݤZ:51ғZVy_~C|S,M%3>L?V;vNz^"ծ8m[Y*ŗe-Qm^:LP% uuBA0ݥ@AfzkWxkZ/අy^tAU*ZB@L攟Tyvv֛NЧv>)Pa!^mFs;v^b s vׅ2_9:1ۺ~ ΰ< ze~/!]ݗv` @z};Twho endstream endobj 2773 0 obj << /Length 1506 /Filter /FlateDecode >> stream xڍWo6A*U[!n-ҵHN~W \VpEJ es/Q<<C5, nx ,yYyk]"B_u2@p&Bs][ H F"|1 Z)jER[%~ x1G8T[W_0xXW(Ǹ7zl +*,=iF;ZuPqõ0=( %-/ :rX;KJ4݃xcyMWFBn_q[Z+B]y*Q& .6J QVS(-%uAa2uаA <^W-&WӫlKXle"Mvor)Э 8xj =k:W BkCdy\XJs Ja 9LΧ0K̛`̊pTRK,~(#g%ŀw2oE? *؊+d+>e!EPUXi?u3ܳLˆ0&>/i*FAHaI< ŤմU]C,~tΩ2[ bT `w+ITii0Y-H;p%&%6n4X Qs0oZ!h3?JrM ?.a$sHgCӆWԅ4KVv|qqfY\T/׉Iz+gz?ő6Y& :e^}_@Quo Hm;9t[# 'R8tҭ`:Qsv"6p,Ɔ_mUE;bCz8_-Stx 8ܫ?sӸ>`멐^Z*ڬ7a8rmfd֨]PSuR> stream xڥXKo6Wae)v7v7H K, "?((h^f8J0Lr>IÐQ6)VGR6ן?<>$,y0ߏU[ﬔQˎ~%սUS/ ^N?6c!r. dC c$"9xӮ{c1& y]Gd Ҙx6S뢮ӛd{ 97LK={(B4rVʪWŀrF0uk5?9ր(a*2Oiz4=Gi}HٸnxceҨhDQO ymtWW 8X9[ ֞.dA W6։PuMt:vHAG m-nZZ%N9ʔe) Z9;Tiz}iC|93JKLDR f(9NY2rl{׌sc&ˮ YǢDlsLzB d*L,QGtJ[kڂ9OV^՝HSiS=r.2 FNF dI\H8N_'bB}jS-~+@J=8NSom/>Cm 6mvDzgm;' }0|"O rv_,FG{zq|||d+iFff#0eD dzVUxi` /UAGU]U{\9ԨZD 5dϊjնF@}{ʆj"P[ Sp5Ai"$w5zzPIum*KI BQ3w],7 G{ tB0LFFϤEԞkYW@IlIpd0l ]fmso?θa8{ ϕt$W]=\H/"2[Օ.vB WF5Tԇ90cڞlg zlUN wP-n{9{Zv>WmohrEng\F>} Q sA򭡌 O ҉x~%ݜ1#zĝ[[]_)]A)`y V'vmvkS ^,-dhl;Zc\(H.TiC6_d gh}.]2Ά(y/# av M$d-Ư= W{a I$m6 \L#[5 DRbz"LՅ(@CfZB~yc*_ѯ?x^ݐud /ns+08,F4>/~AꡂO"p ml{>={]"rV SF0q b= endstream endobj 2785 0 obj << /Length 1139 /Filter /FlateDecode >> stream xW[o6~ϯ@Œ+&]:KxOicq e'ٯ!ȭX%<΍f eQD8Y &?-O޾OQRЂyQʻ|3(Eljv'nĽP+"3P?\,u&ax$8#p-rU˻0*{9aJ"w ˫S|Հox =>`r'> HbD)IC '!I'i8/3p['1@#wd(_}RH$4Aqs^|~*SP K&lvh3,Ax""v5lsLRkq9υ. Q38:|@D&J>b0Ƶ~*@b7Zfzz(;# a&4b\ߡUU*ƅ`x%P1čdS)ᨒqdzڪ'웿dS|ҫAE,p7F+ݜ( JK3`wȠ+*Hjq_Qr[xE\IjFCol:]4==)8.(hblAD3Y^c'toVl|qI^&Y&Gohcy8˿+finkvvC|ef)4&&NX#%@_eA;QSڵƪԃ4> stream xڍWMo8W=,(⒢$KzhmiuzXEȌMT J6!rD,r88J6 A˴U RbP4ON|e3hJ>7u]핍b!)^Dqf;|RʪRQyHQF_O̒deH))4~*+\T|#J "Q\Z%|ndNn\D9(BnLOΆZzaFrÓ(E1'uz]uan]|> Ay1w4J,ڸ ˉu['8]պtQ[ШP\i[ F4TܯuPVSaBˍ]jBSm`C'n5^e]]Y*حe4XUAA'aO_v5]>99y %a4)dųOG{iZ :;)<XƗ>/SP?, AjZݮ J%^@M Y݆NTD6izchzu-`χ쿢̲3`a|_ }~<9r%R}rب+/ MkjTau 0Ƿ484~FGQEPVfhn5OvLڬu#UkzK $'*D>VT]R?1(<\‷±U+:7Fcηј\wBG:47[w'2mݴÄ F^YP7QɘZ=!ˠ|ww~, ӫ#N-a8_)gwe `p) Vds|0v{^g<Ej 5!p8T65 ҽ7~*|n)y{JUi:Bnٯ<%O endstream endobj 2793 0 obj << /Length 1037 /Filter /FlateDecode >> stream xVmo6_!`_( DJK}H6Ecl~`d!uT,na0)xsĢXT%QʨnOa׬#\|x}‚ gˋWBD,URh/Nn2,MSRų,VʨVL$JOO^͟c Ώ-BW4xc%-(K3QFYɧUXA4E{C A~wh{GI~ӌ4M8̯/p7ٺi?&"i:edPKltu/UnZD=^N+j(i9M ᕔSQ;y鬪8ei$k)DYsvq5Vrwd =J>]$xߺ]UvfivFTy2EIB={Ì&XDŽUǀ`O # H1>@GmT6zti^"#u| gy!RaSw+FmM̈lpS=nѭB_mEJQyp!&A٨)}PoTU\A6 p/!pфtAI\ .گ) Me9ԻNe*;&~kju .lS"iXxA*^( 2엁|^N-Buoy6>S2|-΢2$.t*gXDbxul,.Lj=Ϸ;bT( -`peP!g_BSrj{8I_+1'~3|nT/f~ʎ^^?طfmizw;ۣM8ڡc蹟]A  @@PM6K`>v4߆pE-|R濘c#fSiXFpXXL ]oߛ'S|[ķ8ztg_Qc΍խael'EΈNlqÇ:Zt1k/ endstream endobj 2799 0 obj << /Length 1386 /Filter /FlateDecode >> stream xڭVYo8~ϯ0@W"D!in"- Efbnu8"մ!Wn]`^oa# et!ɢtTT޶#\>`BGy<;q>bd4c}l>^-K_(9^\{ъc?H^goNgk<g(D1taab7rF:S?Ja|^BZ?]99dlL yx !Ó1 <MYB9̣C0*iS;?-.9Y^(zz|+W: d8TW;Ewt ZJQ{?m,BB!z3\ sG>WPhPK RuQ!A.O._1e@6;\p6w59nĄ Q*%) C1<}WB}%JH[#dH[[6 Ѕ #r#ųbAlnFb9`Snr`X?ZχuܘִOd ޿MB"'B\jϭi#u]VkBΉIhP*Y-*b\n<Zk!lR'3 'ƙ)p3m=+1ЁSt QCv M3t[sf)ۃco;mf:7,u:/Pmn7/i݃n˝>ј,( Y:'Eځ/\$I7ZN~.cBsEutpCV3 endstream endobj 2704 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1809 /Filter /FlateDecode >> stream xZKoFWE{rߏI$0 ;A@S-DURov`IlMQu7L<)/1%08"D/Xf@Jf (KMPcRD ɀIa ˤR#3 O5Ni&##h.MAlddFX}A@Cr hǂ QM(piDw$WCsHhLJ4+,@VZ #6l(H"!4'z`e>EXV0-eh/%(Qi hC4e3  pkӎ 4B  +dZ6@DYBQ^c5S.p}`Zg26rDӌD';Ṇc6~`<|^A9Kgٳ61WU=.VHJ + G85luLrM_ -wƲN߶_?\-hQM5ϧbՔEg4Wxg>Us?i6l&ph##RmyLRE>5iptir}\vtO/a޸AV :dbZNz!k8_/{K1MМXk8Rۛۆ_dq׫ZίՁl:z@cw ǀ>=&,ڎfX>LRkAqZL} &ꩭO3jaY:+b~2Y֬.'KE(k~ iqYS8#Zz!4?U=&zN BPpޓMM79:aؙí\d F-kKIkD^> stream xWQo6~ϯ0#ER2]AdP}d&"[$' Qa0lRԑwwa0AƂ4i/[oL~>.Qsh2nG5i׭HAғ0R{\SUn(qHgGgOg82 q4HRI^KӀ_L&N(˂h"ڷuȏ8EsƴhJ7?aT'T7~;f'8jڼ|2oAxDjD MǗҘ iw'SbT+?(RI]P(1!!{Կm,.Wα}ͳ5A61I`$&u[ |1Af!:R׍ a#[C|3J`u%kA$UPW13eBO UJD"7AۦmIəRHGS VզY.Bp߇ЦK1L%9"j1e#΍ Ӷĸ03NcX"&bF<}j ;`cSߢޯeka uOl^v Z/ɯ<૏a*laݝ麶iG/ž\AIyU~B/;㼬;iGuY }zVX ?ʯ -w$V͔B2>Cgӑx6_]ǫ]ӥͦ6KUJRvAƒ ]O۟xk?>OB|V_}`2 dݷج:PPқՕmYiJ6 7zɩOo< BrBopc'{^Ωj릵J6oz$BHZTJ&u Mc8F(Ym44~ۍN^R P=&w2N+O/`6'g $ orhL$~i//!s endstream endobj 2809 0 obj << /Length 993 /Filter /FlateDecode >> stream xڽVKo8W=Q@%E=46E-j_hÐ ;P:-57a1^μTG.kN/`y3m{ќܛƮKoF^oV${QOw(VUBA\_/L10< ]z\P :3yIQ."QVRu&.$ 3&B!PL^CˢХԲS˿ջ]W „ l_,f>)^:?T9-6sU/_)s~:6#]R k1AP)Rg4qFEr䠾84 DK],Pz@=ed=$> stream xڭWo6_a`/2Pi$&-kxDd9rb L}#c"dqI>)v.A?|;=EXl~լybnq寧~p׏$sɶS?"~vq5Qt&8|.=DX4O'pWcO(:rOvlqЋZ"srasO֍nInόn$˂;B$Y0)aVjIR&CKR ab}P)R/>9NC`yx Qw~A@:6uh m( xK ՘12ݖΟ.Y IFͥ_n}aڐ`#XfFW$ i~SjF &\nY?qF~8p9à)M+<uɚ ۄ\$YTeQ,j;q\ TX1c>;ѻ h(PgjʶG ]a!-eEw*gƠ#Z(X*I0':`4tQpNFF=H#bc[yh`U]v"CC!֐@$iB>ϸ7nX 9 dl%h4;0 sHC)*IBV?BILQ̭O6[@BGfއs9o!_`shF! g`.Q^P)}&;ui :*2le&iX$*Æu E?"Dx6DTD ]x;S7iZ.yXMZ7,l{{C3{A8" Y>W2wW.dHV7k`7ǃsq<.<ҙ&pȱMZ]٩%ֺM6EvZWna)O"l;*2R.Tn58]&s/_V9/)bjvE0c<ȊbxA<X nm~‹ h4RW,N-[ ivL8-;,5Q7܀1V9M'F7f,m1l;JIJ:epw!@,(8,u^0%CDi8>Hm29'Š>Ԁ&{;>cH䶚^LM٩_kY2C; sNiR"(b:\HU/D``@X2zw_6C[EIۍ3 HN<`4gV"~AKY}*pTba%f#8ݖf'_ji/j+త8>mq$ endstream endobj 2817 0 obj << /Length 1370 /Filter /FlateDecode >> stream xڭW_o6ϧ0@ĉ(K-6IM0EH-L5nȣ˱ @x BAFQD8˓Q|^0crz˕,`:5-7"o ">q,7$|3eSaGL$7'ӭNYR>` EXJAƔE1uhE~5ɯ~ei+R"FjHeL- 5ռ#ƞHk5)3 UWK6O.F7z5]`p#Cm^TJ\ӈPohk nvc' /й|}ܶCEq?wPZ"\ˮ5ӝ^wq^ȮU{spPe^*?"r1nmkU9;װ:f ]b}6@ݻ\nr}(K?O)kW,U*l9<|z.4$SIKȄ"z:7lƤo @58 EQ#`C/XA^aG0֪zڭkhC\QOPFAj I~^-mݺ\Lnfȴddb|z)/W Fb")P 6ɭB<9?D]7VΏNdj(7)h=I.8pb4O5򑸸 X< ݈xR> stream xWkH_az$ZiW)$M%6²d$9l9QBqpAo|oKD<.S׏G; yl`U |_F\YUD勖id[Ǔ8'gb҅x3"L>$8*fk5}8FcedUY |؈}scᨴʪcsHa28Hemcۆ4cH?YLIϝ2Uqsqt'Rm) *5V|Sg3)tMhW-. J--ϸfC-M;ZU"Ĩ?U!#B 8%ޥլF3a8ݎF COru Vw|ZyNY}1st}Ӻ{eYYxx{. v2$Zx\fit<|ك endstream endobj 2825 0 obj << /Length 1698 /Filter /FlateDecode >> stream xڝXmo6_a`&3+R,uIK$.!-0Zm"z$*m?;8C>{1|?>gI /U73*T(hլ;M>iec(eonnLGM؍Ҵ~K*ՕQ f8ndtJ5Aw@6)-z԰Lr,j87ug:cǐx/^Ck9 hE"F/1sP|@%:t!񟶯qCiG[v ù7H|t!@Q8Se>'p^*^(["0u/mr F4AX}f쥶Y$|!}cp3x a sv:jVXmC?%; Tz#y(aA 4mlt;̐Ql"ަѬYvu|o(ƪ^g/5zU7ֳ@X5-q֪Oו5R j^f( ;Tf(v6 ˝zS$]@SAK/m:~F0)(շs|y&;=Uf{Y ouA%nG%`SwcYMuSlBxh-ݗրZ" ;= mͲ,5\!S޴c0nvߏ!剕 AQF2J뀇R~a2 s},i0#.<~-$9GJ2~B둻0VVnt$a2:ųC'K.!!QNdDP3i6&y4 +3 H'9H7x .k62W0|^VV9̅I}s/+u7EY;@oKpچa tڲʍݿfEOt`qqz񊖗MaEnս=s&J8S&LY,t"2BMc;_Mo\]sm7~DY&pyf]$|c2 ]LG,;\X.&=\Lx)uըb_9ԳzxsМÏ' 8 Ǖ7;Z}++9Tw-_,8Y92`CO}f2s ߅z_-V> stream xڝWYo8~ϯ0vbUaK4ɶѢH@KETGxwCZ.<3#> `4"?Q^T/F;17(f'/.d? 2>m[FjoEK_z8NFI-\zpʓe}b&8Ot4IcG1,Q8n=LYG/2PoI#)I(0eD< ™GGSVW8@#)%-߅tkl;QO|Y)4^Nfqqa1}DNdkR"*]L,ˈ~>oRbCV$t N}yS3ۣDd'U٤e!) .J"ã4^}*vGh}_KU9!N(N7lIsݪ8P4i檞ڧoUٰ[8f_iݮR endstream endobj 2835 0 obj << /Length 1323 /Filter /FlateDecode >> stream xڽWn8}WRwuvEbH,ӱI$n˩X`23<ńOLR>}A2ɫnF 5|8Cw`y2;8É,婘̖P9]e}IO ?h\Vֹ^,By?KxN%( x=Rv.l&nKXW,}SX(t~EbLgԬ^iY5b,zG~Mf2km^0,=킅.Ay~/,eVS7uf0l3n25j}{:\{F E2n3駌K„,`t&;!Tc u{3]DR*q_)B`K3`Zokv;<-р&12nX.J5pB NpL0Xy7d I,KdE UĖ@5.;Vb@ SEcuhرkS$MnHC j+ٖ8d=8-v^;"ECSV[矱:IzEi֦^el T3D&wsfyAfl3؆XH<ތ&E~Oie{}>.K:J:`˕ǣ{3!VQnԺ?[͋c#h@6|jlTo0=Yn73+*I7-dGcvV>vcJ!(YӠ]AiF^p lg5bVv{{ u 'pqo̩^x5WZ76 e,W٧Rlrb\rȉۃ'Y`ŝK8@Az%ԧcwc.@xuQߓE)IKrV(Oh )̬!+a3 /%sUEu|4tEBxJ-&fh#C:1P0etf$̭ūo47I 2#0שrm6rQlF9lEiIcG ax 9)N[> stream xڽWKo8W Ċ !E& c"#і6(PtPNUK)r8'>$'izyMՁoWrB?"'r?⽪y9y`Y,0EQ̎o/iN.m! Ibqߟ~<8o.`Ot(/xY0>ye$<FL;S ^$} )3J,cԵi8fB:Qub;.K--֚N i֚4þSxMXMz<K-Q }1B&*WM#>AԩSzq@ZJc,?\˶/B-$-aׄYN4R䒐g>5Pkݖu!(ELO_Y5)gTɝd{ ;й1Ф{çQX1b4fp4csa8x?0f+׾IhKZw8$)WNÉBy}Sc(N+Q\5!s?TK'kO)m CEz צ$Q*mcfqxc{aɼ3/Jl0}ˆ^8 ASG`je{#L]^KS)Po!,c J2Z 7kdLo{U|}ڛCz[67z z>R%x2%=2)<(M,N\p-mmZJϘTUHVUW,{tf~M `j eͤ8{OPuadZ8{lkl>ae·hW:` k-g)z9ZB۷7W51!kp`ݣM6S5{d`xQ$T@"b&*u3~5K啊k#N.Z $ ڐ=Tfr<= g-Lws /U(#fxڀ>ֲ)wW?r D&~) AGbHl jg?J]( -i ng.7-&KyH_8/Ruڗ7E{Xd+@,_|r}!KK?P endstream endobj 2844 0 obj << /Length 1401 /Filter /FlateDecode >> stream xWo6~_al*#2!?bE >ms$G'-!H|e( (/K~UN$%8SFbYEuk_~]vߧ>-`9/1.#NOz oy?NCGK2 )wu 'r47ɵZC=bk]7DӨsCBacL4:WZi2sE׺PՂf0,E>-nG2o؍YC>}&&{-vn|e vӥhO` IOvkL}0LSUHJۼd'.i e1> stream xڍn8=_a`_d VIbҤm^,iEr?3ږ%pC40I&yeRLsXp{Go>鄳d%,n*8]U+tqPΒ$ N.$ĥZt΢,KYY4|~F+C'ф!P=΋dE8! w:0aD| ZB-i| aYpVT]C|-}YxYЋ+@,8lZ)WTB'z :P"8f+4;rc| a6UK(5BCh mj5}miEY ѕ1л+AuЭASel!B䙑4{?9GZ6޶x$JuzokK@]XH=?󳯴 F^>LXWv 1 huQEp58N ޑB<19VOXRTeAa>3-*5`sw.XGˈ6ވ1n%gS*V5?FʦZEA ihtLkڹ.X '`tb!NZدh{MGQPU+VAo7+$5!ݷr_$q3}@@>{C'-+>&@+k) ^aA 0 p RF놊X<{*) c3F(eu 8/42p7Um6DHLSbF *3 *gR%]Qz0Уo W: n:T? $PnU{gQI2Czc mE5%I@R׸Hhmhg~n+9.[k"Jڵ;K]t@.R6=ˈhFpH'8)ݤt2]Ƙ?w.GYmx7,aޞ6*+fufL_/xhu-t=u{:l4߃֐H endstream endobj 2852 0 obj << /Length 1117 /Filter /FlateDecode >> stream xڽVn7}W Xrnذ.e]-\ʎWQѢ/ΜY>a'IB#w'Wx:o_fل3ZOfmWfrC,DoIU4Mӌ_ƕK#ZF83F8KGM,D+ O(s%-'yRpaO. ' jF'Ɣ\Q\aUQvvn. b#Nܵ91>KXz w]j/B̏ʄh'9%U+װ4^IJo7ۑU˃{۪aA|^z!Ls^K. q< CTڷ etLZ>Ӭ J ZQIc4cC?tي.J8.8iznk+siekI!w8,F }f>6r5c`dzzXv@sswF-eg <_>KXsFs)<jz**}4Ӏ4vGZRq50ۀ[Ѷ^ m,E/VF6ycn[lDѬ$a|9xV\Ps݆.Z@ckhkvF!e6uR}nU;W^)rldؼ }&h=p=ɪeg038-ncٶ{+@uA+ ߄ ]!d):Ŗ'<58xRQt^Njڊ{[2z#kKS/<|DK\PSB~+C-gO4F܍Kz $@OU. endstream endobj 2857 0 obj << /Length 1006 /Filter /FlateDecode >> stream xVo6~_!dF5GJ~tCEiGl<ʖV%?<y}h0`AǴH``Ϊ]p7Iŏo8+x0].A6Fp1_$=Ji]p`$<TDљW(1e|kX(bA q0 KmeĄ@jؤ}gz-leuhL F?<&~tHe" >7OrTG ~(YQ y0!DcU>%oVɞ4f}77qx[kزFȽc"2*,8twYm-NWUecz{F9M]u3,{*7P%ꖿ%b"`.jEd&lcX1tՕ7|h(EϫmJ-VڃW3;J~=508V֙4󚆒Pm49; o,hGVi}/hG]p>l YV HMдwtf4v˵Տ5mW -dSeqe'!L=f^y|{~hq6wԏ>>~DKr+,čܖm_ ~}|}^_ _`_prjL&gRi|ۜ FPW>.튷{' 3..џ*9WU.B=}UGkݲk4T;K^gw endstream endobj 2861 0 obj << /Length 1077 /Filter /FlateDecode >> stream xWo6_!"D}tC$k\EA[(ewQ8aC"w1^μ4hg^Y_0.=LN.` [!/bʣe4""DUխE'5ݴ붭4DJc{AQ!UνzՀcY|A `4"4^V;CPcD "AL00ͼ͏~b(S(䮷ahzorPphٮK]5ّ Bﱏ,ֵʶX}'iҤ5 eX0I+UPah>?RڝhĘ1Zʝ[e+ejN^ ! XbPh[WJUq<& *o<Du1H!"wLFQ 'IO!b}}2=89eS8QSuf,ȏsCmKyF}2M)dB'r+) -| ߈ca|E&VstZ^&O̎:3[,uUٝ8D%m+8 M8S2%%zji=}]^V cuM1NSzP~8۵t鞓9 `z](eZ=^>gۦj律|ܙs [QoԞy>Aƍs0sP-]=wjZC:rvX7U̥:h ~ֲ|L:Tjd*M+%tjpr3Rh{ӏ_3 ld<; Yg1}\H Sy1~'_dw۶]Y;2 響˦+M*D]V>EDoꃳ{=k0M\- .BK,>F,Vn,(ng + Lj΀ Qzy*Ζ 䨴wMC2QSW8|4Bi_|o< endstream endobj 2866 0 obj << /Length 1605 /Filter /FlateDecode >> stream xڕWYo7~P^)Z#p@hpҮv2rf9)&IL"O1jB#af@8QΏD8Inr g' 'I@u#ez߂A>UԅN|,3YvS)m_8oZ8[OiuSh RY. 8M8i .Pe[sP*CvQlT}=\$Йj1H3l$r  u7䭲\.fnp%HdAB=`qI)Au;UCo-[%mK4FRV$ l6<.,6 67;l/oT\šS_ɥ.Qe6sW9$<Xe+YWC&`!bwmF*ح{~ =QzJÇ\gَVbie ` ՘CpdЍ-0CfGNjĒu>+ 5}p^E*0YC0@DoFc-aoPX KX&s*ݬqKEsU|&!>:F_`/AF0q v`@W$.ɾ^nʶJمPC43Y٭ڎ%Hi{c!D7:.g8`fM'\vv3i&@x~N0Sn;Y:AQyzd47겐_JKâ^sll]oe.h5bn -7!X%K3f0a1˦ٓ[cl2,A౏emMSjU` `ul6tjK XA泏iϽ>LmqNmcBԏ6'{T@6*5 !S3p;(0ﱷ_ᩔr0TTa?\f'zAa(j0te4Tl,: 6 :n&@Bi"#kI<$}&Đ(I 9 "5jpkrϱDgWgWoh}İ4^,|(S'OJoLop`!IQ򣘁%hkkpt>z-Spfu5:>i2{X &+e_ #mUQ Q2ge(ii6wF0Zۮg" Cَ+rv7R @CrYY^y]gl<~Rm7{|fނ?Fszkp>qmG !Ų9ٳgy iU+5Z\tq endstream endobj 2870 0 obj << /Length 1645 /Filter /FlateDecode >> stream xڭXS8̽(sg#{Z JB-"X9ծCh]Jo:̠Z_'G?F(_nn,FDoId|돽8IKTW\.UxH^'QpQMƓ`:}!b~f4gjߨ#z>IxhD #pWYU[kcZ9aH @dDHюD܎д*3ĴFYZWfUeUR򶺩q o ae>.aoKQg-w׀8 +l=KA:FDqDN 1'"u|ːwꖈ*# P<&ȔBf,*׍mkymwi^霑ԙY'ENU-m 8-%y몱4ǾLgS% q$S1*S;MV&IbUF(^zsg$1wÇ3YW6לlPd7L3x+ptF8:' {ͺ=''̼#]}C&e@S BQ8PQ9ʢq@?Rm~k{)Hૢ$Q|?0 +*3ق63̛;{e7K7?=~Ak`!խhڒ(u9'.rl@I<p"#/Nx)e],!Ȋ|~B)'lI6K8p"|_]۹3%YXP )`{N@Mn|,FNۇ]NQVYMQ&k5wg?]esS Q"rArԥg\]r=vSpu6q³k'!d(XJ)v>lO`pl>}d(朩:Zoy}7qڡ0C^ߋ3hm1 $dns v>ww7@fGF%^/s}՗eeO;xt0Wi"2Xp=nBN  G ekŮ'WY5+ cXe f(F‰]er+lK ?OTM_R )Q{ff$mXKf1răM1-Xg-Zq/ )BU3SÍab[`#2&l^q2(YUt)6[~5p}!U?;x8b{\p' ,|zI<4]E]Q|X@Ә [MS WK*:8>H7T}0:-ͱ:(E{+懏Zqy.3k|Fw}˸FC<me endstream endobj 2874 0 obj << /Length 1030 /Filter /FlateDecode >> stream xڽV[o6~ϯD+J.+.Mѡ C1xȴEQPخ!pD|sBc^zY"ɽ]pq9 k=",7_M]͗ނ8&~$\~wr%lJQ00Qt&:k^y,!iyBY *۸&rqƇ@s_~Cˆ^EܾCWQn}qF4E_9()YpcF)Ä'^%4KJTFM d =тh4> stream xڭWo6_ae2k,uCڤ[: oC$ $?;e;a}xfبF$ ˴UIz5_NY6bQXF%nE͖y~;+x$IPO4 ή.Y-J'qgQrmbS!xĒ0<ƊE$% υ63-yn TJUt0DѪ!rZbiX 6D'ڋ&K:ZіR"UZ31EUVv'7((8k̹,c LBk4FQ4pJ5,d-AEMqVb wuuЂeyM; nS’wace#v)Mw@sNct?$LaC۟$I+P:Mŭe ^~ ݽBovpYo\tM{Q#Y~|XnFֵC0=N$;)i[OaV$xZn J|ז[YX~vܗHBְ̲YӋ2h= ѡ9E.{c{> ,E? v]Qsa*-;sx*H= ZB|XAX(JKVD]M l+eK_ڍiSHp[ض *`q³rZ2Q VsL0.Anj# 0P.4NʽD,wy>/j K, !JC!U[_zKJ-lퟟj#< %>r` $})x}Jp3PZU6 z7R+s:u3)}M6زrҋҢf, |2*kxN F[oT?򀑞Y"qCOTgF./pplX+V=+ $syu<*748Q@ipŽExd'fT}$')dj+Hb?ҀfK4=itǣf{:Z4IwEf{NU;I|'LZ޺*xы;GhϽ8V._EaJ 3}/,V}; r>;G{oE%IZ mR endstream endobj 2883 0 obj << /Length 1763 /Filter /FlateDecode >> stream xڍXmo8 _7h$QIM p0=JrB˿`|(ͼLLCU9ZɺUf: IMga9$Tʨ*WәǑM?}o|gDyBn:AH~%u<dd&7ZN>MY4+w![٨mJ Li~~~|ڰVVMn-t5f))u^[ДAtFIioҭ6$oW`uWZBG׺*X5~5}e^,ܗL 2kَ.|,3{62SB鲨l^a]znqJZcGBƜ9_)!SFE}:F͙֤1`tK=E׌47$} ]C?H>^  PáivRCǪEټHJY"5b$YH4!)9zXvKk$*/)`ڕ'Xm0(FI3c8sXaO/KoskMI5N2vbnyhsCH\nD‚?s)wp`uՏrfe~s+CݧɋVqh1~]S˕%FZ:gg'Rů`pNmT# DI`iz 66 6Z2ciSsRXl4)%hQ]P@KijWFwލuj7(V`vk"BDMEӛz3٘XSd2Z :Q$L"vOԙuŽR*]˄}i-P=^f$5QSՂX @婛mB hʨw~ g&}m5`Y cjuif yS*[VVjto {B,,άZ.y o %C- 5n%i9M@`d`6%[6 G f-Y=^ϔI? GXV,/;[75%w]f^azаҝ+n'D'󷋯9Ⱥ,iZмZѰɞ/ԍ}M4&%i6YR/yڲ|,Be5 `%`Uw60Zyf__͛5MСv޴t@ X55 ?ug_tz4}!rIQB+YVK#a:TԀC4Z4N fGTZ[ͭK4Lf1\xSIJ<.Òk;ƨ%P~ºNw;hRtMK6?I;?N4z<\觌cD((Ӽj=DW7mÅMΓH!I#n?o#Wyt [Ϛv)FW5V=P?Xʔr36s[Ҡ endstream endobj 2887 0 obj << /Length 1206 /Filter /FlateDecode >> stream xڝWKo8W؋ TZR^-g7EsȴMT/ErhYj-p87NIN&i9&EuFT&:=ϛ8P$rhj\ \\j%(Y;mWU\m8B?N` K,8  ǓhᏒ-3,t|=@]OBH^- Тٙ xÐ !?$&OMv}`%nx[j5*7rթ]I%4tymF˦>q]AP,ЯnP1 f9Rb}-HyPKQkT74 aPPf$޳E%Kn 9\Q[J1L324l4_42J`l[J:oٳuF5S OꁛFڈNh|)xճ <\m庩W{!V@8U;4rlHY%VupMWcZR2wMgOCWnqA 6}[ͱA[<0|#&<\_vjoڇ^v-sG&{ U,.:!> zHQ.H%P;F4[K,W퐿$Sz*:ϝS6qowzuSXrՓcےwuC)#(E9% !de2RCW"ɯs\074%Ҽkrȩߨ=u$a&tUcOٰU n4-~!ڬBҢڑ5f(cj.z0ņ˨* ܑո>]rڵqť6fx ~5>͆+] 2$/.2I7 / wcSۮŵw:^0вc%VCكp~vڏE a` V3h8"EI`ސI`QBxl:ڞ՘3%vRn˅{^B endstream endobj 2892 0 obj << /Length 1291 /Filter /FlateDecode >> stream xWmOFίHͮUk9V UU&^l\}gv6sZTUgggv6'D8$lOiu/{깠4F{OJ9RD$ݵM2gt=7ۿ8&ӕOtP &׻};m*{ct"sćI K?1y>x|'=/f=/bD]rLg BZ1V(nH ao6V2cxJnCL!(Rl4մLh㐾O2]ٍhT<->MmɮzqҬ^BY5S,`~:TI|6]XY܏EE=lٿ?S۳;H gpz {[C7Fz?so8p~8{z$W{0Q Shjs{g}޴n7z֯i g̀ L _WNF4*Lg?0r a( u~4@sz츨t][+~,>3/4d͛ endstream endobj 2802 0 obj << /Type /ObjStm /N 100 /First 977 /Length 1475 /Filter /FlateDecode >> stream x͙n7z C$3$ #@S@hk ˛ڈ-$>{@Zm{g?!9\ƙJ2ћ]4^bgS CS b}AM,ZBd#&#:K&`2ibsQ/SRKeCoԚl<0 98#B0:PKZ(ZHTK]%62څeU/QbT b'6^gЗZ?XI{O踄Y-a%)*,jF"Au(Sjx N_̞ B!i58kV68h1m#‹t)kLe1$-c2aWe;XDtK-~4^kDVق(^00@OxuWQLiuK AcW'p@DÒT&W!1h9TKlX&K/5|I-r`qu~GXSTb$hd A,G#8Z7{#!3jmXoSuوa@'%jOs1%ePIG uR,2(VʓIsj.3/)%7}7y 991YV[0O9vO 0Oj'n^?,f\i޶VKo?߷x14? |4oa.vZK{u3}d.IḀޡjWs J@u S1>lv:AƹNpD}8҃33)-#zw #ih7ώG-F}G`!6Ef,E߃,:"fw }(G{8Ξs$ =GB9鈐/Tr=L"¶{܈3&3]<]?f`Ҽ\<\O;mt,#u$6V%G$Uf*s槧?\V7Ǐr~:`g⃽^~犆}G\qS6 $P{$PaHۘb8|D[G^)\\ݷ|zk/la𰼶գ>6]_MW֚4`;"sMs\󚉹'5"vF1(1&0uDn&' !̳|!)Za̘pL2qgqύn&~F)q?맞^w9}9b'b #uD1+'LpLiH 9zxҘԓEYTv> stream xW]o6}ϯ$GJDmC[ +jcClѶY2(:_~-Ng/C$qQc^N,IovU=|sv!_?L8%9͙7_ ]K)vZ ?ap;\$WRf)0JSN}REg3_bBǘ KEBX ·vW Ѥh"A5>1q-m9[p!o]!~- hJ \rB3_ʨXTvWwҝCѬݫVٺ"nJ%L{$1o\1MܳhJ|M_;{>ǡUH)49kZjveDN ?7&i\PnL})1hbCM`xO[.JOPY?4 TT]ژ" @(mWD @/ϖV+:5h~@ ޫ+]ˁC'%5՚Vk;?*}t$V?Ezڤ"0 DwM z!#H(gtՙjPelGAf#%P|.x0 '00/8 *Iߖ>{ڄi,` +; ~yg3WLNxS+(33C endstream endobj 2903 0 obj << /Length 1531 /Filter /FlateDecode >> stream xڕWmo6_al"wK!햭E~Hh, 4\9q":=N 'E0DZ_$\ܬYMh!p6|xq|0'բ\zjYi8d:K;xMRٖr:, 0LW7/Yl7M@th^M 'Ya³ixڬŝ<i /N?j^uaHw<=U!D^Ksm8*Z9DilUcsZ07Bzūqx\)0Jm]oz_Φ9dzTGb3h7rbͺM3fΡl~R S ;kCk'j#m)ʦd\5o1os${">ScNo4 0#I\xaeKW}hēbTH&H1}&h",z'g#sj[wЩNmmןǠ1zU3ڂm~,LY[yewܣ%T=:ɰON%`@0{t^1oO{QGC&Tl{rXZY1e5"<)1t;8/N2dz|S'SŵLLgx缀Ts3/Ұs~؍|w~oE@(#H6pm{z6K$&S_#oWy=Z =6R/zF7M/+88J?QZuV; vp)3?K )#?,Y!Gw$$i#,vk> stream xڝXmo8>" =NfvNIfJ ;M{/)2P)~D鈉b4 <&ovBo_ sAh^,ޝ}dZǍl{enNaFQLojWjI/>-/P,"IE#B8SM>=X^}^rQFW¬DžiX(i*jtzXm}Pk ,K1j^$y03pe)+ϷU?vH({u%`JrGxz*G]߂ƥuQ;TAWHj `h5a1 H">^}C`p ߦ(F y<{$w R ̚NcEsWUYT$Qo0,ySs']ݞvޥ- lo}lQ{eՖl)4% Ƽ:kG]<h}J+b`C(^#3K]v![!ڻJ{xHFrw8Ƙs,!<I"lLOBfkc-⑦Kgƃ| S[df[۞XYރɝY>F7e3 iI"vʮݢ69H "UO0;PP>ףcХA\hq|,i$S{^.4J [S6 Jw VSd=.Ḱe(kĴifb/̃CM@JRL+"SŘ68lBK`]&ql1S̒Mֽ5iLꩭOZ |'S$v_9%׸j: ThӨI?A:%hJHXκ1hKgGʵb*p OyW"rsѺ)Qw̶tXu)固9\Jd5,C>G#=D/M9S4!ִ{bm LKCb9t%yFR/40qir@Rtj}l۹2]-Z5^S֓۳mhl1]0gn Koߥ&n? s?\{钗/xb(FFQuRC|z v}:З-FR69חi{Z^sN?&>RCZ36F+e!qw9W0ٕqvJ^y$;WXH` '߸UP@;fL!Gݞ+\6uELY'-*zf {1U8-(%:G/B0_]ξG` `/7,<ĉ-?8+PpY6$Y'Gj71Jsg&*^Dy/~>|﷿)5lߍAy~EJ1_4REbTQ9 }>?hzvl3?]{e@1OW-TCckz{5NҩYC}yg^[찺 ZGBdǼvnJ?Bxq`M'n?l<^?ah8@G0ߚ{VT_.Nme)Bqlк`U 4 endstream endobj 2915 0 obj << /Length 1979 /Filter /FlateDecode >> stream xڥn8_a`*SEgEg2%/I%`>~M*z!y7ƋxQE2M*[/fW[ͫ7|GaUb4NUtʲg*+ `IK$$]sLRۀdqfu<,ϕ1%-<. ?(*5L T,O"NAq53\cEh OHH@zNVQ5n6WP x5± L.zBd("55T[xEm?y4WV/5}.q6-L.whqTӞ,&fsW(^)^t}J1( GO,OäLiR)?WR{4|<%Jypoq|b؆Rz[B1jE7ofgT*~ɨrE9IC QpKVZ( >F_*giV$LÍK}k8UO^@ӍԠ*$< Z*E3@JLJJYMi_e{Ȑa2]6B>~jãKHr̘H]!y*-)19AG,S M+$Ys<]`ccEԤ2{n%>҂qТ-ӝθ3GsE+'Dz4ɻYK>Bc\V{OqSx^W!_ehʓr"PetϲC KCoHk[%=j~_qA._?'nòW1OCGP,I t^?2Eh;=C F/yw)kؙW2 #H l+JF"Fj7?Z endstream endobj 2920 0 obj << /Length 1356 /Filter /FlateDecode >> stream xWo6_at/a-ڴhCFfldtlt#wJgl{:~GއL?9+,c^&Ŭڜ~[hr!#狓/t&/E)grvku 8Y,$eg_};T:,K2,^\,F(:J^d"2N^#<+0"kc|EPƬnkݹ5BxSO H~DJnܔ \D5v;i2^!G\덦 쮿 '!K^6鹁ft9=cC>=dBP?Ɨ]W#R͜WL<*bX2|CI I7a}P3!>7}f~%<赝Uj7Tw BzWc{ե6);?1<֯kY*٫:LFN٥#_k>#w|2- z_^6[6(E}#I<09~[HPe7&#ż S*"WX$}BcP_ G.dUpi^|b_1tz8F)I)HEr# ֓),߱ Է C{+x,<./M^ۺ;̂OdS}g|3o;M{1#niVEKʩ[=Z]fl4}ۧ ~6 ɧ0B@)sdL@6SXwfv_'lip[0X?j"l6HS:0̂%dwf-e$<:Nf lq ;jYA#KL̟ssOqb endstream endobj 2926 0 obj << /Length 1416 /Filter /FlateDecode >> stream xڭWo6_@M(K-M"݂bm""KE5:A"x<`X/ˣ(id$rR zPliMNBXD(gbd޻#\[e8I?HAN{Z(x0?O><*8?;νXL#4YBYxJ]6xelD89K+qCgFj3Ws?ڣו,z٥Nc, ÅW^z3ʋΌnl UkXaD%1eyy<E8OCGe mT) /Da,6C ,c*xnLi@Wp$ȭ2Z5~*.3bxa9ᓏO/'LKBgNPʾ>nBa04>!  > zWk!Ouz/#,HehS@u,ɭvag:m|mTWթ{]kRODJÒ`#em`§KT %ߨ%^Ɓ]N~ F8c)<`}_/0> ֣ϙM&Oibz u ~5Zj# Lޮ' endstream endobj 2935 0 obj << /Length 1812 /Filter /FlateDecode >> stream xڍWY6 ~ϯhb al E}AckgZ. &EQ"eQ$8qՌ_HA?\8I Dr?TfwZm~E^~>8.~yC^+4 <)/^-v&aLP楇8IQ xyL6׫q_HDLӯ?͉)H+^׃]$Ͷ0#V?6joo#NOҤH0Ž?ԲF`hM .4t#¼oE>>] )9atLr[] x׺BMQzoy|7cs$`/OW<+|ɸUucźv )c[bTPm9'88K M5v` "n7~`=rw%T!Iv9ȌS&1B8'dHlHa ) Y0đ\W܌gHIJVs j< Bq3 0@~(L I⊨}Ō<;KkroX$߹ 4*s҇ڮD$FFO~KBQE# $; PxPVGi{B.)^ 'ch7 ;7.GC,])mhݷ88at9ޡKNseWA7ݹx#4\efzb ZhcSPImYD\vE5S%.2auk b!lRPG%JvO|L4'<|(!<@xqq"M_mYc> stream xXo6~_al/4P1~Y0 tK%ݽ}e"YI ȣە]4b#>YoE4^Q1׫=l||ƽ]u89yo<^j<=BT "]8NQΤB0MFx_7g/N0<^xD8hK(FハzUImB4v4aFy QfRzA- 4|{9KfF, ?YBwWwؼoVhQ^U5 ~ #$ۍ#H4Ȣ3IFCf7@oTԏ8J h#_ I Ĕ=0i/ 4N$ v yE+vql3F>?ޅ< #pS<z-*SBK!6ߪ <.晣&jp%uʕw yx"܍!~~LYKli\=/[,AZ!5fQ=ƈhf-*̥Eb+K<&eUI0OHlzB܈%Zz*\ɢi1ddԫuT(9k}Nz LRee4-"^e`R^Bz4^GCD/RvvMۥJnQpZځkmJ5J^󘸅B Ppi8fgMU5  IB v8-چ;!)վgoa,#4W+tKj&P10ȭW r6QjmmB$! -}i Q=wL|,O휕s~AڑP-N=I=> !nWk?WΒ˜fZVxESO'Mxނ[5 endstream endobj 2946 0 obj << /Length 1236 /Filter /FlateDecode >> stream xVKo8Wً zf4iM6==2c ,;P(E/ ֈ87d ?6H $~<Ȫ=jWl=p#:O/A0`$4a}Wx:Nt^|4~_}Åy/gr8aPq69><^pA y10A(gc,& }„mhɻ,";UC{r5wP&NLSNjR}Aʒ8'1oK&P&d|T4@E,k)gESn{~R.xd] ]Pu:5^6˴ԅlL^h%J^NW(`VL/UZ.,B{SYy3ₛt{79꥚Vm&+n5"3*LQY!5nI+̒Bf~JqY]G`$BsZ-uݣxL$qejNOJBSUr|^.|*{^ ~d%ؽiؐQ<'46Z o+Z/H/duu8} U +~km >q)ӀeYF4td{?l?t2B/_v9VsMssa Nl۵G$A[܌s^Miod|͑9>G~pJ" " x,y;@u,LcFFnj4Qvers7d%FV)B{x'>& 5 Oj endstream endobj 2951 0 obj << /Length 954 /Filter /FlateDecode >> stream xڽV[oH~ϯ@~ >8jtbJGOz>9ŔFu[shXw⭐gNODP9mjT`qoQl<?: @tͦ~P*i"iL7UDFmMڱ LX<q7ܝ;fdJ3P]U0P:}L:06vpltOCfMPH=UŒ.% CrR E5I*u+,Scruc lf?3S& gV37(_@:KР7>wk]jXw6BIr\  endstream endobj 2956 0 obj << /Length 1514 /Filter /FlateDecode >> stream xڭWmo6_al*c1CVvpvhAbm&"(Kx#kP<yo=$Eße7"ţluĝZhpۑzP4_]M,]ߵnKY֪( FA' ԝT1SA D?_?zs1C=1yQD{#dĆiaPOsml.kiUn&RnQ2dqaĢ&I-k=U4(RpF,IBaliYPVE츔Ky'.26*dM^J0d,I@ 0VEV]RxH&ΔU)|m1diSv6yeQP  *u,&B1 tAMJ(0 8?g;r~UXWsUcV&e1xgiPU]t *9C;K;ү `clXKA2 #dPqn  m66"fj 0t($Ô\깲.4^eHA~Zrg>-m##IwD!WR@>sW={ Wm.k*nPcVmdO Ҕ{.ZpA3:bCOJ{J 0z:A7Tta6JpA⿅;Lm-IW g^2YY,aH=nC&K.jj* Y3)3K hD (sq抾a-. B7NBC=(4,sUg -r2d#4CrI7e! LꥬIAҵUsRAdJ*Y=Еj+̱Y0g*'?c_aƕf 32=N>dJܑ<Ѿ̥3e[@?=}aH酁^Ugu6[Chv,=t|~Aѭ[%o OaYyvC>R7s7Wf( /}ECsOu-b`L> /ݭ«C86\Mݤ8E”SQpSK~/rIP!:|C .8>bT$ zsGF]0QD3oïF{Rv7uu]ӓ1-Y͖4U_|˳|<~Sxq9v`o;ep&t=+ͭCڻ%D7N4BVM w1:W(zJ[!z]dam_U}4 Sq0^xkYRn*y?ҚgNix6gOUU1RtSG98ЍsO4,i3fLpS.Qpx,+:mZ_0. endstream endobj 2960 0 obj << /Length 1152 /Filter /FlateDecode >> stream xWn8}W}Y Ji$8(i`$B n"κZ}Yhr4spn&?dI'Xc'ʍ@p'(r2gW(GtQҍdA3w:MƜ-`uܑF/bg4ॾC> /NCz^(|x[ze{+6׫V{K7/Bg^^ ;&إbxYJӀVZ;#~}X 1# r z3ϐ.|~QhSC\y*~̜k )K{po&xc# Kvel]y\M}ċ8F}ϯPÕkw|Ibtq( )FZ{X9('|ö$;ǘg.K J`M= xiVKMC4tc咭1H%J!.t]@0?c5tA8bcd&Fy ;gzنTil ,8.t>Wn S)A$tcͶ.l.ŶR`Obg #YfG=COu?Gxc㓺Fr2!"TDU9[}Jۖ;e6+mEoa\85fJEA>5$Sm['A=k|BUBc7kyzfelߙ{J{&%_mNt?'VMȿ7Rwv꟱P Qe\VwoF}P{41%RU7\¬gϻQ[ +(UthhV;Qo bm ,(Fp֪QIl!jqdDQ"Q*Vueb֕o:Bii֬v_ch%K+r#ySlyyLn!;t|lCTY3@f\0 nZB|V1T% endstream endobj 2964 0 obj << /Length 1123 /Filter /FlateDecode >> stream xWKo8W ĬHCǢ"XMDnC]`/ Dy|3> I,LŁow0'7(0f~鶪Q>la$} 0"qRNe#ˉ<#0yGFkoH>q/P31t!eA{YHf!  '| =FBe ,Te0rZ9ޱ=_[JQɉrV5hZU9ÃhO2ŭDmw=n# (F)qN ]Ug}x9pGs\z\,D)&%=]ǔT(WMynn{#G(ŲZ̜$Һۗʠ ˸Sh`vV?Q{G>˒5p&;Z8JQ<ꙸ)ӥ*gϢmm8U[Cl l@: C<"UTRW ѐM $L wQ}Sہ׳X:;MSdnBsB6( I̕^6@!"2z=./Fj!2z Dܞ6WG|C0|i4JF& a)42՘lk>aZ}A2B.أwKfQĭK /WK~#6aсO;[V5h=sH`h[U/ p*nL&c4+8j\o(SNUkǣ1\_qL 5s]>5ra nZJRgf}]*msNAN{ U,?#TAv:=Awdˉ,Ken٣ikHlGIJOFttFS8K};[>gڍeh4AB]:.7Gij0_=;:yʌUKT̀Zj ttJ:W*ĝ,6 oiWvfvn(!wH>z޾>G4Gnv<dM| H6 7)`. _4Z endstream endobj 2968 0 obj << /Length 1504 /Filter /FlateDecode >> stream xڵWo6_a`%Q5͐mik1}`d&*K%9G9r<wbOLp1/|RBǵ  /7Hы3)'"EXl1V5Oثt8Y2&d'Ήq4JS2oGg;2J>q/&"! | qB궴fәFӏ/7OxV݊- ۀk&LaH"KSEWI澗`3<>gAƮU-uN@wh:7k]p+U [sUcW/2qŎQEn<(SKM6^3N"pT=z,ڬLb.; :!FN :!sBw;eq $!UVoU[='6&>w=JrDXKFY=G`? lطXڦme| E1#P'r#BnZĄ _w\P6Ut2Ia{bL;\ ;_DL29Fc1Peq!K4q`O Og}@ CAѡq62!1߬^\J{՗=2NkUSD@i;"φ:3-o([3ƈ 02kSjڌ7(|| WP]kfAě'PbV7޳`sTwV-`p0_MU_9{8gUcYH]rk^q,<-Jbr$f*l&-pv0Ex X/r[OAesWHf}Wcx' Hb&qNښNHkҀK3L$Pnl>P":HX>'9|M卜rKNߔ,Aq8I)ÌW|KԾFxra 6 h*}5uH{蝌r~ʴ+>W['!? IR>)?Q$=}wZߖCNe%sX2i3d=f0+(PbИ ^FgI݊ s4iP v3p;v( BҸf?rmg.~UypCI_b}BaOK>?r;ߠI0Jaz0q__ܜ'~^{Ln"Q1!I8QICZ 6wK^k< f' 3iR$&ᚈ 4b. ;o"j~H4RyF˥T;l'\6`8]$Fl/˜>*'AqRm_fހx;Pv %@X6v Y#3Bٮ 0W JzN`xSk!b(/ɉ{R_2pD@j~@v:u Ke珠OASe#r_ endstream endobj 2972 0 obj << /Length 1458 /Filter /FlateDecode >> stream xڭWn6}W YQwmgl6\ }`$"K*%wٲIݢ!9sc1pO gyOx.gn? ⨧y<9,ቓ$L٧[#Xq8o­zTZ0 &hcrqt:Y_̋݁͟y<c G 64]aP1{~aOi#YPS^6fK.I8"B'Ql/nS:S<.e sfJelckť*'}nO#L|sϴ,ӼI+ yUdHskﳚڀ "+zRieO<ᭁ]h5l6ʷ0!M;^ـ<&sUם+/U;Gsm;VWYUI\b`Z'9Gu 9@tx'3s!JuN}kݘGIBMU>y3leZ\,:Oܐ{y*-`(峥V(WyBphrM Y8^|V'˦8y 'iUTźڮyi0#'Zϓ7h5x<RxP˓(W˂x 3{\ҷvNq oD 7 (@FPX¡66n4WCHlP?m:keت{%O,֬7?"p\aNqz_heݫ X"/;þt>>FE{wZj tDl[Kos?ш44'*YOu3Ӥ\0 !Lc;  e1^B䍍L! A0ޡh^>ٶj7RI=2=zce`cr[%3xNJY7U91j~G/+t Gn>Rve"mEَS}s|b/qm414[ fmG,T] CYHD3ZnS`$Il endstream endobj 2977 0 obj << /Length 1239 /Filter /FlateDecode >> stream xڽWKo6W"zZڢn]HȴMD ^C=8Eh8y_0dE4I>c$n? ?@^~NIh`2[ 'hPre}ɀ4m5[I#Ą)K8^ $ִ[ Z ^2EKXbxRK"Wj?0?d4`>? "6ȤRoHr)Jؽ'00FJ dreٜnV.چюcFf1Ajaĝ'D0Y ^#[y} GLpBod-TVQ)]\k@MUvǍȳ>[6 \ֆRwov4ChXmWEUkј.r];Ȃx 7Tb4xİ^UFDV Fd.+ȐyI!(k;6ߊzԫL_移z޾6:p>d^G83|Rz{{J}- Y: ){KacEKeTCpQ`l+^mx徑oIqp&v]lR '|zMٹ y> stream xWo6bF!Kڮ`hK, ]'wǣ_zEx#;:r!ϣlT,N|ճ7O'7䯓Wq< |y0Lw{vQ(0d oE1;~C5UZ"Ib">Nޞl.8:yAldˆ,Tp{fLYݵ.r&c0b;m*8_x)]A^.u׃Ss>ԴnjP݈Ou; AbZn0Z65Qg(䉔)ZoQ SdZ29} -m 7d`/?{C1`OCb!Vp?%htʓu:ν,d't~ r|ou)1AjT_u]Ϟ5_UGx蒓%7|ף4Ea03oZ̙+L?! \J/ lي{V$sQO:&/o6!HvoO|?桩` \DHx; b6zA5Q i3< 4} #?ChVeʸ1ww^ g‘QOSw.(:ʏtBFkZ+cggՊôŜ⬜?t` =\ץ&=tKRYJ m _օ  ~{jKPqoݗc= CLr0u;Pa;m@vh}1c|r^tX,H-{jlH):EW:~{&3198,ZąZ;c]ևȹG ׵|׍I31 ,ŗ:W@3CJѰEߕR;u5E;N[! 흢B]Q5JKp;":0]{+oqsOB/L6M е endstream endobj 2986 0 obj << /Length 1574 /Filter /FlateDecode >> stream xMo6_a` 4Q_:&mעi; nLDdS${eGm!D>Obd$aj}9h{3Ň'@ /f'?ʲ2*d-&st%N~$W<4ͼ.ZVm*qg'4{{rCGD$azBa1ɋ4IJ3Zv(8qٔNT'umT0V`E"J"EmNqY4ygil͚Pتk Vt$7o;;h:'od[  U(a}s귲&@̀YkpiD@,*VvlB?S.kC(b΃“ןrҁ=d=i|#J]D<;Z_xfNKC + "[[ u*\NZՅ_-yD}vqv񜖧M7Q/MR]E y*[Z }/Nީ1l 6%YX$0 E :7fG~{QeN$G q}AgJnE}$}9$O=8\nB{׆blؽ^quG ^w+>Y1HPfk lFy% sI&#b=m ŐV\ Z6v?zEmbuVµn7_^ (7#7;jлju6btf)g1_(uς{(U!6M"!r8ϑT|Saև6nTa{<:̟ nS?`W}^+C-?KΘi-@8(H4^d^S5Sfl17``;AZޛCl;, ޙqEwnpWa(6C(۩N@CPq8S[ARfmג񇑀'Goz =k6Liz*!+]*;a\v$wYǽɕ]H?kAN= qU`1QΏϔ'9?^VϠߴ|LM58ۗ)]G2V_<kzX endstream endobj 2991 0 obj << /Length 1909 /Filter /FlateDecode >> stream xko6{~/[a:7ʒ&҉wǣɖ8EC:~LlL{y$] Z/'8fpp9ٷ?ıNMb27^X%ym<3gpox͋37 p<ǼeK4pr'؋݉Y6 cr<؋- 3gA &RXyǾt^Y~Ofgq~!R5ŕNJE M%<0>؁M7B{cް[!se4O{r#9P|Or.!>EʽRkbWTo fl jFt;!` l^@!WWfoK#В~QuS\ӸnMeVh6pio!KpAIaA3ѨO3R>CF!Pn,~kgrui&sZ :n 0Ɍ=cS2+ 1Fn-?[i> #t:x^۪~Ó/o nڬ !r.jaɲBH}`%uL:#j]Svr7׳Tണ1g, ݼ=7AO13BYK5}(i>JnamnH=$=˷d"T)=bkߤLX^I:pd*kiHG/ 9aut}ʻ -,%:Ӗ($WLj @4T xUk䌱tOn柶MqȏPR0_ը̯6ˏ&wzYn*\a|*jz\cDTO]ɰy uˍ(ʬU)P:rOPAkIιԅhh~u"jw_nzx6dVȽQ/Ŵ*+uQx=kr]]PTS|7@ "KudzJm- )-Zu7a|i됆;(Xi6e‹XdH_Q;P+zO'&ŖAi؊84/0ryF3p6l.{+]U5g9FM7\ Q_\|YJ5ҌZ#Ԃ@!P"Nִb3Pj㜥!Q- @Vt/ЄKWlvNyyGh3Ope ή4MP >⏁~ mNVfwin kF^ ј}%0BDYA צCψhzC'HS^L/>DӻP~/qU+JA31ÚZ'iU>xuѱP@&C 1c+ϖЦzaCD DuƋrZ*$-esO'(?.Ӭw?2>(UqѡpbC39ύ'|KcMCIBf8nvD՟pXh45,R9m ,^ 'Dd86^VF^DZTIPJE^ _OaԔ9< ΫH>cPL%9Oz!踚R!k3!ښ iT᜸ufE,@m  8 endstream endobj 2899 0 obj << /Type /ObjStm /N 100 /First 985 /Length 1855 /Filter /FlateDecode >> stream xYێE}߯'Q-DA EI(^6zg\vN$dw<"ESuێsTF9άZ$(oH9 !<^A0*D/Tb'_E6`*F^p"De p2[l)4(c)})8` +a+b,A!eqETd(T0%9`ś0+ޭH l!ey⁇Im[c  7r!1Vd TR6 1$3 Me [r!c,()" DAo1K,e,r.s$MHeU,_DTa+YEo%>zOIƲxd$FH19$sDb*i1/' Bos%KƊdU*ɐW9 Tr ɛ#jeU"W!8'*1Ob9R9h6N֋@2[l@ 0)v$Q@ )+af"c"$SlN<8]Ԫz2OoyWϻV'Ӻm]XOG4o ^_CMQ2C­*SU˯ .%gj6{y%+U2ikQ+G(?Z$I|D ׊ݭ`zlNjySL Bl) 8**EY˕]Rfod@[2Q gWg]x:Kg?Nn~QUb|\w\Wh9LEۢj_Owz.|&hQ/uW'%{ح즌yO~9xpd۪&##=v;ׯ?_˶f쪭ǍC;XUr4?{ڍ2:GeKQ~x46^i@_ԻG+ƓFqk]odzf!Kvt<P^,Pts}T 68'3{K|Gtaxm2kswwta8ܚtׂ_ Z`>:K&CcE*o?~RA|}$"VC3}ݔ Tkpp'ޯGϺwXGgf3YB;Ť隶tTA4e5TjEˈSQr=ksE9QB '#>=C?kOPuDrPK*M0H_|ZJp3@m,KlVW6LlgNN.Vȥt/ޔ+7{b aE+f&fJU ٶ-FWz\VΚn LPn)Et {zз R5:ޕ{ fjKoW<\>,'908괇!>RWԾ#=;'N[(䤂'&?ZBB/bVdw)xz'/:Ù۔\"߁}(Ib,vыn8zfK)H+S߭r鏹DރfJG]ۅ)0S=`R"g4[> >=0`}`k1' Hyp2}l}܇[J!m]Ѳ-G q >m)ZnoUڃǠ{s/Nu,W pyRH/[N [P~ endstream endobj 2996 0 obj << /Length 2040 /Filter /FlateDecode >> stream xYKϯb Yl> ddg`$/%Hvf?Cr2@ZrOw)%?^mW+z+6p3Zo?J"qۍIݥ{AW~\|OfgjSlza:Ryw?^p3 <%cE c_H哄#ө*_&N֐OOkIͷ?cx_YYY4߱lX6Um?ly-dΝeY3Yǯٝ-r9kJxӜ*LJ'=ƛC <)oA$B2 -h]8d0v>f=pjB9v ~Xpl ڃ#5od n{32m\׷SQICf3l6d*_fn:רlMtt]k+Mnx::$ Mq dЌۙNb[45t@i_<~ĵh@Hsh*y]>΋;2)^t|;'A3 ߗ/= Bz^0"^8HgW1${S;a=~mI`$ sp1ͱwR}R:cM .L6X,ke_KFܠ]f :Tq8 IHhGIp3@^c.~Fo1 x#Ze%vinu8@THСSFS|LBX[4CǮHGfd@f"e 5m}ڶb&O0/J4b +S@ϡO%%&ј.nZ 󳆌ƆBy.49 f $m[TZ0( m˚aYKGeo&Dzzc \7D|9* i9|Ϋ᤿BaCR=jmDW<5 )2A~5ۑ"Ͷ[~X^a9;*陖z|1HQİZ-9u6 qʞ)5E ֔;\g|)"?XR&y~ "8 QMz8+k3ۮn$!f6Ew ]/4m39P޼Lc6Q>ԁL[XTH_gϱ;KGcZzkHV^J, LUZ6yt/=p v`;r{mµ7R(Dn7=X9FS!Lt]&:XpDyUJҧA0fD%#)f2vcZ]d|.wrS ]: /Ր٧!/mj7O endstream endobj 3000 0 obj << /Length 2482 /Filter /FlateDecode >> stream xr>_e-*U9la&5ڋw0 I)R~}iy\{ҁFh4h/Zl&I۴Xw!a~n?oC-p v7Z:Sr$IP}J,EM8ϳ0dO};wr+ECOˋt%)Wu.WY}ma,uwEMٙYFo0c6b\!iNTwp,ǒ>s 0 玼 .b],V (N'."fdBiZ&x=iwMw[FA Q*mm0njb7g`jPFu+ٵ\v <ޝ`,TdIw=,OGT'5ڍWS CGw}=n$>ʂ]tّ8- vc -IV30a6!|oE(еҴ[}&c'DoK 2+`jHuk XqVok\r{VTfj(lfh[Y|Dm=anU5qWsZ&/NFYRN3Ɛ1)h}t%O&!mܓp eSo^u+N35o`/CEP1# ;(5g`QN#QGT- =ѶlVxyf:ԟYY+I8>M]#x߇*M5kO6!psǃ BR8iPs"%kP),)қUjJn nœmR4%ONЭທ;@TQ 7s[m6i2VS<ĎTJJۍHHHTe#@3~ ƶowAۗ t)΋a[܇g|~-e.W0R[+k)$ 5 ȐPgVhMun96JƖIápL͵(pq8r.Wx)Ich7\1ũVy_43M ʳip3 k+\MJbl  endstream endobj 3005 0 obj << /Length 2033 /Filter /FlateDecode >> stream xێ۶=_a%kEݝ)haZm6w3eG^(Zù8XO,V"`~:/h񖀸`~~q6M" VJ,ֻ)vqS_qeޛ)R(qQhEP;D"Z8A?V/+ĐzEY/,:]mE-.m `/QdɊܿ뛲m g"@Vi!)CigS{0 *3Q$ fz?i9Ut+4vI,wͲ KiQ:ɪEuE)HEwU?"iԖN{Ќ`lŃ'DCVWX^:Xk'W,d4O'V7 {Û9L-;wlF &"3l+;G*ڌbw !|yҢ2_ўգvCoe1Ot¹6HZ3b09vO9:<<魹p rͮK{CYtͶEm % @l i9Tt1RnXyX1e\Ǖ\?7|#-$՚8gsZO0I=r{!)f'KǂkZC{Y]O HGCm hS*Fͱ5|PZ<$)\IՖzva̒l4z%Tݡٿ|nHʗg?<ν,VPgHC™C){=<|1& ڎ7)u\:vs@!.}FH~aSm +xpf&tLqތbW&pM2−WFg#e:g 7Nƚ`UiፕB~*"5Y;Rqek5<~0v(5K^MD'/K ]"h 8NaM!e -,67u~ 7l) WjZ D ESjʹ1\\%Vʖ1&$ N397n 8_O Ŝ@w+:o"9lQ[Gx 47+K6lNGI}60h`NokjB(hBx? !ty]ܘ7*xu׈pL []_6Cr@ >'<.=)HXk|oP]{W)Ob1I~3Jn[iZ:BhN WͨcxZH:l.-,$Owӕ{Y[5#>Ʈ2lM9 Pkngns K d~ҭS]|smp7TL@h8T(m?SŧW4i9U/eQZ;"DnRO>VfדEBfI)Ky= 8H w@ endstream endobj 3010 0 obj << /Length 1186 /Filter /FlateDecode >> stream xڝWKo8WH*,C[lCH}Ks`$ KM~+f%j87/;F?R'?f;p '9͇8vxgAƝnj[8Azպ]/b韯qvUu\/L8`\?8 ~^F>KO2׋tg* 1ލO8wn*P}.gx08=:fI}z15$X `?8z`jgVyc'hqya꧎q1QtΘ@7z a 蛶ed 7Ȫ>}+[@U݁n_x-FHOl8{>@fNMuTd0W6l53s~^.mA9Ⱥ:GI"p-c_솣 ףt/CϛAnl2sS]E~.[u[!S{@(S}W`̤qA+{C{ !۴r endstream endobj 3014 0 obj << /Length 1461 /Filter /FlateDecode >> stream xڕW돛F~?b]0|FIsJUjZEkX߭K_ߙcKZtfDU6BVE}:nw"۫|g/W7I hݯ0 RNt՛*h%όf*qH4 n "!^4^'ܣy%!oA,2 2 kwxIq gu׾I_g8'u&ODk5D' vVP{ K7n ^۳>&&^"L E!웈AUXE{GF_k媕Ͷ~\S-p=l / d=Dڹ 1v*n"Ug{F5`wG29 |єN;P'ٿX◰6nt݊ (P+Nn@3޻;8E{0nqҗġ9SّeEV󦵮MQdjK J:F?4st; Z•v1,z[.Ҝ)y<#s:0Dk9xy9<꘽q{s3?>сPK*k3$?F<(]*;/I30Tv As̐ iQ#\0u/H@Kyqoň4d'1Us^< HT^pNmŹsޥ w\v.M&]*]xjzc*ndjN92O] H5D׋ yUԼPD-'yuNpj7TLg endstream endobj 3030 0 obj << /Length1 1626 /Length2 9213 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 3034 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 3036 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 3040 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 3044 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 3046 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 3048 0 obj << /Length1 1457 /Length2 6520 /Length3 0 /Length 7517 /Filter /FlateDecode >> stream xڍxT6"U{Dj LBHAz7i MzG@s=w=dYϐO h>A~@Q\@!B66#(NfA0[4Ʀdp ( B@DRd8EȦpBBј}~pb.$d hۢ!.A0!SvuA#2\(`AA0W[_?!a00.np0 0TBZ /py v.p/(`A*ZhO4/E[w[(C-@E^`P $GAajsp"GEB@sp=UU}QW1AD⢢"(k#/WoS+`)`>}PO+BAA B P8ΰc?kLPO#?A_Op׿[,`fW>!q( ((( 3-Q ?Kuꉂ p|y/9AKijh,5# `øXza>GUXE]G@9s:V>k93 z1YE5Sh܅BG W5̡ jֈVS`NLhFa++&/؈-}.oOvktQ ?VY:^6*@|%)ʑ6Uu>qX# ťbw}=(-0~"lyޥMlVe4 z0Fa{WR Z6 =uf_A+͘g[-o;z" SA fYovEߑp+4\yyz]'XMI 猴62tnKNP83x_%:L:E:a %x=_oZ%!49ڔph$@v̧f~XS?ηe0L>,*{*`C8W{jq(T%XBaM"m)-m:Z=#Mg_-.$Zm5~xC1&.V.KiDbۉ`Y8?}:LV=UӖhoG)4A8* /~0}%;ݴ4}B݊i`4<~fLOHZhZvuk9B-ՇPsGwo;ArI~fk4w OZ/UKx"`Ċ=3{9ڻL~0YzR$AUAg uwP 8f1/_~߼ŀ5zT2{8cM~{bߵ/_l7T`8]=qIje=իM&~+ 1AԧpoKOaLɩ^ _+zR)5z`b|1n#! ɴ5opiX;{ئvE}BE X}Pۙt!=1z0hpXOGs|EFt0j^Q/:~ܢq_B7]"5pXͣ+7Z$_-ĂOwԊߵi.6qe|3d7^}Z{$چOx,gnmX6XD XgFKbYǴվʼԖ_}ڶs^e}3VBld@l=v1mKb^6\ Lwyߤ(7޽\Iߝ>gEχ\Au6YTEJ, ^Ťnr/GUĂ5Lz/!pT<7pvM ?XoZ}tkS4#o-+UoWh[SZ_wa]ucjXFA1B0(gHy|}I{j\beP؉`V ^Yh;Qާ|e?bzM\><)qPI8㤓Cj¼s·'(pI/í,r?q\KTarہy"9 kS;>AţՈ}c]s(Hg#szv눴Lt! #dRb^nBJ@/q-oC?53}Q>V9XP3йr$c@e!M]aITsm6w=fE=hu/,1(W~Z]Yn); oO؋pI|ڔȒ]bObMralFx/[ɽdك{<{[3F)余 ƖI4vOe%G(K|}1 ݵ4ywq5+3& {GDWo %~\緾M*[ZשRH\q0X, QaZMc<=YJ`00 mB!r& |Yuq=9Ј@4֭>ڑ .]էV`49g=W.lJp&|j) YcM*"|Qr0] W!sk={OJ瓗GäL˯&4G3F%LгV)a_ZMgȢRďm>u4}>PeOZ3W:v{$zqKe43T[,}=3 & ~>1c~ 9Qd2QTۺ}Ιz&em NqYgI!6ZM$L%Ye%i@ai FX<2n8D++A_屾.I;?w*xR@$ՁMR^.{(L qWf.R_9JtUWnfȐ`rl?6(]Pֹ i'fyBmg)ò{is%b5kxCziYHI@ ~棜D9T#hf%deӑsj`dR𭆬]4Mdpy+LY(\2J荒tL>ĵ1#O ߥE3·[Rj;/d*62NհY Zn&D@\ȅ+oxf?ue>Z { :R} ;jٳ~SjPy=AW>V97֗wi?A\di$;33Xl~jy+74wUiɺ#Aa(t*Ū6W.js9LY\u3߲okk6և?wgoP\jz0sIBu^=˭./0~^R]s,QQ$v3jrEHYI" h/p ;E.+Nt<tWzuz| VnH^2M}-d,dvEԴᣫ/!I*,@M<3EMP tn1j{i?a2W0DHqG ,'2:RN?|!XM1OJҏ(v@.hSb_'{F(fCnyVQO&)\LQU `_F_S۵7(S7gK7h@<H"d2M9R}'1.4(4Oͱ0y \)ζ33助"q#_=f~퐬3ַww&`[,[p}yYdg.;B W6~|o7!ywjo09XFuߺnߩM%CTZEh(ו+bNT^&F4λㅄ[Zc,*13T sX-OJE|m=bcG°\x& L݉'Ӹ\{1$]衳[o bY[赞RF3k. GM XmL~uxCXg)"c4ǟڟQ ZxAkROr(b"Gm]!w/3N*j&PyfxUҲ}؟%t]9Yf4ܷI;%#},a0;E5ݘ)v/+9#Or{e}%kpyX'Q5QdJ4#9<,KL2{,vwcUn3Z WXvoNDmèe0p]7,ƓfXq!UgD{6}ar> 7Le"e%lz}j_ j #)/;r3g|Mw|n;zF?d\p R2|lxn5"L&On|k7!2RϷ[L}g ׆y,slsoֺ us7_D"˜z 쯞 fzІ߰1sm  \.-`'F IyP*}tAKpKƧMHgG;N}Zo|w,U6~ M:w C7.wy &BS |AOES B-2soYHM۞^L|rJ4gZ^ۑb~/|H}Y%:U Gj$:sߠ#CqMx*0؉Ұͩ"n >Uj2& :֩~-k gˮ|}攍+h܈"-yOs ؏ቧ?|PvyF|JXZNhZ,<-*e| nt@,}(5 8hԏeY)U/@Ǩ$A%VGP,Ln5۳؁Dw~n >O-@U)6B O\! . ~u8y򱸨*D,T=LYg^2Y_ hǥH\p(-Brwi'^E&ێEW%\^"<+z':wh־]~mZ_po<[ݠ>XֆtzȕVI,*?5> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 3052 0 obj << /Length1 2904 /Length2 20820 /Length3 0 /Length 22458 /Filter /FlateDecode >> stream xڌPY A;;wwA{p.!$ݓy'-uu+ 9%]xjjL&&V&&8rr5+W[p@g+{?,DƮ +P f `f0s0s01Xg3v23d.p^V<@eJ ` lt25Z@MmV@Wtuuad`0sappxXZT.@gwWc;?1,\V:z; )fotT@63/gcSS;Gc{/+{ -(!J07ehl7v756E ! 0UO}.V. .Vjdfq{3Q;; /~bV@SP߽9\{{!s+{3_e92[9~,v&&&.V 4d@T#Tb:|T13̬L]&@ +{AbtV]&1~>hm~uČ"ZRRDCgaer89~dl?<uփX ~;)u/# 7[ۿTlͭ+h@`M5/h> ,,(:VߜA3ϳb :W׿^~Л?ׇ 4[w0 ߝ!LYr:+xFp/mqkegdG'Dv)ɂcX|z5=g'_ 7]2Nn\HJwe+c{OeccgLpH] Ҡ]x"^̠L$IJlyVtF9(SRοl}lwGWN y[r̯1H6kWȑiCB2_`o(6ҙL=Fgos ZZnR{D| n {Ȫs<4=nRZ>=O/gnHp0ґQ 28ɇk`M`zuq%W.^NtҸd=<lS&MКMOu0+ ң9s dkyHdV̪%N#o{ PI-h gu#ZS51صt  " uG'(rc{nocv?"X:ژ7G*Vfc< \UK Z˖OSQ n~E(.K^ү!OәYI!8sIָ6Kwי7m|=o`<<*EԸjkpt7?<#ftN}9!KgzTI Y `Q@) !,=O Ipe)u\`q96}9XcʬYjoq.EfZ3kc+T-!Tj\Q5F)wߧ$koZS\'5 !Nb3}0PH! + 1v;(7K|K{h}3Fŏhq`mʶ#H ~{N/s Owc&9YQ=^-u\ GpQ|ѮJ -S=.3wȃk=- ['k@a?;"\>].Zޖ]=4ْQ$.YpmQ۪Jo =bߗJcq}uHjWi|KąHB7Ngm _aX78]tY}c/؝hu\|y\Y$&7#QFG B(̫7csցeY%E؂A8|>rk}h6#YCBO Du^j|ڝ{u^rg%6ٸ6p: 6<>ƫfs-Tvk]2 xK?1xh>;ub6px=- $?dLy=A;&NÀ&r0f 昌"͵Wi nдܯl^Tӽ/%AQ$#[H):/"{!B:DBƟwLH&0?hwec?T+iD_V8$Au_qYɝN* W K_ |H~!歺~|%J $[6vn00 QХW9e#Ί3o|z_tD\It<1P?RxUL/^E.(RВb QIK!N6əzZ"9im\M ~pڔ%rړHk#Xgs. +)a y(.wFp,0nI vƚ!mhb([AIlgઑ s>>"4ZI%e:/gH%/pt*)P!`pIc4nPz7V*]yrAwi+H ëY$A1Ї߼ q7GsB~OPj撏) mԞQ.? 8b&5+G7qٝ4n(K`á{(bw[!TzL*lƲoAyB{xIk?f~gMl=#W]H<䇭=Oazs 2DG/ѓWϹ6uPW]_U/6hMiFSݥ}ѳS&sq9p mF*#nj%.0$N2iR<܃jn<5?<5]Zv?HuR N( }Ne#;V[۞N@s^%퇩].CEVNIFHo/z3qODs/cDh2w 3ݷ ٥۔9}p[M gLmL-1{mKT"D0lQAsԧ}P:aK]\ڰ*6Zo.k:O,ioƷ':%9/GLmt-;|OWAͤQu?Ր5J# 7M$nb !\&5N WS>hJJvXh/bLHftqnJO<.04$|cЄi^ [ zPi챖szQ;r&=t\OCeUg)y ^˜Y#?u%37$y&j߄>(x8NXgb&Yj1R^LA59!MRxar&OšږZq;k(`凿O0\fnٞW0}:8"xe!zTA- #|?I9s+v4Fdcw\ql:4a;CǤ?NH>$P'Ŕz"wѐPv/b+`<'{oYړ^͎QqԖ3Wm6Wxu)_J"xɘX;ϒTMh^ut_܍4t"#]ݧonKBU9.g=]ĬoE,P kԌ&"#s'!13g-rg_. i]SX|KηMCjrKhGKSUTvhmNMЭ#J1 <gZa-4x|V>%4d~0ue:5HqLymTo$c(RAhYQM7~r{nE8l+9c a&G%d7 G M~_gzL}v2Oncy{84y{z 1$$ص)}$pl>Ow۬m7P D5itD3?3cOwA惘ֲO||vvk'EZ*އy5\8*m]g~ Y1J-;44m"|nmuTg:"BJ^DD]::k`^&tsR0U!(MaɥJݞ- h8VTȣ<~ yi}i[*/KOf13o]Qۼ=vx-L ?Vj!rd'"ekWȰ`^P9ffl!`ˏpW_[L{PFHYمяǧ 8)<{{lj6̓c*-<Ќ115*ʷIz\˚׋? bIqh=bvLf_EtX{ay-kÖN3SÌ&=;39Gbiyn> jTmUӉ`No*@BETEwLj0% Bnj˸W\5V4[K4>$Ґz zښ/:|?l;z.lOem9XI.^&&g GCf ޫ 9'Sx-M$C2LNQP2A{2l-j|=i U9Q@h.k vZ;Tg &U|s>ԴSẾRncAO|E~nM?[ 'c5][d!Fpx LTf/`L\z"sZ݌啼{? 1x(ˌbD#{XdƷI:QH$ްV~ 9; 3wy#ìi5PfŲgL,Z[E^HB<3PA4!k5d0Tr!y1FpUAv Ea&:wdPo["n-kB+Kklo{r }i5iʜ6,iBY#S!gR9ޣlb`ʮ7|i|vђ wIc<[ZLXYOc+lϚeDccAϪoAQ᫑+{R{3rİ'ŶoAOŠ\%]OfO<,E>qQ4}%Hb3mYGZik-@fgǝerQ9Iyxy!l[;ONRor:ҏ3ۣlC*---HV }j!ߠvK.Ǜfr 0I2^Ǹ?F˼Xjc]+=Buc/He~w:L.́U:&IRd\ TM7A"We"i)5WE_/Z}\3`d|E{1#P'"q n2Xd{g̷NPJ$`)Q+_O<:n]r/ s /P ຦ǿqm=Z*SRz[X"wE[wñ[q 4n{夃EAǛ&ny<y%c:aN9.tNp}pN6.-H}TL*79g* ~mS_XCYTpʉ}A_Őhah-Ai` hůcTA&"1ѭ T".L_Wsݗ_ߢp;|cmw&Jh "PB09]gVWE:A$hHe.fZZk(;fY ̉ !O];{;h}~d.|L0Z3,K5T:IvEv͊e2G .|%R/!y5<>.[ĒwOz(9 gg0EFInSρHېWSfQg~j}g˜ /o q7Bc*[3*P0a'9}yaڐxd?"iĊP䖱8yXVge銉ixKٯV[ۧAJ!pgG"7}09x0ԗXݦliÅG9E꺖qKL4.M'.<+N"rvw|Ptz))_Tȳ~˴Sn~cc,3B!`2 r`Md5ېWoP"q[:˹O"{,!b) s.Z3:&G䝼 H%w-ؑ<,Dp`D% >sdR,nZ؞{k}ޱ/|)pe&]=|oXO"Wvk[<9~6`Yx49Nh"_V'M)!]CVdMbwO)2Ns Kc v5 Z*V*􀨆MKI =R>o']@|QW{Z$'AYvwFadul'x5B{WEV݈A-6V?{5co \0,#/\PXS}WG\FƦF,9-&rCh/:L+AϏWJ: &=, һpvW,/{W& fVAb\tm%_6nyx&7ejakR}r1j,fO[ؒteɡ XmӮGd</?rf/5H\G6ѮfV"K;y_xwSu/ڠ̓~}:KZ-' Cz)++^"]iJhjtemBFruJEݖEе(xœԲM=s,@wK.;nH )ֽ̒r:(PWqBKy"T:iKi!)`ފs4։Iniōe0O$-ʽ^l+'"²+]1*/q;锒8]jcqCC?Q*+g)q֎Iu s5>uQr?Ws˪+/bi;RCV>>}g"%zr'܈).|gߋd4JmsO<)K6O _d]0󵳗QÍ{6sQ)em-/2.:WKg`i^ÃWT@IF{BEd3&Zbfh_+_oB&ztm{Z%T~WI&3õqt~@Pd""G5 :oH3+/ۗ0,U >XҜϏ,2L, k xX6N^!D旆,N-6W e Xp"$TD[Ƌ7lQJGI.cOQ#bαc`3ʤ_5L,t%|i~ui Ɖ~*U z$ωxI*.~@ oS~I j腙,. &0zƩt3 ]7+s{CA[8͔ 3ƱSJKJ @̨Kr\-6j|B 3!nxUB Ӟ+Z=Pet'~N_T.;,nH_=椊%}P'SkHD.96t pg"sFCw'ҧ[4pbxNZ<$2?vqW:;[kQ*ϨϨU$"Q5>{ ufA=aPO5!%]c{E! i=((C/(V?u}nLm_&g#ɅW{Fx3_<{&!9$xlYB!Oy }ƘEy0pT9tqqtȬbeV锄1Q|-yiH/bRX}|* 5-޳np+Fn9&`j|g+J5+9dqY8?K֩V&.JN|m̄1 pgU_ԫ";cIZ|sa zJBH#gYUC- PqMC ) g[uQ\νg$Alug™@'^_[ZkG\ u8܁: Π*g=v枷c\ώ@Er-y'A8cS6pq^ 6@1MI2H]rKZ7;{g< !`xB9spD̉F?7Zp1QGwl2 nopv}~c^#q=cdz21O[ `UJvMo$lP%oY+V4<,>Xfdy޺Gh¦ >udC ʢhT{ utBrJa.8fKc g[[)%* OugvP@xRGX$ijuW;IN+{zlQITGW7z|+1beLmOa.m9.2{Mt\H/Yca*g,2%=^:,*s9fpmosc?8U-`㬭pU2|z?~Omf#r8^Ag?jVP1X yLPǒVg}ا)5¢ӧLjd22¶O"hQ>)ONO#V.rr&\f~M<#^}O3Vi-=.?7/1~rDld^h-ǥr m gw]Wޟr7^y1)$ -3C7]A dMPz B ;Isϊc@I` 9|7#.Tw#iىU 'AROW]K%Yn( `X^*\ EG*C u"2 Y)Q-;ߠ 'nxJ'f >*>@τ2o,e&qgjQqV!v*VLp{Hnd] f wF>Acח증[y;{V`(dJb;3uT;-G1␈+Gex4Qv' q(T aN7J9`nVOg=!=8?΄GGIhq@?#_oTX`x'Hfωs%oBBKyڵec 67[#@s+]=VƎtuQZ¶̀%ϓT h>56·A?q.rk}0d݋}C篮d` 0X+G(~\uX㿠L<2ZP٩l ?0A?VizS2 8qE3χ}1̬ .;ICNOSӺ.zOOP9 7R_OБouz N{uDZyCń2J8Im(9mwSE+)(]yz7+eXb*KIy8i:AWeGy~mWz1S?iev{)4!.@GơJWEv'YVX RKkEWP1%~A~jM|D;|^ҵjjo065N̾)_/%N"]<MRT;3pP\(;_}I/\&ޅDM$u2UDz0˙+0gWCRn^(zs!EAdckn^B&J*Q|"L^|w 5xYt[G2.P!bi9݆M}e|b ZQ$Z/\/^#<#ة*ֶC5|s{o3No-оRGz }{c/Eb9OӲ4 K*nuv;f a&hrsƨ&95'?<7Uu$*ULX^U[pJ.^9+2՟ zG=|.<-v댨oTѷ}k6Y~t^t.Ն-=].Y$<047_; < ؀8]e8ՒA#8up-g̠㪖vd6͠Ynr4W y[K!MM2s9Q9_<-pqZ SFaui]Az:: 0I[ ֑L+\V&|kCsq=)B~,V6n=H~&w9$6tJ[^R$}D iSX5[G5u;O_T=]nEu<[&~`lSYӊco$kt{i$ފ0T5* ^{|SVܭp2A,F 7,p5xۀ,hs@IF-?N0[=m]P|[^널l*]|[y2_Zԡbx{xZo~ݱ d*OIZ:Sg 5MBuRu;3u_ɽk7ޟ }0|-#"**!\l_/0|͸QWZFmItzU5ƏYYX.q+nv&Ez3[:bNOܸ%P$] ݍtދa7KyHϩqBwErBeXRĦyjFԛ%l )8Ig9$a_Bͬ7^x`|[R(OyI:Ҩrku}1O^+b9܅@ )Xl7E+mbm͌b籒zYJ`Vxa"҃>s)ҽqO_;I $6tJ5v!ܽtفq[1B@tfQ kߺ5IJ/{e=OӺ#9Nq( u{SeT݇C n L\3L@d,5ry(c+pU^N, /QAJO-DgdduOn٥LSP*zUG۔|RP7dO {V 9}-RĠ>IPocХԼ\N»0xV#{['DPu+x@k~[Cb˖N=<m! 6ŀ kǬ0v{6LQ̺.xV+/v^Koa=VۍvUμ Mo0W|me\jwyN,EcTX@E?urr\j%U7ݕ4ElQ;H7M< ={P^9k K?83cNF'5g}qah=:ə aLyμ4UT0I "JqH?% y_i&q&z+ت{`@ā%'TEڵfYfUWJOJf3 (]GmVYs(סW2xR*/5y r52Na,\]!r}x-x, c+7s!9eC/Te!g%&K/_L<P)BgǷϢڴh4,mq]dF=h'b3K(8mUι )|Zpokx]ONf+mʞpRWCIwuۈ4sXZK>lLy3;N@BϔNK."j踭.cXWRP$}q cr1z!;N sFCMW9_@:+B^N#Bn.Z~q߅Dbt4lnuɁFmm3m9}3voV%kJY㿦Sa42s?Qп|jKX}O (m!C~SNr?^hLAs 9hCo_M TXwR *VՂY6yn :A5Z1m*-;X~#?~TSqD/Yb&$I2l UMC~&doztم6 Ɖ":XlC!i@:>yz5@@9aoh_E`$:]|0D{kdF oL1*X[{wZ&.@r>9R T:f_sқ;$P9j5%D@exM9SLZHi>߫=ʯ4a?IRHISAd<)CxVɩkeKS M ''u:.<"'}8s %+\f/ɀ]d GZ(`1p=2i"̶} aVdZ:+ydӺN mJ\j>Qҿ&a'"TbqQ>UꊳhgDAɆ&Za>"UoCW.U*_]9.جiWӼ_ۂRGsj75/V[^9x6Dyc55x2J̋ՠdc,*޾F{[ ~NaGR?ԕ}(@3* ~ 9ʯScƷ1$25"ό:>ڂ'hGV&lWxn"9yөfT8򂊓]nЊ6o<i]VqпOTԧ]3E2DH[G,W}"k_Je]dĒ^hnt>%6 {Wc8:G d37YMl3%,$R0: f|!n a ^jSRXڵjHz иn=Cy#kXy[B26!hV@{8{<)Z0huɢ: H8i0 ڴړّQfT_/FXPlD糚u\>Ot#w>Bqm-wf;"dfUttD#*o̐&XMD˳N̚vIyμ4IkRI{|gp.f~Zw#y|4դ6ƹo:lD)ؖ7[~r8ŽA$ةHSe;kpM)SB*L3V~OplՍU'OnK4XȽa@ܱlxM] Eg[f=zo<ʬ쯀[z E#Z&&^ԩ|a+0i emEFbynLI/s^kUK=|bs, 'Z咍X ^[)QVW,b KܶÊ3RnC=x/hFS`sws3I;]9zЩ''EoEKgU)L ɱM|(#U8{"hye6(֬>чj҈BYVٮ߁! ]ߌa0(Бھ3b N&C#1'N/])xH?ߐܮE(1@߲XZQ}줿EM[Aeze ĉ@֊aG-9+@bj54{XU[؄75CR)K-Z{]7rZ1}97^WPzv1 [D|ZShNr-RV𜖨GwA +NYo-- `_QWΞI,`|D-yoy?Sk=GeZa.YE:Di9nN;e {ߑ)z%Wq!..}:1-s ) U":W!"΋gZ̍ S9-ǬSYZmS̈HzEȥLOW#bӋ!cM|7ۏ^=*%eْvY'KQ:~+m ƙ+R]G[oqpEpa~ J)3)9H}]iC{/q).v %> (x%C{ocbec¾jg6Ic-:[c76Vʣs wp3#NvqBQ LMOg~aŨ(7$0 'ӹ68GlQKJ&S,yٙ&q­z]<_, OZ47Ƴs:53ݴ/Q%=fa=$ endstream endobj 3054 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 3056 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 2993 0 obj << /Type /ObjStm /N 100 /First 1006 /Length 3655 /Filter /FlateDecode >> stream x[kOHί]gje{/! ݐ$ts81LxիJdr<>>\fl5/ʂs- i[;BH$B+: Vmɲ䅱xLaKma! U!RLDpn<ԓx8 FK2LsRed*$>2RXM d8G8aj%Y tpYp(^0AZip$ U, t+,(5QP΄kt\JF&5a3P!A+.r:Wҵ#dn x!5A Y V!) Q N0XRJD9śKJ<1* \%$T-KLM J(I(,B9D r^ (Bt7NJ-!$ĄBp)\BSv)U[-UtE ce"_)(%gac@[XJrLW> hhC@Z@xJqd-x ^]j|!TJrjIʭnq,Qo vO$@a\￯e^<—&yaU.!p6\}:!5Q#1Att28q^>/j?.*L mf頚&^T'{qL '(Oquěзs (R&6+6^DޕWngH6xށ +ˀ-g}&ЫXXe&Ƥ of_Ř ;/{4O 8JȞa\~_[l{2=Qzlzp9\9l8F77gߣAL'eٯRV`7"8Cg]+oC 3)Y[R)cՎR y⢱yIO@ʣ@S9qu ۱vEQH8o%ԯ ) CLPz%%a)Õ":ty:+lAe>m &.^6?%5PS 5χ+-;.;9fA#ŹhnÈ@P]6:&cgL>x>s\4#38?|>j$?ߋ~ӏ6a1cOS`ŋ!{?gsP8vN7߷N. px8 glV}l6PgӪb'}cSM'+h.h]b]:Ŕmyx[р[&T~(&$. sO.%ťǏ&KoI٣oQ]Ư[E*y@cl\f\>O:gzj'7:Vj6UggǯFTwTxE%x յs)P"XO-e5aɼ:< WxQ8ZXg#rC.!Ն;w?IE#}^yUmUẮ_ZȩNһ/S: }\!56A Pw rmbjk־t092ީzS~~&koֺ2y9\NwjwlֻF?%5Gᐒ Ogr`>#O_ Z}ҲHZD1ZXD1ZX -%TwZmzC@lSZ9rVA ZjYtSΪE> jGlje\Iviu޲Ǵ-RͰȣ=uˠvfu ]vUn%]nvݢh"y-"\&$fuҲ=Xblj%27MLJ'/w0-~zIƋ:³ vj@·iچK>MA\ cCnһyqjF/%τIϧx-󎪤bdOP䞐oJIIJAJS vWU:ɦ+aN3a:˪tJTHt)3ќoJA z&̐j6QcU3[mFof16 vYK}6o1elr{0<MȔF&<4*BdLvdgliSWne .Rgl,&7:+LL$+lYʪtV* Fld 92f[T$ƥ 3yq['_Rr@\m) \3NgM lȹ :}§_ TOSV y3^m+^3Yg^5$V>wvkwYg^>3SIJ?S5t`lJN?"mNry)Sn(V:m tZr i endstream endobj 3064 0 obj << /Type /ObjStm /N 100 /First 985 /Length 1772 /Filter /FlateDecode >> stream xڝѪ$ S UB 71 0vyHgfHrhtR-ct4c{2 9tN+7ا>q_Kj="HKA[uz ^*Yn eo U`=h`뱗'qd%a ~ݰ/hZMd6l6[x :ퟥ L^YI>MmE6O_z͐mf_s{5=6H=l=z=z{(=DiHU{y/a Q|`2{X{y V"q aT)ma'-c%*x`TxVm&ˎUr+qz&6ɉE^c $`aQqi|z=lS{$x{\=ls{$ö0O'66c x8cvٗ#j{t`\1#Vvq:G#oyOx/vn^^=ˇ?}v3m}+Rȭٽċ|kkq)NkaøK^V n~^Zq^[A/?SgKuVOm/y_^1AC%߾\U H o5}+nw:JhuI>&̐ MH_ H8w8s ͖gua˳ٲ-_͖5oy[ְe&S[V D,tyU7灬9e`x1㋁5ʄbL()@ &Pr`I JkJ)hh !0i ʟP4 oS ,Bq'fRPb7@m)?JM r,~N +R(%JD!D I;i?'΁)j5R8C4*eljHɲIlRM )Y6M I!efRJ٤H )3R&@6h&eh ER42KR4 )Iђ hCdR$E)Ґ"-I@4H&EJR$" )I pC gR$)ܐ™.I@ 7p&KR82RF&KRF e4L @hHQ2)!2)$)ԐBQBF8) maˍpRۂpR#J 'eR8)'5‰,zDN*A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDNPC eRJR!R8A4 B%)! dRN endstream endobj 3066 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1737 /Filter /FlateDecode >> stream xڅ͊d FD(0 1/0^ zƏ?RHԩMuTg'➨C<N"^P/!u _kb]bq39Vol{dO+@b .Om&2N`z~wpY5^Cmƣ'GS棫)zI5Ʊx3EB^c6966<޾8d58,Vb5bM| jS\I?FS6˄MR/l?_$E|O?6=|aM6:[񵗟/5l[|a ޏllGb+Ꮚ󅵁aM}~6I,?_$-(j{ $?xt5qR`8)ҁ/?ob߸ß/_+^ǯoW)ڛ4&s(%&p@U?MYM +89PG 9@ w:'pH@҈oBoi?'ݟJy^z#籠h~c ڷ|$wX'=y yFe7%QV/ )/ 灜/ )`4pQ07pQ|EEX拂ˋbbIU+AceR!2) (B )IY%)HʤPI R!efR$eRfC̤PI ̆I%)32RF&e@hHY2)!edRFI_QSsRdRJ zvI)S|YM`"EK zY>O &Pr,w&0|jOhO-S|* 9"E|* Lh\TAMȁ 솔lZݐ9ݐ3)$eRvCdRJT HCdRvIR!E2)R"iHLH R8"%)HΤpI R!3)\Ր2)\)!eeR$eRVCʤHY )IY%)Hʤ PC eR$)Ԑ23)TBِ23)T2)!efRfI 4©Y8-7©Y8F85 ©A8P1&ofp3?o_ }tRK/o\w8T {eY>Q'|.w. ]>?&jP'|.Ge`.,(A>qOK4|b7hdD)ݐ|"'!%'JDOHCJO ,(A> )Y>Q'|R|O7dD)Ր|"'VCJO X )Y>Q'|b5dD) jHR>Ԑ|"'!%'JDŎ,(A>1R|O) %31MW{Ww#ј   i>J endstream endobj 3067 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1728 /Filter /FlateDecode >> stream xڅ͊\G FOYB^YBzgۚTvX'}k8` >98-1i?1Ymɚ%~Eul7[8C_xZڀF A7`{R%R>Rٶ :}ze| Ҳ!Go4$exVr+MGd+cOnĽ]mZE4&2 m#K]i+:E&iUm-=0MC㡯*]-.U> SHyJ0=zSXU]ؗ ivUuN u{WnZZEٴ"vNƶoh's ,}`wk+ ҆Ca{h'[UNtC;9RvRUC;9V춇d,I-(Njl &NN6<0>vuc^noh'G[2>Emtm|>VӇ?|ِJO~|Y_ߕ4/Kd?~ DH>e ׎) \J!Z9.G~8g ,p.8@ "k@rqX1Yp!10%e8RFAʈHő%y;Gx䑒"RY%=#K1Gvp@n8/ 7p S in(4+d7 8 8wo )X,|Uo~ AvvP Eh(49=)4kµž>K=;J:NMOi6MOiE`4MkeGZƐ8ٔlFR'rͻ)N6,(ʦ8ٔ".K9m\ks%6xznk*I:R E")" "))p RHqsKUxph=NR4ءhCQF48ERDS4ءAhp94HhChP94~#}!B)ݡCӧFwhhпUпCybPD/ъGjRIToG*؜Kg/}Mx Dyp"%ATDDg=F}·A 8/Kà@WO86[ i۠6ρ6&mlw- E`@m&ζy6l@#&RۄMhHm61 Rm"M8ۄDDjp )H6lRmm&Pmm&PHJjp  '@AJO '(HN>)Q>'| R|"O8DD*p *HT>T|'zAJO ')Q>'|DEp.^")=%9RZAJHi)-RR#=&w$7Rx"0^I^ endstream endobj 3068 0 obj << /Type /ObjStm /N 100 /First 984 /Length 2608 /Filter /FlateDecode >> stream xڅZMoe Wh9^)  fZ@iVmoRSd}I^Y!759 o6dXdA.Dqrq,d.%Ie+^$WPNU/y8&>EY@IV1䇗$*+OY;b#?pքAKȎ*!z><07ī*1f11|tHIFMIVW5*8\^qyJ*)G (Wq$ !H\Fx\BzTcUo%FYq$?*$1JtE+JvE.&+R ^ULJ%eQ\eGEǥLh e/_%ᇫ};3+:noO/̷Oڀ?/?8R~LK@x, @C++BD:}Jz@ jKoĤڐ?<~eBB.t8 Fm H+\_s  a :@ڝ!XD\FHuH)%L0 SGդjRjR5SM<Gi)Q㎲_v8RKʱL2 }#.)S7(L]7p8j݀n@2`-AAq\vup -=`As9es]sਔl)RpS (GR))RpJQ)T tJ`) /J?Jޛҷc쥏;WEKND.bE"NDgjQ5~Qࠚu D'@?%jp?ǹs)vs)NsF@`8Diiis8N66q6q%` !tpY\i9(EF~ ݉h?Ne)n.\ AA(ګdbo)*}<_F?OUb~NA1 Z;p8* ;EFťSQAq Dt8 NPCI(Lh)$7BX$t2 onN&"LS * ,=2tB|125{hT:er~4=h9gu˷ZqZ3`7~,ePyfoU|6:n8 qBJ mbmٝ7n(;]ݠeyl>~ȯ39E^ra?T T vf#z-s+ rq /,__؍ a?}qz\xm2djFv"lkqioo_ X|MӵKkWkW٨}ksaJdž\搌,)$xQ~P3jV3jLRf>P"|= ٨9eéBGy.\/-?(j@ֳWVo![IͩC݋BAQJB`&zsQxjZpTRC%k#5Pylv/1Խdl!{6lԂxPu.=7vԴJ(Y^!Lr .w1y-#Kl{V(h5j5pl4ņԃV.:.^2QSnl N&=uJ\hAVEx􍞞w6PߢqGhiG!mj#_^[FrlB1˦砹}T9UzѠDmTʆҳ%ZsJJ&)=kjGJ6$m 8U74E-Ff jM [9E,McRszd,jqjV.) ?4wIYLJϺdRzMJ/7IsY,cRvqMʮXeW-eWdMLAg%W[t2B.F3e>I=48I74>YΦ\2| ֊WU9E-JE(ή(d^jd>sl@,Jώ(=hI gS^չesZu7\4ZuTu:a+Rlg]sX,Novۿ=wOtzNG/'?];=7/?ug#aj?F0qz"???kw 9g7_ޟ4O_*ʇ'~}t4Ei:YqVystys2^& endstream endobj 3174 0 obj << /Producer (pdfTeX-1.40.28) /Creator (TeX) /CreationDate (D:20260228054204Z) /ModDate (D:20260228054204Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.28 (TeX Live 2025) kpathsea version 6.4.1) >> endobj 3096 0 obj << /Type /ObjStm /N 78 /First 805 /Length 4277 /Filter /FlateDecode >> stream xڝ[[ܶ~Уpl***g&9'cx|TJ͙Z-u$_([5ypx)JID.KDc#O0ptD&lD'%–~bK'¡ D '@&RK,֒\<˰4G-PoT-L 94LU %: .1Z2MR1JbK&&SR9tbӜLbenՎDEP+O%*U `2Y$sZ:C$Ir4P6mJ,qagC3w8Ǵg]Ya{R_ׇ J͇ᑅ2'KEuhGO,1χ#Cߘ?>Ky/'BA*;Nr/UG?b=5|8h>q3'#oJ\^ ME&/f<e#QPdJ4pzJ1"BBUd>ify1z_>Q{ЗtIkC {F9s) _L9pF\^{i< ;Kt.m; ƈu4'=]=ZӨY'g 1SΉa][7// n:l >/e]R8ȿ0Sif[qJY_Ce[c.+@^(^|< w'@W; Z5l$jnRd$Voc}vX w3_E>P<:")TvWe_Yn8lq㈆*;gڎHN̠򑉩;dtBGQl0jc 0,y\zFv9viLi8N&k6w+`=%NFjଳnУo|fn}1eNXpr8ݼMCNf+h H&'Ei؆3)f ^yaL.'I;j.W2Y$7u}IbaW}QQleD{=Vtt1mV `RM"nJLYx,9e}wH3d̔S~C utpg Q.s5 .;>O #)ҿI6@BĻȓ3Ǣ-= k=W\yu:LRǨ!$՝ ӂ-ق5Rq@g>kPT9MA_l>LיLk SK^(rѹe8AOPӽDn&akFZܭh$b_-nM`M:UX>kǘ5>Ip{>|]A1,۷Ei Ih&o]Q!no.)0N:/Ne.O8Tw;>W?f~&Kw\ϤUp;.Rj#0u.^A6gzzCuhH)oæS=d\&X*<WuT֊45]];M[Է$ <o9  †))6%}]L ;%!xUwb0hn&d|~Pz&&m /襎J:Է'bL꣊E0_p>\lNkR-[A&[>L1y[ul'x&><ř xWuקO]ASHx0>5m}{7<0:o+iʭ^0mVQwH({3|{&4Gh+: W19s6k/iw6 .O Q_hA4JL@lrmso`Ax#*1Ń;./MU\ƈgUɹewsZ|>ܴ-)dqύ)ےvx- WTigq.USV>lUWb!`aǷ]PA #L,F8+:΅&;l`U_+([) Pk]uؠVꆭfEǟê.έ o@=AEp#>YOBxp㽬"O:MW =/ez <h ΅;ݾd.<× $ sRS60څPHpf/\ҩ7զGK[_|Kt][]#V,CR7:KE k?~!cE?I/S9xxx#|N<F'/ ҡS`?%gxZ ˍ97++YE_pI 6/lzerv/gƱm5eKsctlry.!o-֣'dȹ1UVyyR0Û[ k  C2 A+V*d8HdwٜbH!)8Š]\D?ŮGF1hYSZ|\ðiƧkvRg[y%>gj84*z{MWި=0yp?^ ,25߱G~oVg90k"BxP'/P6Ly͡:L B ;}G-:D}U\K~!yRjMdzU2G4hNBN':P endstream endobj 3175 0 obj << /Type /XRef /Index [0 3176] /Size 3176 /W [1 3 1] /Root 3173 0 R /Info 3174 0 R /ID [ ] /Length 7209 /Filter /FlateDecode >> stream x%yd}ZUݾ}z}}ouz_~_G @`qp$h\8!g" e "9PV L JxƱ>7y=zT*JET*srTM0ڜOFfåTZy S:?Ʈٜ0& 5a,ERXa0Jq~eX.MtWz {8'$p^-S5G"\p@\[xCh©T.b xZiӂO <-xZiӂO <-xZXd- \+VpZk \+VpZk \+VpZk \+VpZk \+VpZk \+VpZk E)VpZkcOWzOSi٧d<| x ORi7i/90saRXa51wNa?pq8 g,y6 0 0 0 D/^]e$(C`\*`̇bXKa,VjXka 6f[alvn{apa8GpNi8g p.epu7܆;p}x!oҶ5+p ڴT:&5 Ci0mLOmN ´0>sxe0:B\ 1:+`%Scjt6& [x 9 ^;xkK 90saPy0BXa ,eVJXa u6Fa lmvNa}A8cpNI8 sp.E LU܄[p@;>;>;Kt.p LN]3ct̔1S:fJL)3SSLYW(8̅ a#hcxO<^kx[xC`{&3gl؞=c{3gl؞93gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{۳p۳~*]-^`%u66;`g*=>`pa8'3p.% 7&ĩ݆PGЀ^Kxouz*3gDψ=#zF3gDψ=#zFѳ+%HP 0U< `!,Ű2X+`%հ:X`#lͰ6;`'ݰ> p18'$p98"\p&*\[p]ԟDگ+pՉ^'z}1,*X k`C*}䩼V`3ݰ(_|u׏뼯y}uׯ5s6f@.3nԧ '`߸{p0!<<'sx/8{xN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN:܀@,( 6܁p gK!]Lfo8Cpγ 9ڌz<55z/mF^kQ7g;EAQf/̞v)~2meh%m=f9m3-uljV k[MֵM2mdgTk,cޖYMrny66Ja̺ӴnmƥtuGjӢ=i3¡5\mµͭH";۷lõ6f#BmGy(1۔oQKʷCyw6ۡ|PMv(PʻS)C)ʷCyw6ۡ|7R~HP~ 9P~Pt (?| Nuu&P~xOt(?+ P~xGAa.O-Q q8qo*)?3P~xM0N7M(*Ca\[ˢ9凑F</ڤTCGyY{s=ϊ(ߣPQzQ~xZD*أ|Ó"(?T{QG!7zQ~xTD^(O{a{mދ6D[򃷢m@@.hP~J(?x):Dǀ򃧢@) P~.E+@*P~P]nD򃻢wDŹP~(8H D?t#ٔL2ĵE)?,S~ 2wHY.L@Q(?8/Ί@N(oEvC8(E(Yu R/A(QtBU׋C(I Zm#w!_-|g BG-/=P> Bʇ% _,z|(BʇoϷIV([|MDV(O[(BE޲Q_+V(o[|Y$MP>ON[|I-TE"mQ['[oQ_QE>[oQODlo(߿#|?^|(΅8h87DqDJ(߿&Qɦ|R|?-HeQԜHHɑ_N_U}]ss@YQ(?#k\k\k\k\i|hPTB#umP^&MD /&]k ԭ9G/ wx|Yy(Sg{eEP>N(JqQP^d-KF#/'CyM!$ބP~6ʯ݇P>3JC壖 嗋@(R ÒW/P>z B{?wGmR3Kn(_QӻKn(?!P>vBqqu ]ՕT'lQ2v%+]JU.ASifIoAts=^uݕJ31L]s{ ~+${$~kq]+3DM7c/^kp1]qS~?2{ ԭCG@c`N)A{#qwl*Z1YZZZZZZZZNE?H?l)]>̲\ղ\Պ\Պ\b\b\:\:\\\[[[[ZZ[uj~J9hVVVVVVVVVVVVVVVdVZVVڔҜ]q1'Au%%ղղԱ&>i*;zX*Xu*N|2?ejժ:UOiŅءUժUBTuYJk?{Y0>-Kcg.tbSA烺M+N~3ִMʔ.3 Ӫ0-r:=oK~ZszoJ;d|ZNp&Ǝ8I6-k'Sz!1}1w{cL tfJ1&ar5 xcŦuM2ŘuߦYΌ+5ꌥ7"aws';KS;?c,#u)}~sUaXg[J_13!\f)l̔!{ٍM)ec:O=$s=HXG6:S-1C%:Ư}.ƞmL&|g=1r?m1cODۑ'j)wykek%)v'V{;|?db h#Iޭp?c{ghJ?3 ҉s)}ߠN~BWɄ/O6%j25T^1d·Ryx=47DI]ɇL4h RGLJ/H@]rU/ uMg|v쐿 ץ1hubL?C];S.'12Yߗ-::GS;>>}\?1~%ct~;?ocLbOa*Gc?131%,c^NT1&P{Ӻ֌^Rg>TY77")n:IѦ6e9J?;fjjrj.L_<;t?55b4r{W)JSR_o1}PMojh;6Uu9򳱃͝ՏϞ(g$ţ9x4y81xMMSpIT4+*ؼ|ij9෦c̿3ѴnMm^O?ث͠᪩תIoti$M6'c9TTw0*"6_?1nF㎚ѽ.UV܍9D+*[Vl2/xjTu4 ؛*c'܆نơT?;_ȆGƨܿbr7<6Ʈq&U;<4ƨܿ7c&*߉1 }Qs1v`Torwixl^K/F-l4(l`6CTz6:C4pFS~垍VM]k6z?X<m*8ӝzt.+iNP 0U< `!,Ű2X+`%հ:X`#lͰ6;`'ݰ> p18'$p98"\p&*\pn- w.܃i_bWK/y endstream endobj startxref 468691 %%EOF apjanke-octave-tablicious-8a1b10f/doc/tablicious.qhc000066400000000000000000005300001515050116100225330ustar00rootroot00000000000000SQLite format 3@ #+#. $  w h z H"f| b''tableVersionFilterVersionFilterCREATE TABLE VersionFilter (Version TEXT, FilterId INTEGER)n++tableComponentFilterComponentFilterCREATE TABLE ComponentFilter (ComponentName TEXT, FilterId INTEGER)u--tableComponentMappingComponentMappingCREATE TABLE ComponentMapping (ComponentId INTEGER, NamespaceId INTEGER)q))tableComponentTableComponentTableCREATE TABLE ComponentTable (ComponentId INTEGER PRIMARY KEY, Name TEXT)VtableFilterFilterCREATE TABLE Filter (FilterId INTEGER PRIMARY KEY, Name TEXT)b%%tableVersionTableVersionTableCREATE TABLE VersionTable (NamespaceId INTEGER, Version TEXT)))mtableTimeStampTableTimeStampTableCREATE TABLE TimeStampTable (NamespaceId INTEGER, FolderId INTEGER, FilePath TEXT, Size INTEGER, TimeStamp TEXT)551tableOptimizedFilterTableOptimizedFilterTableCREATE TABLE OptimizedFilterTable (NamespaceId INTEGER, FilterAttributeId INTEGER)(77otableFileAttributeSetTableFileAttributeSetTableCREATE TABLE FileAttributeSetTable (NamespaceId INTEGER, FilterAttributeSetId INTEGER, FilterAttributeId INTEGER) 33/tableContentsFilterTableContentsFilterTableCREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER )w --!tableIndexFilterTableIndexFilterTable CREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER)s ++tableFileFilterTableFileFilterTable CREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER)z ''3tableContentsTableContentsTable CREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB) !! tableIndexTableIndexTable CREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT)''MtableFileNameTableFileNameTable CREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER PRIMARY KEY, Title TEXT)e'' tableSettingsTableSettingsTableCREATE TABLE SettingsTable (Key TEXT PRIMARY KEY, Value BLOB )9M'indexsqlite_autoindex_SettingsTable_1SettingsTableh##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )u##1tableFolderTableFolderTableCREATE TABLE FolderTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Name TEXT )x))+tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY, Name TEXT, FilePath TEXT ) -C)octave.community.tabliciousTablicious.qch  doc    #{fS>#9FullTextSearchFallback%CreationTimei) HideAddressBar- EnableAddressBarA EnableDocumentationManager; HideFilterFunctionality? EnableFilterFunctionality*-;LastRegisterTime2026-02-28T00:49:09.492 ?Z~?k9FullTextSearchFallback%CreationTime)HideAddressBar-EnableAddressBarAEnableDocumentationManager;HideFilterFunctionality?EnableFilterFunctionality- LastRegisterTime M X  } * n  a <x_>)}"RKU/ [_html/tblish_002edataset_002erivers.htmltblish.dataset.rivers (Tablicious v0.4.7)Q. W[html/tblish_002edataset_002erock.htmltblish.dataset.rock (Tablicious v0.4.7)S- Y]html/tblish_002edataset_002esleep.htmltblish.dataset.sleep (Tablicious v0.4.7)[, aehtml/tblish_002edataset_002estackloss.htmltblish.dataset.stackloss (Tablicious v0.4.7)S+ Y]html/tblish_002edataset_002estate.htmltblish.dataset.state (Tablicious v0.4.7)g* qmhtml/tblish_002edataset_002esunspot_005fmonth.htmltblish.dataset.sunspot_month (Tablicious v0.4.7)e) okhtml/tblish_002edataset_002esunspot_005fyear.htmltblish.dataset.sunspot_year (Tablicious v0.4.7)Y( _chtml/tblish_002edataset_002esunspots.htmltblish.dataset.sunspots (Tablicious v0.4.7)S' Y]html/tblish_002edataset_002eswiss.htmltblish.dataset.swiss (Tablicious v0.4.7)U& [_html/tblish_002edataset_002eTheoph.htmltblish.dataset.Theoph (Tablicious v0.4.7)W% ]ahtml/tblish_002edataset_002eTitanic.htmltblish.dataset.Titanic (Tablicious v0.4.7)_$ eihtml/tblish_002edataset_002eToothGrowth.htmltblish.dataset.ToothGrowth (Tablicious v0.4.7)Y# _chtml/tblish_002edataset_002etreering.htmltblish.dataset.treering (Tablicious v0.4.7)S" Y]html/tblish_002edataset_002etrees.htmltblish.dataset.trees (Tablicious v0.4.7)c! imhtml/tblish_002edataset_002eUCBAdmissions.htmltblish.dataset.UCBAdmissions (Tablicious v0.4.7)e  kohtml/tblish_002edataset_002eUKDriverDeaths.htmltblish.dataset.UKDriverDeaths (Tablicious v0.4.7)S Y]html/tblish_002edataset_002eUKgas.htmltblish.dataset.UKgas (Tablicious v0.4.7)a gkhtml/tblish_002edataset_002eUKLungDeaths.htmltblish.dataset.UKLungDeaths (Tablicious v0.4.7)_ eihtml/tblish_002edataset_002eUSAccDeaths.htmltblish.dataset.USAccDeaths (Tablicious v0.4.7)[ aehtml/tblish_002edataset_002eUSArrests.htmltblish.dataset.USArrests (Tablicious v0.4.7)e kohtml/tblish_002edataset_002eUSJudgeRatings.htmltblish.dataset.USJudgeRatings (Tablicious v0.4.7)s y}html/tblish_002edataset_002eUSPersonalExpenditure.htmltblish.dataset.USPersonalExpenditure (Tablicious v0.4.7)S Y]html/tblish_002edataset_002euspop.htmltblish.dataset.uspop (Tablicious v0.4.7)Y _chtml/tblish_002edataset_002eVADeaths.htmltblish.dataset.VADeaths (Tablicious v0.4.7)W ]ahtml/tblish_002edataset_002evolcano.htmltblish.dataset.volcano (Tablicious v0.4.7)] cghtml/tblish_002edataset_002ewarpbreaks.htmltblish.dataset.warpbreaks (Tablicious v0.4.7)S Y]html/tblish_002edataset_002ewomen.htmltblish.dataset.women (Tablicious v0.4.7)_ eihtml/tblish_002edataset_002eWorldPhones.htmltblish.dataset.WorldPhones (Tablicious v0.4.7)Y _chtml/tblish_002edataset_002eWWWusage.htmltblish.dataset.WWWusage (Tablicious v0.4.7)Q W[html/tblish_002edataset_002ezCO2.htmltblish.dataset.zCO2 (Tablicious v0.4.7)E GShtml/tblish_002edatasets.htmltblish.datasets (Tablicious v0.4.7)O Q]html/datasets_002edescription.htmldatasets.description (Tablicious v0.4.7)A COhtml/datasets_002elist.htmldatasets.list (Tablicious v0.4.7)A COhtml/datasets_002eload.htmldatasets.load (Tablicious v0.4.7)W  Yehtml/tblish_002eevalWithTableVars.htmltblish.evalWithTableVars (Tablicious v0.4.7)W  ]ahtml/tblish_002eexamples_002ecoplot.htmltblish.examples.coplot (Tablicious v0.4.7)c  mihtml/tblish_002eexamples_002eplot_005fpairs.htmltblish.examples.plot_pairs (Tablicious v0.4.7)S  Y]html/tblish_002eexamples_002eSpDb.htmltblish.examples.SpDb (Tablicious v0.4.7)C  EQhtml/tblish_002esizeof2.htmltblish.sizeof2 (Tablicious v0.4.7)U [_html/tblish_002etable_002egrpstats.htmltblish.table.grpstats (Tablicious v0.4.7)5 3Ghtml/timezones.htmltimezones (Tablicious v0.4.7)7 5Ihtml/todatetime.htmltodatetime (Tablicious v0.4.7)1 /Chtml/vartype.htmlvartype (Tablicious v0.4.7)/ -Ahtml/vecfun.htmlvecfun (Tablicious v0.4.7)- +?html/years.htmlyears (Tablicious v0.4.7)1 /Chtml/Copying.htmlCopying (Tablicious v0.4.7)% +;JZ/"hd- Q  U  T  K  s B tU8e>h; `?S,g@_0aN/#Y'' duration.charduration.charX durationdurationW dispstrsdispstrsV!! discretizediscretizeU daysdays'T++ datetime.ymdhmsdatetime.ymdhms!S%% datetime.ymddatetime.ymd#R'' datetime.weekdatetime.week-Q11 datetime.timeofdaydatetime.timeofday-P11 datetime.proxyKeysdatetime.proxyKeys -O11 datetime.posixtimedatetime.posixtime 5N99 datetime.posix2datenumdatetime.posix2datenum #M'' datetime.plusdatetime.plus 3L77 datetime.ofDatestructdatetime.ofDatestruct -K11 datetime.ofDatenumdatetime.ofDatenumJ## datetime.nedatetime.ne%I)) datetime.minusdatetime.minusH## datetime.ltdatetime.lt-G11 datetime.localtimedatetime.localtime+F// datetime.linspacedatetime.linspaceE## datetime.ledatetime.le%D)) datetime.isnatdatetime.isnat%C)) datetime.isnandatetime.isnan-B11 datetime.ismissingdatetime.ismissing-A11 datetime.isbetweendatetime.isbetween!@%% datetime.hmsdatetime.hms?## datetime.gtdatetime.gt'>++ datetime.gmtimedatetime.gmtime=## datetime.gedatetime.ge<## datetime.eqdatetime.eq+;// datetime.dispstrsdatetime.dispstrs#:'' datetime.diffdatetime.diff )9-- datetime.datevecdatetime.datevec!+8// datetime.datetimedatetime.datetime"/733 datetime.datestructdatetime.datestruct#+6// datetime.datestrsdatetime.datestrs$)5-- datetime.datestrdatetime.datestr%5499 datetime.datenum2posixdatetime.datenum2posix&)3-- datetime.datenumdatetime.datenum'G2KK datetime.convertDatenumTimeZonedatetime.convertDatenumTimeZone(%1)) datetime.colondatetime.colon)!0%% datetime.NaTdatetime.NaT/ datetimedatetime*".'' datasets.loaddatasets.load"-'' datasets.listdatasets.list0,55 datasets.descriptiondatasets.description+ containscontains+* colvecfuncolvecfun,)!! cell2tablecell2table-3(77 categorical.undefinedcategorical.undefined./'33 categorical.summarycategorical.summary/-&11 categorical.stringcategorical.string07%;; categorical.squeezecatscategorical.squeezecats1/$33 categorical.setcatscategorical.setcats27#;; categorical.reordercatscategorical.reordercats35"99 categorical.renamecatscategorical.renamecats45!99 categorical.removecatscategorical.removecats5/ 33 categorical.missingcategorical.missing6377 categorical.mergecatscategorical.mergecats77;; categorical.isundefinedcategorical.isundefined8377 categorical.isordinalcategorical.isordinal9/33 categorical.isnannycategorical.isnanny:377 categorical.ismissingcategorical.ismissing;599 categorical.iscategorycategorical.iscategory<-11 categorical.doublecategorical.double=155 categorical.dispstrscategorical.dispstrs>/33 categorical.cellstrcategorical.cellstr?599 categorical.categoriescategorical.categories@7;; categorical.categoricalcategorical.categoricalA/33 categorical.addcatscategorical.addcatsB## categoricalcategoricalC calyearscalyearsD calmonthscalmonthsE7;; calendarDuration.uminuscalendarDuration.uminusF599 calendarDuration.timescalendarDuration.timesG377 calendarDuration.pluscalendarDuration.plusH7 ;; calendarDuration.mtimescalendarDuration.mtimesI5 99 calendarDuration.minuscalendarDuration.minusJ5 99 calendarDuration.isnancalendarDuration.isnanK= AA calendarDuration.ismissingcalendarDuration.ismissingL; ?? calendarDuration.dispstrscalendarDuration.dispstrsM9== calendarDuration.dateveccalendarDuration.datevecNKOO calendarDuration.calendarDurationcalendarDuration.calendarDurationO)-- calendarDurationcalendarDurationP caldayscaldaysQ## array2tablearray2tableR NaTNaT NaSNaS! >Y  V ,html/index.html2Tablicious for GNU Octave,html/Introduction.htmlIntroduction2html/Getting-Started.htmlGetting Started<html/Table-Representation.html(Table Representation8html/Table-Construction.html$Table Construction.html/Tables-vs-SQL.htmlTables vs SQLLhtml/Date-and-Time-Representation.html8Date and Time Representation0html/datetime-Class.htmldatetime Class>html/Datenum-Compatibility.html*Datenum Compatibility(html/Time-Zones.htmlTime Zones8html/Defined-Time-Zones.html$Defined Time Zones&html/Durations.htmlDurations0html/duration-Class.htmlduration Class@html/calendarDuration-Class.html,calendarDuration Class<html/Validation-Functions.html(Validation Functions6html/Example-Data-Se#      * )3Tablicious.qchP2026-02-28T00:49:09   doc    /wFL M X  } * n  a <x_>)}"RKU/ [_html/tblish_002edataset_002erivers.htmltblish.dataset.rivers (Tablicious v0.4.7)Q. W[html/tblish_002edataset_002erock.htmltblish.dataset.rock (Tablicious v0.4.7)S- Y]html/tblish_002edataset_002esleep.htmltblish.dataset.sleep (Tablicious v0.4.7)[, aehtml/tblish_002edataset_002estackloss.htmltblish.dataset.stackloss (Tablicious v0.4.7)S+ Y]html/tblish_002edataset_002estate.htmltblish.dataset.state (Tablicious v0.4.7)g* qmhtml/tblish_002edataset_002esunspot_005fmonth.htmltblish.dataset.sunspot_month (Tablicious v0.4.7)e) okhtml/tblish_002edataset_002esunspot_005fyear.htmltblish.dataset.sunspot_year (Tablicious v0.4.7)Y( _chtml/tblish_002edataset_002esunspots.htmltblish.dataset.sunspots (Tablicious v0.4.7)S' Y]html/tblish_002edataset_002eswiss.htmltblish.dataset.swiss (Tablicious v0.4.7)U& [_html/tblish_002edataset_002eTheoph.htmltblish.dataset.Theoph (Tablicious v0.4.7)W% ]ahtml/tblish_002edataset_002eTitanic.htmltblish.dataset.Titanic (Tablicious v0.4.7)_$ eihtml/tblish_002edataset_002eToothGrowth.htmltblish.dataset.ToothGrowth (Tablicious v0.4.7)Y# _chtml/tblish_002edataset_002etreering.htmltblish.dataset.treering (Tablicious v0.4.7)S" Y]html/tblish_002edataset_002etrees.htmltblish.dataset.trees (Tablicious v0.4.7)c! imhtml/tblish_002edataset_002eUCBAdmissions.htmltblish.dataset.UCBAdmissions (Tablicious v0.4.7)e  kohtml/tblish_002edataset_002eUKDriverDeaths.htmltblish.dataset.UKDriverDeaths (Tablicious v0.4.7)S Y]html/tblish_002edataset_002eUKgas.htmltblish.dataset.UKgas (Tablicious v0.4.7)a gkhtml/tblish_002edataset_002eUKLungDeaths.htmltblish.dataset.UKLungDeaths (Tablicious v0.4.7)_ eihtml/tblish_002edataset_002eUSAccDeaths.htmltblish.dataset.USAccDeaths (Tablicious v0.4.7)[ aehtml/tblish_002edataset_002eUSArrests.htmltblish.dataset.USArrests (Tablicious v0.4.7)e kohtml/tblish_002edataset_002eUSJudgeRatings.htmltblish.dataset.USJudgeRatings (Tablicious v0.4.7)s y}html/tblish_002edataset_002eUSPersonalExpenditure.htmltblish.dataset.USPersonalExpenditure (Tablicious v0.4.7)S Y]html/tblish_002edataset_002euspop.htmltblish.dataset.uspop (Tablicious v0.4.7)Y _chtml/tblish_002edataset_002eVADeaths.htmltblish.dataset.VADeaths (Tablicious v0.4.7)W ]ahtml/tblish_002edataset_002evolcano.htmltblish.dataset.volcano (Tablicious v0.4.7)] cghtml/tblish_002edataset_002ewarpbreaks.htmltblish.dataset.warpbreaks (Tablicious v0.4.7)S Y]html/tblish_002edataset_002ewomen.htmltblish.dataset.women (Tablicious v0.4.7)_ eihtml/tblish_002edataset_002eWorldPhones.htmltblish.dataset.WorldPhones (Tablicious v0.4.7)Y _chtml/tblish_002edataset_002eWWWusage.htmltblish.dataset.WWWusage (Tablicious v0.4.7)Q W[html/tblish_002edataset_002ezCO2.htmltblish.dataset.zCO2 (Tablicious v0.4.7)E GShtml/tblish_002edatasets.htmltblish.datasets (Tablicious v0.4.7)O Q]html/datasets_002edescription.htmldatasets.description (Tablicious v0.4.7)A COhtml/datasets_002elist.htmldatasets.list (Tablicious v0.4.7)A COhtml/datasets_002eload.htmldatasets.load (Tablicious v0.4.7)W  Yehtml/tblish_002eevalWithTableVars.htmltblish.evalWithTableVars (Tablicious v0.4.7)W  ]ahtml/tblish_002eexamples_002ecoplot.htmltblish.examples.coplot (Tablicious v0.4.7)c  mihtml/tblish_002eexamples_002eplot_005fpairs.htmltblish.examples.plot_pairs (Tablicious v0.4.7)S  Y]html/tblish_002eexamples_002eSpDb.htmltblish.examples.SpDb (Tablicious v0.4.7)C  EQhtml/tblish_002esizeof2.htmltblish.sizeof2 (Tablicious v0.4.7)U [_html/tblish_002etable_002egrpstats.htmltblish.table.grpstats (Tablicious v0.4.7)5 3Ghtml/timezones.htmltimezones (Tablicious v0.4.7)7 5Ihtml/todatetime.htmltodatetime (Tablicious v0.4.7)1 /Chtml/vartype.htmlvartype (Tablicious v0.4.7)/ -Ahtml/vecfun.htmlvecfun (Tablicious v0.4.7)- +?html/years.htmlyears (Tablicious v0.4.7)1 /Chtml/Copying.htmlCopying (Tablicious v0.4.7)% +/tablicious.htmlTablicious v0.4.7 +T= Z _  Z  S<|)oR5spaOZ UYhtml/tblish_002edataset_002eco2.htmltblish.dataset.co2 (Tablicious v0.4.7)WY ]ahtml/tblish_002edataset_002ecrimtab.htmltblish.dataset.crimtab (Tablicious v0.4.7)WX ]ahtml/tblish_002edataset_002ecupcake.htmltblish.dataset.cupcake (Tablicious v0.4.7)_W eihtml/tblish_002edataset_002ediscoveries.htmltblish.dataset.discoveries (Tablicious v0.4.7)SV Y]html/tblish_002edataset_002eDNase.htmltblish.dataset.DNase (Tablicious v0.4.7)SU Y]html/tblish_002edataset_002eesoph.htmltblish.dataset.esoph (Tablicious v0.4.7)QT W[html/tblish_002edataset_002eeuro.htmltblish.dataset.euro (Tablicious v0.4.7)YS _chtml/tblish_002edataset_002eeurodist.htmltblish.dataset.eurodist (Tablicious v0.4.7)eR kohtml/tblish_002edataset_002eEuStockMarkets.htmltblish.dataset.EuStockMarkets (Tablicious v0.4.7)YQ _chtml/tblish_002edataset_002efaithful.htmltblish.dataset.faithful (Tablicious v0.4.7)aP gkhtml/tblish_002edataset_002eFormaldehyde.htmltblish.dataset.Formaldehyde (Tablicious v0.4.7)UO [_html/tblish_002edataset_002efreeny.htmltblish.dataset.freeny (Tablicious v0.4.7)aN gkhtml/tblish_002edataset_002eHairEyeColor.htmltblish.dataset.HairEyeColor (Tablicious v0.4.7)_M eihtml/tblish_002edataset_002eHarman23cor.htmltblish.dataset.Harman23cor (Tablicious v0.4.7)_L eihtml/tblish_002edataset_002eHarman74cor.htmltblish.dataset.Harman74cor (Tablicious v0.4.7)YK _chtml/tblish_002edataset_002eIndometh.htmltblish.dataset.Indometh (Tablicious v0.4.7)UJ [_html/tblish_002edataset_002einfert.htmltblish.dataset.infert (Tablicious v0.4.7)aI gkhtml/tblish_002edataset_002eInsectSprays.htmltblish.dataset.InsectSprays (Tablicious v0.4.7)QH W[html/tblish_002edataset_002eiris.htmltblish.dataset.iris (Tablicious v0.4.7)WG ]ahtml/tblish_002edataset_002eislands.htmltblish.dataset.islands (Tablicious v0.4.7)eF kohtml/tblish_002edataset_002eJohnsonJohnson.htmltblish.dataset.JohnsonJohnson (Tablicious v0.4.7)[E aehtml/tblish_002edataset_002eLakeHuron.htmltblish.dataset.LakeHuron (Tablicious v0.4.7)MD SWhtml/tblish_002edataset_002elh.htmltblish.dataset.lh (Tablicious v0.4.7)iC oshtml/tblish_002edataset_002eLifeCycleSavings.htmltblish.dataset.LifeCycleSavings (Tablicious v0.4.7)YB _chtml/tblish_002edataset_002eLoblolly.htmltblish.dataset.Loblolly (Tablicious v0.4.7)WA ]ahtml/tblish_002edataset_002elongley.htmltblish.dataset.longley (Tablicious v0.4.7)Q@ W[html/tblish_002edataset_002elynx.htmltblish.dataset.lynx (Tablicious v0.4.7)U? [_html/tblish_002edataset_002emorley.htmltblish.dataset.morley (Tablicious v0.4.7)U> [_html/tblish_002edataset_002emtcars.htmltblish.dataset.mtcars (Tablicious v0.4.7)U= [_html/tblish_002edataset_002enhtemp.htmltblish.dataset.nhtemp (Tablicious v0.4.7)Q< W[html/tblish_002edataset_002eNile.htmltblish.dataset.Nile (Tablicious v0.4.7)U; [_html/tblish_002edataset_002enottem.htmltblish.dataset.nottem (Tablicious v0.4.7)O: UYhtml/tblish_002edataset_002enpk.htmltblish.dataset.npk (Tablicious v0.4.7)m9 swhtml/tblish_002edataset_002eoccupationalStatus.htmltblish.dataset.occupationalStatus (Tablicious v0.4.7)U8 [_html/tblish_002edataset_002eOrange.htmltblish.dataset.Orange (Tablicious v0.4.7)c7 imhtml/tblish_002edataset_002eOrchardSprays.htmltblish.dataset.OrchardSprays (Tablicious v0.4.7)_6 eihtml/tblish_002edataset_002ePlantGrowth.htmltblish.dataset.PlantGrowth (Tablicious v0.4.7)U5 [_html/tblish_002edataset_002eprecip.htmltblish.dataset.precip (Tablicious v0.4.7)]4 cghtml/tblish_002edataset_002epresidents.htmltblish.dataset.presidents (Tablicious v0.4.7)Y3 _chtml/tblish_002edataset_002epressure.htmltblish.dataset.pressure (Tablicious v0.4.7)[2 aehtml/tblish_002edataset_002ePuromycin.htmltblish.dataset.Puromycin (Tablicious v0.4.7)U1 [_html/tblish_002edataset_002equakes.htmltblish.dataset.quakes (Tablicious v0.4.7)S0 Y]html/tblish_002edataset_002erandu.htmltblish.dataset.randu (Tablicious v0.4.7) 5DG : ) i $ m * e E9r:i'[5]E GShtml/table_002emergevars.htmltable.mergevars (Tablicious v0.4.7)C EQhtml/table_002emovevars.htmltable.movevars (Tablicious v0.4.7)=  ?Khtml/table_002endims.htmltable.ndims (Tablicious v0.4.7)=  ?Khtml/table_002enumel.htmltable.numel (Tablicious v0.4.7)M  O[html/table_002eouterfillvals.htmltable.outerfillvals (Tablicious v0.4.7)E  GShtml/table_002eouterjoin.htmltable.outerjoin (Tablicious v0.4.7)I  KWhtml/table_002eprettyprint.htmltable.prettyprint (Tablicious v0.4.7)C EQhtml/table_002erealjoin.htmltable.realjoin (Tablicious v0.4.7)G IUhtml/table_002eremovevars.htmltable.removevars (Tablicious v0.4.7)G IUhtml/table_002erenamevars.htmltable.renamevars (Tablicious v0.4.7)A COhtml/table_002erepelem.htmltable.repelem (Tablicious v0.4.7)? AMhtml/table_002erepmat.htmltable.repmat (Tablicious v0.4.7)C EQhtml/table_002erestrict.htmltable.restrict (Tablicious v0.4.7)? AMhtml/table_002erowfun.htmltable.rowfun (Tablicious v0.4.7)E GShtml/table_002erows2vars.htmltable.rows2vars (Tablicious v0.4.7)C EQhtml/table_002esemijoin.htmltable.semijoin (Tablicious v0.4.7)A COhtml/table_002esetdiff.htmltable.setdiff (Tablicious v0.4.7)U~ Wchtml/table_002esetDimensionNames.htmltable.setDimensionNames (Tablicious v0.4.7)I} KWhtml/table_002esetRowNames.htmltable.setRowNames (Tablicious v0.4.7)?| AMhtml/table_002esetvar.htmltable.setvar (Tablicious v0.4.7)S{ Uahtml/table_002esetVariableNames.htmltable.setVariableNames (Tablicious v0.4.7)?z AMhtml/table_002esetxor.htmltable.setxor (Tablicious v0.4.7);y =Ihtml/table_002esize.htmltable.size (Tablicious v0.4.7)Gx IUhtml/table_002esplitapply.htmltable.splitapply (Tablicious v0.4.7)Ew GShtml/table_002esplitvars.htmltable.splitvars (Tablicious v0.4.7)Av COhtml/table_002esqueeze.htmltable.squeeze (Tablicious v0.4.7)=u ?Khtml/table_002estack.htmltable.stack (Tablicious v0.4.7)At COhtml/table_002esummary.htmltable.summary (Tablicious v0.4.7)=s ?Khtml/table_002etable.htmltable.table (Tablicious v0.4.7)Ir KWhtml/table_002etable2array.htmltable.table2array (Tablicious v0.4.7)Gq IUhtml/table_002etable2cell.htmltable.table2cell (Tablicious v0.4.7)Kp MYhtml/table_002etable2struct.htmltable.table2struct (Tablicious v0.4.7)=o ?Khtml/table_002eunion.htmltable.union (Tablicious v0.4.7)?n AMhtml/table_002evarfun.htmltable.varfun (Tablicious v0.4.7)Cm EQhtml/table_002evarnames.htmltable.varnames (Tablicious v0.4.7)Al COhtml/table_002evertcat.htmltable.vertcat (Tablicious v0.4.7)=k ?Khtml/table_002ewidth.htmltable.width (Tablicious v0.4.7)Ij G[html/tableOuterFillValue.htmltableOuterFillValue (Tablicious v0.4.7)+i )=html/tail.htmltail (Tablicious v0.4.7)Ch EQhtml/tblish_002edataset.htmltblish.dataset (Tablicious v0.4.7)Yg _chtml/tblish_002edataset_002eairmiles.htmltblish.dataset.airmiles (Tablicious v0.4.7)cf imhtml/tblish_002edataset_002eAirPassengers.htmltblish.dataset.AirPassengers (Tablicious v0.4.7)]e cghtml/tblish_002edataset_002eairquality.htmltblish.dataset.airquality (Tablicious v0.4.7)Yd _chtml/tblish_002edataset_002eanscombe.htmltblish.dataset.anscombe (Tablicious v0.4.7)Uc [_html/tblish_002edataset_002eattenu.htmltblish.dataset.attenu (Tablicious v0.4.7)Yb _chtml/tblish_002edataset_002eattitude.htmltblish.dataset.attitude (Tablicious v0.4.7)Wa ]ahtml/tblish_002edataset_002eaustres.htmltblish.dataset.austres (Tablicious v0.4.7)W` ]ahtml/tblish_002edataset_002ebeavers.htmltblish.dataset.beavers (Tablicious v0.4.7)W_ ]ahtml/tblish_002edataset_002eBJsales.htmltblish.dataset.BJsales (Tablicious v0.4.7)O^ UYhtml/tblish_002edataset_002eBOD.htmltblish.dataset.BOD (Tablicious v0.4.7)Q] W[html/tblish_002edataset_002ecars.htmltblish.dataset.cars (Tablicious v0.4.7)_\ eihtml/tblish_002edataset_002eChickWeight.htmltblish.dataset.ChickWeight (Tablicious v0.4.7)Y[ _chtml/tblish_002edataset_002echickwts.htmltblish.dataset.chickwts (Tablicious v0.4.7) ;~6d R  6 d 4 p  BnHx2^LHr4 H;J 9Mhtml/mustBeScalar.htmlmustBeScalar (Tablicious v0.4.7)II G[html/mustBeScalarLogical.htmlmustBeScalarLogical (Tablicious v0.4.7);H 9Mhtml/mustBeVector.htmlmustBeVector (Tablicious v0.4.7))G ';html/NaC.htmlNaC (Tablicious v0.4.7))F ';html/NaS.htmlNaS (Tablicious v0.4.7))E ';html/NaT.htmlNaT (Tablicious v0.4.7)'D %9html/pp.htmlpp (Tablicious v0.4.7);C 9Mhtml/scalarexpand.htmlscalarexpand (Tablicious v0.4.7)1B /Chtml/seconds.htmlseconds (Tablicious v0.4.7)3A 1Ehtml/size2str.htmlsize2str (Tablicious v0.4.7)7@ 5Ihtml/splitapply.htmlsplitapply (Tablicious v0.4.7)/? -Ahtml/string.htmlstring (Tablicious v0.4.7)=> ?Khtml/string_002ecell.htmlstring.cell (Tablicious v0.4.7)C= EQhtml/string_002ecellstr.htmlstring.cellstr (Tablicious v0.4.7)=< ?Khtml/string_002echar.htmlstring.char (Tablicious v0.4.7);; =Ihtml/string_002ecmp.htmlstring.cmp (Tablicious v0.4.7)A: COhtml/string_002edecode.htmlstring.decode (Tablicious v0.4.7)E9 GShtml/string_002edispstrs.htmlstring.dispstrs (Tablicious v0.4.7)?8 AMhtml/string_002eempty.htmlstring.empty (Tablicious v0.4.7)A7 COhtml/string_002eencode.htmlstring.encode (Tablicious v0.4.7)E6 GShtml/string_002eendsWith.htmlstring.endsWith (Tablicious v0.4.7)?5 AMhtml/string_002eerase.htmlstring.erase (Tablicious v0.4.7)G4 IUhtml/string_002eismissing.htmlstring.ismissing (Tablicious v0.4.7)C3 EQhtml/string_002eisnanny.htmlstring.isnanny (Tablicious v0.4.7)E2 GShtml/string_002eisstring.htmlstring.isstring (Tablicious v0.4.7)?1 AMhtml/string_002elower.htmlstring.lower (Tablicious v0.4.7)C0 EQhtml/string_002emissing.htmlstring.missing (Tablicious v0.4.7)=/ ?Khtml/string_002eplus.htmlstring.plus (Tablicious v0.4.7)G. IUhtml/string_002eregexprep.htmlstring.regexprep (Tablicious v0.4.7)C- EQhtml/string_002ereverse.htmlstring.reverse (Tablicious v0.4.7)S, Y]html/string_002ereverse_005fbytes.htmlstring.reverse_bytes (Tablicious v0.4.7)I+ KWhtml/string_002estartsWith.htmlstring.startsWith (Tablicious v0.4.7)A* COhtml/string_002estrcat.htmlstring.strcat (Tablicious v0.4.7)A) COhtml/string_002estrcmp.htmlstring.strcmp (Tablicious v0.4.7)C( EQhtml/string_002estrfind.htmlstring.strfind (Tablicious v0.4.7)A' COhtml/string_002estring.htmlstring.string (Tablicious v0.4.7)G& IUhtml/string_002estrlength.htmlstring.strlength (Tablicious v0.4.7)W% ]ahtml/string_002estrlength_005fbytes.htmlstring.strlength_bytes (Tablicious v0.4.7)A$ COhtml/string_002estrrep.htmlstring.strrep (Tablicious v0.4.7)?# AMhtml/string_002eupper.htmlstring.upper (Tablicious v0.4.7);" 9Mhtml/struct2table.htmlstruct2table (Tablicious v0.4.7)-! +?html/table.htmltable (Tablicious v0.4.7)A  COhtml/table_002eaddvars.htmltable.addvars (Tablicious v0.4.7)C EQhtml/table_002eantijoin.htmltable.antijoin (Tablicious v0.4.7)E GShtml/table_002ecartesian.htmltable.cartesian (Tablicious v0.4.7)I KWhtml/table_002econvertvars.htmltable.convertvars (Tablicious v0.4.7)G IUhtml/table_002efindgroups.htmltable.findgroups (Tablicious v0.4.7)? AMhtml/table_002egetvar.htmltable.getvar (Tablicious v0.4.7)A COhtml/table_002egetvars.htmltable.getvars (Tablicious v0.4.7)A COhtml/table_002egroupby.htmltable.groupby (Tablicious v0.4.7)? AMhtml/table_002eheight.htmltable.height (Tablicious v0.4.7)A COhtml/table_002ehorzcat.htmltable.horzcat (Tablicious v0.4.7)E GShtml/table_002einnerjoin.htmltable.innerjoin (Tablicious v0.4.7)E GShtml/table_002eintersect.htmltable.intersect (Tablicious v0.4.7)A COhtml/table_002eisempty.htmltable.isempty (Tablicious v0.4.7)C EQhtml/table_002eismember.htmltable.ismember (Tablicious v0.4.7)E GShtml/table_002eismissing.htmltable.ismissing (Tablicious v0.4.7)A COhtml/table_002eistable.htmltable.istable (Tablicious v0.4.7); =Ihtml/table_002ejoin.htmltable.join (Tablicious v0.4.7) <DF J  r ( > Z  | *D d0Tl@h~8`vH? AMhtml/datetime_002eymd.htmldatetime.ymd (Tablicious v0.4.7)E GShtml/datetime_002eymdhms.htmldatetime.ymdhms (Tablicious v0.4.7)+ )=html/days.htmldays (Tablicious v0.4.7)7 5Ihtml/discretize.htmldiscretize (Tablicious v0.4.7)3 1Ehtml/dispstrs.htmldispstrs (Tablicious v0.4.7)3 1Ehtml/duration.htmlduration (Tablicious v0.4.7)A COhtml/duration_002echar.htmlduration.char (Tablicious v0.4.7)G IUhtml/duration_002edatevec.htmlduration.datevec (Tablicious v0.4.7)I~ KWhtml/duration_002edispstrs.htmlduration.dispstrs (Tablicious v0.4.7)?} AMhtml/duration_002ehms.htmlduration.hms (Tablicious v0.4.7)C| EQhtml/duration_002ehours.htmlduration.hours (Tablicious v0.4.7)I{ KWhtml/duration_002elinspace.htmlduration.linspace (Tablicious v0.4.7)Qz S_html/duration_002emilliseconds.htmlduration.milliseconds (Tablicious v0.4.7)Gy IUhtml/duration_002eminutes.htmlduration.minutes (Tablicious v0.4.7)Ex GShtml/duration_002eofDays.htmlduration.ofDays (Tablicious v0.4.7)Gw IUhtml/duration_002eseconds.htmlduration.seconds (Tablicious v0.4.7)Cv EQhtml/duration_002eyears.htmlduration.years (Tablicious v0.4.7))u ';html/eqn.htmleqn (Tablicious v0.4.7)+t )=html/head.htmlhead (Tablicious v0.4.7)-s +?html/hours.htmlhours (Tablicious v0.4.7)Gr EYhtml/iscalendarduration.htmliscalendarduration (Tablicious v0.4.7)=q ;Ohtml/iscategorical.htmliscategorical (Tablicious v0.4.7)7p 5Ihtml/isdatetime.htmlisdatetime (Tablicious v0.4.7)7o 5Ihtml/isduration.htmlisduration (Tablicious v0.4.7)/n -Ahtml/isfile.htmlisfile (Tablicious v0.4.7)3m 1Ehtml/isfolder.htmlisfolder (Tablicious v0.4.7)1l /Chtml/isnanny.htmlisnanny (Tablicious v0.4.7)1k /Chtml/istable.htmlistable (Tablicious v0.4.7)5j 3Ghtml/istabular.htmlistabular (Tablicious v0.4.7)9i 7Khtml/istimetable.htmlistimetable (Tablicious v0.4.7)5h 3Ghtml/localdate.htmllocaldate (Tablicious v0.4.7)Ig KWhtml/localdate_002edatenum.htmllocaldate.datenum (Tablicious v0.4.7)If KWhtml/localdate_002edatestr.htmllocaldate.datestr (Tablicious v0.4.7)Ke MYhtml/localdate_002edatestrs.htmllocaldate.datestrs (Tablicious v0.4.7)Od Q]html/localdate_002edatestruct.htmllocaldate.datestruct (Tablicious v0.4.7)Kc MYhtml/localdate_002edispstrs.htmllocaldate.dispstrs (Tablicious v0.4.7)Eb GShtml/localdate_002eisnan.htmllocaldate.isnan (Tablicious v0.4.7)Ea GShtml/localdate_002eisnat.htmllocaldate.isnat (Tablicious v0.4.7)M` O[html/localdate_002elocaldate.htmllocaldate.localdate (Tablicious v0.4.7)A_ COhtml/localdate_002eNaT.htmllocaldate.NaT (Tablicious v0.4.7)M^ O[html/localdate_002eposixtime.htmllocaldate.posixtime (Tablicious v0.4.7)A] COhtml/localdate_002eymd.htmllocaldate.ymd (Tablicious v0.4.7);\ 9Mhtml/milliseconds.htmlmilliseconds (Tablicious v0.4.7)1[ /Chtml/minutes.htmlminutes (Tablicious v0.4.7)1Z /Chtml/missing.htmlmissing (Tablicious v0.4.7)GY IUhtml/missing_002edispstrs.htmlmissing.dispstrs (Tablicious v0.4.7)IX KWhtml/missing_002eismissing.htmlmissing.ismissing (Tablicious v0.4.7)AW COhtml/missing_002eisnan.htmlmissing.isnan (Tablicious v0.4.7)EV GShtml/missing_002eisnanny.htmlmissing.isnanny (Tablicious v0.4.7)EU GShtml/missing_002emissing.htmlmissing.missing (Tablicious v0.4.7)1T /Chtml/mustBeA.htmlmustBeA (Tablicious v0.4.7)=S ;Ohtml/mustBeCellstr.htmlmustBeCellstr (Tablicious v0.4.7)=R ;Ohtml/mustBeCharvec.htmlmustBeCharvec (Tablicious v0.4.7);Q 9Mhtml/mustBeFinite.htmlmustBeFinite (Tablicious v0.4.7)=P ;Ohtml/mustBeInteger.htmlmustBeInteger (Tablicious v0.4.7);O 9Mhtml/mustBeMember.htmlmustBeMember (Tablicious v0.4.7)?N =Qhtml/mustBeNonempty.htmlmustBeNonempty (Tablicious v0.4.7)=M ;Ohtml/mustBeNumeric.htmlmustBeNumeric (Tablicious v0.4.7)7L 5Ihtml/mustBeReal.htmlmustBeReal (Tablicious v0.4.7)?K =Qhtml/mustBeSameSize.htmlmustBeSameSize (Tablicious v0.4.7) 5xn |8 V  @ n ( J Bh6.|D fplpxQ; S_html/categorical_002eismissing.htmlcategorical.ismissing (Tablicious v0.4.7)M: O[html/categorical_002eisnanny.htmlcategorical.isnanny (Tablicious v0.4.7)Q9 S_html/categorical_002eisordinal.htmlcategorical.isordinal (Tablicious v0.4.7)U8 Wchtml/categorical_002eisundefined.htmlcategorical.isundefined (Tablicious v0.4.7)Q7 S_html/categorical_002emergecats.htmlcategorical.mergecats (Tablicious v0.4.7)M6 O[html/categorical_002emissing.htmlcategorical.missing (Tablicious v0.4.7)S5 Uahtml/categorical_002eremovecats.htmlcategorical.removecats (Tablicious v0.4.7)S4 Uahtml/categorical_002erenamecats.htmlcategorical.renamecats (Tablicious v0.4.7)U3 Wchtml/categorical_002ereordercats.htmlcategorical.reordercats (Tablicious v0.4.7)M2 O[html/categorical_002esetcats.htmlcategorical.setcats (Tablicious v0.4.7)U1 Wchtml/categorical_002esqueezecats.htmlcategorical.squeezecats (Tablicious v0.4.7)K0 MYhtml/categorical_002estring.htmlcategorical.string (Tablicious v0.4.7)M/ O[html/categorical_002esummary.htmlcategorical.summary (Tablicious v0.4.7)Q. S_html/categorical_002eundefined.htmlcategorical.undefined (Tablicious v0.4.7)7- 5Ihtml/cell2table.htmlcell2table (Tablicious v0.4.7)5, 3Ghtml/colvecfun.htmlcolvecfun (Tablicious v0.4.7)3+ 1Ehtml/contains.htmlcontains (Tablicious v0.4.7)3* 1Ehtml/datetime.htmldatetime (Tablicious v0.4.7)C) EQhtml/datetime_002ecolon.htmldatetime.colon (Tablicious v0.4.7)e( gshtml/datetime_002econvertDatenumTimeZone.htmldatetime.convertDatenumTimeZone (Tablicious v0.4.7)G' IUhtml/datetime_002edatenum.htmldatetime.datenum (Tablicious v0.4.7)S& Uahtml/datetime_002edatenum2posix.htmldatetime.datenum2posix (Tablicious v0.4.7)G% IUhtml/datetime_002edatestr.htmldatetime.datestr (Tablicious v0.4.7)I$ KWhtml/datetime_002edatestrs.htmldatetime.datestrs (Tablicious v0.4.7)M# O[html/datetime_002edatestruct.htmldatetime.datestruct (Tablicious v0.4.7)I" KWhtml/datetime_002edatetime.htmldatetime.datetime (Tablicious v0.4.7)G! IUhtml/datetime_002edatevec.htmldatetime.datevec (Tablicious v0.4.7)A  COhtml/datetime_002ediff.htmldatetime.diff (Tablicious v0.4.7)I KWhtml/datetime_002edispstrs.htmldatetime.dispstrs (Tablicious v0.4.7)= ?Khtml/datetime_002eeq.htmldatetime.eq (Tablicious v0.4.7)= ?Khtml/datetime_002ege.htmldatetime.ge (Tablicious v0.4.7)E GShtml/datetime_002egmtime.htmldatetime.gmtime (Tablicious v0.4.7)= ?Khtml/datetime_002egt.htmldatetime.gt (Tablicious v0.4.7)? AMhtml/datetime_002ehms.htmldatetime.hms (Tablicious v0.4.7)K MYhtml/datetime_002eisbetween.htmldatetime.isbetween (Tablicious v0.4.7)K MYhtml/datetime_002eismissing.htmldatetime.ismissing (Tablicious v0.4.7)C EQhtml/datetime_002eisnan.htmldatetime.isnan (Tablicious v0.4.7)C EQhtml/datetime_002eisnat.htmldatetime.isnat (Tablicious v0.4.7)= ?Khtml/datetime_002ele.htmldatetime.le (Tablicious v0.4.7)I KWhtml/datetime_002elinspace.htmldatetime.linspace (Tablicious v0.4.7)K MYhtml/datetime_002elocaltime.htmldatetime.localtime (Tablicious v0.4.7)= ?Khtml/datetime_002elt.htmldatetime.lt (Tablicious v0.4.7)C EQhtml/datetime_002eminus.htmldatetime.minus (Tablicious v0.4.7)? AMhtml/datetime_002eNaT.htmldatetime.NaT (Tablicious v0.4.7)= ?Khtml/datetime_002ene.htmldatetime.ne (Tablicious v0.4.7)K MYhtml/datetime_002eofDatenum.htmldatetime.ofDatenum (Tablicious v0.4.7)Q  S_html/datetime_002eofDatestruct.htmldatetime.ofDatestruct (Tablicious v0.4.7)A  COhtml/datetime_002eplus.htmldatetime.plus (Tablicious v0.4.7)S  Uahtml/datetime_002eposix2datenum.htmldatetime.posix2datenum (Tablicious v0.4.7)K  MYhtml/datetime_002eposixtime.htmldatetime.posixtime (Tablicious v0.4.7)K  MYhtml/datetime_002eproxyKeys.htmldatetime.proxyKeys (Tablicious v0.4.7)K MYhtml/datetime_002etimeofday.htmldatetime.timeofday (Tablicious v0.4.7)A COhtml/datetime_002eweek.htmldatetime.week (Tablicious v0.4.7) ,\ d J  d  b R F Hr*H<\B+g +;html/index.htmlTop (Tablicious v0.4.7);f 9Mhtml/Introduction.htmlIntroduction (Tablicious v0.4.7)Ae ?Shtml/Getting-Started.htmlGetting Started (Tablicious v0.4.7)Kd I]html/Table-Representation.htmlTable Representation (Tablicious v0.4.7)Gc EYhtml/Table-Construction.htmlTable Construction (Tablicious v0.4.7)=b ;Ohtml/Tables-vs-SQL.htmlTables vs SQL (Tablicious v0.4.7)[a Ymhtml/Date-and-Time-Representation.htmlDate and Time Representation (Tablicious v0.4.7)?` =Qhtml/datetime-Class.htmldatetime Class (Tablicious v0.4.7)M_ K_html/Datenum-Compatibility.htmlDatenum Compatibility (Tablicious v0.4.7)7^ 5Ihtml/Time-Zones.htmlTime Zones (Tablicious v0.4.7)G] EYhtml/Defined-Time-Zones.htmlDefined Time Zones (Tablicious v0.4.7)5\ 3Ghtml/Durations.htmlDurations (Tablicious v0.4.7)?[ =Qhtml/duration-Class.htmlduration Class (Tablicious v0.4.7)OZ Mahtml/calendarDuration-Class.htmlcalendarDuration Class (Tablicious v0.4.7)KY I]html/Validation-Functions.htmlValidation Functions (Tablicious v0.4.7)EX CWhtml/Example-Data-Sets.htmlExample Data Sets (Tablicious v0.4.7)CW AUhtml/Data-Sets-from-R.htmlData Sets from R (Tablicious v0.4.7)MV K_html/Missing-Functionality.htmlMissing Functionality (Tablicious v0.4.7)=U ;Ohtml/API-Reference.htmlAPI Reference (Tablicious v0.4.7)AT ?Shtml/API-by-Category.htmlAPI by Category (Tablicious v0.4.7)GS EYhtml/API-Alphabetically.htmlAPI Alphabetically (Tablicious v0.4.7)9R 7Khtml/array2table.htmlarray2table (Tablicious v0.4.7)1Q /Chtml/caldays.htmlcaldays (Tablicious v0.4.7)CP AUhtml/calendarDuration.htmlcalendarDuration (Tablicious v0.4.7)iO kwhtml/calendarDuration_002ecalendarDuration.htmlcalendarDuration.calendarDuration (Tablicious v0.4.7)WN Yehtml/calendarDuration_002edatevec.htmlcalendarDuration.datevec (Tablicious v0.4.7)YM [ghtml/calendarDuration_002edispstrs.htmlcalendarDuration.dispstrs (Tablicious v0.4.7)[L ]ihtml/calendarDuration_002eismissing.htmlcalendarDuration.ismissing (Tablicious v0.4.7)SK Uahtml/calendarDuration_002eisnan.htmlcalendarDuration.isnan (Tablicious v0.4.7)SJ Uahtml/calendarDuration_002eminus.htmlcalendarDuration.minus (Tablicious v0.4.7)UI Wchtml/calendarDuration_002emtimes.htmlcalendarDuration.mtimes (Tablicious v0.4.7)QH S_html/calendarDuration_002eplus.htmlcalendarDuration.plus (Tablicious v0.4.7)SG Uahtml/calendarDuration_002etimes.htmlcalendarDuration.times (Tablicious v0.4.7)UF Wchtml/calendarDuration_002euminus.htmlcalendarDuration.uminus (Tablicious v0.4.7)5E 3Ghtml/calmonths.htmlcalmonths (Tablicious v0.4.7)3D 1Ehtml/calyears.htmlcalyears (Tablicious v0.4.7)9C 7Khtml/categorical.htmlcategorical (Tablicious v0.4.7)MB O[html/categorical_002eaddcats.htmlcategorical.addcats (Tablicious v0.4.7)UA Wchtml/categorical_002ecategorical.htmlcategorical.categorical (Tablicious v0.4.7)S@ Uahtml/categorical_002ecategories.htmlcategorical.categories (Tablicious v0.4.7)M? O[html/categorical_002ecellstr.htmlcategorical.cellstr (Tablicious v0.4.7)O> Q]html/categorical_002edispstrs.htmlcategorical.dispstrs (Tablicious v0.4.7)K= MYhtml/categorical_002edouble.htmlcategorical.double (Tablicious v0.4.7)S< Uahtml/categorical_002eiscategory.htmlcategorical.iscategory (Tablicious v0.4.7) Yhd- Q  U  T  K  s B tU8e>h; `?S,g@_0aN/#Y'' duration.charduration.charX durationdurationW dispstrsdispstrsV!! discretizediscretizeU daysdays'T++ datetime.ymdhmsdatetime.ymdhms!S%% datetime.ymddatetime.ymd#R'' datetime.weekdatetime.week-Q11 datetime.timeofdaydatetime.timeofday-P11 datetime.proxyKeysdatetime.proxyKeys -O11 datetime.posixtimedatetime.posixtime 5N99 datetime.posix2datenumdatetime.posix2datenum #M'' datetime.plusdatetime.plus 3L77 datetime.ofDatestructdatetime.ofDatestruct -K11 datetime.ofDatenumdatetime.ofDatenumJ## datetime.nedatetime.ne%I)) datetime.minusdatetime.minusH## datetime.ltdatetime.lt-G11 datetime.localtimedatetime.localtime+F// datetime.linspacedatetime.linspaceE## datetime.ledatetime.le%D)) datetime.isnatdatetime.isnat%C)) datetime.isnandatetime.isnan-B11 datetime.ismissingdatetime.ismissing-A11 datetime.isbetweendatetime.isbetween!@%% datetime.hmsdatetime.hms?## datetime.gtdatetime.gt'>++ datetime.gmtimedatetime.gmtime=## datetime.gedatetime.ge<## datetime.eqdatetime.eq+;// datetime.dispstrsdatetime.dispstrs#:'' datetime.diffdatetime.diff )9-- datetime.datevecdatetime.datevec!+8// datetime.datetimedatetime.datetime"/733 datetime.datestructdatetime.datestruct#+6// datetime.datestrsdatetime.datestrs$)5-- datetime.datestrdatetime.datestr%5499 datetime.datenum2posixdatetime.datenum2posix&)3-- datetime.datenumdatetime.datenum'G2KK datetime.convertDatenumTimeZonedatetime.convertDatenumTimeZone(%1)) datetime.colondatetime.colon)!0%% datetime.NaTdatetime.NaT/ datetimedatetime*".'' datasets.loaddatasets.load"-'' datasets.listdatasets.list0,55 datasets.descriptiondatasets.description+ containscontains+* colvecfuncolvecfun,)!! cell2tablecell2table-3(77 categorical.undefinedcategorical.undefined./'33 categorical.summarycategorical.summary/-&11 categorical.stringcategorical.string07%;; categorical.squeezecatscategorical.squeezecats1/$33 categorical.setcatscategorical.setcats27#;; categorical.reordercatscategorical.reordercats35"99 categorical.renamecatscategorical.renamecats45!99 categorical.removecatscategorical.removecats5/ 33 categorical.missingcategorical.missing6377 categorical.mergecatscategorical.mergecats77;; categorical.isundefinedcategorical.isundefined8377 categorical.isordinalcategorical.isordinal9/33 categorical.isnannycategorical.isnanny:377 categorical.ismissingcategorical.ismissing;599 categorical.iscategorycategorical.iscategory<-11 categorical.doublecategorical.double=155 categorical.dispstrscategorical.dispstrs>/33 categorical.cellstrcategorical.cellstr?599 categorical.categoriescategorical.categories@7;; categorical.categoricalcategorical.categoricalA/33 categorical.addcatscategorical.addcatsB## categoricalcategoricalC calyearscalyearsD calmonthscalmonthsE7;; calendarDuration.uminuscalendarDuration.uminusF599 calendarDuration.timescalendarDuration.timesG377 calendarDuration.pluscalendarDuration.plusH7 ;; calendarDuration.mtimescalendarDuration.mtimesI5 99 calendarDuration.minuscalendarDuration.minusJ5 99 calendarDuration.isnancalendarDuration.isnanK= AA calendarDuration.ismissingcalendarDuration.ismissingL; ?? calendarDuration.dispstrscalendarDuration.dispstrsM9== calendarDuration.dateveccalendarDuration.datevecNKOO calendarDuration.calendarDurationcalendarDuration.calendarDurationO)-- calendarDurationcalendarDurationP caldayscaldaysQ## array2tablearray2tableR NaTNaT NaSNaS NaCNaC e^1}VE2 r Y <   P  k :  h B  d L * pL&Z6d6p8f<rN(\6N$+>// table.prettyprinttable.prettyprint'=++ table.outerjointable.outerjoin/<33 table.outerfillvalstable.outerfillvals;## table.numeltable.numel:## table.ndimstable.ndims%9)) table.movevarstable.movevars'8++ table.mergevarstable.mergevars7!! table.jointable.join#6'' table.istabletable.istable'5++ table.ismissingtable.ismissing%4)) table.ismembertable.ismember#3'' table.isemptytable.isempty'2++ table.intersecttable.intersect'1++ table.innerjointable.innerjoin#0'' table.horzcattable.horzcat!/%% table.heighttable.height#.'' table.groupbytable.groupby#-'' table.getvarstable.getvars!,%% table.getvartable.getvar)+-- table.findgroupstable.findgroups+*// table.convertvarstable.convertvars')++ table.cartesiantable.cartesian%()) table.antijointable.antijoin#''' table.addvarstable.addvars& tabletable!%%% struct2tablestruct2table!$%% string.upperstring.upper##'' string.strrepstring.strrep5"99 string.strlength_bytesstring.strlength_bytes)!-- string.strlengthstring.strlength# '' string.stringstring.string%)) string.strfindstring.strfind#'' string.strcmpstring.strcmp#'' string.strcatstring.strcat+// string.startsWithstring.startsWith155 string.reverse_bytesstring.reverse_bytes%)) string.reversestring.reverse)-- string.regexprepstring.regexprep## string.plusstring.plus%)) string.missingstring.missing!%% string.lowerstring.lower'++ string.isstringstring.isstring%)) string.isnannystring.isnanny)-- string.ismissingstring.ismissing!%% string.erasestring.erase'++ string.endsWithstring.endsWith#'' string.encodestring.encode!%% string.emptystring.empty'++ string.dispstrsstring.dispstrs# '' string.decodestring.decode !! string.cmpstring.cmp ## string.charstring.char% )) string.cellstrstring.cellstr ## string.cellstring.cell stringstring!! splitapplysplitapply size2strsize2str secondsseconds!%% scalarexpandscalarexpand  pppp'++ missing.missingmissing.missing'++ missing.isnannymissing.isnanny#'' missing.isnanmissing.isnan+// missing.ismissingmissing.ismissing)~-- missing.dispstrsmissing.dispstrs} missingmissing| minutesminutes!{%% millisecondsmilliseconds#z'' localdate.ymdlocaldate.ymd/y33 localdate.posixtimelocaldate.posixtime/x33 localdate.localdatelocaldate.localdate'w++ localdate.isnatlocaldate.isnat'v++ localdate.isnanlocaldate.isnan-u11 localdate.dispstrslocaldate.dispstrs1t55 localdate.datestructlocaldate.datestruct-s11 localdate.datestrslocaldate.datestrs+r// localdate.datestrlocaldate.datestr+q// localdate.datenumlocaldate.datenum#p'' localdate.NaTlocaldate.NaTo localdatelocaldaten## istimetableistimetablem istabularistabularl istableistablek isnannyisnannyj!! isdurationisdurationi!! isdatetimeisdatetime#h'' iscategoricaliscategorical-g11 iscalendardurationiscalendardurationf hourshourse headheadd eqneqn%c)) duration.yearsduration.years)b-- duration.secondsduration.seconds'a++ duration.ofDaysduration.ofDays)`-- duration.minutesduration.minutes3_77 duration.millisecondsduration.milliseconds+^// duration.linspaceduration.linspace%])) duration.hoursduration.hours!\%% duration.hmsduration.hms+[// duration.dispstrsduration.dispstrs)Z-- duration.datevecduration.datevec LZ6_2 q F  d 9 z Y F  v 7  ~ =E|C[ u2y:g.}@b+6 ;; tblish.dataset.chickwtstblish.dataset.chickwts[. 33 tblish.dataset.carstblish.dataset.cars]499 tblish.dataset.beaverstblish.dataset.beavers`499 tblish.dataset.austrestblish.dataset.austresa6;; tblish.dataset.attitudetblish.dataset.attitudeb277 tblish.dataset.attenutblish.dataset.attenuc6;; tblish.dataset.anscombetblish.dataset.anscombed:?? tblish.dataset.airqualitytblish.dataset.airqualitye6;; tblish.dataset.airmilestblish.dataset.airmilesg<AA tblish.dataset.WorldPhonestblish.dataset.WorldPhones6;; tblish.dataset.WWWusagetblish.dataset.WWWusage6;; tblish.dataset.VADeathstblish.dataset.VADeathsP~UU tblish.dataset.USPersonalExpendituretblish.dataset.USPersonalExpenditureB}GG tblish.dataset.USJudgeRatingstblish.dataset.USJudgeRatings8|== tblish.dataset.USArreststblish.dataset.USArrests<{AA tblish.dataset.USAccDeathstblish.dataset.USAccDeaths0z55 tblish.dataset.UKgastblish.dataset.UKgas>yCC tblish.dataset.UKLungDeathstblish.dataset.UKLungDeathsBxGG tblish.dataset.UKDriverDeathstblish.dataset.UKDriverDeaths @wEE tblish.dataset.UCBAdmissionstblish.dataset.UCBAdmissions!jCC tblish.dataset.InsectSpraystblish.dataset.InsectSpraysI6i;; tblish.dataset.Indomethtblish.dataset.IndomethKfCC tblish.dataset.HairEyeColortblish.dataset.HairEyeColorN>eCC tblish.dataset.Formaldehydetblish.dataset.FormaldehydePBdGG tblish.dataset.EuStockMarketstblish.dataset.EuStockMarketsR0c55 tblish.dataset.DNasetblish.dataset.DNaseV vartypevartype=!! todatetimetodatetime< timezonestimezones2;77 tblish.table.grpstatstblish.table.grpstats$:)) tblish.sizeof2tblish.sizeof2 <9AA tblish.examples.plot_pairstblish.examples.plot_pairs 4899 tblish.examples.coplottblish.examples.coplot 0755 tblish.examples.SpDbtblish.examples.SpDb 86== tblish.evalWithTableVarstblish.evalWithTableVars &5++ tblish.datasetstblish.datasets.433 tblish.dataset.zCO2tblish.dataset.zCO20355 tblish.dataset.womentblish.dataset.women:2?? tblish.dataset.warpbreakstblish.dataset.warpbreaks4199 tblish.dataset.volcanotblish.dataset.volcano0055 tblish.dataset.uspoptblish.dataset.uspop0/55 tblish.dataset.treestblish.dataset.trees"6.;; tblish.dataset.treeringtblish.dataset.treering#0-55 tblish.dataset.swisstblish.dataset.swiss'6,;; tblish.dataset.sunspotstblish.dataset.sunspots(>+CC tblish.dataset.sunspot_yeartblish.dataset.sunspot_year)@*EE tblish.dataset.sunspot_monthtblish.dataset.sunspot_month*0)55 tblish.dataset.statetblish.dataset.state+8(== tblish.dataset.stacklosstblish.dataset.stackloss,0'55 tblish.dataset.sleeptblish.dataset.sleep-.&33 tblish.dataset.rocktblish.dataset.rock.2%77 tblish.dataset.riverstblish.dataset.rivers/0$55 tblish.dataset.randutblish.dataset.randu02#77 tblish.dataset.quakestblish.dataset.quakes16";; tblish.dataset.pressuretblish.dataset.pressure3:!?? tblish.dataset.presidentstblish.dataset.presidents42 77 tblish.dataset.preciptblish.dataset.precip5JOO tblish.dataset.occupationalStatustblish.dataset.occupationalStatus9,11 tblish.dataset.npktblish.dataset.npk:277 tblish.dataset.nottemtblish.dataset.nottem;277 tblish.dataset.nhtemptblish.dataset.nhtemp=277 tblish.dataset.mtcarstblish.dataset.mtcars>277 tblish.dataset.morleytblish.dataset.morley?.33 tblish.dataset.lynxtblish.dataset.lynx@499 tblish.dataset.longleytblish.dataset.longleyA*// tblish.dataset.lhtblish.dataset.lhD499 tblish.dataset.islandstblish.dataset.islandsG.33 tblish.dataset.iristblish.dataset.irisH277 tblish.dataset.inferttblish.dataset.infertJ277 tblish.dataset.freenytblish.dataset.freenyO6;; tblish.dataset.faithfultblish.dataset.faithfulQ6;; tblish.dataset.eurodisttblish.dataset.eurodistS.33 tblish.dataset.eurotblish.dataset.euroT055 tblish.dataset.esophtblish.dataset.esophU<AA tblish.dataset.discoveriestblish.dataset.discoveriesW4 99 tblish.dataset.cupcaketblish.dataset.cupcakeX4 99 tblish.dataset.crimtabtblish.dataset.crimtabY, 11 tblish.dataset.co2tblish.dataset.co2Z$ts.html"Example Data Sets4html/Data-Sets-from-R.html Data Sets from R>html/Missing-Functionality.html*Missing Functionality.html/API-Reference.htmlAPI Reference2html/API-by-Category.htmlAPI by Category8html/API-Alphabetically.html$API Alphabetically*html/array2table.htmlarray2table"html/caldays.htmlcaldays4html/calendarDuration.html calendarDuration^html/calendarDuration_002ecalendarDuration.htmlBcalendarDuration.calendarDurationLhtml/calendarDuration_002edatevec.html0calendarDuration.datevecNhtml/calendarDuration_002edispstrs.html2calendarDuration.dispstrsPhtml/calendarDuration_002eismissing.html4calendarDuration.ismissingHhtml/calendarDuration_002eisnan.html,calendarDuration.isnanHhtml/calendarDuration_002eminus.html,calendarDuration.minusJhtml/calendarDuration_002emtimes.html.calendarDuration.mtimesFhtml/calendarDuration_002eplus.html*calendarDuration.plusHhtml/calendarDuration_002etimes.html,calendarDuration.timesJhtml/calendarDuration_002euminus.html.calendarDuration.uminus&html/calmonths.htmlcalmonths$html/calyears.htmlcalyears*html/categorical.htmlcategoricalBhtml/categorical_002eaddcats.html&categorical.addcatsJhtml/categorical_002ecategorical.html.categorical.categoricalHhtml/categorical_002ecategories.html,categorical.categoriesBhtml/categorical_002ecellstr.html&categorical.cellstrDhtml/categorical_002edispstrs.html(categorical.dispstrs@html/categorical_002edouble.html$categorical.doubleHhtml/categorical_002eiscategory.html,categorical.iscategoryFhtml/categorical_002eismissing.html*categorical.ismissingBhtml/categorical_002eisnanny.html&categorical.isnannyFhtml/categorical_002eisordinal.html*categorical.isordinalJhtml/categorical_002eisundefined.html.categorical.isundefinedFhtml/categorical_002emergecats.html*categorical.mergecatsBhtml/categorical_002emissing.html&categorical.missingHhtml/categorical_002eremovecats.html,categorical.removecatsHhtml/categ%orical_002erenamecats.html,categorical.renamecatsJhtml/categorical_002ereordercats.html.categorical.reordercatsBhtml/categorical_002esetcats.html&categorical.setcatsJhtml/categorical_002esqueezecats.html.categorical.squeezecats@html/categorical_002estring.html$categorical.stringBhtml/categorical_002esummary.html&categorical.summaryFhtml/categorical_002eundefined.html*categorical.undefined(html/cell2table.htmlcell2table&html/colvecfun.htmlcolvecfun$html/contains.htmlcontains$html/datetime.htmldatetime8html/datetime_002ecolon.htmldatetime.colonZhtml/datetime_002econvertDatenumTimeZone.html>datetime.convertDatenumTimeZone<html/datetime_002edatenum.html datetime.datenumHhtml/datetime_002edatenum2posix.html,datetime.datenum2posix<html/datetime_002edatestr.html datetime.datestr>html/datetime_002edatestrs.html"datetime.datestrsBhtml/datetime_002edatestruct.html&datetime.datestruct>html/datetime_002edatetime.html"datetime.datetime<html/datetime_002edatevec.html datetime.datevec6html/datetime_002ediff.htmldatetime.diff>html/datetime_002edispstrs.html"datetime.dispstrs2html/datetime_002eeq.htmldatetime.eq2html/datetime_002ege.htmldatetime.ge:html/datetime_002egmtime.htmldatetime.gmtime2html/datetime_002egt.htmldatetime.gt4html/datetime_002ehms.htmldatetime.hms@html/datetime_002eisbetween.html$datetime.isbetween@html/datetime_002eismissing.html$datetime.ismissing8html/datetime_002eisnan.htmldatetime.isnan8html/datetime_002eisnat.htmldatetime.isnat2html/datetime_002ele.htmldatetime.le>html/datetime_002elinspace.html"datetime.linspace@html/datetime_002elocaltime.html$datetime.localtime2html/datetime_002elt.htmldatetime.lt8html/datetime_002eminus.htmldatetime.minus4html/datetime_002eNaT.htmldatetime.NaT2html/datetime_002ene.htmldatetime.ne@html/datetime_002eofDatenum.html$datetime.ofDatenumFhtml/datetime_002eofDatestruct.html*datetime.ofDatestruct6ht&ml/datetime_002eplus.htmldatetime.plusHhtml/datetime_002eposix2datenum.html,datetime.posix2datenum@html/datetime_002eposixtime.html$datetime.posixtime@html/datetime_002eproxyKeys.html$datetime.proxyKeys@html/datetime_002etimeofday.html$datetime.timeofday6html/datetime_002eweek.htmldatetime.week4html/datetime_002eymd.htmldatetime.ymd:html/datetime_002eymdhms.htmldatetime.ymdhmshtml/days.htmldays(html/discretize.htmldiscretize$html/dispstrs.htmldispstrs$html/duration.htmlduration6html/duration_002echar.htmlduration.char<html/duration_002edatevec.html duration.datevec>html/duration_002edispstrs.html"duration.dispstrs4html/duration_002ehms.htmlduration.hms8html/duration_002ehours.htmlduration.hours>html/duration_002elinspace.html"duration.linspaceFhtml/duration_002emilliseconds.html*duration.milliseconds<html/duration_002eminutes.html duration.minutes:html/duration_002eofDays.htmlduration.ofDays<html/duration_002eseconds.html duration.seconds8html/duration_002eyears.htmlduration.yearshtml/eqn.htmleqnhtml/head.htmlheadhtml/hours.html hours8html/iscalendarduration.html$iscalendarduration.html/iscategorical.htmliscategorical(html/isdatetime.htmlisdatetime(html/isduration.htmlisduration html/isfile.html isfile$html/isfolder.htmlisfolder"html/isnanny.htmlisnanny"html/istable.htmlistable&html/istabular.htmlistabular*html/istimetable.htmlistimetable&html/localdate.htmllocaldate>html/localdate_002edatenum.html"localdate.datenum>html/localdate_002edatestr.html"localdate.datestr@html/localdate_002edatestrs.html$localdate.datestrsDhtml/localdate_002edatestruct.html(localdate.datestruct@html/localdate_002edispstrs.html$localdate.dispstrs:html/localdate_002eisnan.htmllocaldate.isnan:html/localdate_002eisnat.htmllocaldate.isnatBhtml/localdate_002elocaldate.html&localdate.localdate6html/localdate_002eNaT.htmllocaldate.NaT'Bhtml/localdate_002eposixtime.html&localdate.posixtime6html/localdate_002eymd.htmllocaldate.ymd,html/milliseconds.htmlmilliseconds"html/minutes.htmlminutes"html/missing.htmlmissing<html/missing_002edispstrs.html missing.dispstrs>html/missing_002eismissing.html"missing.ismissing6html/missing_002eisnan.htmlmissing.isnan:html/missing_002eisnanny.htmlmissing.isnanny:html/missing_002emissing.htmlmissing.missing"html/mustBeA.htmlmustBeA.html/mustBeCellstr.htmlmustBeCellstr.html/mustBeCharvec.htmlmustBeCharvec,html/mustBeFinite.htmlmustBeFinite.html/mustBeInteger.htmlmustBeInteger,html/mustBeMember.htmlmustBeMember0html/mustBeNonempty.htmlmustBeNonempty.html/mustBeNumeric.htmlmustBeNumeric(html/mustBeReal.htmlmustBeReal0html/mustBeSameSize.htmlmustBeSameSize,html/mustBeScalar.htmlmustBeScalar:html/mustBeScalarLogical.html&mustBeScalarLogical,html/mustBeVector.htmlmustBeVectorhtml/NaC.htmlNaChtml/NaS.htmlNaShtml/NaT.htmlNaThtml/pp.htmlpp,html/scalarexpand.htmlscalarexpand"html/seconds.htmlseconds$html/size2str.htmlsize2str(html/splitapply.htmlsplitapply html/string.html string2html/string_002ecell.htmlstring.cell8html/string_002ecellstr.htmlstring.cellstr2html/string_002echar.htmlstring.char0html/string_002ecmp.htmlstring.cmp6html/string_002edecode.htmlstring.decode:html/string_002edispstrs.htmlstring.dispstrs4html/string_002eempty.htmlstring.empty6html/string_002eencode.htmlstring.encode:html/string_002eendsWith.htmlstring.endsWith4html/string_002eerase.htmlstring.erase<html/string_002eismissing.html string.ismissing8html/string_002eisnanny.htmlstring.isnanny:html/string_002eisstring.htmlstring.isstring4html/string_002elower.htmlstring.lower8html/string_002emissing.htmlstring.missing2html/string_002eplus.htmlstring.plus<html/string_002eregexprep.html string.regexprep8html/strin(g_002ereverse.htmlstring.reverseLhtml/string_002ereverse_005fbytes.html(string.reverse_bytes>html/string_002estartsWith.html"string.startsWith6html/string_002estrcat.htmlstring.strcat6html/string_002estrcmp.htmlstring.strcmp8html/string_002estrfind.htmlstring.strfind6html/string_002estring.htmlstring.string<html/string_002estrlength.html string.strlengthPhtml/string_002estrlength_005fbytes.html,string.strlength_bytes6html/string_002estrrep.htmlstring.strrep4html/string_002eupper.htmlstring.upper,html/struct2table.htmlstruct2tablehtml/table.html table6html/table_002eaddvars.htmltable.addvars8html/table_002eantijoin.htmltable.antijoin:html/table_002ecartesian.htmltable.cartesian>html/table_002econvertvars.html"table.convertvars<html/table_002efindgroups.html table.findgroups4html/table_002egetvar.htmltable.getvar6html/table_002egetvars.htmltable.getvars6html/table_002egroupby.htmltable.groupby4html/table_002eheight.htmltable.height6html/table_002ehorzcat.htmltable.horzcat:html/table_002einnerjoin.htmltable.innerjoin:html/table_002eintersect.htmltable.intersect6html/table_002eisempty.htmltable.isempty8html/table_002eismember.htmltable.ismember:html/table_002eismissing.htmltable.ismissing6html/table_002eistable.htmltable.istable0html/table_002ejoin.htmltable.join:html/table_002emergevars.htmltable.mergevars8html/table_002emovevars.htmltable.movevars2html/table_002endims.htmltable.ndims2html/table_002enumel.htmltable.numelBhtml/table_002eouterfillvals.html&table.outerfillvals:html/table_002eouterjoin.htmltable.outerjoin>html/table_002eprettyprint.html"table.prettyprint8html/table_002erealjoin.htmltable.realjoin<html/table_002eremovevars.html table.removevars<html/table_002erenamevars.html table.renamevars6html/table_002erepelem.htmltable.repelem4html/table_002erepmat.htmltable.repmat8html/table_002erestrict.htmltable.)restrict4html/table_002erowfun.htmltable.rowfun:html/table_002erows2vars.htmltable.rows2vars8html/table_002esemijoin.htmltable.semijoin6html/table_002esetdiff.htmltable.setdiffJhtml/table_002esetDimensionNames.html.table.setDimensionNames>html/table_002esetRowNames.html"table.setRowNames4html/table_002esetvar.htmltable.setvarHhtml/table_002esetVariableNames.html,table.setVariableNames4html/table_002esetxor.htmltable.setxor0html/table_002esize.htmltable.size<html/table_002esplitapply.html table.splitapply:html/table_002esplitvars.htmltable.splitvars6html/table_002esqueeze.htmltable.squeeze2html/table_002estack.htmltable.stack6html/table_002esummary.htmltable.summary2html/table_002etable.htmltable.table>html/table_002etable2array.html"table.table2array<html/table_002etable2cell.html table.table2cell@html/table_002etable2struct.html$table.table2struct2html/table_002eunion.htmltable.union4html/table_002evarfun.htmltable.varfun8html/table_002evarnames.htmltable.varnames6html/table_002evertcat.htmltable.vertcat2html/table_002ewidth.htmltable.width:html/tableOuterFillValue.html&tableOuterFillValuehtml/tail.htmltail8html/tblish_002edataset.htmltblish.datasetRhtml/tblish_002edataset_002eairmiles.html.tblish.dataset.airmiles\html/tblish_002edataset_002eAirPassengers.html8tblish.dataset.AirPassengersVhtml/tblish_002edataset_002eairquality.html2tblish.dataset.airqualityRhtml/tblish_002edataset_002eanscombe.html.tblish.dataset.anscombeNhtml/tblish_002edataset_002eattenu.html*tblish.dataset.attenuRhtml/tblish_002edataset_002eattitude.html.tblish.dataset.attitudePhtml/tblish_002edataset_002eaustres.html,tblish.dataset.austresPhtml/tblish_002edataset_002ebeavers.html,tblish.dataset.beaversPhtml/tblish_002edataset_002eBJsales.html,tblish.dataset.BJsalesHhtml/tblish_002edataset_002eBOD.html$tblish.dataset.BODJhtml/tblish_002edataset_002ecars.html&tblish.datase*t.carsXhtml/tblish_002edataset_002eChickWeight.html4tblish.dataset.ChickWeightRhtml/tblish_002edataset_002echickwts.html.tblish.dataset.chickwtsHhtml/tblish_002edataset_002eco2.html$tblish.dataset.co2Phtml/tblish_002edataset_002ecrimtab.html,tblish.dataset.crimtabPhtml/tblish_002edataset_002ecupcake.html,tblish.dataset.cupcakeXhtml/tblish_002edataset_002ediscoveries.html4tblish.dataset.discoveriesLhtml/tblish_002edataset_002eDNase.html(tblish.dataset.DNaseLhtml/tblish_002edataset_002eesoph.html(tblish.dataset.esophJhtml/tblish_002edataset_002eeuro.html&tblish.dataset.euroRhtml/tblish_002edataset_002eeurodist.html.tblish.dataset.eurodist^html/tblish_002edataset_002eEuStockMarkets.html:tblish.dataset.EuStockMarketsRhtml/tblish_002edataset_002efaithful.html.tblish.dataset.faithfulZhtml/tblish_002edataset_002eFormaldehyde.html6tblish.dataset.FormaldehydeNhtml/tblish_002edataset_002efreeny.html*tblish.dataset.freenyZhtml/tblish_002edataset_002eHairEyeColor.html6tblish.dataset.HairEyeColorXhtml/tblish_002edataset_002eHarman23cor.html4tblish.dataset.Harman23corXhtml/tblish_002edataset_002eHarman74cor.html4tblish.dataset.Harman74corRhtml/tblish_002edataset_002eIndometh.html.tblish.dataset.IndomethNhtml/tblish_002edataset_002einfert.html*tblish.dataset.infertZhtml/tblish_002edataset_002eInsectSprays.html6tblish.dataset.InsectSpraysJhtml/tblish_002edataset_002eiris.html&tblish.dataset.irisPhtml/tblish_002edataset_002eislands.html,tblish.dataset.islands^html/tblish_002edataset_002eJohnsonJohnson.html:tblish.dataset.JohnsonJohnsonThtml/tblish_002edataset_002eLakeHuron.html0tblish.dataset.LakeHuronFhtml/tblish_002edataset_002elh.html"tblish.dataset.lhbhtml/tblish_002edataset_002eLifeCycleSavings.html>tblish.dataset.LifeCycleSavingsRhtml/tblish_002edataset_002eLoblolly.html.tblish.dataset.LoblollyPhtml/tblish_002edataset_002elongley.html,tblish.dataset.longleyJhtml/tblish_002edataset_002elynx.html&tblish.datase+t.lynxNhtml/tblish_002edataset_002emorley.html*tblish.dataset.morleyNhtml/tblish_002edataset_002emtcars.html*tblish.dataset.mtcarsNhtml/tblish_002edataset_002enhtemp.html*tblish.dataset.nhtempJhtml/tblish_002edataset_002eNile.html&tblish.dataset.NileNhtml/tblish_002edataset_002enottem.html*tblish.dataset.nottemHhtml/tblish_002edataset_002enpk.html$tblish.dataset.npkfhtml/tblish_002edataset_002eoccupationalStatus.htmlBtblish.dataset.occupationalStatusNhtml/tblish_002edataset_002eOrange.html*tblish.dataset.Orange\html/tblish_002edataset_002eOrchardSprays.html8tblish.dataset.OrchardSpraysXhtml/tblish_002edataset_002ePlantGrowth.html4tblish.dataset.PlantGrowthNhtml/tblish_002edataset_002eprecip.html*tblish.dataset.precipVhtml/tblish_002edataset_002epresidents.html2tblish.dataset.presidentsRhtml/tblish_002edataset_002epressure.html.tblish.dataset.pressureThtml/tblish_002edataset_002ePuromycin.html0tblish.dataset.PuromycinNhtml/tblish_002edataset_002equakes.html*tblish.dataset.quakesLhtml/tblish_002edataset_002erandu.html(tblish.dataset.randuNhtml/tblish_002edataset_002erivers.html*tblish.dataset.riversJhtml/tblish_002edataset_002erock.html&tblish.dataset.rockLhtml/tblish_002edataset_002esleep.html(tblish.dataset.sleepThtml/tblish_002edataset_002estackloss.html0tblish.dataset.stacklossLhtml/tblish_002edataset_002estate.html(tblish.dataset.statedhtml/tblish_002edataset_002esunspot_005fmonth.html8tblish.dataset.sunspot_monthbhtml/tblish_002edataset_002esunspot_005fyear.html6tblish.dataset.sunspot_yearRhtml/tblish_002edataset_002esunspots.html.tblish.dataset.sunspotsLhtml/tblish_002edataset_002eswiss.html(tblish.dataset.swissNhtml/tblish_002edataset_002eTheoph.html*tblish.dataset.TheophPhtml/tblish_002edataset_002eTitanic.html,tblish.dataset.TitanicXhtml/tblish_002edataset_002eToothGrowth.html4tblish.dataset.ToothGrowthRhtml/tblish_002edataset_002etreering.html.tblish.dataset.treeringLhtml/tblish_002edataset_002etrees.html(tblish.dataset.trees\html/tblish_002edataset_002eUCBAdmissions.html8tblish.dataset.UCBAdmissions^html/tblish_002edataset_002eUKDriverDeaths.html:tblish.dataset.UKDriverDeathsLhtml/tblish_002edataset_002eUKgas.html(tblish.dataset.UKgasZhtml/tblish_002edataset_002eUKLungDeaths.html6tblish.dataset.UKLungDeathsXhtml/tblish_002edataset_002eUSAccDeaths.html4tblish.dataset.USAccDeathsThtml/tblish_002edataset_002eUSArrests.html0tblish.dataset.USArrests^html/tblish_002edataset_002eUSJudgeRatings.html:tblish.dataset.USJudgeRatingslhtml/tblish_002edataset_002eUSPersonalExpenditure.htmlHtblish.dataset.USPersonalExpenditureLhtml/tblish_002edataset_002euspop.html(tblish.dataset.uspopRhtml/tblish_002edataset_002eVADeaths.html.tblish.dataset.VADeathsPhtml/tblish_002edataset_002evolcano.html,tblish.dataset.volcanoVhtml/tblish_002edataset_002ewarpbreaks.html2tblish.dataset.warpbreaksLhtml/tblish_002edataset_002ewomen.html(tblish.dataset.womenXhtml/tblish_002edataset_002eWorldPhones.html4tblish.dataset.WorldPhonesRhtml/tblish_002edataset_002eWWWusage.html.tblish.dataset.WWWusageJhtml/tblish_002edataset_002ezCO2.html&tblish.dataset.zCO2:html/tblish_002edatasets.htmltblish.datasetsDhtml/datasets_002edescription.html(datasets.description6html/datasets_002elist.htmldatasets.list6html/datasets_002eload.htmldatasets.loadLhtml/tblish_002eevalWithTableVars.html0tblish.evalWithTableVarsPhtml/tblish_002eexamples_002ecoplot.html,tblish.examples.coplot`html/tblish_002eexamples_002eplot_005fpairs.html4tblish.examples.plot_pairsLhtml/tblish_002eexamples_002eSpDb.html(tblish.examples.SpDb8html/tblish_002esizeof2.htmltblish.sizeof2Nhtml/tblish_002etable_002egrpstats.html*tblish.table.grpstats&html/timezones.htmltimezones(html/todatetime.htmltodatetime"html/vartype.htmlvartype html/vecfun.html vecfunhtml/years.html years"html/Copying.htmlCopyingtablicious.html2Entire Manual in One Pageapjanke-octave-tablicious-8a1b10f/doc/tablicious.qhcp000066400000000000000000000006021515050116100227130ustar00rootroot00000000000000 tablicious.qhp Tablicious.qch Tablicious.qch apjanke-octave-tablicious-8a1b10f/doc/tablicious.qhp000066400000000000000000003151321515050116100225570ustar00rootroot00000000000000 octave.community.tablicious doc
    tablicious.html html/Copying.html html/years.html html/vecfun.html html/vartype.html html/todatetime.html html/timezones.html html/tblish_002etable_002egrpstats.html html/tblish_002esizeof2.html html/tblish_002eexamples_002eSpDb.html html/tblish_002eexamples_002eplot_005fpairs.html html/tblish_002eexamples_002ecoplot.html html/tblish_002eevalWithTableVars.html html/datasets_002eload.html html/datasets_002elist.html html/datasets_002edescription.html html/tblish_002edatasets.html html/tblish_002edataset_002ezCO2.html html/tblish_002edataset_002eWWWusage.html html/tblish_002edataset_002eWorldPhones.html html/tblish_002edataset_002ewomen.html html/tblish_002edataset_002ewarpbreaks.html html/tblish_002edataset_002evolcano.html html/tblish_002edataset_002eVADeaths.html html/tblish_002edataset_002euspop.html html/tblish_002edataset_002eUSPersonalExpenditure.html html/tblish_002edataset_002eUSJudgeRatings.html html/tblish_002edataset_002eUSArrests.html html/tblish_002edataset_002eUSAccDeaths.html html/tblish_002edataset_002eUKLungDeaths.html html/tblish_002edataset_002eUKgas.html html/tblish_002edataset_002eUKDriverDeaths.html html/tblish_002edataset_002eUCBAdmissions.html html/tblish_002edataset_002etrees.html html/tblish_002edataset_002etreering.html html/tblish_002edataset_002eToothGrowth.html html/tblish_002edataset_002eTitanic.html html/tblish_002edataset_002eTheoph.html html/tblish_002edataset_002eswiss.html html/tblish_002edataset_002esunspots.html html/tblish_002edataset_002esunspot_005fyear.html html/tblish_002edataset_002esunspot_005fmonth.html html/tblish_002edataset_002estate.html html/tblish_002edataset_002estackloss.html html/tblish_002edataset_002esleep.html html/tblish_002edataset_002erock.html html/tblish_002edataset_002erivers.html html/tblish_002edataset_002erandu.html html/tblish_002edataset_002equakes.html html/tblish_002edataset_002ePuromycin.html html/tblish_002edataset_002epressure.html html/tblish_002edataset_002epresidents.html html/tblish_002edataset_002eprecip.html html/tblish_002edataset_002ePlantGrowth.html html/tblish_002edataset_002eOrchardSprays.html html/tblish_002edataset_002eOrange.html html/tblish_002edataset_002eoccupationalStatus.html html/tblish_002edataset_002enpk.html html/tblish_002edataset_002enottem.html html/tblish_002edataset_002eNile.html html/tblish_002edataset_002enhtemp.html html/tblish_002edataset_002emtcars.html html/tblish_002edataset_002emorley.html html/tblish_002edataset_002elynx.html html/tblish_002edataset_002elongley.html html/tblish_002edataset_002eLoblolly.html html/tblish_002edataset_002eLifeCycleSavings.html html/tblish_002edataset_002elh.html html/tblish_002edataset_002eLakeHuron.html html/tblish_002edataset_002eJohnsonJohnson.html html/tblish_002edataset_002eislands.html html/tblish_002edataset_002eiris.html html/tblish_002edataset_002eInsectSprays.html html/tblish_002edataset_002einfert.html html/tblish_002edataset_002eIndometh.html html/tblish_002edataset_002eHarman74cor.html html/tblish_002edataset_002eHarman23cor.html html/tblish_002edataset_002eHairEyeColor.html html/tblish_002edataset_002efreeny.html html/tblish_002edataset_002eFormaldehyde.html html/tblish_002edataset_002efaithful.html html/tblish_002edataset_002eEuStockMarkets.html html/tblish_002edataset_002eeurodist.html html/tblish_002edataset_002eeuro.html html/tblish_002edataset_002eesoph.html html/tblish_002edataset_002eDNase.html html/tblish_002edataset_002ediscoveries.html html/tblish_002edataset_002ecupcake.html html/tblish_002edataset_002ecrimtab.html html/tblish_002edataset_002eco2.html html/tblish_002edataset_002echickwts.html html/tblish_002edataset_002eChickWeight.html html/tblish_002edataset_002ecars.html html/tblish_002edataset_002eBOD.html html/tblish_002edataset_002eBJsales.html html/tblish_002edataset_002ebeavers.html html/tblish_002edataset_002eaustres.html html/tblish_002edataset_002eattitude.html html/tblish_002edataset_002eattenu.html html/tblish_002edataset_002eanscombe.html html/tblish_002edataset_002eairquality.html html/tblish_002edataset_002eAirPassengers.html html/tblish_002edataset_002eairmiles.html html/tblish_002edataset.html html/tail.html html/tableOuterFillValue.html html/table_002ewidth.html html/table_002evertcat.html html/table_002evarnames.html html/table_002evarfun.html html/table_002eunion.html html/table_002etable2struct.html html/table_002etable2cell.html html/table_002etable2array.html html/table_002etable.html html/table_002esummary.html html/table_002estack.html html/table_002esqueeze.html html/table_002esplitvars.html html/table_002esplitapply.html html/table_002esize.html html/table_002esetxor.html html/table_002esetVariableNames.html html/table_002esetvar.html html/table_002esetRowNames.html html/table_002esetDimensionNames.html html/table_002esetdiff.html html/table_002esemijoin.html html/table_002erows2vars.html html/table_002erowfun.html html/table_002erestrict.html html/table_002erepmat.html html/table_002erepelem.html html/table_002erenamevars.html html/table_002eremovevars.html html/table_002erealjoin.html html/table_002eprettyprint.html html/table_002eouterjoin.html html/table_002eouterfillvals.html html/table_002enumel.html html/table_002endims.html html/table_002emovevars.html html/table_002emergevars.html html/table_002ejoin.html html/table_002eistable.html html/table_002eismissing.html html/table_002eismember.html html/table_002eisempty.html html/table_002eintersect.html html/table_002einnerjoin.html html/table_002ehorzcat.html html/table_002eheight.html html/table_002egroupby.html html/table_002egetvars.html html/table_002egetvar.html html/table_002efindgroups.html html/table_002econvertvars.html html/table_002ecartesian.html html/table_002eantijoin.html html/table_002eaddvars.html html/table.html html/struct2table.html html/string_002eupper.html html/string_002estrrep.html html/string_002estrlength_005fbytes.html html/string_002estrlength.html html/string_002estring.html html/string_002estrfind.html html/string_002estrcmp.html html/string_002estrcat.html html/string_002estartsWith.html html/string_002ereverse_005fbytes.html html/string_002ereverse.html html/string_002eregexprep.html html/string_002eplus.html html/string_002emissing.html html/string_002elower.html html/string_002eisstring.html html/string_002eisnanny.html html/string_002eismissing.html html/string_002eerase.html html/string_002eendsWith.html html/string_002eencode.html html/string_002eempty.html html/string_002edispstrs.html html/string_002edecode.html html/string_002ecmp.html html/string_002echar.html html/string_002ecellstr.html html/string_002ecell.html html/string.html html/splitapply.html html/size2str.html html/seconds.html html/scalarexpand.html html/pp.html html/NaT.html html/NaS.html html/NaC.html html/mustBeVector.html html/mustBeScalarLogical.html html/mustBeScalar.html html/mustBeSameSize.html html/mustBeReal.html html/mustBeNumeric.html html/mustBeNonempty.html html/mustBeMember.html html/mustBeInteger.html html/mustBeFinite.html html/mustBeCharvec.html html/mustBeCellstr.html html/mustBeA.html html/missing_002emissing.html html/missing_002eisnanny.html html/missing_002eisnan.html html/missing_002eismissing.html html/missing_002edispstrs.html html/missing.html html/minutes.html html/milliseconds.html html/localdate_002eymd.html html/localdate_002eposixtime.html html/localdate_002eNaT.html html/localdate_002elocaldate.html html/localdate_002eisnat.html html/localdate_002eisnan.html html/localdate_002edispstrs.html html/localdate_002edatestruct.html html/localdate_002edatestrs.html html/localdate_002edatestr.html html/localdate_002edatenum.html html/localdate.html html/istimetable.html html/istabular.html html/istable.html html/isnanny.html html/isfolder.html html/isfile.html html/isduration.html html/isdatetime.html html/iscategorical.html html/iscalendarduration.html html/hours.html html/head.html html/eqn.html html/duration_002eyears.html html/duration_002eseconds.html html/duration_002eofDays.html html/duration_002eminutes.html html/duration_002emilliseconds.html html/duration_002elinspace.html html/duration_002ehours.html html/duration_002ehms.html html/duration_002edispstrs.html html/duration_002edatevec.html html/duration_002echar.html html/duration.html html/dispstrs.html html/discretize.html html/days.html html/datetime_002eymdhms.html html/datetime_002eymd.html html/datetime_002eweek.html html/datetime_002etimeofday.html html/datetime_002eproxyKeys.html html/datetime_002eposixtime.html html/datetime_002eposix2datenum.html html/datetime_002eplus.html html/datetime_002eofDatestruct.html html/datetime_002eofDatenum.html html/datetime_002ene.html html/datetime_002eNaT.html html/datetime_002eminus.html html/datetime_002elt.html html/datetime_002elocaltime.html html/datetime_002elinspace.html html/datetime_002ele.html html/datetime_002eisnat.html html/datetime_002eisnan.html html/datetime_002eismissing.html html/datetime_002eisbetween.html html/datetime_002ehms.html html/datetime_002egt.html html/datetime_002egmtime.html html/datetime_002ege.html html/datetime_002eeq.html html/datetime_002edispstrs.html html/datetime_002ediff.html html/datetime_002edatevec.html html/datetime_002edatetime.html html/datetime_002edatestruct.html html/datetime_002edatestrs.html html/datetime_002edatestr.html html/datetime_002edatenum2posix.html html/datetime_002edatenum.html html/datetime_002econvertDatenumTimeZone.html html/datetime_002ecolon.html html/datetime.html html/contains.html html/colvecfun.html html/cell2table.html html/categorical_002eundefined.html html/categorical_002esummary.html html/categorical_002estring.html html/categorical_002esqueezecats.html html/categorical_002esetcats.html html/categorical_002ereordercats.html html/categorical_002erenamecats.html html/categorical_002eremovecats.html html/categorical_002emissing.html html/categorical_002emergecats.html html/categorical_002eisundefined.html html/categorical_002eisordinal.html html/categorical_002eisnanny.html html/categorical_002eismissing.html html/categorical_002eiscategory.html html/categorical_002edouble.html html/categorical_002edispstrs.html html/categorical_002ecellstr.html html/categorical_002ecategories.html html/categorical_002ecategorical.html html/categorical_002eaddcats.html html/categorical.html html/calyears.html html/calmonths.html html/calendarDuration_002euminus.html html/calendarDuration_002etimes.html html/calendarDuration_002eplus.html html/calendarDuration_002emtimes.html html/calendarDuration_002eminus.html html/calendarDuration_002eisnan.html html/calendarDuration_002eismissing.html html/calendarDuration_002edispstrs.html html/calendarDuration_002edatevec.html html/calendarDuration_002ecalendarDuration.html html/calendarDuration.html html/caldays.html html/array2table.html html/API-Alphabetically.html html/API-by-Category.html html/API-Reference.html html/Missing-Functionality.html html/Data-Sets-from-R.html html/Example-Data-Sets.html html/Validation-Functions.html html/calendarDuration-Class.html html/duration-Class.html html/Durations.html html/Defined-Time-Zones.html html/Time-Zones.html html/Datenum-Compatibility.html html/datetime-Class.html html/Date-and-Time-Representation.html html/Tables-vs-SQL.html html/Table-Construction.html html/Table-Representation.html html/Getting-Started.html html/Introduction.html html/index.html apjanke-octave-tablicious-8a1b10f/doc/tablicious.texi000066400000000000000000010053101515050116100227330ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @set VERSION 0.4.7 @setfilename tablicious.info @settitle Tablicious v@value{VERSION} @documentencoding UTF-8 @c %**end of header @copying This manual is for Tablicious, version @value{VERSION}. Copyright @copyright{} 2019, 2023, 2024, 2025, 2026 Andrew Janke @quotation Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions. @end quotation @end copying @documentdescription User manual for Tablicious for Octave. @end documentdescription @titlepage @title Tablicious for GNU Octave @subtitle version @value{VERSION}, February 2026 @author Andrew Janke @page @vskip 0pt plus 1filll @insertcopying @end titlepage @dircategory Math @direntry * Tablicious: (tablicious). Tablicious package for Octave @end direntry @shortcontents @contents @ifnottex @node Top, Introduction @top Tablicious for GNU Octave This manual is for Tablicious, version @value{VERSION}. @end ifnottex @menu * Introduction:: * Getting Started:: * Table Representation:: * Date and Time Representation:: * Validation Functions:: * Example Data Sets:: * Data Sets from R:: * Missing Functionality:: * API Reference:: * Copying:: @end menu @node Introduction @chapter Introduction @quotation Time is an illusion. Lunchtime doubly so. @author Douglas Adams @end quotation This is the manual for the Tablicious package version @value{VERSION} for GNU Octave. Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a @code{table} class with support for filtering and join operations; @code{datetime}, @code{duration}, and related classes; Missing Data support; @code{string} and @code{categorical} data types; and other miscellaneous things. This document is a work in progress. You are invited to help improve it and submit patches. Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types. Tablicious was written by Andrew Janke <@email{floss@@apjanke.net}>. Support can be found on the @url{https://github.com/apjanke/octave-tablicious, Tablicious project GitHub page}. @node Getting Started @chapter Getting Started The easiest way to obtain Tablicious is by using Octave's @code{pkg} package manager. To install the development prerelease of Tablicious, run this in Octave: @example pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz @end example (Check the releases page at @url{https://github.com/apjanke/octave-tablicious/releases} to find out what the actual latest release number is.) For development, you can obtain the source code for Tablicious from the project repo on GitHub at @url{https://github.com/apjanke/octave-tablicious}. Make a local clone of the repo. Then add the @file{inst} directory in the repo to your Octave path. @node Table Representation @chapter Table Representation Tablicious provides the @code{table} class for representing tabular data. A @code{table} is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records. A @code{table} is composed of multiple “variables”, each with a name, which all have the same number of rows. (A @code{table} variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the @var{i}-th element or row of each variable compose a single record or observation. Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a @code{table} is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way. Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using @code{table} arrays. It’s like having your own in-memory SQL engine. @node Table Construction @section Table Construction There are two main ways to construct a @code{table} array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a @code{table}. To build an array from multiple variables, use the @code{table(@dots{})} constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new @code{table} object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the @code{'VariableNames'} option. To convert a tabular-organized array of another type into a @code{table}, use the conversion functions like @code{array2table}, @code{struct2table} and @code{cell2table}. @code{array2table} and @code{cell2table} take each column of the input array and turn it into a separate table variable in the resulting @code{table}. @code{struct2table} takes the fields of a struct and puts them into table variables. @node Tables vs SQL @section Tables vs SQL Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave @code{table} operations. In this table, @code{t} is a variable holding a @code{table} array, and @code{ix} is some indexing expression. @multitable @columnfractions .33 .33 .33 @headitem SQL @tab Relational @tab Octave @code{table} @item SELECT @tab PROJECT @tab @code{subsetvars}, @code{t(:,ix)} @item WHERE @tab RESTRICT @tab @code{subsetrows}, @code{t(ix,:)} @item INNER JOIN @tab JOIN @tab @code{innerjoin} @item OUTER JOIN @tab OUTER JOIN @tab @code{outerjoin} @item FROM @code{@var{table1}, @var{table2}, @dots{}} @tab Cartesian product @tab @code{cartesian} @item GROUP BY @tab SUMMARIZE @tab @code{groupby} @item DISTINCT @tab (automatic) @tab @code{unique(t)} @end multitable Note that there is one big difference between relational algebra and SQL & Octave @code{table}: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit @code{DISTINCT}/@code{unique()} on its results, and there‘s no @code{ORDER BY}/@code{sort()}. This is not the case in SQL or Octave @code{table}. Note for users coming from Matlab: Matlab does not provide a general @code{groupby} function. Instead, you have to variously use @code{rowfun}, @code{grpstats}, @code{groupsummary}, and manual code to accomplish “group by” operations. Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke @node Date and Time Representation @chapter Date and Time Representation Tablicious provides the @code{datetime} class for representing points in time. There’s also @code{duration} and @code{calendarDuration} for representing periods or durations of time. Like vector quantities along the time line, as opposed to @code{datetime} being a point along the time line. @node datetime Class @section @code{datetime} Class A @code{datetime} is an array object that represents points in time in the familiar Gregorian calendar. This is an attempt to reproduce the functionality of Matlab's @code{datetime}. It also contains some Octave-specific extensions. The underlying representation is that of a datenum (a @code{double} containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a @code{datetime} inclues an optional @code{TimeZone} property indicating what time zone the datetimes are in. So, basically, a @code{datetime} is an object wrapper around a datenum array, plus time zone support. @menu * Datenum Compatibility:: @end menu @node Datenum Compatibility @subsection Datenum Compatibility While the underlying data representation of @code{datetime} is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations. This is because of the signature of the @code{datetime} constructor. When combining objects and primitive types like @code{double}, the primitive type is promoted to an object by calling the other object's one-argument constructor on it. However, the one-argument numeric-input consstructor for @code{datetime} does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab's part; for compatibility, Octave does not alter that interface. To combine @code{datetime}s with datenums, you can convert the datenums to @code{datetime}s by calling @code{datetime.ofDatenum} or @code{datetime(x, 'ConvertFrom', 'datenum')}, or you can convert the @code{datetime}s to datenums by accessing its @code{dnums} field with @code{x.dnums}. Examples: @example dt = datetime('2011-03-04') dn = datenum('2017-01-01') [dt dn] @result{} error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND] [dt datetime.ofDatenum(dn)] @result{} 04-Mar-2011 01-Jan-2017 @end example Also, if you have a zoned @code{datetime}, you can’t combine it with a datenum, because datenums do not carry time zone information. @node Time Zones @section Time Zones Tablicious has support for representing dates in time zones and for converting between time zones. A @code{datetime} may be "zoned" or "zoneless". A zoneless @code{datetime} does not have a time zone associated with it. This is represented by an empty @code{TimeZone} property on the @code{datetime} object. A zoneless @code{datetime} represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts). A zoned @code{datetime} is associated with a time zone. It is represented by having the time zone's IANA zone identifier (e.g. @code{'UTC'} or @code{'America/New_York'}) in its @code{TimeZone} property. A zoned @code{datetime} represents the local time in that time zone. By default, the @code{datetime} constructor creates unzoned @code{datetime}s. To make a zoned @code{datetime}, either pass the @code{'TimeZone'} option to the constructor, or set the @code{TimeZone} property after object creation. Setting the @code{TimeZone} property on a zoneless @code{datetime} declares that it's a local time in that time zone. Setting the @code{TimeZone} property on a zoned @code{datetime} turns it back into a zoneless @code{datetime} without changing the local time it represents. You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned @code{datetime}s. @example % Create an unzoned datetime d = datetime('2011-03-04 06:00:00') @result{} 04-Mar-2011 06:00:00 % Create a zoned datetime d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York') @result{} 04-Mar-2011 06:00:00 America/New_York % This is equivalent d_ny = datetime('2011-03-04 06:00:00'); d_ny.TimeZone = 'America/New_York' @result{} 04-Mar-2011 06:00:00 America/New_York % Convert it to Chicago time d_chi.TimeZone = 'America/Chicago' @result{} 04-Mar-2011 05:00:00 America/Chicago @end example When you combine two zoned @code{datetime}s via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input. @example d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York') d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles') d_la - d_ny @result{} 03:00:00 @end example You cannot combine a zoned and an unzoned @code{datetime}. This results in an error being raised. @quotation Warning Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined. @end quotation @menu * Defined Time Zones:: @end menu @node Defined Time Zones @subsection Defined Time Zones Tablicious's time zone data is drawn from the @uref{https://www.iana.org/time-zones, IANA Time Zone Database}, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do. You can use the @code{timezones} function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows). @quotation Note The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for @code{datetime}s outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.) @end quotation @node Durations @section Durations @menu * duration Class:: * calendarDuration Class:: @end menu @node duration Class @subsection @code{duration} Class A @code{duration} represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.) A @code{duration} has a resolution of about a nanosecond for typical dates. The underlying representation is a @code{double} representing the number of days elapsed, similar to a datenum, except it's interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch. You can add or subtract a @code{duration} to a @code{datetime} to get another @code{datetime}. You can also add or subtract @code{durations} to each other. @node calendarDuration Class @subsection @code{calendarDuration} Class A @code{calendarDuration} represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A @code{calendarDuration} does arithmetic with "whole" calendar periods. @code{calendarDuration}s and @code{duration}s cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow @code{duration}s to be interpreted as numbers of days when combined with @code{calendarDuration}s.) @example d = datetime('2011-03-04 00:00:00') @result{} 04-Mar-2011 cdur = calendarDuration(1, 3, 0) @result{} 1y 3mo d2 = d + cdur @result{} 04-Jun-2012 @end example @node Validation Functions @chapter Validation Functions Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs. These validation functions are named following the pattern @code{mustBeXxx}, where @code{Xxx} is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs. The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there. Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider. When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with @code{inputname()}, so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested. @example % Validation of a simple variable does not need a label mustBeScalar (x); % Validation of a field or property reference does need a label mustBeScalar (this.foo, 'this.foo'); @end example @node Example Data Sets @chapter Example Data Sets Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the @code{tblish.datasets} and @code{tblish.dataset} classes. To see a list of the available data sets, run @code{tblish.datasets.list()}. Then to load one of the example data sets, run @code{tblish.datasets.load('examplename')}. For example: @example tblish.datasets.list t = tblish.datasets.load('cupcake') @end example You can also load it by calling @code{tblish.dataset.}. This does the same thing. For example: @example t = tblish.dataset.cupcake @end example When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs). Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the @code{doc} command on @code{tblish.dataset.}, where @var{} is the name of the data set. For example: @example doc tblish.dataset.cupcake @end example (The command @code{help tblish.dataset.} ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s @code{help} command.) @node Data Sets from R @section Data Sets from R Many of Tablicious’ example data sets are based on the example datasets found in R’s @code{datasets} package. R can be found at @url{https://www.r-project.org/}, and documentation for its @code{datasets} is at @url{https://rdrr.io/r/datasets/datasets-package.html}. Thanks to the R developers for producing the original data sets here. Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another. Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code. @node Missing Functionality @chapter Missing Functionality Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently: @itemize @item File I/O like @code{readtable()} and @code{writetable()} @item @code{summary()} @code{categorical} @item Assignment to table variables using @code{.}-indexing @item @code{timetable} @item POSIX time zone support for years outside the IANA time zone database coverage @item Week-of-year (ISO calendar) calculations @item Various @code{'ConvertFrom'} forms for @code{datetime} and @code{duration} constructors @item Support for LDML formatting for @code{datetime} @item Various functions: @itemize @item @code{between} @item @code{caldiff} @item @code{dateshift} @item @code{week} @end itemize @item @code{isdst}, @code{isweekend} @item @code{calendarDuration.split} @item @code{duration.Format} support @item Moving window methods in @code{fillmissing} @item @code{UTCOffset} and @code{DSTOffset} fields in the output of @code{timezones()} @item Plotting support @item Things omitted for compatibility: @itemize @item @code{ismissing} function @end itemize @end itemize A global @code{ismissing} function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. @code{ismissing} methods for various classes in Tablicious are defined. Tablicious also supplies an @code{isnanny} function with behavior similar to @code{ismissing} for clients which which wish to have @code{ismissing}-like behavior using a dependency only on Tablicious. It is the author’s hope that many of these will be implemented some day. These areas of missing functionality are tracked on the Tablicious issue tracker at @url{https://github.com/apjanke/octave-tablicious/issues} and @url{https://github.com/users/apjanke/projects/3}. @node API Reference @chapter API Reference @node API by Category @section API by Category @subsection Tables @table @asis @item table Tabular data array containing multiple columnar variables. @xref{table}. @item array2table Convert an array to a table. @xref{array2table}. @item cell2table Convert a cell array to a table. @xref{cell2table}. @item struct2table Convert struct to a table. @xref{struct2table}. @item tableOuterFillValue @xref{tableOuterFillValue}. @item vartype Filter by variable type for use in suscripting. @xref{vartype}. @item istable True if input is a ‘table’ array or other table-like type, false otherwise. @xref{istable}. @item istimetable True if input is a ‘timetable’ array or other timetable-like type, false otherwise. @xref{istimetable}. @item istabular True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them. @xref{istabular}. @item tblish.evalWithTableVars Evaluate an expression against a table array’s variables. @xref{tblish.evalWithTableVars}. @item tblish.table.grpstats Statistics by group for a table array. @xref{tblish.table.grpstats}. @end table @subsection Strings and Categoricals @table @asis @item string A string array of Unicode strings. @xref{string}. @item NaS “Not-a-String". @xref{NaS}. @item contains Test if strings contain a pattern. @xref{contains}. @item dispstrs Display strings for array. @xref{dispstrs}. @item categorical Categorical variable array. @xref{categorical}. @item iscategorical True if input is a ‘categorical’ array, false otherwise. @xref{iscategorical}. @item NaC “Not-a-Categorical". @xref{NaC}. @item discretize Group data into discrete bins or categories. @xref{discretize}. @end table @subsection Dates and Times @table @asis @item datetime Represents points in time using the Gregorian calendar. @xref{datetime}. @item NaT “Not-a-Time”. @xref{NaT}. @item todatetime Convert input to a Tablicious datetime array, with convenient interface. @xref{todatetime}. @item localdate Represents a complete day using the Gregorian calendar. @xref{localdate}. @item isdatetime True if input is a ‘datetime’ array, false otherwise. @xref{isdatetime}. @item calendarDuration Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. @xref{calendarDuration}. @item iscalendarduration True if input is a ‘calendarDuration’ array, false otherwise. @xref{iscalendarduration}. @item calmonths Create a ‘calendarDuration’ that is a given number of calendar months long. @xref{calmonths}. @item calyears Construct a ‘calendarDuration’ a given number of years long. @xref{calyears}. @item days Duration in days. @xref{days}. @item duration Represents durations or periods of time as an amount of fixed-length time (i.e. @xref{duration}. @item hours Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. @xref{hours}. @item isduration True if input is a ‘duration’ array, false otherwise. @xref{isduration}. @item milliseconds Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X. @xref{milliseconds}. @item minutes Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. @xref{minutes}. @item seconds Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X. @xref{seconds}. @item timezones List all the time zones defined on this system. @xref{timezones}. @item years Create a ‘duration’ X years long, or get the years in a ‘duration’ X. @xref{years}. @end table @subsection Missing Data @table @asis @item missing Generic auto-converting missing value. @xref{missing}. @item isnanny Test if elements are NaN or NaN-like. @xref{isnanny}. @item eqn Determine element-wise equality, treating NaNs as equal @xref{eqn}. @end table @subsection Validation Functions @table @asis @item mustBeA @xref{mustBeA}. @item mustBeCellstr @xref{mustBeCellstr}. @item mustBeCharvec @xref{mustBeCharvec}. @item mustBeFinite @xref{mustBeFinite}. @item mustBeInteger @xref{mustBeInteger}. @item mustBeMember @xref{mustBeMember}. @item mustBeNonempty @xref{mustBeNonempty}. @item mustBeNumeric @xref{mustBeNumeric}. @item mustBeReal @xref{mustBeReal}. @item mustBeSameSize @xref{mustBeSameSize}. @item mustBeScalar @xref{mustBeScalar}. @item mustBeScalarLogical @xref{mustBeScalarLogical}. @item mustBeVector @xref{mustBeVector}. @end table @subsection Miscellaneous @table @asis @item colvecfun Apply a function to column vectors in array. @xref{colvecfun}. @item dispstrs Display strings for array. @xref{dispstrs}. @item head Get first K rows of an array. @xref{head}. @item isfile @xref{isfile}. @item isfolder @xref{isfolder}. @item pp Alias for prettyprint, for interactive use. @xref{pp}. @item scalarexpand Expand scalar inputs to match size of non-scalar inputs. @xref{scalarexpand}. @item size2str Format an array size for display. @xref{size2str}. @item splitapply Split data into groups and apply function. @xref{splitapply}. @item tail Get last K rows of an array. @xref{tail}. @item vecfun Apply function to vectors in array along arbitrary dimension. @xref{vecfun}. @item tblish.sizeof2 Approximate size of an array in bytes, with object support. @xref{tblish.sizeof2}. @end table @subsection Example Datasets @table @asis @item tblish.datasets Example dataset collection. @xref{tblish.datasets}. @item tblish.dataset The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious. @xref{tblish.dataset}. @end table @subsection Example Code @table @asis @item tblish.examples.coplot Conditioning plot. @xref{tblish.examples.coplot}. @item tblish.examples.plot_pairs Plot pairs of variables against each other. @xref{tblish.examples.plot_pairs}. @item tblish.examples.SpDb The classic Suppliers-Parts example database. @xref{tblish.examples.SpDb}. @end table @subsection Uncategorized @table @asis @item caldays Create a ‘calendarDuration’ that is a given number of calendar days long. @xref{caldays}. @end table @node API Alphabetically @section API Alphabetically @menu * array2table:: Convert an array to a table. * caldays:: Create a ‘calendarDuration’ that is a given number of calendar days long. * calendarDuration:: Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. * calmonths:: Create a ‘calendarDuration’ that is a given number of calendar months long. * calyears:: Construct a ‘calendarDuration’ a given number of years long. * categorical:: Categorical variable array. * cell2table:: Convert a cell array to a table. * colvecfun:: Apply a function to column vectors in array. * contains:: Test if strings contain a pattern. * datetime:: Represents points in time using the Gregorian calendar. * days:: Duration in days. * discretize:: Group data into discrete bins or categories. * dispstrs:: Display strings for array. * duration:: Represents durations or periods of time as an amount of fixed-length time (i.e. * eqn:: Determine element-wise equality, treating NaNs as equal * head:: Get first K rows of an array. * hours:: Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. * iscalendarduration:: True if input is a ‘calendarDuration’ array, false otherwise. * iscategorical:: True if input is a ‘categorical’ array, false otherwise. * isdatetime:: True if input is a ‘datetime’ array, false otherwise. * isduration:: True if input is a ‘duration’ array, false otherwise. * isfile:: * isfolder:: * isnanny:: Test if elements are NaN or NaN-like. * istable:: True if input is a ‘table’ array or other table-like type, false otherwise. * istabular:: True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them. * istimetable:: True if input is a ‘timetable’ array or other timetable-like type, false otherwise. * localdate:: Represents a complete day using the Gregorian calendar. * milliseconds:: Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X. * minutes:: Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X. * missing:: Generic auto-converting missing value. * mustBeA:: * mustBeCellstr:: * mustBeCharvec:: * mustBeFinite:: * mustBeInteger:: * mustBeMember:: * mustBeNonempty:: * mustBeNumeric:: * mustBeReal:: * mustBeSameSize:: * mustBeScalar:: * mustBeScalarLogical:: * mustBeVector:: * NaC:: “Not-a-Categorical". * NaS:: “Not-a-String". * NaT:: “Not-a-Time”. * pp:: Alias for prettyprint, for interactive use. * scalarexpand:: Expand scalar inputs to match size of non-scalar inputs. * seconds:: Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X. * size2str:: Format an array size for display. * splitapply:: Split data into groups and apply function. * string:: A string array of Unicode strings. * struct2table:: Convert struct to a table. * table:: Tabular data array containing multiple columnar variables. * tableOuterFillValue:: * tail:: Get last K rows of an array. * tblish.dataset:: The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious. * tblish.datasets:: Example dataset collection. * tblish.evalWithTableVars:: Evaluate an expression against a table array’s variables. * tblish.examples.coplot:: Conditioning plot. * tblish.examples.plot_pairs:: Plot pairs of variables against each other. * tblish.examples.SpDb:: The classic Suppliers-Parts example database. * tblish.sizeof2:: Approximate size of an array in bytes, with object support. * tblish.table.grpstats:: Statistics by group for a table array. * timezones:: List all the time zones defined on this system. * todatetime:: Convert input to a Tablicious datetime array, with convenient interface. * vartype:: Filter by variable type for use in suscripting. * vecfun:: Apply function to vectors in array along arbitrary dimension. * years:: Create a ‘duration’ X years long, or get the years in a ‘duration’ X. @end menu @node array2table @subsection array2table @deftypefn {Function} {@var{out} =} array2table (@var{c}) @deftypefnx {Function} {@var{out} =} array2table (@dots{}, @code{'VariableNames'}, @var{VariableNames}) @deftypefnx {Function} {@var{out} =} array2table (@dots{}, @code{'RowNames'}, @var{RowNames}) Convert an array to a table. Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array. You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use @code{cell2table} instead, columns of the cell array which can be condensed into primitive arrays will be. With @code{array2table}, they won't be. See also: @ref{cell2table}, @ref{table}, @ref{struct2table} @end deftypefn @node caldays @subsection caldays @deftypefn {Function File} {@var{out} =} caldays (@var{x}) Create a @code{calendarDuration} that is a given number of calendar days long. Input @var{x} is a numeric array specifying the number of calendar days. This is a shorthand alternative to calling the @code{calendarDuration} constructor with @code{calendarDuration(0, 0, x)}. Returns a new @code{calendarDuration} object of the same size as @var{x}. @xref{calendarDuration}. @end deftypefn @node calendarDuration @subsection calendarDuration @deftp {Class} calendarDuration Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.) @end deftp @deftypeivar calendarDuration @code{char} Format The format to display this @code{calendarDuration} in. Currently unsupported. This is a single value that applies to the whole array. @end deftypeivar @node calendarDuration.calendarDuration @subsubsection calendarDuration.calendarDuration @deftypefn {Constructor} {@var{obj} =} calendarDuration () Constructs a new scalar @code{calendarDuration} of zero elapsed time. @end deftypefn @deftypefn {Constructor} {@var{obj} =} calendarDuration (@var{Y}, @var{M}, @var{D}) @deftypefnx {Constructor} {@var{obj} =} calendarDuration (@var{Y}, @var{M}, @ @var{D}, @var{H}, @var{MI}, @var{S}) Constructs new @code{calendarDuration} arrays based on input values. @end deftypefn @node calendarDuration.datevec @subsubsection calendarDuration.datevec @deftypefn {Method} {[@var{dvec}] =} datevec (@var{obj}) @deftypefnx {Method} {[@var{Y}, @var{M}, @var{D}, @var{H}, @var{MN}, @var{S}] =} datevec (@var{obj}) Convert a @code{calendarDuration} to a datevec whose elements represent its components of. The components are the year, month, day, hour, minute, and second quantities of this @code{calendarDuration}. When nargout is 0 or 1, returns a double array of size n-by-6, where n is @code{numel(obj)}. When nargout is 2 or more, returns double arrays the same size as @var{obj}. @end deftypefn @node calendarDuration.dispstrs @subsubsection calendarDuration.dispstrs @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) Get display strings for each element of @var{obj}. Returns a cellstr the same size as @var{obj}. @end deftypefn @node calendarDuration.ismissing @subsubsection calendarDuration.ismissing @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) True if input elements are missing. This is equivalent to @code{ismissing}. Returns logical array the same size as @var{obj}. @end deftypefn @node calendarDuration.isnan @subsubsection calendarDuration.isnan @deftypefn {Method} {@var{out} =} isnan (@var{obj}) True if input elements are NaN. This is equivalent to @code{ismissing}, and is provided for compatibility and polymorphic programming purposes. Returns logical array the same size as @var{obj}. @end deftypefn @node calendarDuration.minus @subsubsection calendarDuration.minus @deftypefn {Method} {@var{out} =} times (@var{A}, @var{B}) Subtraction: Subtracts one @code{calendarDuration} from another. Returns a @code{calendarDuration}. @end deftypefn @node calendarDuration.mtimes @subsubsection calendarDuration.mtimes @deftypefn {Method} {@var{out} =} times (@var{obj}, @var{B}) Multiplication: Multiplies a @code{calendarDuration} by a numeric factor. This does not do true matrix multiplication, so at least one of the input arguments must be scalar. Returns a @code{calendarDuration}. @end deftypefn @node calendarDuration.plus @subsubsection calendarDuration.plus @deftypefn {Method} {@var{out} =} plus (@var{obj}, @var{B}) Addition: add to a @code{calendarDuration}. All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs. @var{B} may be a @code{calendarDuration}, @code{duration}, or numeric. If @var{B} is numeric, it is converted to a @code{calendarDuration} using @code{caldays(B)}. Returns a @code{calendarDuration}. @end deftypefn @node calendarDuration.times @subsubsection calendarDuration.times @deftypefn {Method} {@var{out} =} times (@var{obj}, @var{B}) Multiplication: Multiplies a @code{calendarDuration} by a numeric factor @var{B}. Returns a @code{calendarDuration}. @end deftypefn @node calendarDuration.uminus @subsubsection calendarDuration.uminus @deftypefn {Method} {@var{out} =} uminus (@var{obj}) Unary minus. Negates the sign of @var{obj}, which is equivalent to negating each of its components. @end deftypefn @node calmonths @subsection calmonths @deftypefn {Function File} {@var{out} =} calmonths (@var{x}) Create a @code{calendarDuration} that is a given number of calendar months long. Input @var{x} is a numeric array specifying the number of calendar months. This is a shorthand alternative to calling the @code{calendarDuration} constructor with @code{calendarDuration(0, x, 0)}. Returns a new @code{calendarDuration} object of the same size as @var{x}. @xref{calendarDuration}. @end deftypefn @node calyears @subsection calyears @deftypefn {Function} {@var{out} =} calyears (@var{x}) Construct a @code{calendarDuration} a given number of years long. This is a shorthand for calling @code{calendarDuration(@var{x}, 0, 0)}. @xref{calendarDuration}. @end deftypefn @node categorical @subsection categorical @deftp {Class} categorical Categorical variable array. A @code{categorical} array represents an array of values of a categorical variable. Each @code{categorical} array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array). In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a @code{NaN} value. This class is not fully implemented yet. Missing stuff: @itemize @bullet @item gt, ge, lt, le @item Ordinal support in general @item countcats @item summary @end itemize @end deftp @deftypeivar categorical @code{uint16} code The numeric codes of the array element values. These are indexes into the @code{cats} category list. This is a planar property. @end deftypeivar @deftypeivar categorical @code{logical} tfMissing A logical mask indicating whether each element of the array is missing (that is, undefined). This is a planar property. @end deftypeivar @deftypeivar categorical @code{cellstr} cats The names of the categories in this array. This is the list into which the @code{code} values are indexes. @end deftypeivar @deftypeivar categorical @code{scalar_logical} isOrdinal A scalar logical indicating whether the categories in this array have an ordinal relationship. @end deftypeivar @node categorical.addcats @subsubsection categorical.addcats @deftypefn {Method} {@var{out} =} addcats (@var{obj}, @var{newcats}) Add categories to categorical array. Adds the specified categories to @var{obj}, without changing any of its values. @var{newcats} is a cellstr listing the category names to add to @var{obj}. @end deftypefn @node categorical.categorical @subsubsection categorical.categorical @deftypefn {Constructor} {@var{obj} =} categorical () Constructs a new scalar categorical whose value is undefined. @end deftypefn @deftypefn {Constructor} {@var{obj} =} categorical (@var{vals}) @deftypefnx {Constructor} {@var{obj} =} categorical (@var{vals}, @var{valueset}) @deftypefnx {Constructor} {@var{obj} =} categorical (@var{vals}, @var{valueset}, @var{category_names}) @deftypefnx {Constructor} {@var{obj} =} categorical (@dots{}, @code{'Ordinal'}, @var{Ordinal}) @deftypefnx {Constructor} {@var{obj} =} categorical (@dots{}, @code{'Protected'}, @var{Protected}) Constructs a new categorical array from the given values. @var{vals} is the array of values to convert to categoricals. @var{valueset} is the set of all values from which @var{vals} is drawn. If omitted, it defaults to the unique values in @var{vals}. @var{category_names} is a list of category names corresponding to @var{valueset}. If omitted, it defaults to @var{valueset}, converted to strings. @var{Ordinal} is a logical indicating whether the category values in @var{obj} have a numeric ordering relationship. Defaults to false. @var{Protected} indicates whether @var{obj} should be protected, which prevents the addition of new categories to the array. Defaults to false. @end deftypefn @node categorical.categories @subsubsection categorical.categories @deftypefn {Method} {@var{out} =} categories (@var{obj}) Get a list of the categories in @var{obj}. Gets a list of the categories in @var{obj}, identified by their category names. Returns a cellstr column vector. @end deftypefn @node categorical.cellstr @subsubsection categorical.cellstr @deftypefn {Method} {@var{out} =} cellstr (@var{obj}) Convert to cellstr. Converts @var{obj} to a cellstr array. The strings will be the category names for corresponding values, or @code{''} for undefined values. Returns a cellstr array the same size as @var{obj}. @end deftypefn @node categorical.dispstrs @subsubsection categorical.dispstrs @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) Display strings. Gets display strings for each element in @var{obj}. The display strings are either the category string, or @code{''} for undefined values. Returns a cellstr array the same size as @var{obj}. @end deftypefn @node categorical.double @subsubsection categorical.double @deftypefn {Method} {@var{out} =} double (@var{obj}) Convert to double array, by getting the underlying code values. Converts @var{obj} to a string array. The doubles will be the underlying numeric code values of @var{obj}, or @code{NaN} for undefined values. The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering. Returns a @code{double} array the same size as @var{obj}. @end deftypefn @node categorical.iscategory @subsubsection categorical.iscategory @deftypefn {Method} {@var{out} =} iscategory (@var{obj}, @var{catnames}) Test whether input is a category on a categorical array. @var{catnames} is a cellstr listing the category names to check against @var{obj}. Returns a logical array the same size as @var{catnames}. @end deftypefn @node categorical.ismissing @subsubsection categorical.ismissing @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) Test whether elements are missing. For categorical arrays, undefined elements are considered to be missing. Returns a logical array the same size as @var{obj}. @end deftypefn @node categorical.isnanny @subsubsection categorical.isnanny @deftypefn {Method} {@var{out} =} isnanny (@var{obj}) Test whethere elements are NaN-ish. Checks where each element in @var{obj} is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not. Returns a logical array the same size as @var{obj}. @end deftypefn @node categorical.isordinal @subsubsection categorical.isordinal @deftypefn {Method} {@var{out} =} isordinal (@var{obj}) Whether @var{obj} is ordinal. Returns true if @var{obj} is ordinal (as determined by its @code{IsOrdinal} property), and false otherwise. @end deftypefn @node categorical.isundefined @subsubsection categorical.isundefined @deftypefn {Method} {@var{out} =} isundefined (@var{obj}) Test whether elements are undefined. Checks whether each element in @var{obj} is undefined. "Undefined" is a special value defined by @code{categorical}. It is equivalent to a @code{NaN} or a @code{missing} value. Returns a logical array the same size as @var{obj}. @end deftypefn @node categorical.mergecats @subsubsection categorical.mergecats @deftypefn {Method} {@var{out} =} mergecats (@var{obj}, @var{oldcats}) @deftypefnx {Method} {@var{out} =} mergecats (@var{obj}, @var{oldcats}, @var{newcat}) Merge multiple categories. Merges the categories @var{oldcats} into a single category. If @var{newcat} is specified, that new category is added if necessary, and all of @var{oldcats} are merged into it. @var{newcat} must be an existing category in @var{obj} if @var{obj} is ordinal. If @var{newcat} is not provided, all of @var{odcats} are merged into @code{oldcats@{1@}}. @end deftypefn @node categorical.missing @subsubsection categorical.missing @deftypefn {Static Method} {@var{out} =} categorical.missing () @deftypefnx {Static Method} {@var{out} =} categorical.missing (sz) Create an array of missing (undefined) categoricals. Creates a categorical array whose elements are all missing (). This is a convenience alias for @ref{categorical.undefined}, so you can call it generically. It returns strictly the same results as calling @ref{categorical.undefined} with the same arguments. Returns a categorical array. See also: categorical.undefined @end deftypefn @node categorical.removecats @subsubsection categorical.removecats @deftypefn {Method} {@var{out} =} removecats (@var{obj}) Removes all unused categories from @var{obj}. This is equivalent to @code{out = squeezecats (obj)}. @end deftypefn @deftypefn {Method} {@var{out} =} removecats (@var{obj}, @var{oldcats}) Remove categories from categorical array. Removes the specified categories from @var{obj}. Elements of @var{obj} whose values belonged to those categories are replaced with undefined. @var{newcats} is a cellstr listing the category names to add to @var{obj}. @end deftypefn @node categorical.renamecats @subsubsection categorical.renamecats @deftypefn {Method} {@var{out} =} renamecats (@var{obj}, @var{newcats}) @deftypefnx {Method} {@var{out} =} renamecats (@var{obj}, @var{oldcats}, @var{newcats}) Rename categories. Renames some or all of the categories in @var{obj}, without changing any of its values. @end deftypefn @node categorical.reordercats @subsubsection categorical.reordercats @deftypefn {Method} {@var{out} =} reordercats (@var{obj}) @deftypefnx {Method} {@var{out} =} reordercats (@var{obj}, @var{newcats}) Reorder categories. Reorders the categories in @var{obj} to match @var{newcats}. @var{newcats} is a cellstr that must be a reordering of @var{obj}’s existing category list. If @var{newcats} is not supplied, sorts the categories in alphabetical order. @end deftypefn @node categorical.setcats @subsubsection categorical.setcats @deftypefn {Method} {@var{out} =} setcats (@var{obj}, @var{newcats}) Set categories for categorical array. Sets the categories to use for @var{obj}. If any current categories are absent from the @var{newcats} list, current values of those categories become undefined. @end deftypefn @node categorical.squeezecats @subsubsection categorical.squeezecats @deftypefn {Method} {@var{out} =} squeezecats (@var{obj}) Remove unused categories. Removes all categories which have no corresponding values in @var{obj}’s elements. This is currently unimplemented. @end deftypefn @node categorical.string @subsubsection categorical.string @deftypefn {Method} {@var{out} =} string (@var{obj}) Convert to string array. Converts @var{obj} to a string array. The strings will be the category names for corresponding values, or for undefined values. Returns a @code{string} array the same size as @var{obj}. @end deftypefn @node categorical.summary @subsubsection categorical.summary @deftypefn {Method} {} summary (@var{obj}) Display summary of array’s values. Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category. @end deftypefn @node categorical.undefined @subsubsection categorical.undefined @deftypefn {Static Method} {@var{out} =} categorical.undefined () @deftypefnx {Static Method} {@var{out} =} categorical.undefined (sz) Create an array of undefined categoricals. Creates a categorical array whose elements are all . @var{sz} is the size of the array to create. If omitted or empty, creates a scalar. Returns a categorical array. See also: categorical.missing @end deftypefn @node cell2table @subsection cell2table @deftypefn {Function} {@var{out} =} cell2table (@var{c}) @deftypefnx {Function} {@var{out} =} cell2table (@dots{}, @code{'VariableNames'}, @var{VariableNames}) @deftypefnx {Function} {@var{out} =} cell2table (@dots{}, @code{'RowNames'}, @var{RowNames}) Convert a cell array to a table. Converts a 2-dimensional cell matrix into a table. Each column in the input @var{c} becomes a variable in @var{out}. For columns that contain all scalar values of @code{cat}-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type. See also: @ref{array2table}, @ref{table}, @ref{struct2table} @end deftypefn @node colvecfun @subsection colvecfun @deftypefn {Function} {@var{out} =} colvecfun (@var{fcn}, @var{x}) Apply a function to column vectors in array. Applies the given function @var{fcn} to each column vector in the array @var{x}, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array. @var{fcn} must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as @var{x}. Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x. @end deftypefn @node contains @subsection contains @deftypefn {Function} {@var{out} =} colvecfun (@var{str}, @var{pattern}) @deftypefnx {Function} {@var{out} =} colvecfun (@dots{}, @code{'IgnoreCase'}, @var{IgnoreCase}) Test if strings contain a pattern. Tests whether the given strings contain the given pattern(s). @var{str} (char, cellstr, or string) is a list of strings to compare against pattern. @var{pattern} (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them. Returns a logical array of the same size as the string array represented by @var{str}. See also: startsWith, endsWith @end deftypefn @node datetime @subsection datetime @deftp {Class} datetime Represents points in time using the Gregorian calendar. The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times. A @code{datetime} array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array. This is an attempt to reproduce the functionality of Matlab's @code{datetime}. It also contains some Octave-specific extensions. @end deftp @deftypeivar datetime @code{double} dnums The underlying datenums that represent the points in time. These are always in UTC. This is a planar property: the size of @code{dnums} is the same size as the containing @code{datetime} array object. @end deftypeivar @deftypeivar datetime @code{char} TimeZone The time zone this @code{datetime} array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does. Setting the @code{TimeZone} of a @code{datetime} array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent. @end deftypeivar @deftypeivar datetime @code{char} Format The format to display this @code{datetime} in. Currently unsupported. @end deftypeivar @node datetime.colon @subsubsection datetime.colon @deftypefn {Method} {@var{out} =} colon (@var{lo}, @var{hi}) @deftypefnx {Method} {@var{out} =} colon (@var{hi}, @var{inc}, @var{hi}) Generate a sequence of uniformly-spaced values. This method implements the behavior for the colon operator (@code{lo:hi} or @code{lo:inc:hi} calls) for the datetime type. "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time. The @var{inc} argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with @code{duration.ofDays (inc)}. The default value for @var{inc}, used in the two-arg @code{lo:hi} is 1, that is, 1 day of exactly 24 hours. Returns a datetime vector. WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if @var{inc} is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious. @end deftypefn @node datetime.convertDatenumTimeZone @subsubsection datetime.convertDatenumTimeZone @deftypefn {Static Method} {@var{out} =} datetime.convertDatenumTimeZone @ (@var{dnum}, @var{fromZoneId}, @var{toZoneId}) Convert a datenum from one time zone to another. @var{dnum} is a datenum array to convert. @var{fromZoneId} is a charvec containing the IANA Time Zone identifier for the time zone to convert from. @var{toZoneId} is a charvec containing the IANA Time Zone identifier for the time zone to convert to. Returns a datenum array the same size as @var{dnum}. @end deftypefn @node datetime.datenum @subsubsection datetime.datenum @deftypefn {Method} {@var{out} =} datenum (@var{obj}) Convert this to datenums that represent the same local time. Returns double array of same size as this. @end deftypefn @node datetime.datenum2posix @subsubsection datetime.datenum2posix @deftypefn {Static Method} {@var{out} =} datetime.datenum2posix (@var{dnums}) Converts Octave datenums to Unix dates. The input datenums are assumed to be in UTC. Returns a double, which may have fractional seconds. @end deftypefn @node datetime.datestr @subsubsection datetime.datestr @deftypefn {Method} {@var{out} =} datestr (@var{obj}) @deftypefnx {Method} {@var{out} =} datestr (@var{obj}, @dots{}) Format @var{obj} as date strings. Supports all arguments that core Octave's @code{datestr} does. Returns date strings as a 2-D char array. @end deftypefn @node datetime.datestrs @subsubsection datetime.datestrs @deftypefn {Method} {@var{out} =} datestrs (@var{obj}) @deftypefnx {Method} {@var{out} =} datestrs (@var{obj}, @dots{}) Format @var{obj} as date strings, returning cellstr. Supports all arguments that core Octave's @code{datestr} does. Returns a cellstr array the same size as @var{obj}. @end deftypefn @node datetime.datestruct @subsubsection datetime.datestruct @deftypefn {Method} {@var{out} =} datestruct (@var{obj}) Converts this to a "datestruct" broken-down time structure. A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents. The values in the returned broken-down time are those of the local time in this' defined time zone, if it has one. Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this. @end deftypefn @node datetime.datetime @subsubsection datetime.datetime @deftypefn {Constructor} {@var{obj} =} datetime () Constructs a new scalar @code{datetime} containing the current local time, with no time zone attached. @end deftypefn @deftypefn {Constructor} {@var{obj} =} datetime (@var{datevec}) @deftypefnx {Constructor} {@var{obj} =} datetime (@var{datestrs}) @deftypefnx {Constructor} {@var{obj} =} datetime (@var{in}, @code{'ConvertFrom'}, @var{inType}) @deftypefnx {Constructor} {@var{obj} =} datetime @ (@var{Y}, @var{M}, @var{D}, @var{H}, @var{MI}, @var{S}) @deftypefnx {Constructor} {@var{obj} =} datetime @ (@var{Y}, @var{M}, @var{D}, @var{H}, @var{MI}, @var{MS}) @deftypefnx {Constructor} {@var{obj} =} datetime @ (@dots{}, @code{'Format'}, @var{Format}, @code{'InputFormat'}, @var{InputFormat}, @ @code{'Locale'}, @var{InputLocale}, @code{'PivotYear'}, @var{PivotYear}, @ @code{'TimeZone'}, @var{TimeZone}) Constructs a new @code{datetime} array based on input values. @end deftypefn @node datetime.datevec @subsubsection datetime.datevec @deftypefn {Method} {@var{out} =} datevec (@var{obj}) @deftypefnx {Method} {[@var{Y}, @var{M}, @var{D}, @var{H}, @var{MN}, @var{S}] =} datevec (@var{obj}) Convert this to a datevec that represent the same local wall time. When nargout is 0 or 1, returns a double array of size n-by-6, where n is @code{numel(obj)}. When nargout is 2 or more, returns double arrays the same size as @var{obj}. @end deftypefn @node datetime.diff @subsubsection datetime.diff @deftypefn {Method} {@var{out} =} diff (@var{obj}) Differences between elements. Computes the difference between each successive element in @var{obj}, as a @code{duration}. Returns a @code{duration} array the same size as @var{obj}. @end deftypefn @node datetime.dispstrs @subsubsection datetime.dispstrs @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) Get display strings for each element of @var{obj}. Returns a cellstr the same size as @var{obj}. @end deftypefn @node datetime.eq @subsubsection datetime.eq @deftypefn {Method} {@var{out} =} eq (@var{A}, @var{B}) True if @var{A} is equal to @var{B}. This defines the @code{==} operator for @code{datetime}s. Inputs are implicitly converted to @code{datetime} using the one-arg constructor or conversion method. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.ge @subsubsection datetime.ge @deftypefn {Method} {@var{out} =} ge (@var{A}, @var{B}) True if @var{A} is greater than or equal to @var{B}. This defines the @code{>=} operator for @code{datetime}s. Inputs are implicitly converted to @code{datetime} using the one-arg constructor or conversion method. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.gmtime @subsubsection datetime.gmtime @deftypefn {Method} {@var{out} =} gmtime (@var{obj}) Convert to TM_STRUCT structure in UTC time. Converts @var{obj} to a TM_STRUCT style structure array. The result is in UTC time. If @var{obj} is unzoned, it is assumed to be in UTC time. Returns a struct array in TM_STRUCT style. @end deftypefn @node datetime.gt @subsubsection datetime.gt @deftypefn {Method} {@var{out} =} gt (@var{A}, @var{B}) True if @var{A} is greater than @var{B}. This defines the @code{>} operator for @code{datetime}s. Inputs are implicitly converted to @code{datetime} using the one-arg constructor or conversion method. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.hms @subsubsection datetime.hms @deftypefn {Method} {[@var{h}, @var{m}, @var{s}] =} hms (@var{obj}) Get the Hour, Minute, and Second components of a @var{datetime}. These are the time of day components. The Year, Month, and Day components are ignored, and not incorporated in to the result. For zoned @code{datetime}s, these will be local times in the associated time zone. Returns double arrays the same size as @code{obj}. @end deftypefn @node datetime.isbetween @subsubsection datetime.isbetween @deftypefn {Method} {@var{out} =} isbetween (@var{obj}, @var{lower}, @var{upper}) Tests whether the elements of @var{obj} are between @var{lower} and @var{upper}. All inputs are implicitly converted to @code{datetime} arrays, and are subject to scalar expansion. Returns a logical array the same size as the scalar expansion of the inputs. @end deftypefn @node datetime.ismissing @subsubsection datetime.ismissing @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) Test whether array elements are missing. For @code{string} arrays, the special NaT value is considered missing. This is equivalent to a NaN used as a datenum. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.isnan @subsubsection datetime.isnan @deftypefn {Method} {@var{out} =} isnan (@var{obj}) True if input elements are NaT. This is an alias for @code{isnat} to support type compatibility and polymorphic programming. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.isnat @subsubsection datetime.isnat @deftypefn {Method} {@var{out} =} isnat (@var{obj}) True if input elements are NaT. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.le @subsubsection datetime.le @deftypefn {Method} {@var{out} =} le (@var{A}, @var{B}) True if @var{A} is less than or equal to@var{B}. This defines the @code{<=} operator for @code{datetime}s. Inputs are implicitly converted to @code{datetime} using the one-arg constructor or conversion method. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.linspace @subsubsection datetime.linspace @deftypefn {Method} {@var{out} =} linspace (@var{from}, @var{to}, @var{n}) Linearly-spaced values in date/time space. Constructs a vector of @code{datetime}s that represent linearly spaced points starting at @var{from} and going up to @var{to}, with @var{n} points in the vector. @var{from} and @var{to} are implicitly converted to @code{datetime}s. @var{n} is how many points to use. If omitted, defaults to 100. Returns an @var{n}-long @code{datetime} vector. @end deftypefn @node datetime.localtime @subsubsection datetime.localtime @deftypefn {Method} {@var{out} =} localtime (@var{obj}) Convert to TM_STRUCT structure in UTC time. Converts @var{obj} to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on @var{obj}. If @var{obj} is unzoned, it is assumed to be in UTC time. Returns a struct array in TM_STRUCT style. Example: @example dt = datetime; dt.TimeZone = datetime.SystemTimeZone; tm_struct = localtime (dt); @end example @end deftypefn @node datetime.lt @subsubsection datetime.lt @deftypefn {Method} {@var{out} =} lt (@var{A}, @var{B}) True if @var{A} is less than @var{B}. This defines the @code{<} operator for @code{datetime}s. Inputs are implicitly converted to @code{datetime} using the one-arg constructor or conversion method. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.minus @subsubsection datetime.minus @deftypefn {Method} {@var{out} =} minus (@var{A}, @var{B}) Subtraction (@code{-} operator). Subtracts a @code{duration}, @code{calendarDuration} or numeric @var{B} from a @code{datetime} @var{A}, or subtracts two @code{datetime}s from each other. If both inputs are @code{datetime}, then the output is a @code{duration}. Otherwise, the output is a @code{datetime}. Numeric @var{B} inputs are implicitly converted to @code{duration} using @code{duration.ofDays}. Returns an array the same size as @var{A}. @end deftypefn @node datetime.NaT @subsubsection datetime.NaT @deftypefn {Static Method} {@var{out} =} datetime.NaT () @deftypefnx {Static Method} {@var{out} =} datetime.NaT (@var{sz}) “Not-a-Time”: Creates NaT-valued arrays. Constructs a new @code{datetime} array of all @code{NaT} values of the given size. If no input @var{sz} is given, the result is a scalar @code{NaT}. @code{NaT} is the @code{datetime} equivalent of @code{NaN}. It represents a missing or invalid value. @code{NaT} values never compare equal to, greater than, or less than any value, including other @code{NaT}s. Doing arithmetic with a @code{NaT} and any other value results in a @code{NaT}. @end deftypefn @node datetime.ne @subsubsection datetime.ne @deftypefn {Method} {@var{out} =} ne (@var{A}, @var{B}) True if @var{A} is not equal to @var{B}. This defines the @code{!=} operator for @code{datetime}s. Inputs are implicitly converted to @code{datetime} using the one-arg constructor or conversion method. Returns logical array the same size as @var{obj}. @end deftypefn @node datetime.ofDatenum @subsubsection datetime.ofDatenum @deftypefn {Static Method} {@var{obj} =} datetime.ofDatenum (@var{dnums}) Converts a datenum array to a datetime array. Returns an unzoned @code{datetime} array of the same size as the input. @end deftypefn @node datetime.ofDatestruct @subsubsection datetime.ofDatestruct @deftypefn {Static Method} {@var{obj} =} datetime.ofDatestruct (@var{dstruct}) Converts a datestruct to a datetime array. A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype. Returns an unzoned @code{datetime} array. @end deftypefn @node datetime.plus @subsubsection datetime.plus @deftypefn {Method} {@var{out} =} plus (@var{A}, @var{B}) Addition (@code{+} operator). Adds a @code{duration}, @code{calendarDuration}, or numeric @var{B} to a @code{datetime} @var{A}. @var{A} must be a @code{datetime}. Numeric @var{B} inputs are implicitly converted to @code{duration} using @code{duration.ofDays}. WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy. Returns @code{datetime} array the same size as @var{A}. @end deftypefn @node datetime.posix2datenum @subsubsection datetime.posix2datenum @deftypefn {Static Method} {@var{dnums} =} datetime.posix2datenum (@var{pdates}) Converts POSIX (Unix) times to datenums Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC. @end deftypefn @node datetime.posixtime @subsubsection datetime.posixtime @deftypefn {Method} {@var{out} =} posixtime (@var{obj}) Converts this to POSIX time values (seconds since the Unix epoch) Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC. Returns double array of same size as this. @end deftypefn @node datetime.proxyKeys @subsubsection datetime.proxyKeys @deftypefn {Method} {[@var{keysA}, @var{keysB}] =} proxyKeys (@var{a}, @var{b}) Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs. This is primarily for Tablicious's internal use; users will typically not need to call it or know how it works. Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input. @end deftypefn @node datetime.timeofday @subsubsection datetime.timeofday @deftypefn {Method} {@var{out} =} timeofday (@var{obj}) Get the time of day (elapsed time since midnight). For zoned @code{datetime}s, these will be local times in the associated time zone. Returns a @code{duration} array the same size as @code{obj}. @end deftypefn @node datetime.week @subsubsection datetime.week @deftypefn {Method} {@var{out} =} week (@var{obj}) Get the week of the year. This method is unimplemented. @end deftypefn @node datetime.ymd @subsubsection datetime.ymd @deftypefn {Method} {[@var{y}, @var{m}, @var{d}] =} ymd (@var{obj}) Get the Year, Month, and Day components of @var{obj}. For zoned @code{datetime}s, these will be local times in the associated time zone. Returns double arrays the same size as @code{obj}. @end deftypefn @node datetime.ymdhms @subsubsection datetime.ymdhms @deftypefn {Method} {[@var{y}, @var{m}, @var{d}, @var{h}, @var{mi}, @var{s}] =} ymdhms @ (@var{obj}) Get the Year, Month, Day, Hour, Minute, and Second components of a @var{obj}. For zoned @code{datetime}s, these will be local times in the associated time zone. Returns double arrays the same size as @code{obj}. @end deftypefn @node days @subsection days @deftypefn {Function} {@var{out} =} days (@var{x}) Duration in days. If @var{x} is numeric, then @var{out} is a @code{duration} array in units of fixed-length 24-hour days, with the same size as @var{x}. If @var{x} is a @code{duration}, then returns a @code{double} array the same size as @var{x} indicating the number of fixed-length days that each duration is. @end deftypefn @node discretize @subsection discretize @deftypefn {Function} {[@var{Y}, @var{E}] =} discretize (@var{X}, @var{n}) @deftypefnx {Function} {[@var{Y}, @var{E}] =} discretize (@var{X}, @var{edges}) @deftypefnx {Function} {[@var{Y}, @var{E}] =} discretize (@var{X}, @var{dur}) @deftypefnx {Function} {[@var{Y}, @var{E}] =} discretize (@dots{}, @code{'categorical'}) @deftypefnx {Function} {[@var{Y}, @var{E}] =} discretize (@dots{}, @code{'IncludedEdge'}, @var{IncludedEdge}) Group data into discrete bins or categories. @var{n} is the number of bins to group the values into. @var{edges} is an array of edge values defining the bins. @var{dur} is a @code{duration} value indicating the length of time of each bin. If @code{'categorical'} is specified, the resulting values are a @code{categorical} array instead of a numeric array of bin indexes. Returns: @var{Y} - the bin index or category of each value from @var{X} @var{E} - the list of bin edge values @end deftypefn @node dispstrs @subsection dispstrs @deftypefn {Function} {@var{out} =} dispstrs (@var{x}) Display strings for array. Gets the display strings for each element of @var{x}. The display strings should be short, one-line, human-presentable strings describing the value of that element. The default implementation of @code{dispstrs} can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects. This is a polymorphic method that user-defined classes may override with their own custom display that is more informative. Returns a cell array the same size as @var{x}. @end deftypefn @node duration @subsection duration @deftp {Class} duration Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time. This is an attempt to reproduce the functionality of Matlab's @code{duration}. It also contains some Octave-specific extensions. Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times. @end deftp @deftypeivar duration @code{double} days The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days. This is a planar property: the size of @code{days} is the same size as the containing @code{duration} array object. @end deftypeivar @deftypeivar duration @code{char} Format The format to display this @code{duration} in. Currently unsupported. @end deftypeivar @node duration.char @subsubsection duration.char @deftypefn {Method} {@var{out} =} char (@var{obj}) Convert to char. The contents of the strings will be the same as returned by @code{dispstrs}. This is primarily a convenience method for use on scalar @var{obj}s. Returns a 2-D char array with one row per element in @var{obj}. @end deftypefn @node duration.datevec @subsubsection duration.datevec @deftypefn {Method} {[@var{dvec}] =} datevec (@var{obj}) @deftypefnx {Method} {[@var{Y}, @var{M}, @var{D}, @var{H}, @var{MN}, @var{S}] =} datevec (@var{obj}) Convert @var{obj} to a datevec whose elements represent the components of this duration. The components are the year, month, days, hour, minute, and second quantities of this duration. The years are in terms of fixed size years that are 365.2425 days long, and days are fixed size 24-hour days. The fixed size year size can be found in the FixedSizeYearDays constant class property on the duration class. The month component is always zero, since months are variable lengths and there is no equivalent fixed size month. Thus, the days component may be more than 31. When nargout is 0 or 1, returns a double array of size n-by-6, where n is @code{numel(obj)}. When nargout is 2 or more, returns double arrays the same size as @var{obj}. @end deftypefn @node duration.dispstrs @subsubsection duration.dispstrs @deftypefn {Method} {@var{out} =} duration (@var{obj}) Get display strings for each element of @var{obj}. Returns a cellstr the same size as @var{obj}. @end deftypefn @node duration.hms @subsubsection duration.hms @deftypefn {Method} {[@var{h}, @var{m}, @var{s}] =} hms (@var{obj}) Get the Hour, Minute, and Second values of a @var{duration}. These are the hour, minute, and second values that when combined are equal to the same duration value. Returns double arrays the same size as @code{obj}. @end deftypefn @node duration.hours @subsubsection duration.hours @deftypefn {Method} {@var{out} =} hours (@var{obj}) Equivalent number of hours. Gets the number of fixed-length 60-minute hours that is equivalent to this duration. Returns double array the same size as @var{obj}. @end deftypefn @node duration.linspace @subsubsection duration.linspace @deftypefn {Method} {@var{out} =} linspace (@var{from}, @var{to}, @var{n}) Linearly-spaced values in time duration space. Constructs a vector of @code{duration}s that represent linearly spaced points starting at @var{from} and going up to @var{to}, with @var{n} points in the vector. @var{from} and @var{to} are implicitly converted to @code{duration}s. @var{n} is how many points to use. If omitted, defaults to 100. Returns an @var{n}-long @code{datetime} vector. @end deftypefn @node duration.milliseconds @subsubsection duration.milliseconds @deftypefn {Method} {@var{out} =} milliseconds (@var{obj}) Equivalent number of milliseconds. Gets the number of milliseconds that is equivalent to this duration. Returns double array the same size as @var{obj}. @end deftypefn @node duration.minutes @subsubsection duration.minutes @deftypefn {Method} {@var{out} =} minutes (@var{obj}) Equivalent number of minutes. Gets the number of fixed-length 60-second minutes that is equivalent to this duration. Returns double array the same size as @var{obj}. @end deftypefn @node duration.ofDays @subsubsection duration.ofDays @deftypefn {Static Method} {@var{obj} =} duration.ofDays (@var{dnums}) Converts a double array representing durations in whole and fractional days to a @code{duration} array. This is the method that is used for implicit conversion of numerics in many cases. Returns a @code{duration} array of the same size as the input. @end deftypefn @node duration.seconds @subsubsection duration.seconds @deftypefn {Method} {@var{out} =} seconds (@var{obj}) Equivalent number of seconds. Gets the number of seconds that is equivalent to this duration. Returns double array the same size as @var{obj}. @end deftypefn @node duration.years @subsubsection duration.years @deftypefn {Method} {@var{out} =} years (@var{obj}) Equivalent number of years. Gets the number of fixed-length 365.2425-day years that is equivalent to this duration. Returns double array the same size as @var{obj}. @end deftypefn @node eqn @subsection eqn @deftypefn {Function} {@var{out} =} eqn (@var{A}, @var{B}) Determine element-wise equality, treating NaNs as equal out = eqn (A, B) @code{eqn} is just like @code{eq} (the function that implements the @code{==} operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of @code{isequaln}. @code{eqn} uses @code{isnanny} to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish. Developer's note: the name “@code{eqn}” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the @code{isequaln} pattern of appending an “n” to the corresponding non-NaN-equivocating function. See also: @code{eq}, @code{isequaln}, @ref{isnanny} @end deftypefn @node head @subsection head @deftypefn {Function} {@var{out} =} head (@var{A}) @deftypefnx {Function} {@var{out} =} head (@var{A}, @var{k}) Get first K rows of an array. Returns the array @var{A}, subsetted to its first @var{k} rows. This means subsetting it to the first @code{(min (k, size (A, 1)))} elements along dimension 1, and leaving all other dimensions unrestricted. @var{A} is the array to subset. @var{k} is the number of rows to get. @var{k} defaults to 8 if it is omitted or empty. If there are less than @var{k} rows in @var{A}, returns all rows. Returns an array of the same type as @var{A}, unless ()-indexing @var{A} produces an array of a different type, in which case it returns that type. See also: tail @end deftypefn @node hours @subsection hours @deftypefn {Function File} {@var{out} =} hours (@var{x}) Create a @code{duration} @var{x} hours long, or get the hours in a @code{duration} @var{x}. If input is numeric, returns a @code{duration} array that is that many hours in time. If input is a @code{duration}, converts the @code{duration} to a number of hours. Returns an array the same size as @var{x}. @end deftypefn @node iscalendarduration @subsection iscalendarduration @deftypefn {Function} {@var{out} =} iscalendarduration (@var{x}) True if input is a @code{calendarDuration} array, false otherwise. Respects @code{iscalendarduration} override methods on user-defined classes, even if they do not inherit from @code{calendarDuration} or were known to Tablicious at authoring time. Returns a scalar logical. @end deftypefn @node iscategorical @subsection iscategorical @deftypefn {Function} {@var{out} =} iscategorical (@var{x}) True if input is a @code{categorical} array, false otherwise. Respects @code{iscategorical} override methods on user-defined classes, even if they do not inherit from @code{categorical} or were known to Tablicious at authoring time. Returns a scalar logical. @end deftypefn @node isdatetime @subsection isdatetime @deftypefn {Function} {@var{out} =} isdatetime (@var{x}) True if input is a @code{datetime} array, false otherwise. Respects @code{isdatetime} override methods on user-defined classes, even if they do not inherit from @code{datetime} or were known to Tablicious at authoring time. Returns a scalar logical. @end deftypefn @node isduration @subsection isduration @deftypefn {Function} {@var{out} =} isduration (@var{x}) True if input is a @code{duration} array, false otherwise. Respects @code{isduration} override methods on user-defined classes, even if they do not inherit from @code{duration} or were known to Tablicious at authoring time. Returns a scalar logical. @end deftypefn @node isfile @subsection isfile @emph{Not documented} @node isfolder @subsection isfolder @emph{Not documented} @node isnanny @subsection isnanny @deftypefn {Function} {@var{out} =} isnanny (@var{X}) Test if elements are NaN or NaN-like. Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if @code{isnan()} or @code{isnat()} returns true, and is false for types that do not support @code{isnan()} or @code{isnat()}. This function only exists because: @enumerate a @item Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and @item isnan() errors out for some types that do not support isnan(), like cells. @item Octave does not define an @code{ismissing} function, but the Octave Forge statistics package does, and adding an @code{ismissing} function to Tablicious would conflict with that in hard-to-resolve ways. @end enumerate @code{isnanny()} smooths over those differences so you can call it polymorphically on any input type. Hopefully. Under normal operation, @code{isnanny()} should not throw an error for any type or value of input. See also: ismissing, @code{isnan}, @code{isnat}, @ref{eqn}, @code{isequaln} @end deftypefn @node istable @subsection istable @deftypefn {Function} {@var{out} =} istable (@var{x}) True if input is a @code{table} array or other table-like type, false otherwise. Respects @code{istable} override methods on user-defined classes, even if they do not inherit from @code{table} or were known to Tablicious at authoring time. User-defined classes should only override @code{istable} to return true if they conform to the @code{table} public interface. That interface is not well-defined or documented yet, so maybe you don't want to do that yet. Returns a scalar logical. @end deftypefn @node istabular @subsection istabular @deftypefn {Function} {@var{out} =} istabular (@var{x}) True if input is eitehr a @code{table} or @code{timetable} array, or an object like them. Respects @code{istable} and @code{istimetable} override methods on user-defined classes, even if they do not inherit from @code{table} or were known to Tablicious at authoring time. Returns a scalar logical. @end deftypefn @node istimetable @subsection istimetable @deftypefn {Function} {@var{out} =} istimetable (@var{x}) True if input is a @code{timetable} array or other timetable-like type, false otherwise. Respects @code{istimetable} override methods on user-defined classes, even if they do not inherit from @code{table} or were known to Tablicious at authoring time. User-defined classes should only override @code{istimetable} to return true if they conform to the @code{table} public interface. That interface is not well-defined or documented yet, so maybe you don't want to do that yet. Returns a scalar logical. @end deftypefn @node localdate @subsection localdate @deftp {Class} localdate Represents a complete day using the Gregorian calendar. This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes. @end deftp @deftypeivar localdate @code{double} dnums The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents. These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component. @end deftypeivar @deftypeivar localdate @code{char} Format The format to display this @code{localdate} in. Currently unsupported. @end deftypeivar @node localdate.datenum @subsubsection localdate.datenum @deftypefn {Method} {@var{out} =} datenum (@var{obj}) Convert this to datenums that represent midnight on @var{obj}’s days. Returns double array of same size as this. @end deftypefn @node localdate.datestr @subsubsection localdate.datestr @deftypefn {Method} {@var{out} =} datestr (@var{obj}) @deftypefnx {Method} {@var{out} =} datestr (@var{obj}, @dots{}) Format @var{obj} as date strings. Supports all arguments that core Octave's @code{datestr} does. Returns date strings as a 2-D char array. @end deftypefn @node localdate.datestrs @subsubsection localdate.datestrs @deftypefn {Method} {@var{out} =} datestrs (@var{obj}) @deftypefnx {Method} {@var{out} =} datestrs (@var{obj}, @dots{}) Format @var{obj} as date strings, returning cellstr. Supports all arguments that core Octave's @code{datestr} does. Returns a cellstr array the same size as @var{obj}. @end deftypefn @node localdate.datestruct @subsubsection localdate.datestruct @deftypefn {Method} {@var{out} =} datestruct (@var{obj}) Converts this to a “datestruct” broken-down time structure. A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by @code{datetime} in that it lacks Hour, Minute, and Second components. This is done for efficiency. The values in the returned broken-down time are those of the local time in @var{obj}’s defined time zone, if it has one. Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this. @end deftypefn @node localdate.dispstrs @subsubsection localdate.dispstrs @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) Get display strings for each element of @var{obj}. Returns a cellstr the same size as @var{obj}. @end deftypefn @node localdate.isnan @subsubsection localdate.isnan @deftypefn {Method} {@var{out} =} isnan (@var{obj}) True if input elements are NaT. This is an alias for @code{isnat} to support type compatibility and polymorphic programming. Returns logical array the same size as @var{obj}. @end deftypefn @node localdate.isnat @subsubsection localdate.isnat @deftypefn {Method} {@var{out} =} isnat (@var{obj}) True if input elements are NaT. Returns logical array the same size as @var{obj}. @end deftypefn @node localdate.localdate @subsubsection localdate.localdate @deftypefn {Constructor} {@var{obj} =} localdate () Constructs a new scalar @code{localdate} containing the current local date. @end deftypefn @deftypefn {Constructor} {@var{obj} =} localdate (@var{datenums}) @deftypefnx {Constructor} {@var{obj} =} localdate (@var{datestrs}) @deftypefnx {Constructor} {@var{obj} =} localdate (@var{Y}, @var{M}, @var{D}) @deftypefnx {Constructor} {@var{obj} =} localdate (@dots{}, @code{'Format'}, @var{Format}) Constructs a new @code{localdate} array based on input values. @end deftypefn @node localdate.NaT @subsubsection localdate.NaT @deftypefn {Static Method} {@var{out} =} localdate.NaT () @deftypefnx {Static Method} {@var{out} =} localdate.NaT (@var{sz}) “Not-a-Time”: Creates NaT-valued arrays. Constructs a new @code{datetime} array of all @code{NaT} values of the given size. If no input @var{sz} is given, the result is a scalar @code{NaT}. @code{NaT} is the @code{datetime} equivalent of @code{NaN}. It represents a missing or invalid value. @code{NaT} values never compare equal to, greater than, or less than any value, including other @code{NaT}s. Doing arithmetic with a @code{NaT} and any other value results in a @code{NaT}. This static method is provided because the global @code{NaT} function creates @code{datetime}s, not @code{localdate}s @end deftypefn @node localdate.posixtime @subsubsection localdate.posixtime @deftypefn {Method} {@var{out} =} posixtime (@var{obj}) Converts this to POSIX time values for midnight of @var{obj}’s days. Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on @var{obj}’s days. Returns double array of same size as this. @end deftypefn @node localdate.ymd @subsubsection localdate.ymd @deftypefn {Method} {[@var{y}, @var{m}, @var{d}] =} ymd (@var{obj}) Get the Year, Month, and Day components of @var{obj}. Returns double arrays the same size as @code{obj}. @end deftypefn @node milliseconds @subsection milliseconds @deftypefn {Function File} {@var{out} =} milliseconds (@var{x}) Create a @code{duration} @var{x} milliseconds long, or get the milliseconds in a @code{duration} @var{x}. If input is numeric, returns a @code{duration} array that is that many milliseconds in time. If input is a @code{duration}, converts the @code{duration} to a number of milliseconds. Returns an array the same size as @var{x}. @end deftypefn @node minutes @subsection minutes @deftypefn {Function File} {@var{out} =} hours (@var{x}) Create a @code{duration} @var{x} hours long, or get the hours in a @code{duration} @var{x}. @end deftypefn @node missing @subsection missing @deftp {Class} missing Generic auto-converting missing value. @code{missing} is a generic missing value that auto-converts to other types. A @code{missing} array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations. This class is currently EXPERIMENTAL. Use at your own risk. Note: This class does not actually work for assignment. If you do this: @example x = 1:5 x(3) = missing @end example It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it. @end deftp @node missing.dispstrs @subsubsection missing.dispstrs @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) Display strings. Gets display strings for each element in @var{obj}. For @code{missing}, the display strings are always @code{''}. Returns a cellstr the same size as @var{obj}. @end deftypefn @node missing.ismissing @subsubsection missing.ismissing @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) Test whether elements are missing values. @code{ismissing} is always true for @code{missing} arrays. Returns a logical array the same size as @var{obj}. @end deftypefn @node missing.isnan @subsubsection missing.isnan @deftypefn {Method} {@var{out} =} isnan (@var{obj}) Test whether elements are NaN. @code{isnan} is always true for @code{missing} arrays. Returns a logical array the same size as @var{obj}. @end deftypefn @node missing.isnanny @subsubsection missing.isnanny @deftypefn {Method} {@var{out} =} isnanny (@var{obj}) Test whether elements are NaN-like. @code{isnanny} is always true for @code{missing} arrays. Returns a logical array the same size as @var{obj}. @end deftypefn @node missing.missing @subsubsection missing.missing @deftypefn {Constructor} {@var{obj} =} missing () Constructs a scalar @code{missing} array. The constructor takes no arguments, since there’s only one @code{missing} value. @end deftypefn @node mustBeA @subsection mustBeA @emph{Not documented} @node mustBeCellstr @subsection mustBeCellstr @emph{Not documented} @node mustBeCharvec @subsection mustBeCharvec @emph{Not documented} @node mustBeFinite @subsection mustBeFinite @emph{Not documented} @node mustBeInteger @subsection mustBeInteger @emph{Not documented} @node mustBeMember @subsection mustBeMember @emph{Not documented} @node mustBeNonempty @subsection mustBeNonempty @emph{Not documented} @node mustBeNumeric @subsection mustBeNumeric @emph{Not documented} @node mustBeReal @subsection mustBeReal @emph{Not documented} @node mustBeSameSize @subsection mustBeSameSize @emph{Not documented} @node mustBeScalar @subsection mustBeScalar @emph{Not documented} @node mustBeScalarLogical @subsection mustBeScalarLogical @emph{Not documented} @node mustBeVector @subsection mustBeVector @emph{Not documented} @node NaC @subsection NaC @deftypefn {Function} {@var{out} =} NaC () @deftypefnx {Function} {@var{out} =} NaC (@var{sz}) “Not-a-Categorical". Creates missing-valued categorical arrays. Returns a new @code{categorical} array of all missing values of the given size. If no input @var{sz} is given, the result is a scalar missing categorical. @code{NaC} is the @code{categorical} equivalent of @code{NaN} or @code{NaT}. It represents a missing, invalid, or null value. @code{NaC} values never compare equal to any value, including other @code{NaC}s. @code{NaC} is a convenience function which is strictly a wrapper around @code{categorical.undefined} and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values. See also: categorical.undefined @end deftypefn @node NaS @subsection NaS @deftypefn {Function} {@var{out} =} NaS () @deftypefnx {Function} {@var{out} =} NaS (@var{sz}) “Not-a-String". Creates missing-valued string arrays. Returns a new @code{string} array of all missing values of the given size. If no input @var{sz} is given, the result is a scalar missing string. @code{NaS} is the @code{string} equivalent of @code{NaN} or @code{NaT}. It represents a missing, invalid, or null value. @code{NaS} values never compare equal to any value, including other @code{NaS}s. @code{NaS} is a convenience function which is strictly a wrapper around @code{string.missing} and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values. See also: string.missing @end deftypefn @node NaT @subsection NaT @deftypefn {Function} {@var{out} =} NaT () @deftypefnx {Function} {@var{out} =} NaT (@var{sz}) “Not-a-Time”. Creates missing-valued datetime arrays. Constructs a new @code{datetime} array of all @code{NaT} values of the given size. If no input @var{sz} is given, the result is a scalar @code{NaT}. @code{NaT} is the @code{datetime} equivalent of @code{NaN}. It represents a missing or invalid value. @code{NaT} values never compare equal to, greater than, or less than any value, including other @code{NaT}s. Doing arithmetic with a @code{NaT} and any other value results in a @code{NaT}. @code{NaT} currently cannot create NaT arrays of type @code{localdate}. To do that, use @ref{localdate.NaT} instead. @end deftypefn @node pp @subsection pp @deftypefn {Function} {} pp (@var{X}) @deftypefnx {Function} {} pp (@var{A}, @var{B}, @var{C}, @dots{}) @deftypefnx {Function} {} pp (@code{'A'}, @code{'B'}, @code{'C'}, @dots{}) @deftypefnx {Function} {} pp @code{A} @code{B} @code{C} @dots{} Alias for prettyprint, for interactive use. This is an alias for prettyprint(), with additional name-conversion magic. If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line. @end deftypefn @node scalarexpand @subsection scalarexpand @deftypefn {Function} {[@var{out1}, @var{out2}, @dots{}, @var{outN}] =} scalarexpand @ (@var{x1}, @var{x2}, @dots{}, @var{xN}) Expand scalar inputs to match size of non-scalar inputs. Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. @code{repmat} is used to do the expansion. Works on any input types that support @code{size}, @code{isscalar}, and @code{repmat}. It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs. Returns as many output arguments as there were input arguments. Examples: @example x1 = rand(3); x2 = 42; x3 = magic(3); [x1, x2, x3] = scalarexpand (x1, x2, x3) @end example @end deftypefn @node seconds @subsection seconds @deftypefn {Function File} {@var{out} =} seconds (@var{x}) Create a @code{duration} @var{x} seconds long, or get the seconds in a @code{duration} @var{x}. If input is numeric, returns a @code{duration} array that is that many seconds in time. If input is a @code{duration}, converts the @code{duration} to a number of seconds. Returns an array the same size as @var{x}. @end deftypefn @node size2str @subsection size2str @deftypefn {Function} {@var{out} =} size2str (@var{sz}) Format an array size for display. Formats the given array size @var{sz} as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the @var{N} dimensions represented by @var{sz}. @var{sz} is an array of dimension sizes, in the format returned by the @code{size} function. Returns a charvec. Examples: @example str = size2str (size (magic (4))) @result{} str = 4-by-4 @end example @end deftypefn @node splitapply @subsection splitapply @deftypefn {Function} {@var{out} =} splitapply (@var{func}, @var{X}, @var{G}) @deftypefnx {Function} {@var{out} =} splitapply (@var{func}, @var{X1}, @dots{}, @var{XN}, @var{G}) @deftypefnx {Function} {[@var{Y1}, @dots{}, @var{YM}] =} splitapply (@dots{}) Split data into groups and apply function. @var{func} is a function handle to call on each group of inputs in turn. @var{X}, @var{X1}, @dots{}, @var{XN} are the input variables that are split into groups for the function calls. If @var{X} is a @code{table}, then its contained variables are “popped out” and considered to be the @var{X1} @dots{} @var{XN} input variables. @var{G} is the grouping variable vector. It contains a list of integers that identify which group each element of the @var{X} input variables belongs to. NaNs in @var{G} mean that element is ignored. Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture. Returns the concatenated outputs of applying @var{func} to each group. See also: @ref{table.groupby}, @ref{table.splitapply} @end deftypefn @node string @subsection string @deftp {Class} string A string array of Unicode strings. A string array is an array of strings, where each array element is a single string. The string class represents strings, where: @itemize @bullet @item Each element of a string array is a single string @item A single string is a 1-dimensional row vector of Unicode characters @item Those characters are encoded in UTF-8 @itemize @bullet @item This last bit depends on the fact that Octave chars are UTF-8 now @end itemize @end itemize This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave. String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL. This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.) Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points. This class really serves three roles: @enumerate @item It is a type-safe object wrapper around Octave’s base primitive character types. @item It adds ismissing() semantics. @item And it introduces Unicode support. @end enumerate Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars. “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests. TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave's existing char/string-handling functions. TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware. @end deftp @node string.cell @subsubsection string.cell @deftypefn {Method} {@var{out} =} cell (@var{obj}) Convert to cell array. Converts this to a cell, which will be a cellstr. Missing values are converted to @code{''}. This method returns the same values as @code{cellstr(obj)}; it is just provided for interface compatibility purposes. Returns a cell array of the same size as @var{obj}. @end deftypefn @node string.cellstr @subsubsection string.cellstr @deftypefn {Method} {@var{out} =} cellstr (@var{obj}) Convert to cellstr. Converts @var{obj} to a cellstr. Missing values are converted to @code{''}. Returns a cellstr array of the same size as @var{obj}. @end deftypefn @node string.char @subsubsection string.char @deftypefn {Method} {@var{out} =} char (@var{obj}) Convert to char array. Converts @var{obj} to a 2-D char array. It will have as many rows as @var{obj} has elements. It is an error to convert missing-valued @code{string} arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.) Returns 2-D char array. @end deftypefn @node string.cmp @subsubsection string.cmp @deftypefn {Method} {[@var{out}, @var{outA}, @var{outB}] =} cmp (@var{A}, @var{B}) Value ordering comparison, returning -1/0/+1. Compares each element of @var{A} and @var{B}, returning for each element @code{i} whether @code{A(i)} was less than (-1), equal to (0), or greater than (1) the corresponding @code{B(i)}. TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings. Returns a numeric array @var{out} of the same size as the scalar expansion of @var{A} and @var{B}. Each value in it will be -1, 0, or 1. Also returns scalar-expanded copies of @var{A} and @var{B} as @var{outA} and @var{outB}, as a programming convenience. @end deftypefn @node string.decode @subsubsection string.decode @deftypefn {Static Method} {@var{out} =} string.decode (@var{bytes}, @var{charsetName}) Decode encoded text from bytes. Decodes the given encoded text in @var{bytes} according to the specified encoding, given by @var{charsetName}. Returns a scalar string. See also: @ref{string.encode} @end deftypefn @node string.dispstrs @subsubsection string.dispstrs @deftypefn {Method} {@var{out} =} dispstrs (@var{obj}) Display strings for array elements. Gets display strings for all the elements in @var{obj}. These display strings will either be the string contents of the element, enclosed in @code{"..."}, and with CR/LF characters replaced with @code{'\r'} and @code{'\n'} escape sequences, or @code{""} for missing values. Returns a cellstr of the same size as @var{obj}. @end deftypefn @node string.empty @subsubsection string.empty @deftypefn {Function} {@var{out} =} empty (@var{sz}) Get an empty string array of a specified size. The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0]. The size may also be supplied as multiple arguments containing scalar numerics. Returns an empty string array of the requested size. @end deftypefn @node string.encode @subsubsection string.encode @deftypefn {Method} {@var{out} =} encode (@var{obj}, @var{charsetName}) Encode string in a given character encoding. @var{obj} must be scalar. @var{charsetName} (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.) Returns the encoded string as a @code{uint8} vector. See also: @ref{string.decode}. @end deftypefn @node string.endsWith @subsubsection string.endsWith @deftypefn {Method} {@var{out} =} endsWith (@var{obj}, @var{pattern}) @deftypefnx {Method} {@var{out} =} endsWith (@var{obj}, @var{pattern}, 'IgnoreCase', true/false) Test if string ends with pattern. Returns a logical array the size of the scalar expansion of @var{obj} and @var{pattern}. @end deftypefn @node string.erase @subsubsection string.erase @deftypefn {Method} {@var{out} =} erase (@var{obj}, @var{match}) Erase matching substring. Erases the substrings in @var{obj} which match the @var{match} input. Returns a string array of the same size as @var{obj}. @end deftypefn @node string.ismissing @subsubsection string.ismissing @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) Test whether array elements are missing. For @code{string} arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs. Returns a logical array the same size as @code{obj}. @end deftypefn @node string.isnanny @subsubsection string.isnanny @deftypefn {Method} {@var{out} =} isnanny (@var{obj}) Test whether array elements are NaN-like. Missing values are considered nannish; any other string value is not. Returns a logical array of the same size as @var{obj}. @end deftypefn @node string.isstring @subsubsection string.isstring @deftypefn {Method} {@var{out} =} isstring (@var{obj}) Test if input is a string array. @code{isstring} is always true for @code{string} inputs. Returns a scalar logical. @end deftypefn @node string.lower @subsubsection string.lower @deftypefn {Method} {@var{out} =} lower (@var{obj}) Convert to lower case. Converts all the characters in all the strings in @var{obj} to lower case. This currently delegates to Octave’s own @code{lower()} function to do the conversion, so whatever character class handling it has, this has. Returns a string array of the same size as @var{obj}. @end deftypefn @node string.missing @subsubsection string.missing @deftypefn {Static Method} {@var{out} = } string.missing (@var{sz}) Missing string value. Creates a string array of all-missing values of the specified size @var{sz}. If @var{sz} is omitted, creates a scalar missing string. Returns a string array of size @var{sz} or [1 1]. See also: NaS @end deftypefn @node string.plus @subsubsection string.plus @deftypefn {Method} {@var{out} =} plus (@var{a}, @var{b}) String concatenation via plus operator. Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays. The concatenation is done by calling `strcat` on the inputs, and has the same behavior. Returns a string array the same size as the scalar expansion of its inputs. See also: string.strcat @end deftypefn @node string.regexprep @subsubsection string.regexprep @deftypefn {Method} {@var{out} =} regexprep (@var{obj}, @var{pat}, @var{repstr}) @deftypefnx {Method} {@var{out} =} regexprep (@dots{}, @var{varargin}) Replace based on regular expression matching. Replaces all the substrings matching a given regexp pattern @var{pat} with the given replacement text @var{repstr}. Returns a string array of the same size as @var{obj}. @end deftypefn @node string.reverse @subsubsection string.reverse @deftypefn {Method} {@var{out} =} reverse (@var{obj}) Reverse string, character-wise. Reverses the characters in each string in @var{obj}. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output. Returns a string array the same size as @var{obj}. @end deftypefn @node string.reverse_bytes @subsubsection string.reverse_bytes @deftypefn {Method} {@var{out} =} reverse_bytes (@var{obj}) Reverse string, byte-wise. Reverses the bytes in each string in @var{obj}. This operates on bytes (Unicode code units), not characters. This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence. You probably do not want to use this method. You probably want to use @code{string.reverse} instead. Returns a string array the same size as @var{obj}. See also: @ref{string.reverse} @end deftypefn @node string.startsWith @subsubsection string.startsWith @deftypefn {Method} {@var{out} =} startsWith (@var{obj}, @var{pattern}) @deftypefnx {Method} {@var{out} =} startsWith (@var{obj}, @var{pattern}, 'IgnoreCase', true/false) Test if string starts with pattern. Returns a logical array the size of the scalar expansion of @var{obj} and @var{pattern}. @end deftypefn @node string.strcat @subsubsection string.strcat @deftypefn {Method} {@var{out} =} strcat (@var{varargin}) String concatenation. Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays. The semantics of concatenating missing strings with non-missing strings has not been determined yet. Returns a string array the same size as the scalar expansion of its inputs. @end deftypefn @node string.strcmp @subsubsection string.strcmp @deftypefn {Method} {@var{out} =} strcmp (@var{A}, @var{B}) String comparison. Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other. This does the same comparison as @code{A == B}, but is not polymorphic. Generally, there is no reason to use @code{strcmp} instead of @code{==} or @code{eq} on string arrays, unless you want to be compatible with cellstr inputs as well. Returns logical array the size of the scalar expansion of A and B. @end deftypefn @node string.strfind @subsubsection string.strfind @deftypefn {Method} {@var{out} =} strfind (@var{obj}, @var{pattern}) @deftypefnx {Method} {@var{out} =} strfind (@dots{}, @var{varargin}) Find pattern in string. Finds the locations where @var{pattern} occurs in the strings of @var{obj}. TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out. Returns either an index vector, or a cell array of index vectors. @end deftypefn @node string.string @subsubsection string.string @deftypefn {Constructor} {@var{obj} =} string () @deftypefnx {Constructor} {@var{obj} =} string (@var{in}) Construct a new string array. The zero-argument constructor creates a new scalar string array whose value is the empty string. The other constructors construct a new string array by converting various types of inputs. @itemize @item chars and cellstrs are converted via cellstr() @item numerics are converted via num2str() @item datetimes are converted via datestr() @end itemize @end deftypefn @node string.strlength @subsubsection string.strlength @deftypefn {Method} {@var{out} =} strlength (@var{obj}) String length in characters (actually, UTF-16 code units). Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each. The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility. This is the string length method you probably want to use, not @code{strlength_bytes}. Returns double array of the same size as @var{obj}. Returns NaNs for missing strings. See also: @ref{string.strlength_bytes} @end deftypefn @node string.strlength_bytes @subsubsection string.strlength_bytes @deftypefn {Method} {@var{out} =} strlength_bytes (@var{obj}) String length in bytes. Gets the length of each string in @var{obj}, counted in Unicode UTF-8 code units (bytes). This is the same as @code{numel(str)} for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want @code{strlength} instead. Returns double array of the same size as @var{obj}. Returns NaNs for missing strings. See also: @ref{string.strlength} @end deftypefn @node string.strrep @subsubsection string.strrep @deftypefn {Method} {@var{out} =} strrep (@var{obj}, @var{match}, @var{replacement}) @deftypefnx {Method} {@var{out} =} strrep (@dots{}, @var{varargin}) Replace occurrences of pattern with other string. Replaces matching substrings in @var{obj} with a given replacement string. @var{varargin} is passed along to the core Octave @code{strrep} function. This supports whatever options it does. TODO: Maybe document what those options are. Returns a string array of the same size as @var{obj}. @end deftypefn @node string.upper @subsubsection string.upper @deftypefn {Method} {@var{out} =} upper (@var{obj}) Convert to upper case. Converts all the characters in all the strings in @var{obj} to upper case. This currently delegates to Octave’s own @code{upper()} function to do the conversion, so whatever character class handling it has, this has. Returns a string array of the same size as @var{obj}. @end deftypefn @node struct2table @subsection struct2table @deftypefn {Function} {@var{out} =} struct2table (@var{s}) @deftypefnx {Function} {@var{out} =} struct2table (@dots{}, @code{'AsArray'}, @var{AsArray}) Convert struct to a table. Converts the input struct @var{s} to a @code{table}. @var{s} may be a scalar struct or a nonscalar struct array. The @var{AsArray} option is not implemented yet. Returns a @code{table}. @end deftypefn @node table @subsection table @deftp {Class} table Tabular data array containing multiple columnar variables. A @code{table} is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous. A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas. A table is an array in itself: its size is @var{nrows}-by-@var{nvariables}, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2. A note on accessing properties of a @code{table} array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do @code{t.Properties.} for a table @code{t}. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a @code{table} with a variable named @code{Properties}. Try to avoid that.) WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious. We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn't been fully thought through or tested. See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb @end deftp @deftypeivar table @code{cellstr} VariableNames The names of the variables in the table, as a cellstr row vector. @end deftypeivar @deftypeivar table @code{cell} VariableValues A cell vector containing the values for each of the variables. @code{VariableValues(i)} corresponds to @code{VariableNames(i)}. @end deftypeivar @deftypeivar table @code{cellstr} RowNames An optional list of row names that identify each row in the table. This is a cellstr column vector, if present. @end deftypeivar @deftypeivar table @code{cellstr} DimensionNames Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to @code{@{"Row", "Variables"@}}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that's what Matlab uses, so Tablicious uses it too, for Matlab compatibility.) @end deftypeivar @node table.addvars @subsubsection table.addvars @deftypefn {Method} {@var{out} =} addvars (@var{obj}, @var{var1}, @dots{}, @var{varN}) @deftypefnx {Method} {@var{out} =} addvars (@dots{}, @code{'Before'}, @var{Before}) @deftypefnx {Method} {@var{out} =} addvars (@dots{}, @code{'After'}, @var{After}) @deftypefnx {Method} {@var{out} =} addvars (@dots{}, @ @code{'NewVariableNames'}, @var{NewVariableNames}) Add variables to table. Adds the specified variables to a table. @end deftypefn @node table.antijoin @subsubsection table.antijoin @deftypefn {Method} {[@var{outA}, @var{ixA}, @var{outB}, @var{ixB}] =} antijoin @ (@var{A}, @var{B}) Natural antijoin (AKA “semidifference”). Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input. Returns: @var{outA} - all the rows in A with no matching row in B @var{ixA} - the row indexes into A which produced @var{outA} @var{outB} - all the rows in B with no matching row in A @var{ixB} - the row indexes into B which produced @var{outB} This is a Tablicious/Octave extension, not defined in the Matlab table interface. @end deftypefn @node table.cartesian @subsubsection table.cartesian @deftypefn {Method} {[@var{out}, @var{ixs}] =} cartesian (@var{A}, @var{B}) Cartesian product of two tables. Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B. Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do. The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result. This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct. The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance. This is a Tablicious/Octave extension, not defined in the Matlab table interface. @end deftypefn @node table.convertvars @subsubsection table.convertvars @deftypefn {Method} {@var{out} =} convertvars (@var{obj}, @var{vars}, @var{dataType}) Convert variables to specified data type. Converts the variables in @var{obj} specified by @var{vars} to the specified data type. @var{vars} is a cellstr or numeric vector specifying which variables to convert. @var{dataType} specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables' current types as input, or a conversion method of that name defined on the specified variables' current type. Returns a table with the same variable names as @var{obj}, but with converted types. @end deftypefn @node table.findgroups @subsubsection table.findgroups @deftypefn {Method} {[@var{G}, @var{TID}] =} findgroups (@var{obj}) Find groups within a table’s row values. Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements. Returns: @var{G} - A double column vector of group numbers created from @var{obj}. @var{TID} - A table containing the row values corresponding to the group numbers. @end deftypefn @node table.getvar @subsubsection table.getvar @deftypefn {Method} {[@var{out}, @var{name}]} = getvar (@var{obj}, @var{varRef}) Get value and name for single table variable. @var{varRef} is a variable reference. It may be a name or an index. It may only specify a single table variable. Returns: @var{out} – the value of the referenced table variable @var{name} – the name of the referenced table variable @end deftypefn @node table.getvars @subsubsection table.getvars @deftypefn {Method} {[@var{out1}, @dots{}]} = getvars (@var{obj}, @var{varRef}) Get values for one ore more table variables. @var{varRef} is a variable reference in the form of variable names or indexes. Returns as many outputs as @var{varRef} referenced variables. Each output contains the contents of the corresponding table variable. @end deftypefn @node table.groupby @subsubsection table.groupby @deftypefn {Method} {[@var{out}] =} groupby (@var{obj}, @var{groupvars}, @var{aggcalcs}) Find groups in table data and apply functions to variables within groups. This works like an SQL @code{"SELECT ... GROUP BY ..."} statement. @var{groupvars} (cellstr, numeric) is a list of the grouping variables, identified by name or index. @var{aggcalcs} is a specification of the aggregate calculations to perform on them, in the form @code{@{}@var{out_var}@code{,} @var{fcn}@code{,} @var{in_vars}@code{; ...@}}, where: @var{out_var} (char) is the name of the output variable @var{fcn} (function handle) is the function to apply to produce it @var{in_vars} (cellstr) is a list of the input variables to pass to fcn Returns a table. This is a Tablicious/Octave extension, not defined in the Matlab table interface. @end deftypefn @node table.height @subsubsection table.height @deftypefn {Method} {@var{out} =} height (@var{obj}) Number of rows in table. For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows. @end deftypefn @node table.horzcat @subsubsection table.horzcat @deftypefn {Method} {@var{out} =} horzcat (@var{varargin}) Horizontal concatenation. Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names. Output has the same RowNames as @code{varargin@{1@}}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs. @end deftypefn @node table.innerjoin @subsubsection table.innerjoin @deftypefn {Method} {[@var{out}, @var{ixa}, @var{ixb}] =} innerjoin (@var{A}, @var{B}) @deftypefnx {Method} {[@dots{}] =} innerjoin (@var{A}, @var{B}, @dots{}) Combine two tables by rows using key variables. Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output. TODO: Document options. Returns: @var{out} - A table that is the result of joining A and B @var{ix} - Indexes into A for each row in out @var{ixb} - Indexes into B for each row in out @end deftypefn @node table.intersect @subsubsection table.intersect @deftypefn {Method} {[@var{C}, @var{ia}, @var{ib}] =} intersect (@var{A}, @var{B}) Set intersection. Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables. Returns: @var{C} - A table containing all the unique row values present in both A and B. @var{ia} - Row indexes into A of the rows from A included in C. @var{ib} - Row indexes into B of the rows from B included in C. @end deftypefn @node table.isempty @subsubsection table.isempty @deftypefn {Method} {@var{out} =} isempty (@var{obj}) Test whether array is empty. For tables, @code{isempty} is true if the number of rows is 0 or the number of variables is 0. @end deftypefn @node table.ismember @subsubsection table.ismember @deftypefn {Method} {[@var{tf}, @var{loc}] =} ismember (@var{A}, @var{B}) Set membership. Finds rows in A that are members of B. Returns: @var{tf} - A logical vector indicating whether each A(i,:) was present in B. @var{loc} - Indexes into B of rows that were found. @end deftypefn @node table.ismissing @subsubsection table.ismissing @deftypefn {Method} {@var{out} =} ismissing (@var{obj}) @deftypefnx {Method} {@var{out} =} ismissing (@var{obj}, @var{indicator}) Find missing values. Finds missing values in @var{obj}’s variables. If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables. All variables in this must be vectors. (This is due to the requirement that @code{size(out) == size(obj)}.) Returns a logical array the same size as @var{obj}. @end deftypefn @node table.istable @subsubsection table.istable @deftypefn {Method} {@var{tf} =} istable (@var{obj}) True if input is a table. @end deftypefn @node table.join @subsubsection table.join @deftypefn {Method} {[@var{C}, @var{ib}] =} join (@var{A}, @var{B}) @deftypefnx {Method} {[@var{C}, @var{ib}] =} join (@var{A}, @var{B}, @dots{}) Combine two tables by rows using key variables, in a restricted form. This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join. You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead. See also: @ref{table.innerjoin}, @ref{table.outerjoin} @end deftypefn @node table.mergevars @subsubsection table.mergevars @deftypefn {Method} {@var{out} =} mergevars (@var{obj}, @var{vars}) @deftypefnx {Method} {@var{out} =} mergevars (@dots{}, @ @code{'NewVariableName'}, @var{NewVariableName}) @deftypefnx {Method} {@var{out} =} mergevars (@dots{}, @ @code{'MergeAsTable'}, @var{MergeAsTable}) Merge table variables into a single variable. @end deftypefn @node table.movevars @subsubsection table.movevars @deftypefn {Method} {@var{out} =} movevars (@var{obj}, @var{vars}, @var{relLocation}, @var{location}) Move around variables in a table. @var{vars} is a list of variables to move, specified by name or index. @var{relLocation} is @code{'Before'} or @code{'After'}. @var{location} indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from @var{obj}, not the original full list of variables in @var{obj}. Returns a table with the same variables as @var{obj}, but in a different order. @end deftypefn @node table.ndims @subsubsection table.ndims @deftypefn {Method} {@var{out} =} ndims (@var{obj}) Number of dimensions For tables, @code{ndims(obj)} is always 2, because table arrays are always 2-D (rows-by-columns). @end deftypefn @node table.numel @subsubsection table.numel @deftypefn {Method} {@var{out} =} numel (@var{obj}) Total number of elements in table (actually 1). For compatibility reasons with Octave's OOP interface and subsasgn behavior, table's numel is defined to always return 1. It is not useful for client code to query a table's size using numel. This is an incompatibility with Matlab. @end deftypefn @node table.outerfillvals @subsubsection table.outerfillvals @deftypefn {Method} {@var{out} =} outerfillvals (@var{obj}) Get fill values for outer join. Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join. @end deftypefn @node table.outerjoin @subsubsection table.outerjoin @deftypefn {Method} {[@var{out}, @var{ixa}, @var{ixb}] =} outerjoin (@var{A}, @var{B}) @deftypefnx {Method} {[@dots{}] =} outerjoin (@var{A}, @var{B}, @dots{}) Combine two tables by rows using key variables, retaining unmatched rows. Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values. TODO: Document options. Returns: @var{out} - A table that is the result of the outer join of A and B @var{ixa} - indexes into A for each row in out @var{ixb} - indexes into B for each row in out @end deftypefn @node table.prettyprint @subsubsection table.prettyprint @deftypefn {Method} {} prettyprint (@var{obj}) Display table's values in tabular format. This prints the contents of the table in human-readable, tabular form. Variables which contain objects are displayed using the strings returned by their @code{dispstrs} method, if they define one. @end deftypefn @node table.realjoin @subsubsection table.realjoin @deftypefn {Method} {[@var{out}, @var{ixs}] =} realjoin (@var{A}, @var{B}) @deftypefnx {Method} {[@dots{}] =} realjoin (@var{A}, @var{B}, @dots{}) "Real" relational inner join, without key restrictions Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes. Currently does not support tables which have RowNames. This may be added in the future. This is a Tablicious/Octave extension, not defined in the Matlab table interface. Name/value option arguments are: @var{Keys}, @var{LeftKeys}, @var{RightKeys}, @var{LeftVariables}, @var{RightVariables}. FIXME: Document those options. Returns: @var{out} - A table that is the result of joining A and B @var{ixs} - Indexes into A for each row in out @end deftypefn @node table.removevars @subsubsection table.removevars @deftypefn {Method} {@var{out} =} removevars (@var{obj}, @var{vars}) Remove variables from table. Deletes the variables specified by @var{vars} from @var{obj}. @var{vars} may be a char, cellstr, numeric index vector, or logical index vector. @end deftypefn @node table.renamevars @subsubsection table.renamevars @deftypefn {Method} {@var{out} =} renamevars (@var{obj}, @var{renameMap}) Rename variables in a table. Renames selected variables in the table @var{obj} based on the mapping provided in @var{renameMap}. @var{renameMap} is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column. Variables which are not included in @var{renameMap} are not modified. It is an error if any variables named in the first column of @var{renameMap} are not present in @var{obj}. Renames @end deftypefn @node table.repelem @subsubsection table.repelem @deftypefn {Method} {@var{out} =} repelem (@var{obj}, @var{R}) @deftypefnx {Method} {@var{out} =} repelem (@var{obj}, @var{R_1}, @var{R_2}) Replicate elements of matrix. Replicates elements of this table matrix by applying repelem to each of its variables. This Only two dimensions are supported for @code{repelem} on tables. @end deftypefn @node table.repmat @subsubsection table.repmat @deftypefn {Method} {@var{out} =} repmat (@var{obj}, @var{sz}) Replicate matrix. Repmats a table by repmatting each of its variables vertically. For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table. Returns a new table with the same variable names and types as tbl, but with a possibly different row count. @end deftypefn @node table.restrict @subsubsection table.restrict @deftypefn {Method} {@var{out} =} restrict (@var{obj}, @var{expr}) @deftypefnx {Method} {@var{out} =} restrict (@var{obj}, @var{ix}) Subset rows using variable expression or index. Subsets a table row-wise, using either an index vector or an expression involving @var{obj}’s variables. If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with `subsetrows (this, index)`.) If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with @code{tblish.evalWithTableVars}. The output of expr must be a numeric or logical index vector (This form is a shorthand for @code{out = subsetrows (this, tblish.evalWithTableVars (this, expr))}.) TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra. Examples: @example [s,p,sp] = tblish.examples.SpDb; prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")')) @end example This is a Tablicious/Octave extension, not defined in the Matlab table interface. See also: tblish.evalWithTableVars @end deftypefn @node table.rowfun @subsubsection table.rowfun @deftypefn {Method} {@var{out} =} varfun (@var{func}, @var{obj}) @deftypefnx {Method} {@var{out} =} varfun (@dots{}, @code{'OptionName'}, @var{OptionValue}, @dots{}) Apply function to rows in table and collect outputs. This applies the function @var{func} to the elements of each row of @var{obj}’s variables, and collects the concatenated output(s) into the variable(s) of a new table. @var{func} is a function handle. It should take as many inputs as there are variables in @var{obj}. Or, it can take a single input, and you must specify @code{'SeparateInputs', false} to have the input variables concatenated before being passed to @var{func}. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the @code{'NumOutputs'} or @code{'OutputVariableNames'} options. Supported name/value options: @table @code @item 'OutputVariableNames' Names of table variables to store combined function output arguments in. @item 'NumOutputs' Number of output arguments to call function with. If omitted, defaults to number of items in @var{OutputVariableNames} if it is supplied, otherwise defaults to 1. @item 'SeparateInputs' If true, input variables are passed as separate input arguments to @var{func}. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true. @item 'ErrorHandler' A function to call as a fallback when calling @var{func} results in an error. It is passed the caught exception, along with the original inputs passed to @var{func}, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings. @item 'ExtractCellContents' Whether to “pop out” the contents of the elements of cell variables in @var{obj}, or to leave them as cells. True/false; default is false. If you specify this option, then @var{obj} may not have any multi-column cell-valued variables. @item 'InputVariables' If specified, only these variables from @var{obj} are used as the function inputs, instead of using all variables. @item 'GroupingVariables' Not yet implemented. @item 'OutputFormat' The format of the output. May be @code{'table'} (the default), @code{'uniform'}, or @code{'cell'}. If it is @code{'uniform'} or @code{'cell'}, the output variables are returned in multiple output arguments from @code{'rowfun'}. @end table Returns a @code{table} whose variables are the collected output arguments of @var{func} if @var{OutputFormat} is @code{'table'}. Otherwise, returns multiple output arguments of whatever type @var{func} returned (if @var{OutputFormat} is @code{'uniform'}) or cells (if @var{OutputFormat} is @code{'cell'}). @end deftypefn @node table.rows2vars @subsubsection table.rows2vars @deftypefn {Method} {@var{out} =} rows2vars (@var{obj}) @deftypefnx {Method} {@var{out} =} rows2vars (@var{obj}, @ @code{'VariableNamesSource'}, @var{VariableNamesSource}) @deftypefnx {Method} {@var{out} =} rows2vars (@dots{}, @ @code{'DataVariables'}, @var{DataVariables}) Reorient table, swapping rows and variables dimensions. This flips the dimensions of the given table @var{obj}, swapping the orientation of the contained data, and swapping the row names/labels and variable names. The variable names become a new variable named “OriginalVariableNames”. The row names are drawn from the column @var{VariableNamesSource} if it is specified. Otherwise, if @var{obj} has row names, they are used. Otherwise, new variable names in the form “VarN” are generated. If all the variables in @var{obj} are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values. @end deftypefn @node table.semijoin @subsubsection table.semijoin @deftypefn {Method} {[@var{outA}, @var{ixA}, @var{outB}, @var{ixB}] =} semijoin @ (@var{A}, @var{B}) Natural semijoin. Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names. This method also computes the semijoin of B and A, for convenience. Returns: @var{outA} - all the rows in A with matching row(s) in B @var{ixA} - the row indexes into A which produced @var{outA} @var{outB} - all the rows in B with matching row(s) in A @var{ixB} - the row indexes into B which produced @var{outB} This is a Tablicious/Octave extension, not defined in the Matlab table interface. @end deftypefn @node table.setdiff @subsubsection table.setdiff @deftypefn {Method} {[@var{C}, @var{ia}] =} setdiff (@var{A}, @var{B}) Set difference. Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B. Returns: @var{C} - A table containing the unique row values in A that were not in B. @var{ia} - Row indexes into A of the rows from A included in C. @end deftypefn @node table.setDimensionNames @subsubsection table.setDimensionNames @deftypefn {Method} {@var{out} =} setDimensionNames (@var{obj}, @var{names}) @deftypefnx {Method} {@var{out} =} setDimensionNames (@var{obj}, @var{ix}, @var{names}) Set dimension names. Sets the @code{DimensionNames} for this table to a new list of names. @var{names} is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned. @var{ix} is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in @var{ix} may never be higher than 2. This method exists because the @code{obj.Properties.DimensionNames = @dots{}} assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the @code{obj.Properties.DimensionNames = @dots{}} assignment form. @end deftypefn @node table.setRowNames @subsubsection table.setRowNames @deftypefn {Method} {@var{out} =} setRowNames (@var{obj}, @var{names}) Set row names. Sets the row names on @var{obj} to @var{names}. @var{names} is a cellstr column vector, with the same number of rows as @var{obj} has. @end deftypefn @node table.setvar @subsubsection table.setvar @deftypefn {Method} {@var{out} =} setvar (@var{obj}, @var{varRef}, @var{value}) Set value for a variable in table. This sets (adds or replaces) the value for a variable in @var{obj}. It may be used to change the value of an existing variable, or add a new variable. This method exists primarily because I cannot get @code{obj.foo = value} to work, apparently due to an issue with Octave's subsasgn support. @var{varRef} is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index. @var{value} is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in @var{obj}. @end deftypefn @node table.setVariableNames @subsubsection table.setVariableNames @deftypefn {Method} {@var{out} =} setVariableNames (@var{obj}, @var{names}) @deftypefnx {Method} {@var{out} =} setVariableNames (@var{obj}, @var{ix}, @var{names}) Set variable names. Sets the @code{VariableNames} for this table to a new list of names. @var{names} is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned. @var{ix} is an index vector indicating which variable names to set. If omitted, it sets all of them present in @var{obj}. This method exists because the @code{obj.Properties.VariableNames = @dots{}} assignment form does not work, possibly due to an Octave bug. @end deftypefn @node table.setxor @subsubsection table.setxor @deftypefn {Method} {[@var{C}, @var{ia}, @var{ib}] =} setxor (@var{A}, @var{B}) Set exclusive OR. Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both. Returns: @var{C} - A table containing all the unique row values in the set XOR of A and B. @var{ia} - Row indexes into A of the rows from A included in C. @var{ib} - Row indexes into B of the rows from B included in C. @end deftypefn @node table.size @subsubsection table.size @deftypefn {Method} {@var{sz} =} size (@var{obj}) @deftypefnx {Method} {[@var{nr}, @var{nv}] =} size (@var{obj}) @deftypefnx {Method} {[@var{nr}, @var{nv}, @dots{}] =} size (@var{obj}) Gets the size of a table. For tables, the size is [number-of-rows x number-of-variables]. This is the same as @code{[height(obj), width(obj)]}. @end deftypefn @node table.splitapply @subsubsection table.splitapply @deftypefn {Method} {@var{out} =} splitapply (@var{func}, @var{obj}, @var{G}) @deftypefnx {Method} {[@var{Y1}, @dots{}, @var{YM}] =} splitapply (@var{func}, @var{obj}, @var{G}) Split table data into groups and apply function. Performs a splitapply, using the variables in @var{obj} as the input X variables to the @code{splitapply} function call. See also: splitapply, table.groupby, tblish.table.grpstats @end deftypefn @node table.splitvars @subsubsection table.splitvars @deftypefn {Method} {@var{out} =} splitvars (@var{obj}) @deftypefnx {Method} {@var{out} =} splitvars (@var{obj}, @var{vars}) @deftypefnx {Method} {@var{out} =} splitvars (@dots{}, @ @code{'NewVariableNames'}, @var{NewVariableNames}) Split multicolumn table variables. Splits multicolumn table variables into new single-column variables. If @var{vars} is supplied, splits only those variables. If @var{vars} is not supplied, splits all multicolumn variables. @end deftypefn @node table.squeeze @subsubsection table.squeeze @deftypefn {Method} {@var{obj} =} squeeze (@var{obj}) Remove singleton dimensions. For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze. @end deftypefn @node table.stack @subsubsection table.stack @deftypefn {Method} {@var{out} =} stack (@var{obj}, @var{vars}) @deftypefnx {Method} {@var{out} =} stack (@dots{}, @ @code{'NewDataVariableName'}, @var{NewDataVariableName}) @deftypefnx {Method} {@var{out} =} stack (@dots{}, @ @code{'IndexVariableName'}, @var{IndexVariableName}) Stack multiple table variables into a single variable. @end deftypefn @node table.summary @subsubsection table.summary @deftypefn {Method} summary (@var{obj}) Display a summary of a table's data. Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use. This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of `summary`, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output. @end deftypefn @node table.table @subsubsection table.table @deftypefn {Constructor} {@var{obj} =} table () Constructs a new empty (0 rows by 0 variables) table. @end deftypefn @deftypefn {Constructor} {@var{obj} =} table (@var{var1}, @var{var2}, @dots{}, @var{varN}) Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used. Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value '__tblish_backdoor__', that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious. @end deftypefn @deftypefn {Constructor} {@var{obj} =} table (@code{'Size'}, @var{sz}, @ @code{'VariableTypes'}, @var{varTypes}) Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type. @end deftypefn @deftypefn {Constructor} {@var{obj} =} table (@dots{}, @code{'VariableNames'}, @var{varNames}) @deftypefnx {Constructor} {@var{obj} =} table (@dots{}, @code{'RowNames'}, @var{rowNames}) Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names. @end deftypefn @node table.table2array @subsubsection table.table2array @deftypefn {Method} {@var{s} =} table2struct (@var{obj}) Converts @var{obj} to a homogeneous array. @end deftypefn @node table.table2cell @subsubsection table.table2cell @deftypefn {Method} {@var{c} =} table2cell (@var{obj}) Converts table to a cell array. Each variable in @var{obj} becomes one or more columns in the output, depending on how many columns that variable has. Returns a cell array with the same number of rows as @var{obj}, and with as many or more columns as @var{obj} has variables. @end deftypefn @node table.table2struct @subsubsection table.table2struct @deftypefn {Method} {@var{s} =} table2struct (@var{obj}) @deftypefnx {Method} {@var{s} =} table2struct (@dots{}, @code{'ToScalar'}, @var{trueOrFalse}) Converts @var{obj} to a scalar structure or structure array. Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, 'ToScalar', true); s.RowNames = tbl.Properties.RowNames; Returns a scalar struct or struct array, depending on the value of the @code{ToScalar} option. @end deftypefn @node table.union @subsubsection table.union @deftypefn {Method} {[@var{C}, @var{ia}, @var{ib}] =} union (@var{A}, @var{B}) Set union. Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables. Returns: @var{C} - A table containing all the unique row values present in A or B. @var{ia} - Row indexes into A of the rows from A included in C. @var{ib} - Row indexes into B of the rows from B included in C. @end deftypefn @node table.varfun @subsubsection table.varfun @deftypefn {Method} {@var{out} =} varfun (@var{fcn}, @var{obj}) @deftypefnx {Method} {@var{out} =} varfun (@dots{}, @code{'OutputFormat'}, @var{outputFormat}) @deftypefnx {Method} {@var{out} =} varfun (@dots{}, @code{'InputVariables'}, @var{vars}) @deftypefnx {Method} {@var{out} =} varfun (@dots{}, @code{'ErrorHandler'}, @var{errorFcn}) Apply function to table variables. Applies the given function @var{fcn} to each variable in @var{obj}, collecting the output in a table, cell array, or array of another type. @end deftypefn @node table.varnames @subsubsection table.varnames @deftypefn {Method} {@var{out} =} varnames (@var{obj}) @deftypefnx {Method} {@var{out} =} varnames (@var{obj}, @var{varNames}) Get or set variable names for a table. Returns cellstr in the getter form. Returns an updated datetime in the setter form. @end deftypefn @node table.vertcat @subsubsection table.vertcat @deftypefn {Method} {@var{out} =} vertcat (@var{varargin}) Vertical concatenation. Combines tables by vertically concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a `vertcat()` on the variables from the corresponding input tables, in the order they were input in. @end deftypefn @node table.width @subsubsection table.width @deftypefn {Method} {@var{out} =} width (@var{obj}) Number of variables in table. Note that this is not the sum of the number of columns in each variable. It is just the number of variables. @end deftypefn @node tableOuterFillValue @subsection tableOuterFillValue @emph{Not documented} @node tail @subsection tail @deftypefn {Function} {@var{out} =} tail (@var{A}) @deftypefnx {Function} {@var{out} =} tail (@var{A}, @var{k}) Get last K rows of an array. Returns the array @var{A}, subsetted to its last @var{k} rows. This means subsetting it to the last @code{(min (k, size (A, 1)))} elements along dimension 1, and leaving all other dimensions unrestricted. @var{A} is the array to subset. @var{k} is the number of rows to get. @var{k} defaults to 8 if it is omitted or empty. If there are less than @var{k} rows in @var{A}, returns all rows. Returns an array of the same type as @var{A}, unless ()-indexing @var{A} produces an array of a different type, in which case it returns that type. See also: head @end deftypefn @node tblish.dataset @subsection tblish.dataset @deftp {Class} tblish.dataset The @code{tblish.dataset} class provides convenient access to the various datasets included with Tablicious. This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list. @end deftp @node tblish.dataset.airmiles @subsubsection tblish.dataset.airmiles @deftypefn {Static Method} {@var{out} =} airmiles () Passenger Miles on Commercial US Airlines, 1937-1960 @subsubheading Description The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960. @subsubheading Source @cite{F.A.A. Statistical Handbook of Aviation}. @subsubheading Examples @example t = tblish.dataset.airmiles; plot (t.year, t.miles); title ("airmiles data"); xlabel ("Passenger-miles flown by U.S. commercial airlines") ylabel ("airmiles"); @end example @end deftypefn @node tblish.dataset.AirPassengers @subsubsection tblish.dataset.AirPassengers @deftypefn {Static Method} {@var{out} =} AirPassengers () Monthly Airline Passenger Numbers 1949-1960 @subsubheading Description The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960. @subsubheading Source Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). @cite{Time Series Analysis, Forecasting and Control}. Third Edition. San Francisco: Holden-Day. Series G. @subsubheading Examples @example ## TODO: This example needs to be ported from R. @end example @end deftypefn @node tblish.dataset.airquality @subsubsection tblish.dataset.airquality @deftypefn {Static Method} {@var{out} =} airquality () New York Air Quality Measurements from 1973 @subsubheading Description Daily air quality measurements in New York, May to September 1973. @subsubheading Format @table @code @item Ozone Ozone concentration (ppb) @item SolarR Solar R (lang) @item Wind Wind (mph) @item Temp Temperature (degrees F) @item Month Month (1-12) @item Day Day of month (1-31) @end table @subsubheading Source New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data). @subsubheading References Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). @cite{Graphical Methods for Data Analysis}. Belmont, CA: Wadsworth. @subsubheading Examples @example t = tblish.dataset.airquality # Plot a scatter-plot plus a fitted line, for each combination of measurements vars = @{"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"@}; n_vars = numel (vars); figure; for i = 1:n_vars for j = 1:n_vars if (i == j) continue endif ix_subplot = (n_vars * (j - 1) + i); hax = subplot (n_vars, n_vars, ix_subplot); var_x = vars@{i@}; var_y = vars@{j@}; x = t.(var_x); y = t.(var_y); scatter (hax, x, y, 10); # Fit a cubic line to these points # TODO: Find out exactly what kind of fitted line R's example is using, and # port that. hold on p = polyfit (x, y, 3); x_hat = unique(x); p_y = polyval (p, x_hat); plot (hax, x_hat, p_y, "r"); endfor endfor @end example @end deftypefn @node tblish.dataset.anscombe @subsubsection tblish.dataset.anscombe @deftypefn {Static Method} {@var{out} =} anscombe () Anscombe’s Quartet of “Identical” Simple Linear Regressions @subsubheading Description Four sets of x/y pairs which have the same statistical properties, but are very different. @subsubheading Format The data comes in an array of 4 structs, each with fields as follows: @table @code @item x The X values for this pair. @item y The Y values for this pair. @end table @subsubheading Source Tufte, Edward R. (1989). @cite{The Visual Display of Quantitative Information}. 13–14. Cheshire, CT: Graphics Press. @subsubheading References Anscombe, Francis J. (1973). Graphs in statistical analysis. @cite{The American Statistician}, 27, 17–21. @subsubheading Examples @example data = tblish.dataset.anscombe # Pick good limits for the plots all_x = [data.x]; all_y = [data.y]; x_limits = [min(0, min(all_x)) max(all_x)*1.2]; y_limits = [min(0, min(all_y)) max(all_y)*1.2]; # Do regression on each pair and plot the input and results figure; haxs = NaN (1, 4); for i_pair = 1:4 x = data(i_pair).x; y = data(i_pair).y; # TODO: Port the anova and other characterizations from the R code # TODO: Do a linear regression and plot its line hax = subplot (2, 2, i_pair); haxs(i_pair) = hax; xlabel (sprintf ("x%d", i_pair)); ylabel (sprintf ("y%d", i_pair)); scatter (x, y, "r"); endfor # Fiddle with the plot axes parameters linkaxes (haxs); xlim (haxs(1), x_limits); ylim (haxs(1), y_limits); @end example @end deftypefn @node tblish.dataset.attenu @subsubsection tblish.dataset.attenu @deftypefn {Static Method} {@var{out} =} attenu () Joyner-Boore Earthquake Attenuation Data @subsubheading Description Event data for 23 earthquakes in California, showing peak accelerations. @subsubheading Format @table @code @item event Event number @item mag Moment magnitude @item station Station identifier @item dist Station-hypocenter distance (km) @item accel Peak acceleration (g) @end table @subsubheading Source Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA. @subsubheading References Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. @cite{Bulletin of the Seismological Society of America}, 72, S269–S268. @subsubheading Examples @example # TODO: Port the example code from R # It does coplot() and pairs(), which are higher-level plotting tools # than core Octave provides. This could turn into a long example if we # just use base Octave here. @end example @end deftypefn @node tblish.dataset.attitude @subsubsection tblish.dataset.attitude @deftypefn {Static Method} {@var{out} =} attitude () The Chatterjee-Price Attitude Data @subsubheading Description Aggregated data from a survey of clerical employees at a large financial organization. @subsubheading Format @table @code @item rating Overall rating. @item complaints Handling of employee complaints. @item privileges Does not allow special privileges. @item learning Opportunity to learn. @item raises Raises based on performance. @item critical Too critical. @item advance Advancement. @end table @subsubheading Source Chatterjee, S. and Price, B. (1977). @cite{Regression Analysis by Example}. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).) @subsubheading Examples @example t = tblish.dataset.attitude tblish.examples.plot_pairs (t); # TODO: Display table summary # TODO: Whatever those statistical linear-model plots are that R is doing @end example @end deftypefn @node tblish.dataset.austres @subsubsection tblish.dataset.austres @deftypefn {Static Method} {@var{out} =} austres () Australian Population @subsubheading Description Numbers of Australian residents measured quarterly from March 1971 to March 1994. @subsubheading Format @table @code @item date The month of the observation. @item residents The number of residents. @end table @subsubheading Source Brockwell, P. J. and Davis, R. A. (1996). @cite{Introduction to Time Series and Forecasting}. New York: Springer-Verlag. @subsubheading Examples @example t = tblish.dataset.austres plot (datenum (t.date), t.residents); datetick x xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents"); @end example @end deftypefn @node tblish.dataset.beavers @subsubsection tblish.dataset.beavers @deftypefn {Static Method} {@var{out} =} beavers () Body Temperature Series of Two Beavers @subsubheading Description Body temperature readings for two beavers. @subsubheading Format @table @code @item day Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2). @item time Time of observation, in the form 0330 for 3:30am @item temp Measured body temperature in degrees Celsius. @item activ Indicator of activity outside the retreat. @end table @subsubheading Source P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) @cite{Case Studies in Biometry}. New York: John Wiley and Sons. @subsubheading Examples @example # TODO: This example needs to be ported from R. @end example @end deftypefn @node tblish.dataset.BJsales @subsubsection tblish.dataset.BJsales @deftypefn {Static Method} {@var{out} =} BJsales () Sales Data with Leading Indicator @subsubheading Description Sales Data with Leading Indicator @subsubheading Format @table @code @item record Index of the record. @item lead Leading indicator. @item sales Sales volume. @end table @subsubheading Source The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. @subsubheading References Box, G. E. P. and Jenkins, G. M. (1976). @cite{Time Series Analysis, Forecasting and Control}. San Francisco: Holden-Day. p. 537. Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series: Theory and Methods}, Second edition. New York: Springer-Verlag. p. 414. @subsubheading Examples @example # TODO: Come up with example code here @end example @end deftypefn @node tblish.dataset.BOD @subsubsection tblish.dataset.BOD @deftypefn {Static Method} {@var{out} =} BOD () Biochemical Oxygen Demand @subsubheading Description Contains biochemical oxygen demand versus time in an evaluation of water quality. @subsubheading Format @table @code @item Time Time of the measurement (in days). @item demand Biochemical oxygen demand (mg/l). @end table @subsubheading Source Bates, D.M. and Watts, D.G. (1988). @cite{Nonlinear Regression Analysis and Its Applications}. New York: John Wiley & Sons. Appendix A1.4. Originally from: Marske (1967). @cite{Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface}, M.Sc. Thesis, University of Wisconsin – Madison. @subsubheading Examples @example # TODO: Port this example from R @end example @end deftypefn @node tblish.dataset.cars @subsubsection tblish.dataset.cars @deftypefn {Static Method} {@var{out} =} cars () Speed and Stopping Distances of Cars @subsubheading Description Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s. @subsubheading Format @table @code @item speed Speed (mph). @item dist Stopping distance (ft). @end table @subsubheading Source Ezekiel, M. (1930). @cite{Methods of Correlation Analysis}. New York: Wiley. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.cars; # TODO: Add Lowess smoothed lines to the plots figure; plot (t.speed, t.dist, "o"); xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)"); title ("cars data"); figure; loglog (t.speed, t.dist, "o"); xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)"); title ("cars data (logarithmic scales)"); # TODO: Do the linear model plot # Polynomial regression figure; plot (t.speed, t.dist, "o"); xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)"); title ("cars polynomial regressions"); hold on xlim ([0 25]); x2 = linspace (0, 25, 200); for degree = 1:4 [P, S, mu] = polyfit (t.speed, t.dist, degree); y2 = polyval(P, x2, [], mu); plot (x2, y2); endfor @end example @end deftypefn @node tblish.dataset.ChickWeight @subsubsection tblish.dataset.ChickWeight @deftypefn {Static Method} {@var{out} =} ChickWeight () Weight versus age of chicks on different diets @subsubheading Format @table @code @item weight a numeric vector giving the body weight of the chick (gm). @item Time a numeric vector giving the number of days since birth when the measurement was made. @item Chick an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet. @item Diet a factor with levels 1, ..., 4 indicating which experimental diet the chick received. @end table @subsubheading Source Crowder, M. and Hand, D. (1990). @cite{Analysis of Repeated Measures}. London: Chapman and Hall. (example 5.3) Hand, D. and Crowder, M. (1996), @cite{Practical Longitudinal Data Analysis}. London: Chapman and Hall. (table A.2) Pinheiro, J. C. and Bates, D. M. (2000) @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. @subsubheading Examples @example t = tblish.dataset.ChickWeight tblish.examples.coplot (t, "Time", "weight", "Chick"); @end example @end deftypefn @node tblish.dataset.chickwts @subsubsection tblish.dataset.chickwts @deftypefn {Static Method} {@var{out} =} chickwts () Chicken Weights by Feed Type @subsubheading Description An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens. Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types. @subsubheading Format @table @code @item weight Chick weight at six weeks (gm). @item feed Feed type. @end table @subsubheading Source Anonymous (1948) @cite{Biometrika}, 35, 214. @subsubheading References McNeil, D. R. (1977). @code{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example # This example requires the statistics package from Octave Forge t = tblish.dataset.chickwts # Boxplot by group figure g = groupby (t, "feed", @{ "weight", @@(x) @{x@}, "weight" @}); boxplot (g.weight, 1); xlabel ("feed"); ylabel ("Weight at six weeks (gm)"); xticklabels ([@{""@} cellstr(g.feed')]); # Linear model # TODO: This linear model thing and anova @end example @end deftypefn @node tblish.dataset.co2 @subsubsection tblish.dataset.co2 @deftypefn {Static Method} {@var{out} =} co2 () Mauna Loa Atmospheric CO2 Concentration @subsubheading Description Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997. @subsubheading Format @table @code @item date Date of the month of the observation, as datetime. @item co2 CO2 concentration (ppm). @end table @subsubheading Details The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964. @subsubheading Source Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220. @url{ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2}. @subsubheading References Cleveland, W. S. (1993). @code{Visualizing Data}. New Jersey: Summit Press. @subsubheading Examples @example t = tblish.dataset.co2; plot (datenum (t.date), t.co2); datetick ("x"); xlabel ("Time"); ylabel ("Atmospheric concentration of CO2"); title ("co2 data set"); @end example @end deftypefn @node tblish.dataset.crimtab @subsubsection tblish.dataset.crimtab @deftypefn {Static Method} {@var{out} =} crimtab () Student’s 3000 Criminals Data @subsubheading Description Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales. @subsubheading Format This dataset contains three separate variables. The @code{finger_length} and @code{body_height} variables correspond to the rows and columns of the @code{count} matrix. @table @code @item finger_length Midpoints of intervals of finger lengths (cm). @item body_height Body heights (cm). @item count Number of prisoners in this bin. @end table @subsubheading Details Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations: “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.” The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4' 7"9/16 -- 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4' 8"). MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.” @subsubheading Source @url{http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt} thanks to Jean R. Lobry and Anne-Béatrice Dufour. @subsubheading References Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. @cite{The Journal of the Anthropological Institute of Great Britain and Ireland}, 30, 161–198. MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. @cite{Biometrika}, 1(2), 177–227. Student (1908). The probable error of a mean. @code{Biometrika}, 6, 1–25. @subsubheading Examples @example # TODO: Port this from R @end example @end deftypefn @node tblish.dataset.cupcake @subsubsection tblish.dataset.cupcake @deftypefn {Static Method} {@var{out} =} cupcake () Google Search popularity for "cupcake", 2004-2019 @subsubheading Description Monthly popularity of worldwide Google search results for "cupcake", 2004-2019. @subsubheading Format @table @code @item Month Month when searches took place @item Cupcake An indicator of search volume, in unknown units @end table @subsubheading Source Google Trends, @url{https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all}, retrieved 2019-05-04 by Andrew Janke. @subsubheading Examples @example t = tblish.dataset.cupcake plot (datenum (t.Month), t.Cupcake) title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric"); @end example @end deftypefn @node tblish.dataset.discoveries @subsubsection tblish.dataset.discoveries @deftypefn {Static Method} {@var{out} =} discoveries () Yearly Numbers of Important Discoveries @subsubheading Description The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959. @subsubheading Format @table @code @item year Year. @item discoveries Number of “great” discoveries that year. @end table @subsubheading Source @cite{The World Almanac and Book of Facts}, 1975 Edition, pages 315–318. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.discoveries; plot (t.year, t.discoveries); xlabel ("Time"); ylabel ("Number of important discoveries"); title ("discoveries data set"); @end example @end deftypefn @node tblish.dataset.DNase @subsubsection tblish.dataset.DNase @deftypefn {Static Method} {@var{out} =} DNase () Elisa assay of DNase @subsubheading Description Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum. @subsubheading Format @table @code @item Run Ordered @code{categorical} indicating the assay run. @item conc Known concentration of the protein (ng/ml). @item density Measured optical density in the assay (dimensionless). @end table @subsubheading Source Davidian, M. and Giltinan, D. M. (1995). @cite{Nonlinear Models for Repeated Measurement Data}. London: Chapman & Hall. (section 5.2.4, p. 134) Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. @subsubheading Examples @example t = tblish.dataset.DNase; # TODO: Port this from R tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @@scatter); tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @@loglog, ... "PlotArgs", @{"o"@}); @end example @end deftypefn @node tblish.dataset.esoph @subsubsection tblish.dataset.esoph @deftypefn {Static Method} {@var{out} =} esoph () Smoking, Alcohol and Esophageal Cancer @subsubheading Description Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France. @subsubheading Format @table @code @item item Age group (years). @item alcgp Alcohol consumption (gm/day). @item tobgp Tobacco consumption (gm/day). @item ncases Number of cases. @item ncontrols Number of controls @end table @subsubheading Source Breslow, N. E. and Day, N. E. (1980) @cite{Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies}. Oxford: IARC Lyon / Oxford University Press. @subsubheading Examples @example # TODO: Port this from R # TODO: Port the anova output # TODO: Port the fancy plot # This involves a "mosaic plot", which is not supported by Octave, so this will # take some work. @end example @end deftypefn @node tblish.dataset.euro @subsubsection tblish.dataset.euro @deftypefn {Static Method} {@var{out} =} euro () Conversion Rates of Euro Currencies @subsubheading Description Conversion rates between the various Euro currencies. @subsubheading Format This data comes in two separate variables. @table @code @item euro An 11-long vector of the value of 1 Euro in all participating currencies. @item euro_cross An 11-by-11 matrix of conversion rates between various Euro currencies. @item euro_date The date upon which these Euro conversion rates were fixed. @end table @subsubheading Details The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits. @subsubheading Source Unknown. This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source. @subsubheading Examples @example # TODO: Port this from R # TODO: Example conversion # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa @end example @end deftypefn @node tblish.dataset.eurodist @subsubsection tblish.dataset.eurodist @deftypefn {Static Method} {@var{out} =} eurodist () Distances Between European Cities and Between US Cities @subsubheading Description @code{eurodist} gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia. @code{UScitiesD} gives “straight line” distances between 10 cities in the US. @subsubheading Format @table @code @item eurodist ????? @end table TODO: Finish this. @subsubheading Source Crystal, D. Ed. (1990). @cite{The Cambridge Encyclopaedia}. Cambridge: Cambridge University Press. The US cities distances were provided by Pierre Legendre. @subsubheading Examples @end deftypefn @node tblish.dataset.EuStockMarkets @subsubsection tblish.dataset.EuStockMarkets @deftypefn {Static Method} {@var{out} =} EuStockMarkets () Daily Closing Prices of Major European Stock Indices @subsubheading Description Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted. @subsubheading Format A multivariate time series with 1860 observations on 4 variables. The starting date is the 130th day of 1991, with a frequency of 260 observations per year. @subsubheading Source The data were kindly provided by Erste Bank AG, Vienna, Austria. @subsubheading Examples @example t = tblish.dataset.EuStockMarkets; # The fact that we're doing this munging means that table might have # been the wrong structure for this data in the first place t2 = removevars (t, "day"); index_names = t2.Properties.VariableNames; day = 1:height (t2); price = table2array (t2); price0 = price(1,:); rel_price = price ./ repmat (price0, [size(price, 1) 1]); figure; plot (day, rel_price); legend (index_names); xlabel ("Business day"); ylabel ("Relative price"); @end example @end deftypefn @node tblish.dataset.faithful @subsubsection tblish.dataset.faithful @deftypefn {Static Method} {@var{out} =} faithful () Old Faithful Geyser Data @subsubheading Description Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA. @subsubheading Format @table @code @item eruptions Eruption time (mins). @item waiting Waiting time to next eruption (mins). @end table @subsubheading Source W. Härdle. @subsubheading References Härdle, W. (1991). @cite{Smoothing Techniques with Implementation in S}. New York: Springer. Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. @cite{Applied Statistics}, 39, 357–365. @subsubheading Examples @example t = tblish.dataset.faithful; # Munge the data, rounding eruption time to the second e60 = 60 * t.eruptions; ne60 = round (e60); # TODO: Port zapsmall to Octave eruptions = ne60 / 60; # TODO: Display mean relative difference and bins summary # Histogram of rounded eruption times figure hist (ne60, max (ne60)) xlabel ("Eruption time (sec)") ylabel ("n") title ("faithful data: Eruptions of Old Faithful") # Scatter plot of eruption time vs waiting time figure scatter (t.eruptions, t.waiting) xlabel ("Eruption time (min)") ylabel ("Waiting time to next eruption (min)") title ("faithful data: Eruptions of Old Faithful") # TODO: Port Lowess smoothing to Octave @end example @end deftypefn @node tblish.dataset.Formaldehyde @subsubsection tblish.dataset.Formaldehyde @deftypefn {Static Method} {@var{out} =} Formaldehyde () Determination of Formaldehyde @subsubheading Description These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer. @subsubheading Format @table @code @item record Observation record number. @item carb Carbohydrate (ml). @item optden Optical Density @end table @subsubheading Source Bennett, N. A. and N. L. Franklin (1954). @cite{Statistical Analysis in Chemistry and the Chemical Industry}. New York: Wiley. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.Formaldehyde; figure scatter (t.carb, t.optden) # TODO: Add a linear model line xlabel ("Carbohydrate (ml)") ylabel ("Optical Density") title ("Formaldehyde data") # TODO: Add linear model summary output # TOD: Add linear model summary plot @end example @end deftypefn @node tblish.dataset.freeny @subsubsection tblish.dataset.freeny @deftypefn {Static Method} {@var{out} =} freeny () Freeny's Revenue Data @subsubheading Description Freeny’s data on quarterly revenue and explanatory variables. @subsubheading Format Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential). @table @code @item date Start date of the quarter for the observation. @item y Observed quarterly revenue. TODO: Determine units (probably millions of USD?) @item lag_quarterly_revenue Quarterly revenue (@code{y}), lagged 1 quarter. @item price_index A price index @item income_level ??? TODO: Fill this in @item market_potential ??? TODO: Fill this in @end table @subsubheading Source Freeny, A. E. (1977). @cite{A Portable Linear Regression Package with Test Programs}. Bell Laboratories memorandum. @subsubheading References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S Language}. Monterey: Wadsworth & Brooks/Cole. @subsubheading Examples @example t = tblish.dataset.freeny; summary (t) tblish.examples.plot_pairs (removevars (t, "date")) # TODO: Create linear model and print summary # TODO: Linear model plot @end example @end deftypefn @node tblish.dataset.HairEyeColor @subsubsection tblish.dataset.HairEyeColor @deftypefn {Static Method} {@var{out} =} HairEyeColor () Hair and Eye Color of Statistics Students @subsubheading Description Distribution of hair and eye color and sex in 592 statistics students. @subsubheading Format This data set comes in multiple variables @table @code @item n A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex. @item hair Hair colors for the indexes along dimension 1. @item eye Eye colors for the indexes along dimension 2. @item sex Sexes for the indexes along dimension 3. @end table @subsubheading Details The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes. This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots. @subsubheading Source @url{http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas} Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000). @subsubheading References Snee, R. D. (1974). Graphical display of two-way contingency tables. @cite{The American Statistician}, 28, 9–12. Friendly, M. (1992a). Graphical methods for categorical data. @cite{SAS User Group International Conference Proceedings}, 17, 190–200. @url{http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html} Friendly, M. (1992b). Mosaic displays for loglinear models. @cite{Proceedings of the Statistical Graphics Section}, American Statistical Association, pp. 61–68. @url{http://www.math.yorku.ca/SCS/Papers/asa92.html} Friendly, M. (2000). @cite{Visualizing Categorical Data}. SAS Institute, ISBN 1-58025-660-0. @subsubheading Examples @example tblish.dataset.HairEyeColor # TODO: Aggregate over sex and display a table of counts # TODO: Port mosaic plot to Octave @end example @end deftypefn @node tblish.dataset.Harman23cor @subsubsection tblish.dataset.Harman23cor @deftypefn {Static Method} {@var{out} =} Harman23cor () Harman Example 2.3 @subsubheading Description A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen. @subsubheading Format @table @code @item cov An 8-by-8 correlation matrix. @item names Names of the variables corresponding to the indexes of the correlation matrix’s dimensions. @end table @subsubheading Source Harman, H. H. (1976). @cite{Modern Factor Analysis}, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3. @subsubheading Examples @example tblish.dataset.Harman23cor; # TODO: Port factanal to Octave @end example @end deftypefn @node tblish.dataset.Harman74cor @subsubsection tblish.dataset.Harman74cor @deftypefn {Static Method} {@var{out} =} Harman74cor () Harman Example 7.4 @subsubheading Description A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford. @subsubheading Format @table @code @item cov A 2-dimensional correlation matrix. @item vars Names of the variables corresponding to the indexes along the dimensions of @code{cov}. @end table @subsubheading Source Harman, H. H. (1976). @cite{Modern Factor Analysis}, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4. @subsubheading Examples @example tblish.dataset.Harman74cor; # TODO: Port factanal to Octave @end example @end deftypefn @node tblish.dataset.Indometh @subsubsection tblish.dataset.Indometh @deftypefn {Static Method} {@var{out} =} Indometh () Pharmacokinetics of Indomethacin @subsubheading Description Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’). @subsubheading Format @table @code @item Subject Subject identifier. @item time Time since drug administration at which samples were drawn (hours). @item conc Plasma concentration of indomethacin (mcg/ml). @end table @subsubheading Details Each of the six subjects were given an intravenous injection of indometacin. @subsubheading Source Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. @cite{Journal of Pharmacokinetics and Biopharmaceutics} 4, 255–280. Davidian, M. and Giltinan, D. M. (1995). @cite{Nonlinear Models for Repeated Measurement Data}. London: Chapman & Hall. (section 5.2.4, p. 129) Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. @end deftypefn @node tblish.dataset.infert @subsubsection tblish.dataset.infert @deftypefn {Static Method} {@var{out} =} infert () Infertility after Spontaneous and Induced Abortion @subsubheading Description This is a matched case-control study dating from before the availability of conditional logistic regression. @subsubheading Format @table @code @item education Index of the record. @item age Age in years of case. @item parity Count. @item induced Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”. @item case_status 0 = control, 1 = case. @item spontaneous Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”. @item stratum Matched set number. @item pooled_stratum Stratum number. @end table @subsubheading Note One case with two prior spontaneous abortions and two prior induced abortions is omitted. @subsubheading Source Trichopoulos et al (1976). @cite{Br. J. of Obst. and Gynaec.} 83, 645–650. @subsubheading Examples @example t = tblish.dataset.infert; # TODO: Port glm() (generalized linear model) stuff to Octave @end example @end deftypefn @node tblish.dataset.InsectSprays @subsubsection tblish.dataset.InsectSprays @deftypefn {Static Method} {@var{out} =} InsectSprays () Effectiveness of Insect Sprays @subsubheading Description The counts of insects in agricultural experimental units treated with different insecticides. @subsubheading Format @table @code @item spray The type of spray. @item count Insect count. @end table @subsubheading Source Beall, G., (1942). The Transformation of data from entomological field experiments. @cite{Biometrika}, 29, 243–262. @subsubheading References McNeil, D. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.InsectSprays; # TODO: boxplot # TODO: AOV plots @end example @end deftypefn @node tblish.dataset.iris @subsubsection tblish.dataset.iris @deftypefn {Static Method} {@var{out} =} iris () The Fisher Iris dataset: measurements of various flowers @subsubheading Description This is the classic Fisher Iris dataset. @subsubheading Format @table @code @item Species The species of flower being measured. @item SepalLength Length of sepals, in centimeters. @item SepalWidth Width of sepals, in centimeters. @item PetalLength Length of petals, in centimeters. @item PetalWidth Width of petals, in centimeters. @end table @subsubheading Source @url{http://archive.ics.uci.edu/ml/datasets/Iris} @subsubheading References @url{https://en.wikipedia.org/wiki/Iris_flower_data_set} Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in @cite{Contributions to Mathematical Statistics} (John Wiley, NY, 1950). Duda, R.O., & Hart, P.E. (1973). @cite{Pattern Classification and Scene Analysis}. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218. The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. @cite{Bulletin of the American Iris Society}, 59, 2–5. @subsubheading Examples @example # TODO: Port this example from R @end example @end deftypefn @node tblish.dataset.islands @subsubsection tblish.dataset.islands @deftypefn {Static Method} {@var{out} =} islands () Areas of the World's Major Landmasses @subsubheading Description The areas in thousands of square miles of the landmasses which exceed 10,000 square miles. @subsubheading Format @table @code @item name The name of the island. @item area The area, in thousands of square miles. @end table @subsubheading Source @cite{The World Almanac and Book of Facts}, 1975, page 406. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.islands; # TODO: Port dot chart to Octave @end example @end deftypefn @node tblish.dataset.JohnsonJohnson @subsubsection tblish.dataset.JohnsonJohnson @deftypefn {Static Method} {@var{out} =} JohnsonJohnson () Quarterly Earnings per Johnson & Johnson Share @subsubheading Description Quarterly earnings (dollars) per Johnson & Johnson share 1960–80. @subsubheading Format @table @code @item date Start date of the quarter. @item earnings Earnings per share (USD). @end table @subsubheading Source Shumway, R. H. and Stoffer, D. S. (2000). @cite{Time Series Analysis and its Applications}. Second Edition. New York: Springer. Example 1.1. @subsubheading Examples @example t = tblish.dataset.JohnsonJohnson # TODO: Yikes, look at all those plots. Port them to Octave. @end example @end deftypefn @node tblish.dataset.LakeHuron @subsubsection tblish.dataset.LakeHuron @deftypefn {Static Method} {@var{out} =} LakeHuron () Level of Lake Huron 1875-1972 @subsubheading Description Annual measurements of the level, in feet, of Lake Huron 1875–1972. @subsubheading Format @table @code @item year Year of the measurement @item level Lake level (ft). @end table @subsubheading Source Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series and Forecasting Methods}. Second edition. New York: Springer. Series A, page 555. Brockwell, P. J. and Davis, R. A. (1996). @cite{Introduction to Time Series and Forecasting}. New York: Springer. Sections 5.1 and 7.6. @subsubheading Examples @example t = tblish.dataset.LakeHuron; plot (t.year, t.level) xlabel ("Year") ylabel ("Lake level (ft)") title ("Level of Lake Huron") @end example @end deftypefn @node tblish.dataset.lh @subsubsection tblish.dataset.lh @deftypefn {Static Method} {@var{out} =} lh () Luteinizing Hormone in Blood Samples @subsubheading Description A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples. @subsubheading Format @table @code @item sample The number of the observation. @item lh Level of luteinizing hormone. @end table @subsubheading Source P.J. Diggle (1990). @cite{Time Series: A Biostatistical Introduction}. Oxford. Table A.1, series 3. @subsubheading Examples @example t = tblish.dataset.lh; plot (t.sample, t.lh); xlabel ("Sample Number"); ylabel ("lh level"); @end example @end deftypefn @node tblish.dataset.LifeCycleSavings @subsubsection tblish.dataset.LifeCycleSavings @deftypefn {Static Method} {@var{out} =} LifeCycleSavings () Intercountry Life-Cycle Savings Data @subsubheading Description Data on the savings ratio 1960–1970. @subsubheading Format @table @code @item country Name of the country. @item sr Aggregate personal savings. @item pop15 Percentage of population under 15. @item pop75 Percentage of population over 75. @item dpi Real per-capita disposable income. @item ddpi Percent growth rate of dpi. @end table @subsubheading Details Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations. @subsubheading Source The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977). @subsubheading References Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology. Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). @cite{Regression Diagnostics}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.LifeCycleSavings; # TODO: linear model # TODO: pairs plot with Lowess smoothed line @end example @end deftypefn @node tblish.dataset.Loblolly @subsubsection tblish.dataset.Loblolly @deftypefn {Static Method} {@var{out} =} Loblolly () Growth of Loblolly pine trees @subsubheading Description Records of the growth of Loblolly pine trees. @subsubheading Format @table @code @item height Tree height (ft). @item age Tree age (years). @item Seed Seed source for the tree. Ordering is according to increasing maximum height. @end table @subsubheading Source Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. @cite{Proceedings of the Statistical Computing Section}, American Statistical Association, 340–343. Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. @subsubheading Examples @example t = tblish.dataset.Loblolly; t2 = t(t.Seed == "329",:); scatter (t2.age, t2.height) xlabel ("Tree age (yr)"); ylabel ("Tree height (ft)"); title ("Loblolly data and fitted curve (Seed 329 only)") # TODO: Compute and plot fitted curve @end example @end deftypefn @node tblish.dataset.longley @subsubsection tblish.dataset.longley @deftypefn {Static Method} {@var{out} =} longley () Longley’s Economic Regression Data @subsubheading Description A macroeconomic data set which provides a well-known example for a highly collinear regression. @subsubheading Format @table @code @item Year The year. @item GNP_deflator GNP implicit price deflator (1954=100). @item GNP Gross National Product. @item Unemployed Number of unemployed. @item Armed_Forces Number of people in the armed forces. @item Population “Noninstitutionalized” population ≥ 14 years of age. @item Employed Number of people employed. @end table @subsubheading Source J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. @cite{Journal of the American Statistical Association}, 62, 819–841. @subsubheading References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S Language}. Monterey: Wadsworth & Brooks/Cole. @subsubheading Examples @example t = tblish.dataset.longley; # TODO: Linear model # TODO: opar plot @end example @end deftypefn @node tblish.dataset.lynx @subsubsection tblish.dataset.lynx @deftypefn {Static Method} {@var{out} =} lynx () Annual Canadian Lynx trappings 1821-1934 @subsubheading Description Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977). @subsubheading Format @table @code @item year Year of the record. @item lynx Number of lynx trapped. @end table @subsubheading Source Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series and Forecasting Methods}. Second edition. New York: Springer. Series G (page 557). @subsubheading References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S Language}. Monterey: Wadsworth & Brooks/Cole. Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. @cite{Journal of the Royal Statistical Society series A}, 140, 411–431. @subsubheading Examples @example t = tblish.dataset.lynx; plot (t.year, t.lynx); xlabel ("Year"); ylabel ("Lynx Trapped"); @end example @end deftypefn @node tblish.dataset.morley @subsubsection tblish.dataset.morley @deftypefn {Static Method} {@var{out} =} morley () Michelson Speed of Light Data @subsubheading Description A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted). @subsubheading Format @table @code @item Expt The experiment number, from 1 to 5. @item Run The run number within each experiment. @item Speed Speed-of-light measurement. @end table @subsubheading Details The data is here viewed as a randomized block experiment with @code{experiment} and @code{run} as the factors. @code{run} may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment. @subsubheading Source A. J. Weekes (1986). @cite{A Genstat Primer}. London: Edward Arnold. S. M. Stigler (1977). Do robust estimators work with real data? @cite{Annals of Statistics} 5, 1055–1098. (See Table 6.) A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. @cite{Astronomic Papers}, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.). @subsubheading Examples @example t = tblish.dataset.morley; # TODO: Port to Octave @end example @end deftypefn @node tblish.dataset.mtcars @subsubsection tblish.dataset.mtcars @deftypefn {Static Method} {@var{out} =} mtcars () Motor Trend 1974 Car Road Tests @subsubheading Description The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models). @subsubheading Format @table @code @item mpg Fuel efficiency in miles/gallon @item cyl Number of cylinders @item disp Displacement (cu. in.) @item hp Gross horsepower @item drat Rear axle ratio @item wt Weight (1,000 lbs) @item qsec 1/4 mile time @item vs Engine type (0 = V-shaped, 1 = straight) @item am Transmission type (0 = automatic, 1 = manual) @item gear Number of forward gears @item carb Number of carburetors @end table @subsubheading Note Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.” @subsubheading Source Henderson and Velleman (1981). Building multiple regression models interactively. @cite{Biometrics}, 37, 391–411. @subsubheading Examples @example # TODO: Port this example from R @end example @end deftypefn @node tblish.dataset.nhtemp @subsubsection tblish.dataset.nhtemp @deftypefn {Static Method} {@var{out} =} nhtemp () Average Yearly Temperatures in New Haven @subsubheading Description The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971. @subsubheading Format @table @code @item year Year of the observation. @item temp Mean annual temperature (degrees F). @end table @subsubheading Source Vaux, J. E. and Brinker, N. B. (1972) @cite{Cycles}, 1972, 117–121. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.nhtemp; plot (t.year, t.temp); title ("nhtemp data"); xlabel ("Mean annual temperature in New Haven, CT (deg. F)"); @end example @end deftypefn @node tblish.dataset.Nile @subsubsection tblish.dataset.Nile @deftypefn {Static Method} {@var{out} =} Nile () Flow of the River Nile @subsubheading Description Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249). @subsubheading Format @table @code @item year Year of the record. @item flow Annual flow (cubic meters). @end table @subsubheading Source Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/DKbook.html} @subsubheading References Balke, N. S. (1993). Detecting level shifts in time series. @cite{Journal of Business and Economic Statistics}, 11, 81–92. Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. @cite{Biometrika} 65, 243–51. @subsubheading Examples @example t = tblish.dataset.Nile; figure plot (t.year, t.flow); # TODO: Port the rest of the example to Octave @end example @end deftypefn @node tblish.dataset.nottem @subsubsection tblish.dataset.nottem @deftypefn {Static Method} {@var{out} =} nottem () Average Monthly Temperatures at Nottingham, 1920-1939 @subsubheading Description A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years. @subsubheading Format @table @code @item record Index of the record. @item lead Leading indicator. @item sales Sales volume. @end table @subsubheading Source Anderson, O. D. (1976). @cite{Time Series Analysis and Forecasting: The Box-Jenkins approach}. London: Butterworths. Series R. @subsubheading Examples @example # TODO: Come up with example code here @end example @end deftypefn @node tblish.dataset.npk @subsubsection tblish.dataset.npk @deftypefn {Static Method} {@var{out} =} npk () Classical N, P, K Factorial Experiment @subsubheading Description A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots. @subsubheading Format @table @code @item block Which block (1 to 6). @item N Indicator (0/1) for the application of nitrogen. @item P Indicator (0/1) for the application of phosphate. @item K Indicator (0/1) for the application of potassium. @item yield Yield of peas, in pounds/plot. Plots were 1/70 acre. @end table @subsubheading Source Imperial College, London, M.Sc. exercise sheet. @subsubheading References Venables, W. N. and Ripley, B. D. (2002). @cite{Modern Applied Statistics with S}. Fourth edition. New York: Springer. @subsubheading Examples @example t = tblish.dataset.npk; # TODO: Port aov() and LM to Octave @end example @end deftypefn @node tblish.dataset.occupationalStatus @subsubsection tblish.dataset.occupationalStatus @deftypefn {Static Method} {@var{out} =} occupationalStatus () Occupational Status of Fathers and their Sons @subsubheading Description Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status. @subsubheading Format An 8-by-8 matrix of counts, with classifying fators @code{origin} (father’s occupational status, levels 1:8) and @code{destination} (son’s occupational status, levels 1:8). @subsubheading Source Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. @cite{J. Am. Stat. Assoc.}, 74 (367), 537–552. @subsubheading Examples @example # TODO: Come up with example code here @end example @end deftypefn @node tblish.dataset.Orange @subsubsection tblish.dataset.Orange @deftypefn {Static Method} {@var{out} =} Orange () Growth of Orange Trees @subsubheading Description Records of the growth of orange trees. @subsubheading Format @table @code @item Tree A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter. @item age Age of the tree (days since 1968-12-31). @item circumference Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry. @end table @subsubheading Source The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. @subsubheading References Draper, N. R. and Smith, H. (1998). @cite{Applied Regression Analysis (3rd ed)}. New York: Wiley. (exercise 24.N). Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. @subsubheading Examples @example t = tblish.dataset.Orange; # TODO: Port coplot to Octave # TODO: Linear model @end example @end deftypefn @node tblish.dataset.OrchardSprays @subsubsection tblish.dataset.OrchardSprays @deftypefn {Static Method} {@var{out} =} OrchardSprays () Potency of Orchard Sprays @subsubheading Description An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design. @subsubheading Format @table @code @item rowpos Row of the design. @item colpos Column of the design @item treatment Treatment level. @item decrease Response. @end table @subsubheading Details Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur. The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells. An 8 x 8 Latin square design was used and the treatments were coded as follows: A – highest level of lime sulphur B – next highest level of lime sulphur @dots{} G – lowest level of lime sulphur H – no lime sulphur @subsubheading Source Finney, D. J. (1947). @cite{Probit Analysis}. Cambridge. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.OrchardSprays; tblish.examples.plot_pairs (t); @end example @end deftypefn @node tblish.dataset.PlantGrowth @subsubsection tblish.dataset.PlantGrowth @deftypefn {Static Method} {@var{out} =} PlantGrowth () Results from an Experiment on Plant Growth @subsubheading Description Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions. @subsubheading Format @table @code @item group Treatment condition group. @item weight Weight of plants. @end table @subsubheading Source Dobson, A. J. (1983). @cite{An Introduction to Statistical Modelling}. London: Chapman and Hall. @subsubheading Examples @example t = tblish.dataset.PlantGrowth; # TODO: Port anova to Octave @end example @end deftypefn @node tblish.dataset.precip @subsubsection tblish.dataset.precip @deftypefn {Static Method} {@var{out} =} precip () Annual Precipitation in US Cities @subsubheading Description The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities. @subsubheading Format @table @code @item city City observed. @item precip Annual precipitation (in). @end table @subsubheading Source @cite{Statistical Abstracts of the United States}, 1975. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.precip; # TODO: Port dot plot to Octave @end example @end deftypefn @node tblish.dataset.presidents @subsubsection tblish.dataset.presidents @deftypefn {Static Method} {@var{out} =} presidents () Quarterly Approval Ratings of US Presidents @subsubheading Description The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974. @subsubheading Format @table @code @item date Approximate date of the observation. @item approval Approval rating (%). @end table @subsubheading Details The data are actually a fudged version of the approval ratings. See McNeil’s book for details. @subsubheading Source The Gallup Organisation. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.presidents; figure plot (datenum (t.date), t.approval) datetick ("x") xlabel ("Date") ylabel ("Approval rating (%)") title ("presidents data") @end example @end deftypefn @node tblish.dataset.pressure @subsubsection tblish.dataset.pressure @deftypefn {Static Method} {@var{out} =} pressure () Vapor Pressure of Mercury as a Function of Temperature @subsubheading Description Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury). @subsubheading Format @table @code @item temperature Temperature (deg C). @item pressure Pressure (mm Hg). @end table @subsubheading Source Weast, R. C., ed. (1973). @cite{Handbook of Chemistry and Physics}. Cleveland: CRC Press. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.pressure; figure plot (t.temperature, t.pressure) xlabel ("Temperature (deg C)") ylabel ("Pressure (mm of Hg)") title ("pressure data: Vapor Pressure of Mercury") figure semilogy (t.temperature, t.pressure) xlabel ("Temperature (deg C)") ylabel ("Pressure (mm of Hg)") title ("pressure data: Vapor Pressure of Mercury") @end example @end deftypefn @node tblish.dataset.Puromycin @subsubsection tblish.dataset.Puromycin @deftypefn {Static Method} {@var{out} =} Puromycin () Reaction Velocity of an Enzymatic Reaction @subsubheading Description Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin. @subsubheading Format @table @code @item state Whether the cell was treated. @item conc Substrate concentrations (ppm). @item rate Instantaneous reaction rates (counts/min/min). @end table @subsubheading Details Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated. @subsubheading Source The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. @subsubheading References Bates, D.M. and Watts, D.G. (1988). @cite{Nonlinear Regression Analysis and Its Applications}. New York: Wiley. Appendix A1.3. Treloar, M. A. (1974). @cite{Effects of Puromycin on Galactosyltransferase in Golgi Membranes}. M.Sc. Thesis, U. of Toronto. @subsubheading Examples @example t = tblish.dataset.Puromycin; # TODO: Port example to Octave @end example @end deftypefn @node tblish.dataset.quakes @subsubsection tblish.dataset.quakes @deftypefn {Static Method} {@var{out} =} quakes () Locations of Earthquakes off Fiji @subsubheading Description The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964. @subsubheading Format @table @code @item lat Latitude of event. @item long Longitude of event. @item depth Depth (km). @item mag Richter magnitude. @item stations Number of stations reporting. @end table @subsubheading Details There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations. @subsubheading Source This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University. @subsubheading References G. E. P. Box and G. M. Jenkins (1976). @cite{Time Series Analysis, Forecasting and Control}. San Francisco: Holden-Day. p. 537. P. J. Brockwell and R. A. Davis (1991). @cite{Time Series: Theory and Methods}. Second edition. New York: Springer-Verlag. p. 414. @subsubheading Examples @example # TODO: Come up with example code here @end example @end deftypefn @node tblish.dataset.randu @subsubsection tblish.dataset.randu @deftypefn {Static Method} {@var{out} =} randu () Random Numbers from Congruential Generator RANDU @subsubheading Description 400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5. @subsubheading Format @table @code @item record Index of the record. @item x X value of the triple. @item y Y value of the triple. @item z Z value of the triple. @end table @subsubheading Details In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator. These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places. Under VMS versions 2.0 and higher, this problem has been fixed. @subsubheading Source David Donoho @subsubheading Examples @example t = tblish.dataset.randu; @end example @end deftypefn @node tblish.dataset.rivers @subsubsection tblish.dataset.rivers @deftypefn {Static Method} {@var{out} =} rivers () Lengths of Major North American Rivers @subsubheading Description This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey. @subsubheading Format @table @code @item rivers A vector containing 141 observations. @end table @subsubheading Source @cite{World Almanac and Book of Facts}, 1975, page 406. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example tblish.dataset.rivers; longest_river = max (rivers) shortest_river = min (rivers) @end example @end deftypefn @node tblish.dataset.rock @subsubsection tblish.dataset.rock @deftypefn {Static Method} {@var{out} =} rock () Measurements on Petroleum Rock Samples @subsubheading Description Measurements on 48 rock samples from a petroleum reservoir. @subsubheading Format @table @code @item area Area of pores space, in pixels out of 256 by 256. @item peri Perimeter in pixels. @item shape Perimeter/sqrt(area). @item perm Permeability in milli-Darcies. @end table @subsubheading Details Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape. @subsubheading Source Data from BP Research, image analysis by Ronit Katz, U. Oxford. @subsubheading Examples @example t = tblish.dataset.rock; figure scatter (t.area, t.perm) xlabel ("Area of pores space (pixels out of 256x256)") ylabel ("Permeability (milli-Darcies)") @end example @end deftypefn @node tblish.dataset.sleep @subsubsection tblish.dataset.sleep @deftypefn {Static Method} {@var{out} =} sleep () Student’s Sleep Data @subsubheading Description Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients. @subsubheading Format @table @code @item id Patient ID. @item group Drug given. @item extra Increase in hours of sleep. @end table @subsubheading Details The @code{group} variable name may be misleading about the data: They represent measurements on 10 persons, not in groups. @subsubheading Source Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. @cite{The Journal of Physiology}, 32, 501–510. Student (1908). The probable error of the mean. @cite{Biometrika}, 6, 20. @subsubheading References Scheffé, Henry (1959). @cite{The Analysis of Variance}. New York, NY: Wiley. @subsubheading Examples @example t = tblish.dataset.sleep; # TODO: Port to Octave @end example @end deftypefn @node tblish.dataset.stackloss @subsubsection tblish.dataset.stackloss @deftypefn {Static Method} {@var{out} =} stackloss () Brownlee's Stack Loss Plant Data @subsubheading Description Operational data of a plant for the oxidation of ammonia to nitric acid. @subsubheading Format @table @code @item AirFlow Flow of cooling air. @item WaterTemp Cooling Water Inlet temperature. @item AcidConc Concentration of acid (per 1000, minus 500). @item StackLoss Stack loss @end table @subsubheading Details “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.) @code{AirFlow} represents the rate of operation of the plant. @code{WaterTemp} is the temperature of cooling water circulated through coils in the absorption tower. @code{AcidConc} is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. @code{StackLoss} (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant. @subsubheading Source Brownlee, K. A. (1960, 2nd ed. 1965). @cite{Statistical Theory and Methodology in Science and Engineering}. New York: Wiley. pp. 491–500. @subsubheading References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S Language}. Monterey: Wadsworth & Brooks/Cole. Dodge, Y. (1996). The guinea pig of multiple regression. In: @cite{Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday}, 1996, @cite{Lecture Notes in Statistics} 109, Springer-Verlag, New York. @subsubheading Examples @example t = tblish.dataset.stackloss; # TODO: Create linear model and print summary @end example @end deftypefn @node tblish.dataset.state @subsubsection tblish.dataset.state @deftypefn {Static Method} {@var{out} =} state () US State Facts and Figures @subsubheading Description Data related to the 50 states of the United States of America. @subsubheading Format @table @code @item abb State abbreviation. @item name State name. @item area Area (sq mi). @item lat Approximate center (latitude). @item lon Approximate center (longitude). @item division State division. @item revion State region. @item Population Population estimate as of July 1, 1975. @item Income Per capita income (1974). @item Illiteracy Illiteracy as of 1970 (percent of population). @item LifeExp Lfe expectancy in years (1969-71). @item Murder Murder and non-negligent manslaughter rate per 100,000 population (1976). @item HSGrad Percent high-school graduates (1970). @item Frost Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city. @end table @subsubheading Source U.S. Department of Commerce, Bureau of the Census (1977) @cite{Statistical Abstract of the United States}. U.S. Department of Commerce, Bureau of the Census (1977) @cite{County and City Data Book}. @subsubheading References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S Language}. Monterey: Wadsworth & Brooks/Cole. @subsubheading Examples @example t = tblish.dataset.state; @end example @end deftypefn @node tblish.dataset.sunspot_month @subsubsection tblish.dataset.sunspot_month @deftypefn {Static Method} {@var{out} =} sunspot_month () Monthly Sunspot Data, from 1749 to “Present” @subsubheading Description Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available. @subsubheading Format @table @code @item month Month of the observation. @item sunspots Number of sunspots. @end table @subsubheading Source WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at @url{http://www.sidc.be/silso/datafiles}. @subsubheading Examples @example t = tblish.dataset.sunspot_month; @end example @end deftypefn @node tblish.dataset.sunspot_year @subsubsection tblish.dataset.sunspot_year @deftypefn {Static Method} {@var{out} =} sunspot_year () Yearly Sunspot Data, 1700-1988 @subsubheading Description Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit). @subsubheading Format @table @code @item year Year of the observation. @item sunspots Number of sunspots. @end table @subsubheading Source H. Tong (1996) @cite{Non-Linear Time Series}. Clarendon Press, Oxford, p. 471. @subsubheading Examples @example t = tblish.dataset.sunspot_year; figure plot (t.year, t.sunspots) xlabel ("Year") ylabel ("Sunspots") @end example @end deftypefn @node tblish.dataset.sunspots @subsubsection tblish.dataset.sunspots @deftypefn {Static Method} {@var{out} =} sunspots () Monthly Sunspot Numbers, 1749-1983 @subsubheading Description Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory. @subsubheading Format @table @code @item month Month of the observation. @item sunspots Number of observed sunspots. @end table @subsubheading Source Andrews, D. F. and Herzberg, A. M. (1985) @cite{Data: A Collection of Problems from Many Fields for the Student and Research Worker}. New York: Springer-Verlag. @subsubheading Examples @example t = tblish.dataset.sunspots; figure plot (datenum (t.month), t.sunspots) datetick ("x") xlabel ("Date") ylabel ("Monthly sunspot numbers") title ("sunspots data") @end example @end deftypefn @node tblish.dataset.swiss @subsubsection tblish.dataset.swiss @deftypefn {Static Method} {@var{out} =} swiss () Swiss Fertility and Socioeconomic Indicators (1888) Data @subsubheading Description Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888. @subsubheading Format @table @code @item Fertility Ig, ‘common standardized fertility measure’. @item Agriculture % of males involved in agriculture as occupation. @item Examination % draftees receiving highest mark on army examination. @item Education % education beyond primary school for draftees. @item Catholic % ‘Catholic’ (as opposed to ‘Protestant’). @item InfantMortality Live births who live less than 1 year. @end table All variables but ‘Fertility’ give proportions of the population. @subsubheading Source (paraphrasing Mosteller and Tukey): Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries. The data collected are for 47 French-speaking “provinces” at about 1888. Here, all variables are scaled to [0, 100], where in the original, all but @code{Catholic} were scaled to [0, 1]. @subsubheading Note Files for all 182 districts in 1888 and other years have been available at @url{https://opr.princeton.edu/archive/pefp/switz.aspx}. They state that variables @code{Examination} and @code{Education} are averages for 1887, 1888 and 1889. @subsubheading References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). @cite{The New S Language}. Monterey: Wadsworth & Brooks/Cole. @subsubheading Examples @example t = tblish.dataset.swiss; # TODO: Port linear model to Octave @end example @end deftypefn @node tblish.dataset.Theoph @subsubsection tblish.dataset.Theoph @deftypefn {Static Method} {@var{out} =} Theoph () Pharmacokinetics of Theophylline @subsubheading Description An experiment on the pharmacokinetics of theophylline. @subsubheading Format @table @code @item Subject Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed. @item Wt Weight of the subject (kg). @item Dose Dose of theophylline administerred orally to the subject (mg/kg). @item Time Time since drug administration when the sample was drawn (hr). @item conc Theophylline concentration in the sample (mg/L). @end table @subsubheading Details Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours. These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available. @subsubheading Source The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. @subsubheading References Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). @cite{NONMEM Users Guide: Part V}. NONMEM Project Group, University of California, San Francisco. Davidian, M. and Giltinan, D. M. (1995). @cite{Nonlinear Models for Repeated Measurement Data}. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176) Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. (Appendix A.29) @subsubheading Examples @example t = tblish.dataset.Theoph; # TODO: Coplot # TODO: Yet another linear model to port to Octave @end example @end deftypefn @node tblish.dataset.Titanic @subsubsection tblish.dataset.Titanic @deftypefn {Static Method} {@var{out} =} Titanic () Survival of passengers on the Titanic @subsubheading Description This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival. @subsubheading Format @code{n} is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables: @table @code @item Class 1st, 2nd, 3rd, Cre. @item Sex Male, Female. @item Age Child, Adult. @item Survived No, Yes. @end table @subsubheading Details The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger. These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost. Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (@url{https://www.encyclopedia-titanica.org/}). @subsubheading Source Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. @cite{Journal of Statistics Education}, 3. The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in: British Board of Trade (1990). @cite{Report on the Loss of the ‘Titanic’ (S.S.)}. British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing. @subsubheading Examples @example tblish.dataset.Titanic; # TODO: Port mosaic plot to Octave # TODO: Check for higher survival rates in children and females @end example @end deftypefn @node tblish.dataset.ToothGrowth @subsubsection tblish.dataset.ToothGrowth @deftypefn {Static Method} {@var{out} =} ToothGrowth () The Effect of Vitamin C on Tooth Growth in Guinea Pigs @subsubheading Description The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as @code{VC}). @subsubheading Format @table @code @item supp Supplement type. @item dose Dose (mg/day). @item len Tooth length. @end table @subsubheading Source C. I. Bliss (1952). @cite{The Statistics of Bioassay}. Academic Press. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. @cite{The Journal of Nutrition}, 33(5), 491–504. @subsubheading Examples @example t = tblish.dataset.ToothGrowth; tblish.examples.coplot (t, "dose", "len", "supp"); # TODO: Port Lowess smoothing to Octave @end example @end deftypefn @node tblish.dataset.treering @subsubsection tblish.dataset.treering @deftypefn {Static Method} {@var{out} =} treering () Yearly Treering Data, -6000-1979 @subsubheading Description Contains normalized tree-ring widths in dimensionless units. @subsubheading Format A univariate time series with 7981 observations. Each tree ring corresponds to one year. @subsubheading Details The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California. @subsubheading Source Time Series Data Library: @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}, series ‘CA535.DAT’. @subsubheading References For some photos of Methuselah Walk see @url{https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html}. @subsubheading Examples @example t = tblish.dataset.treering; @end example @end deftypefn @node tblish.dataset.trees @subsubsection tblish.dataset.trees @deftypefn {Static Method} {@var{out} =} trees () Diameter, Height and Volume for Black Cherry Trees @subsubheading Description This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground. @subsubheading Format @table @code @item Girth Tree diameter (rather than girth, actually) in inches. @item Height Height in ft. @item Volume Volume of timber in cubic feet. @end table @subsubheading Source Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). @cite{The Minitab Student Handbook}. Duxbury Press. @subsubheading References Atkinson, A. C. (1985). @cite{Plots, Transformations and Regression}. Oxford: Oxford University Press. @subsubheading Examples @example t = tblish.dataset.trees; figure tblish.examples.plot_pairs (t); figure loglog (t.Girth, t.Volume) xlabel ("Girth") ylabel ("Volume") # TODO: Transform to log space for the coplot # TODO: Linear model @end example @end deftypefn @node tblish.dataset.UCBAdmissions @subsubsection tblish.dataset.UCBAdmissions @deftypefn {Static Method} {@var{out} =} UCBAdmissions () Student Admissions at UC Berkeley @subsubheading Description Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex. @subsubheading Format A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows: @table @code @item Admit Admitted, Rejected. @item Gender Male, Female. @item Dept A, B, C, D, E, F. @end table @subsubheading Details This data set is frequently used for illustrating Simpson's paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates). @subsubheading Source The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at @url{http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/}. @subsubheading References Bickel, P. J., Hammel, E. A., and O'Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. @cite{Science}, 187, 398–403. @url{http://www.jstor.org/stable/1739581}. @subsubheading Examples @example tblish.dataset.UCBAdmissions; # TODO: Port mosaic plot to Octave @end example @end deftypefn @node tblish.dataset.UKDriverDeaths @subsubsection tblish.dataset.UKDriverDeaths @deftypefn {Static Method} {@var{out} =} UKDriverDeaths () Road Casualties in Great Britain 1969-84 @subsubheading Description @code{UKDriverDeaths} is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983. @code{Seatbelts} is more information on the same problem. @subsubheading Format @code{UKDriverDeaths} is a table with the following variables: @table @code @item month Month of the observation. @item deaths Number of deaths. @end table @code{Seatbelts} is a table with the following variables: @table @code @item month Month of the observation. @item DriversKilled Car drivers killed. @item drivers Same as @code{UKDriverDeaths} @code{deaths} count. @item front Front-seat passengers killed or seriously injured. @item rear Rear-seat passengers killed or seriously injured. @item kms Distance driven. @item PetrolPrice Petrol price. @item VanKilled Number of van (“light goods vehicle”) drivers killed. @item law 0/1: was the seatbelt law in effect that month? @end table @subsubheading Source Harvey, A.C. (1989). @cite{Forecasting, Structural Time Series Models and the Kalman Filter}. Cambridge: Cambridge University Press. pp. 519–523. Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/dkbook/} @subsubheading References Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. @cite{Journal of the Royal Statistical Society} series A, 149, 187–227. @subsubheading Examples @example tblish.dataset.UKDriverDeaths; d = UKDriverDeaths; s = Seatbelts; # TODO: Port the model and plots to Octave @end example @end deftypefn @node tblish.dataset.UKgas @subsubsection tblish.dataset.UKgas @deftypefn {Static Method} {@var{out} =} UKgas () UK Quarterly Gas Consumption @subsubheading Description Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms. @subsubheading Format @table @code @item date Quarter of the observation @item gas Gas consumption (MM therms). @end table @subsubheading Source Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/dkbook/}. @subsubheading Examples @example t = tblish.dataset.UKgas; plot (datenum (t.date), t.gas); datetick ("x") xlabel ("Month") ylabel ("Gas consumption (MM therms)") @end example @end deftypefn @node tblish.dataset.UKLungDeaths @subsubsection tblish.dataset.UKLungDeaths @deftypefn {Static Method} {@var{out} =} UKLungDeaths () Monthly Deaths from Lung Diseases in the UK @subsubheading Description Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979. @subsubheading Format @table @code @item date Month of the observation. @item ldeaths Total lung deaths. @item fdeaths Lung deaths among females. @item mdeaths Lung deaths among males. @end table @subsubheading Source P. J. Diggle (1990). @cite{Time Series: A Biostatistical Introduction}. Oxford. table A.3 @subsubheading Examples @example t = tblish.dataset.UKLungDeaths; figure plot (datenum (t.date), t.ldeaths); title ("Total UK Lung Deaths") xlabel ("Month") ylabel ("Deaths") figure plot (datenum (t.date), [t.fdeaths t.mdeaths]); title ("UK Lung Deaths buy sex") legend (@{"Female", "Male"@}) xlabel ("Month") ylabel ("Deaths") @end example @end deftypefn @node tblish.dataset.USAccDeaths @subsubsection tblish.dataset.USAccDeaths @deftypefn {Static Method} {@var{out} =} USAccDeaths () Accidental Deaths in the US 1973-1978 @subsubheading Description A time series giving the monthly totals of accidental deaths in the USA. @subsubheading Format @table @code @item month Month of the observation. @item deaths Accidental deaths. @end table @subsubheading Source Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series: Theory and Methods}. New York: Springer. @subsubheading Examples @example t = tblish.dataset.USAccDeaths; @end example @end deftypefn @node tblish.dataset.USArrests @subsubsection tblish.dataset.USArrests @deftypefn {Static Method} {@var{out} =} USArrests () Violent Crime Rates by US State @subsubheading Description This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas. @subsubheading Format @table @code @item State State name. @item Murder Murder arrests (per 100,000). @item Assault Assault arrests (per 100,000). @item UrbanPop Percent urban population. @item Rape Rape arrests (per 100,000). @end table @subsubheading Note @code{USArrests} contains the data as in McNeil's monograph. For the @code{UrbanPop} percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona). See the example below on how to correct the error and improve accuracy for the ‘.5’ percentages. @subsubheading Source @cite{World Almanac and Book of Facts 1975}. (Crime rates). @cite{Statistical Abstracts of the United States 1975}, p.20, (Urban rates), possibly available as @url{https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20}. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.USArrests; summary (t); tblish.examples.plot_pairs (t(:,2:end)); # TODO: Difference between USArrests and its correction # TODO: +/- 0.5 to restore the original .5 percentages @end example @end deftypefn @node tblish.dataset.USJudgeRatings @subsubsection tblish.dataset.USJudgeRatings @deftypefn {Static Method} {@var{out} =} USJudgeRatings () Lawyers’ Ratings of State Judges in the US Superior Court @subsubheading Description Lawyers’ ratings of state judges in the US Superior Court. @subsubheading Format @table @code @item CONT Number of contacts of lawyer with judge. @item INTG Judicial integrity. @item DMNR Demeanor. @item DILG Diligence. @item CFMG Case flow managing. @item DECI Prompt decisions. @item PREP Preparation for trial. @item FAMI Familiarity with law. @item ORAL Sound oral rulings. @item WRIT Sound written rulings. @item PHYS Physical ability. @item RTEN Worthy of retention. @end table @subsubheading Source New Haven Register, 14 January, 1977 (from John Hartigan). @subsubheading Examples @example t = tblish.dataset.USJudgeRatings; figure tblish.examples.plot_pairs (t(:,2:end)); title ("USJudgeRatings data") @end example @end deftypefn @node tblish.dataset.USPersonalExpenditure @subsubsection tblish.dataset.USPersonalExpenditure @deftypefn {Static Method} {@var{out} =} USPersonalExpenditure () Personal Expenditure Data @subsubheading Description This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960. @subsubheading Format A 2-dimensional matrix @code{x} with Category along dimension 1 and Year along dimension 2. @subsubheading Source @cite{The World Almanac and Book of Facts}, 1962, page 756. @subsubheading References Tukey, J. W. (1977). @cite{Exploratory Data Analysis}. Reading, Mass: Addison-Wesley. McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example tblish.dataset.USPersonalExpenditure; # TODO: Port medpolish() from R, whatever that is. @end example @end deftypefn @node tblish.dataset.uspop @subsubsection tblish.dataset.uspop @deftypefn {Static Method} {@var{out} =} uspop () Populations Recorded by the US Census @subsubheading Description This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970. @subsubheading Format @table @code @item year Year of the census. @item population Population, in millions. @end table @subsubheading Source McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.uspop; figure semilogy (t.year, t.population) xlabel ("Year") ylabel ("U.S. Population (millions)") @end example @end deftypefn @node tblish.dataset.VADeaths @subsubsection tblish.dataset.VADeaths @deftypefn {Static Method} {@var{out} =} VADeaths () Death Rates in Virginia (1940) @subsubheading Description Death rates per 1000 in Virginia in 1940. @subsubheading Format A 2-dimensional matrix @code{deaths}, with age group along dimension 1 and demographic group along dimension 2. @subsubheading Details The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female. This provides a rather nice 3-way analysis of variance example. @subsubheading Source Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. @cite{American Sociological Review}, 12, 525–535. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example tblish.dataset.VADeaths; # TODO: Port to Octave @end example @end deftypefn @node tblish.dataset.volcano @subsubsection tblish.dataset.volcano @deftypefn {Static Method} {@var{out} =} volcano () Topographic Information on Auckland’s Maunga Whau Volcano @subsubheading Description Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid. @subsubheading Format A matrix @code{volcano} with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north. @subsubheading Source Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate. @subsubheading References Box, G. E. P. and Jenkins, G. M. (1976). @cite{Time Series Analysis, Forecasting and Control}. San Francisco: Holden-Day. p. 537. Brockwell, P. J. and Davis, R. A. (1991). @cite{Time Series: Theory and Methods}. Second edition. New York: Springer-Verlag. p. 414. @subsubheading Examples @example tblish.dataset.volcano; # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot # should be fine. And then maybe do a 3-d mesh plot. @end example @end deftypefn @node tblish.dataset.warpbreaks @subsubsection tblish.dataset.warpbreaks @deftypefn {Static Method} {@var{out} =} warpbreaks () The Number of Breaks in Yarn during Weaving @subsubheading Description This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn. @subsubheading Format @table @code @item wool Type of wool (A or B). @item tension The level of tension (L, M, H). @item breaks Number of breaks. @end table There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH). @subsubheading Source Tippett, L. H. C. (1950). @cite{Technological Applications of Statistics}. New York: Wiley. Page 106. @subsubheading References Tukey, J. W. (1977). @cite{Exploratory Data Analysis}. Reading, Mass: Addison-Wesley. McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.warpbreaks; summary (t) # TODO: Port the plotting code and OPAR to Octave @end example @end deftypefn @node tblish.dataset.women @subsubsection tblish.dataset.women @deftypefn {Static Method} {@var{out} =} women () Average Heights and Weights for American Women @subsubheading Description This data set gives the average heights and weights for American women aged 30–39. @subsubheading Format @table @code @item height Height (in). @item weight Weight (lbs). @end table @subsubheading Details The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year. The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”. @subsubheading Source @cite{The World Almanac and Book of Facts}, 1975. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example t = tblish.dataset.women; figure scatter (t.height, t.weight) xlabel ("Height (in)") ylabel ("Weight (lb") title ("women data: American women aged 30-39") @end example @end deftypefn @node tblish.dataset.WorldPhones @subsubsection tblish.dataset.WorldPhones @deftypefn {Static Method} {@var{out} =} WorldPhones () The World’s Telephones @subsubheading Description The number of telephones in various regions of the world (in thousands). @subsubheading Format A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year. The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America. The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961. @subsubheading Source AT&T (1961) @cite{The World’s Telephones}. @subsubheading References McNeil, D. R. (1977). @cite{Interactive Data Analysis}. New York: Wiley. @subsubheading Examples @example tblish.dataset.WorldPhones; # TODO: Port matplot() to Octave @end example @end deftypefn @node tblish.dataset.WWWusage @subsubsection tblish.dataset.WWWusage @deftypefn {Static Method} {@var{out} =} WWWusage () WWWusage @subsubheading Description A time series of the numbers of users connected to the Internet through a server every minute. @subsubheading Format A time series of length 100. @subsubheading Source Durbin, J. and Koopman, S. J. (2001). @cite{Time Series Analysis by State Space Methods}. Oxford: Oxford University Press. @url{http://www.ssfpack.com/dkbook/} @subsubheading References Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). @cite{Forecasting: Methods and Applications}. New York: Wiley. @subsubheading Examples @example # TODO: Come up with example code here @end example @end deftypefn @node tblish.dataset.zCO2 @subsubsection tblish.dataset.zCO2 @deftypefn {Static Method} {@var{out} =} zCO2 () Carbon Dioxide Uptake in Grass Plants @subsubheading Description The @code{CO2} data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli. @subsubheading Format @subsubheading Details The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted. @subsubheading Source Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. @cite{Ecology}, 71, 1389–1400. Pinheiro, J. C. and Bates, D. M. (2000). @cite{Mixed-effects Models in S and S-PLUS}. New York: Springer. @subsubheading Examples @example t = tblish.dataset.zCO2; # TODO: Coplot # TODO: Port the linear model to Octave @end example @end deftypefn @node tblish.datasets @subsection tblish.datasets @deftp {Class} tblish.datasets Example dataset collection. @code{tblish.datasets} is a collection of example datasets to go with the Tablicious package. The @code{tblish.datasets} class provides methods for listing and loading the example datasets. @end deftp @node datasets.description @subsubsection datasets.description @deftypefn {Static Method} description (@var{datasetName}) @deftypefnx {Static Method} {@var{out} =} description (@var{datasetName}) Get or display the description for a dataset. Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console. @end deftypefn @node datasets.list @subsubsection datasets.list @deftypefn {Static Method} {} list () @deftypefnx {Static Method} {@var{out} =} list () List all datasets. Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list. Returns a table with variables Name, Description, and possibly more. @end deftypefn @node datasets.load @subsubsection datasets.load @deftypefn {Static Method} load (@var{datasetName}) @deftypefnx {Static Method} {@var{out} =} load (@var{datasetName}) Load a specified dataset. @var{datasetName} is the name of the dataset to load, as found in the @code{Name} column of the dataset list. @end deftypefn @node tblish.evalWithTableVars @subsection tblish.evalWithTableVars @deftypefn {Function} {@var{out} =} tblish.evalWithTableVars (@var{tbl}, @var{expr}) Evaluate an expression against a table array’s variables. Evaluates the M-code expression @var{expr} in a workspace where all of @var{tbl}’s variables have been assigned to workspace variables. @var{expr} is a charvec containing an Octave expression. As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names. Returns the result of the evaluation. Examples: @example [s,p,sp] = tblish.examples.SpDb tmp = join (sp, p); shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight") @end example See also: @ref{table.restrict} @end deftypefn @node tblish.examples.coplot @subsection tblish.examples.coplot @deftypefn {Function} {[@var{fig}, @var{hax}] =} tblish.examples.coplot (@var{tbl}, @var{xvar}, @var{yvar}, @var{gvar}) @deftypefnx {Function} {[@var{fig}, @var{hax}] =} tblish.examples.coplot (@var{fig}, @var{tbl}, @var{xvar}, @var{yvar}, @var{gvar}) @deftypefnx {Function} {[@var{fig}, @var{hax}] =} tblish.examples.coplot (@dots{}, @var{OptionName}, @var{OptionValue}, @dots{}) Conditioning plot. @code{tblish.examples.coplot} produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot. @var{tbl} is a @code{table} containing the data to plot. @var{xvar} is the name of the table variable within @var{tbl} to use as the X values. May be a variable name or index. @var{yvar} is the name of the table variable within @var{tbl} to use as the Y values. May be a variable name or index. @var{gvar} is the name of the table variable or variables within @var{tbl} to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. @var{gvar} may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored. @var{fig} is the figure handle to plot into. If @var{fig} is not provided, a new figure is created. Name/Value options: @table @code @item PlotFcn The plotting function to use, supplied as a function handle. Defaults to @code{@@plot}. It must be a function that provides the signature @code{fcn(hax, X, Y, @dots{})}. @item PlotArgs A cell array of arguments to pass in to the plotting function, following the @var{hax}, @var{x}, and @var{y} arguments. @end table Returns: @var{fig} – the figure handle it plotted into @var{hax} – array of axes handles to all the axes for the subplots @end deftypefn @node tblish.examples.plot_pairs @subsection tblish.examples.plot_pairs @deftypefn {Function} {@var{out} =} tblish.examples.plot_pairs (@var{data}) @deftypefnx {Function} {@var{out} =} tblish.examples.plot_pairs (@var{data}, @var{plot_type}) @deftypefnx {Function} {@var{out} =} tblish.examples.plot_pairs (@var{fig}, @dots{}) Plot pairs of variables against each other. @var{data} is the data holding the variables to plot. It may be either a @code{table} or a struct. Each variable or field in the @code{table} or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size. @var{plot_type} is a charvec indicating what plot type to do in each subplot. (@code{"scatter"} is the default.) Valid @var{plot_type} values are: @table @code @item "scatter" A plain scatter plot. @item "smooth" A scatter plot + fitted line, like R's @code{panel.smooth} does. @end table @var{fig} is an optional figure handle to plot into. If omitted, a new figure is created. Returns the created figure, if the output is captured. @end deftypefn @node tblish.examples.SpDb @subsection tblish.examples.SpDb @deftypefn {Function} {@var{spdb} =} tblish.examples.SpDb () @deftypefnx {Function} {[@var{s}, @var{p}, @var{sp}] =} tblish.examples.SpDb () The classic Suppliers-Parts example database. Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date's "An Introduction to Database Systems" textbook. Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (@var{s}, @var{p}, @var{sp}). @end deftypefn @node tblish.sizeof2 @subsection tblish.sizeof2 @deftypefn {Function} {@var{out} =} tblish.sizeof2 (@var{x}) Approximate size of an array in bytes, with object support. This is an alternative to Octave's @code{sizeof} function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions. This may be supplemented or replaced by @code{sizeof} override methods on Tablicious's classes. I'm not sure whether Octave's @code{sizeof} supports extension by method overrides, so I'm not doing that yet. If that happens, this @code{sizeof2} function will stick around in a deprecated state for a while, and it will respect those override methods. For tables, this returns the sum of @code{sizeof} for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in @var{obj}. This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious's objects to a separate function. This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases. @var{x} is an array of any type. Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported. See also: sizeof @end deftypefn @node tblish.table.grpstats @subsection tblish.table.grpstats @deftypefn {Function} {[@var{out}] =} tblish.table.grpstats (@var{tbl}, @var{groupvar}) @deftypefnx {Function} {[@var{out}] =} tblish.table.grpstats (@dots{}, @code{'DataVars'}, @var{DataVars}) Statistics by group for a table array. This is a table-specific implementation of @code{grpstats} that works on table arrays. It is supplied as a function in the @var{+tblish} package to avoid colliding with the global @code{grpstats} function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its @code{grpstats} function. This function is supplied as an alternative you can use in an environment where @code{table} arrays are not supported by the @code{grpstats} that you have, though you need to make code changes and call it as @code{tblish.table.grpstats(tbl)} instead of with a plain @code{grpstats(tbl)}. See also: table.groupby, table.findgroups, table.splitapply @end deftypefn @node timezones @subsection timezones @deftypefn {Function} {@var{out} =} timezones () @deftypefnx {Function} {@var{out} =} timezones (@var{area}) List all the time zones defined on this system. This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from @file{/usr/share/zoneinfo}. On Windows, it will be the database redistributed with the Tablicious package. If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors: @table @code @item Name The IANA zone name, as cellstr. @item Area The geographical area the zone is in, as cellstr. @end table Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented. @end deftypefn @node todatetime @subsection todatetime @deftypefn {Function} {@var{out} =} todatetime (@var{x}) Convert input to a Tablicious datetime array, with convenient interface. This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious's author likes better. This mainly exists because datetime's constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab's interface.) I think that's less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that's not the same size as the input. Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents". @end deftypefn @node vartype @subsection vartype @deftypefn {Function} {@var{out} =} vartype (@var{type}) Filter by variable type for use in suscripting. Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type. @var{type} is the name of a type as charvec. This may be anything that the @code{isa} function accepts, or @code{'cellstr'} to select cellstrs, as determined by @code{iscellstr}. Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a @code{table} object. @end deftypefn @node vecfun @subsection vecfun @deftypefn {Function} {@var{out} =} vecfun (@var{fcn}, @var{x}, @var{dim}) Apply function to vectors in array along arbitrary dimension. This function is not implemented yet. Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension. @var{fcn} is a function handle to apply. @var{x} is an array of arbitrary type which is to be sliced and passed in to @var{fcn}. @var{dim} is the dimension along which the vector slices lay. Returns the collected output of the @var{fcn} calls, which will be the same size as @var{x}, but not necessarily the same type. @end deftypefn @node years @subsection years @deftypefn {Function File} {@var{out} =} years (@var{x}) Create a @code{duration} @var{x} years long, or get the years in a @code{duration} @var{x}. If input is numeric, returns a @code{duration} array in units of fixed-length years of 365.2425 days each. If input is a @code{duration}, converts the @code{duration} to a number of fixed-length years as double. Note: @code{years} creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use @code{calyears}. @xref{calyears}. @end deftypefn @node Copying @chapter Copying @section Package Copyright Tablicious for GNU Octave is covered by the GNU GPLv3 and other Free and Open Source Software licenses. The main code of Tablicious is licensed under the GNU GPL version 3 or later. Certain files in the build tools are licensed under the GNU GPL version 2 or later. This includes the @code{mktexi.pl} and @code{OctTexiDoc.pm} files in the @code{doc/} directory. The tzinfo database file is Public Domain. The date/time portion of Tablicious includes some Unicode data files licensed under the Unicode License Agreement - Data Files and Software license. The Tablicious test suite contains some files, specifically some table-related tests using MP-Test like @code{t/t_01_table.m}, which are BSD 3-Clause licensed, and are adapted from MATPOWER written by Ray Zimmerman. The Fisher Iris dataset is Public Domain. @section Manual Copyright @insertcopying @bye apjanke-octave-tablicious-8a1b10f/docs/000077500000000000000000000000001515050116100200655ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/Design-and-Justification.md000066400000000000000000000304441515050116100251760ustar00rootroot00000000000000# Tablicious Design and Justifications This document describes the design choices I made in Tablicious, and some justifications for them and why I think they should be allowed into core Octave, or at least an Octave Forge package. ## Objects ### Copy constructors Each data object has a copy constructor calling form. The Matlab trick of doing this: ```octave function this = Foo(x) if isa (x, 'Foo') this = x; return end [...] end ``` doesn’t seem to be supported in Octave; or at least it seemed to lead to some instability when I tried it. Besides, it introduces the problem that the output of the constructor might be a subclass instead of an object of the exact type of the constructor. So I wrote out copy-constructor forms for most of the classes. The rest should be filled in, too; their absence is a bug. ### Planar-organized classes The data classes like `datetime` are implemented as planar-organized classes for efficiency. This lets them represent their arrays as arrays of primitives on which vectorized operations can be performed. “Planar-organized” is opposed to “struct-organized”, which is the default organization for Octave/Matlab classes. In struct-organized classes, arrays are represented by arrays of struct-y objects, each of which contains a single element/record’s data in its fields. Planar-organized classes are the only way to go fast with objects in Octave/Matlab. For example, an M-by-N `datetime` array is a single object wrapper around an M-by-N double array in the `dnums` property. Instead of it being an M-by-N array of blessed structs, each of which holds a scalar `dnums`. The downside is that implementing a planar-organized class requires you to write a _lot_ of boilerplate code. I went ahead and did that, though, because the performance gain is worth it. ## Namespaces ### The `+internal` namespace Any namespace with `+internal` as one of its components is considered to be an internal, private, implementation detail of a library itself. The language doesn’t enforce any access rules on this; it’s just a naming convention. But I think it’s become a reasonably well-established convention in other languages: Java supports it, and I think Matlab does too. I think Octave would do well to adopt it. Tablicious’ doco generation tools support `+internal` by excluding any `+internal` namespace from the generation of the API Reference section of the manual. So code in there is hidden from the user view at the documentation level. ### The `+octave/+examples` namespace I’m sticking example code in the `octave.examples` namespace. This makes it readily available to anyone with the package loaded (as opposed to requiring them to `cd` into a specific `examples/` directory or manually add it to the path), but keeps them out of the global namespace and the Octave and Tablicious public APIs. The `+examples` namespace is a suitable place to throw code that might be useful for users, but we don’t want in the actual package API for some reason. This includes: * Collecting code that’s used in multiple examples, like in the `octave.datasets` example data sets, into one place * Making available code that users can model their own code on, or reuse directly, but isn’t good enough for “production” code yet * Throwing examples where we don’t know what we want the permanent API to look like The stuff in `+examples` can be lower quality than main code, in the sense that: * It can be “toy” code that gets the happy path right, but doesn’t bother doing input validation or error handling * They can go without tests * Bugs here are lower impact * No need to keep things from changing between versions; no need to preserve back-compatibility ## `datetime` ### `datetime` constructor for numeric inputs The single-arg `datetime(x)` constructor, when called on numeric inputs, treats them as a datevec instead of as datenums. I think that’s a design mistake; datenums are closer to the “canonical” representation for dates in pre-`datetime` Matlab/Octave. And datenums seem to me to be what you‘d want the implicit conversion behavior to do in the case of mixed-type arithmetic, concatenation, or other combining operations. But datevecs is what Matlab picked, so we’re stuck with that, for compatibility. I’m thinking about adding a global `todatetime(x)` function that will treat its numeric inputs as datenums, for convenience. ## Example Datasets ### API The `octave.datasets` class provides functions for listing and loading all the example datasets this library provides. The `octave.dataset` class provides a list of all the individual examples, so you can use tab-completion on them (or at least you’ll be able to, once Octave supports tab completion for static methods on classes inside namespaces). This class is also how the Texinfo doco for the datasets finds its way into the generated user manual. This is done as two separate classes to keep the “list of data sets” separate from the “API for accessing datasets”. I think that makes it easier for users to find what they’re looking for; otherwise the generic methods in `octave.datasets` would get lost in the big list of individual example datasets. You run `octave.internal.generate_datasets_list` to generate the `octave.dataset` file from the individual example classes. This only needs to be done at code authoring time, not by the user. ### Organization The Example code sections in the `description.texi` for the example datasets are stored separately as scripts so that you can view them as M-code in an editor (with syntax highlighting, indentation assistance, and so on) and conveniently run them to test them (instead of having to copy-and-paste them from a view of the helptext, which would require you to go through the doco building cycle each time you made a change and wanted to run the code to test it). I’m thinking about breaking the `load` step out into separate `load_raw` and `munge` steps, to make it easier for users to view the example dataset code and see how the data-packaging classes like `table` are used. ## Justification ### Why does `table` display differently than in Matlab? In Matlab, doing `disp()` on a `table` will result in its printing the entire table contents in tabular form, as it does with primitives and cells. I think that, for any more than a few rows, this spams the console, and is not useful output. In interactive use, it’s much nicer to get a short summary of the table as its default display: tables have enough structure that a short summary is still useful, and it won’t spam your scrollback. I’ve spent years working with `table`-style objects that operate each way, and found the summary style to be much more usable. I think this is fine because `disp()` is mostly used for interactive use, and is not frequently used to produce actual program output, so this shouldn't be a real compatibility issue. ### Justify all these new top-level functions Tablicious defines several new top-level (global, not in namespaces or `private/` directories) functions. Many of them are ports of Matlab functions, which should be self-justifying. But some of them are not. Here are reasons for the new ones I made up. I call the top-level namespace that’s not in any explicit namespace the “global” namespace. I don’t know if that’s actually the correct term. ### Justify `colvecfun` Could easily go in the `+octave` namespace; there’s no real reason for it to be global, aside from easy discovery and analogy with the global `cellfun`, `arrayfun`, and so on. ### Justify `dispstr` and `dispstrs` Many modern programming languages provide a generic, polymorphic way of converting an arbitrary input to a string for user/developer presentation. E.g. Java has `toString`, Ruby has `to_str`, and Python has `str` and `repr`. Octave could really use one of those. Needs to be global so user-defined classes can override it with object methods. Because of Octave’s pervasive array nature, we need both a variant for “one string describing the entire array” (`dispstr`) and “N strings describing each of the array’s elements” (`dispstrs`). This dispstr stuff is all based on the [Dispstr API](http://dispstr.janklab.net/) I created for use with Matlab. ### Justify `eqn` This is a straightforward extension if `isequaln` behavior to the element-wise case. Needs to be global so user-defined classes can override it with object methods. ### Justify `isnanny` For some reason, Matlab chose to name the NaN values for `datetime` objects “NaT” instead, and define a new `isnat()` function to work with them. So you can’t write generic polymorphic code that works on both numerics and `datetime`s when testing for NaN-ness. Sigh. The new `ismissing()` function doesn’t fit the bill, because it’s too broad: it also considers empty strings and blank characters to be missing, and you may not want that broadness in a NaN-ness test. `isnanny()` smooths over the NaN/NaT difference without becoming as broad as `ismissing()`. UPDATE 2021-03-14: I've changed my mind. I now think that `ismissing` probably is a fine generalization of `isnan`/`isnat`, and we should just use that, and `isnanny` should go away. I made this a global function so that user-defined classes could override it with object methods. Without `methods(klass)` working for classdef objects, it’d be hard to detect whether a user-defined object supports `isnan()` and/or `isnat()`, so classes might want to override `isnanny` itself. This is not ideal; I'm still thinking about whether this is the best approach. ### Justify these extra `mustBeXxx` functions Many of the `mustBeXxx()` functions are just ports of Matlab’s existing validator functions. But I added a few new ones: * `mustBeA` * `mustBeCellstr` * `mustBeCharvec` * `mustBeSameSize` * `mustBeScalar` * `mustBeScalarLogical` * `mustBeVector` * `makeItBeA` These all see a lot of use in my experience, so they’d be useful to provide. And I think their semantics and implementation are obvious enough that we don’t need to be trepidatious about adding them to the public API. ### Justify `pp` If you end up working with tables or other complex structures that support `prettyprint`, you end up calling `prettyprint` a lot, so it’s nice to have a shortcut for it, especially one with the char-interpreting command style. Needs to be have a super short name so users can quickly bang it out at the command line. Namespace would make this inconvenient. However, `pp` is only ever called directly by end users; it doesn’t need to be available to other code in the library. So this could just be provided as an example function, and require users to copy it into their default path (like at `~/Documents/octave`) to have it take effect. ### Justify `proxykeysForMatrixes` This one is ugly to have hanging around in the global namespace, but it’s necessary in order to allow user-defined classes to override it with object methods. ### Justify `scalarexpand` This one is really useful. I use it in the input handling for a lot of functions, and I think it should exist. This one could probably go in the `+octave` namespace, though. It does not need to be overridden by anything. ### Justify `size2str` I use this one a lot in generating error and progress messages. It gets used often enough that I think it could belong in core Octave. It's trivial to implement. But it's useful enough that I think it deserves a home in a library or core Octave. This would make it both convenient for users to use, and easier for code readers to recognize and understand if there were a single core, conventional name for this operation. Its behavior is simple enough that its interface is unlikely to change. Though the format could change: maybe you’d want to do “AxBxC” instead of “A-by-B-by-C”, or something like that. In which case that’s another reason to prefer an established, central function to do this. ### Justify `tableOuterFillValue` Having this be global is necessary in order to allow user-defined classes to override it with object methods. This ugliness could probably be hacked around by not having a global function, and just having `table.outerjoin` test its variable values to see if they are objects which define a `tableOuterFillValue`, and only call that if they are defined. But this will be hard because Octave currently doesn’t support calling `methods` on user-defined classes. apjanke-octave-tablicious-8a1b10f/docs/Developer-Notes.md000066400000000000000000000143561515050116100234330ustar00rootroot00000000000000# Tablicious Developer Notes See also: * [Design and Justification](Design-and-Justification.html) for info on the design of this library. * [Join Behavior](Join-Behavior.html) for a description of the "proxy keys" and other stuff related to join semantics and implementation. * [TODO](TODO.html) * [Release Checklist](Release-Checklist.html) ## Code Tablicious is a decent-sized package, though not as large as some other Octave Forge packages. As of February 2024, it's about 39,000 lines of code and documentation. To get familiar with the library, you probably want to start with the main `table` class, and then `datetime` and `string`, and at least skim the documentation (the User Manual plus the `*.md` files in this directory) before diving in to reading the code. ## Code Style and Principles * Standard [GNU Octave code style](https://wiki.octave.org/Octave_style_guide) * In general, use reallyLongDescriptiveNames for non-standard-Matlab-or-Octave functions you are adding, to reduce chance of name collisions. ## No Matlab usage! To avoid issues with the Matlab license's Non-Compete clause, this project needs to be developed entirely using Octave, and not using Matlab at all, including for testing or benchmarking purposes. Please do not submit any Matlab test or benchmark results, or any code produced using Matlab. And if you know anything about how the Matlab internals work, please do not tell me! ## Our Documentation ### Building the Docs The texinfo format we use requires Texinfo 6.0 or newer. This is newer than the Texinfo that comes with macOS, which ships a 5.x Texinfo. To build the docs on Mac, you will need to install a newer Texinfo (e.g. with Homebrew) and then make sure that Texinfo is on your path ahead of the system Texinfo. ### Texinfo notes The `mktexi.pl` tool we use doesn't have great support for classdefs; it is more function-oriented. You need to work around that a little bit in the texinfo documentation you write. For methods in classes, including the constructor, you need to manually add a `@node .` line in the texinfo block, right before the `@deftypefn` line. That's because mktexi.pl will auto-generate `@node` lines for free functions, but not for methods inside functions. Other things – free functions, classdefs, and scripts, including those inside packages (namespaces) – should not have explicit `@node` lines in the texinfo; those will be added automatically by `mktexi.pl`. For functions and classes inside packages (namespaces), you should fully qualify their names in the `@deftypefn` or `@deftp` lines. This will get their node name generated correctly, and IMHO is also how they should look in the presented help, because that's their full name, and they need to be addressed that way in the code (with either a fully-qualified name, or an `import` statement). And it makes it unambiguous what you're looking at, in the case of multiple functions or classes with the same non-namespace-qualified name. This approach also makes it so in the texinfo we're not relying on implicit package qualification via the file's location in the repo directory tree, and these things can be placed anywhere in the source tree with the same contents, and not have to be edited manually when they change, and not have to have special support in the `mktexi.pl` tooling for package directories. The support for packages (namespaces) and classes in `mktexi.pl` is a Tablicious customization we added, after copying that tool from another OF package. `mktexi.pl` is heavily modified in other ways, and doesn't closely match the "standard" one used by other OF packages. You need TeX installed, along with some TeX packages like those supplied in the TeXLive distribution. I don't know specifically which packages. They're some packages (or other things) supplied by the full MacTeX TeXLive distribution, but not by the BasicTeX version. If you don't have them, then the `texi2*` calls inside the `make doc` target may fail with errors like `/usr/local/bin/texi2dvi: texinfo.tex appears to be broken. ... ! I can't find file 'texinfo.tex'`. ## Unit Tests Tablicious doesn't have great unit test coverage, but it has some. It uses a combination of regular Octave style BISTs and [MP-Test](https://github.com/MATPOWER/mptest) ("mptest") tests. The BISTs and mptest suites are integrated with each other, in `tblish.internal.runtests`, so you can run them together as a suite. But the result reporting is a little disjoint; you need to read the textual output to evaluate the full results. To run the full Tablicious unit test suite, run `tblish.internal.runtests()` while Tablicious is loaded. It will skip the MP-Test tests if MP-Test is not also loaded. The BISTs are embedded in the various `*.m` source code files. The MP-Test tests are in `inst/t`. To run them, you'll need MP-Test, which you get separately from [the MP-Test GitHub repo](https://github.com/MATPOWER/mptest). (I don't think it's available as an Octave Forge package.) Add the `lib/` dir from the MP-Test repo to your Octave path. Then run `tblish.internal.runtests()`, and it will include the MP-Test tests in its test suite. Or, add Tablicious' `inst/t/` dir to your path (that's not done as part of loading the Tablicious package), and run `tblish_mptest_tablicious()` to run them all. Or, call one of the test functions like `t_01_table()` to run a single test. The single tests show detailed output by default; the combined suite does not. The MP-Test test suites from Tablicious and other packages may interfere with each other, so you should only have one package's MP-Test test suite on the Octave path at a time. ## Distribution Tablicious is indexed in the [GNU Octave Packages](https://gnu-octave.github.io/packages) index at . The index entry is in the [gnu-octave/packages repo](https://github.com/gnu-octave/packages) at `packages/tablicious.yaml`. It is supported by the `DESCRIPTION` and `octave-tablicious.metainfo.xml` files in this repo. Debian is considering picking up Tablicious, at . [Octave Online](https://octave-online.net) includes Tablicious. It's my intent to support all these downstream packagers (to the extent that's convenient), but Tablicious has no formal relationship with them. apjanke-octave-tablicious-8a1b10f/docs/FAQ.md000066400000000000000000000055321515050116100210230ustar00rootroot00000000000000# Tablicious FAQ ## General ### Is this code ready for production use? *NO!* This is beta quality code. Do *NOT* use this for your business or production code needs yet! ## Build issues ### I'm getting Texinfo errors Like this? ```text $ make doc master ✱ cd doc && make maintainer-clean && make all rm -rf *.tmp rm -rf *.dvi *.eps *.html *.info *.pdf *.ps *.png *.texi *.qhp *.qch *.qhc images.mk perl ./mkdoc.pl DOCSTRINGS.texi.tmp ../inst ../src perl ./mktexi.pl src/tablicious.texi DOCSTRINGS.texi.tmp ../INDEX chrono.texi makeinfo --no-split -o chrono.info chrono.texi chrono.texi:10: warning: unrecognized encoding name `UTF-8'. chrono.texi:31: warning: undefined flag: VERSION. chrono.texi:53: warning: undefined flag: VERSION. chrono.texi:79: warning: undefined flag: VERSION. chrono.texi:729: warning: undefined flag: VERSION. /Users/janke/local/repos/octave-chrono/doc//chrono.texi:389: `Functions Alphabetically' has no Up field (perhaps incorrect sectioning?). /Users/janke/local/repos/octave-chrono/doc//chrono.texi:335: `Funtions by Category' has no Up field (perhaps incorrect sectioning?). /Users/janke/local/repos/octave-chrono/doc//chrono.texi:243: `Defined Time Zones' has no Up field (perhaps incorrect sectioning?). /Users/janke/local/repos/octave-chrono/doc//chrono.texi:148: `datenum Compatibility' has no Up field (perhaps incorrect sectioning?). /Users/janke/local/repos/octave-chrono/doc//chrono.texi:335: warning: unreferenced node `Funtions by Category'. /Users/janke/local/repos/octave-chrono/doc//chrono.texi:243: warning: unreferenced node `Defined Time Zones'. /Users/janke/local/repos/octave-chrono/doc//chrono.texi:148: warning: unreferenced node `datenum Compatibility'. makeinfo: Removing output file `chrono.info' due to errors; use --force to preserve. make[1]: *** [chrono.info] Error 1 make: *** [doc] Error 2 ``` Your Texinfo is too old. Get a newer one. On macOS, you can do this with Homebrew. ```bash brew install texinfo PATH="$(brew --prefix texinfo)/bin:$PATH" make doc ``` ### I'm getting weird `sed: ...@documenten...` warnings in the `make doc` step? Like this? ```text $ make doc [...] /usr/local/opt/texinfo/bin/texi2pdf --quiet --clean -o chrono.pdf chrono.texi sed: 2: "s/\(^\|.* \)@documenten ...": whitespace after branch sed: 4: "s/\(^\|.* \)@documenten ...": whitespace after label sed: 6: "s/\(^\|.* \)@documenten ...": undefined label 'found [...] ``` Those warnings are produced by older Texinfo programs, like Texinfo 4.8, which is the default on macOS 10.13 and 10.14. [Install a newer Texinfo using Homebrew](https://github.com/apjanke/octave-chrono/issues/17) and pull that in explicitly for your build. ```bash brew install texinfo PATH="$(brew --prefix texinfo)/bin:$PATH" make doc ``` apjanke-octave-tablicious-8a1b10f/docs/Gemfile000066400000000000000000000024521515050116100213630ustar00rootroot00000000000000source 'https://rubygems.org' # Hello! This is where you manage which Jekyll version is used to run. # When you want to use a different version, change it below, save the # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: # # bundle exec jekyll serve # # This will help ensure the proper Jekyll version is running. # Happy Jekylling! gem 'jekyll' #, '~> 3.8.5' gem 'minima' #, '~> 2.0' gem 'kramdown-parser-gfm' gem 'github-pages' group :jekyll_plugins do gem 'jekyll-theme-cayman' gem 'jekyll-asciidoc' gem 'jekyll-coffeescript' gem 'jekyll-default-layout' gem 'jekyll-gist' gem 'jekyll-github-metadata' gem 'jekyll-paginate' gem 'jekyll-readme-index' gem 'jekyll-relative-links' gem 'jekyll-titles-from-headings' gem 'jekyll-feed' gem 'jekyll-seo-tag' gem 'jekyll-theme-slate' gem 'jekyll-last-modified-at' gem 'jekyll-toc' gem 'jekyll-sitemap' gem 'jekyll-optional-front-matter' end # Asciidoctor uses pygments for source highlighting gem 'pygments.rb' # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] # Performance-booster for watching directories on Windows gem 'wdm', '~> 0.1.0' if Gem.win_platform? # I don't know why we need these gem 'rexml' gem 'webrick' apjanke-octave-tablicious-8a1b10f/docs/Join-Behavior.md000066400000000000000000000305631515050116100230520ustar00rootroot00000000000000# Tablicious Join Behavior This page describes the semantics and implementation of join-related stuff in Tablicious's `table` class, including its special "proxy keys" trick. ## Supported variable data types Variables in `table` arrays may be of just about any Octave data type, including user-defined classes. For basic structural operations, the type just needs to itself support basic structural operations: * `()`-indexing * `size` and `numel` * `vertcat` For relational operations, such as joins, `unique`, and other `table` methods to work, the variables used as keys in these operations must support the following small set of operations: * `unique` * `ismember` * `eq` * `isequal` * `ismissing`, under certain conditions * Maybe `(:)`-indexing to reshape to a column vector A user-defined class only needs to define an `ismissing` method if it implements missing or NaN-like semantics, in which case it needs to define an `ismissing` that is consistent with its `eq`, `ismember`, and `unique` methods. An exception is made for `table` itself: `table` does not support `(:)` for conversion to a column vector, and its `unique` method violates the general contract of the `unique` function, because it operates row-wise even when you do not specify its `'rows'` option. This is handled with special-case code for nested `table`s inside `table` itself. The following functions or methods are optional, but if your type supports them, then `table` will respect that and enhance its behavior to use them. In particular, this allows you to define custom display formats for how your type is displayed when it is used as a variable in a `table`: * `dispstrs()` and `reprstrs()` TBD: We may require support for the `'rows'` option of `unique`. I'm still undecided on this. If we require this, then the requirement for `(:)` reshaping goes away. TBD: We may require support for conversion from `missing` or some other way of specifing a default fill value. This is needed to support outer joins. Right now we're doing it with tricks using array expansion via `()`-indexing; unclear whether that's sufficient. ## Document conventions In this document, we'll talk about example `table`s, which will be named `tbl`, `tblA`, `tblB`, and so on. nA is the number of rows in `tblA`; nB is the number of rows in `tblB`, and so on. Many people may think of the data items in a `table` array as "columns" or "variables" interchangeably. But each variable in a `table` may actually have multiple columns. So in here, I'm careful to distinguish between "variables", which are the named things in a `table`, and "columns", which are the columns within a variable. A "tuple" is a set of named values. It's the formal term from relational algebra for a row or record within a SQL table or result set, or any similar structure. A row in a `table` array can be considered a tuple. The "cardinality" of an array is the number of unique values in it. Each missing or NaN value counts as a separate value. For example, the cardinality of `[1 1 2 2 NaN NaN NaN]` is 5. The cardinality of a `table` is the number of distinct tuple values in it. ## "Proxy Keys" ### Background "Proxy keys" is a trick I came up with around 2004, and have used successfully in a couple implementations of `table` in Matlab back in the day before Matlab had its own `table` class. I think that's a good indication that it will work in Octave. ### What we need The basic problem here is how to efficiently compute matches and ordering for heterogeneously-typed multi-column record-oriented data structures in Octave. The logic for most table operations, like `sort`, `unique`, and all the joins, boils down to doing ordering or equality tests on multi-column values that may have columns of heterogeneous types: a `table` array may have variables of any type, so the variables used as keys may have mixed types. We need to compare the value of "tuples" which are composed of the i-th rows from one or more variables, and either sort the tuples within a single `table`, or produce a list of matches between the tuples in two different `table`s. For example, let's say you have this `tblA` and `tblB`: `tblA`: | k1 | k2 | v1 | | -- | -- | -- | | "foo" | 1 | 1.2 | | "foo" | 2 | 3.4 | | "bar" | 1 | 5.6 | | "bar" | 2 | 7.8 | | "baz" | 3 | 1.2 | `tblB`: | k1 | k2 | v2 | v3 | | -- | -- | -- | -- | | "foo" | 2 | 123 | "x" | | "foo" | 1 | 234 | "xx" | | "baz" | 4 | 345 | "y" | | "baz" | 3 | 456 | "z" | | "baz" | 1 | 567 | "a" | | "qux" | 1 | 678 | "b" | | "qux" | 2 | 789 | "c" | | "scooby" | 42 | 123 | "d" | The key variables or "join keys" are the variables which appear in both tables, identified by their variable names. You can reduce these tables to just "key tables" by subsetting them by variables to just the key variables. The "key tuples" are the tuples subsetted to just the key variables. Two tuples (or rows) match if their key tuples are equal. Two tuples are equal if, for every variable v (in our example case, `k1` and `k2`), their values are equal for that row, as determined by `isequal(tblA.v(i,:), tblB.v(j,:))`. For the various relational operations (joins, setdiffs, and so on), we need to compute some combination of: * The list of all pairs of matching rows between `tblA` and `tblB` * The list of rows in `tblA` that match no rows in `tblB` * The list of rows in `tblB` that match no rows in `tblA` This is tricky because if you want to Go Fast in Octave, you need to use vectorized operations, but Octave has no built-in efficient operations for the comparison of heterogenous tuple-like structures. There's no form of `ismember` or the like which takes multiple column vectors on either side. And even cell's `ismember` doesn't support non-cellstr cells. A naive implementation of the key-tuple-matching logic in a `table` join might look something like the following. Assume the two `table`s to be joined are `tblA` with columns `k1`, `k2`, `k3`, `v1`, and `v2`, and `tblB` with columns `k1`, `k2`, `k3`, and `v3`. ```octave keyVars = intersect(tblA.Properties.VariableNames, tblB.Properties.VariableNames); keyTblA = tblA(:,keyVars); keyTblB = tblB(:,keyVars); keysA = table2cell(keyTblA); keysB = table2cell(keyTblB); ixMatches = NaN(0, 2); for iA = 1:height(tblA) for iB = 1:height(tblB) tfRowsMatch = isequal(keysA(iA), keysB(iB)); if tfRowsMatch ixMatches(end+1,:) = [iA iB]; end end end ``` This is not going to be efficient: loops are slow, the conversion from table to cell will be inefficient because it breaks up any primitive variables into a bunch of cells containing scalars or single rows, and the repeated isequal() calls will have overhead. Your next idea might be to do two-way `ismember` calls on each of the individual key variables, and then combine those results. But there's no easy way (that I know of) to compose this single-variable ismember results into the correct result that considers all the variables at once. ### How proxy keys work Tablicious' approach to this problem is a trick I call "proxy keys". For an input key variable of any type, it transforms the values present in that array into a corresponding set of numeric values which have the same equality and ordering relationships as the original input values. (These numeric replacement values are the "proxy keys" for the original keys.) Then you can combine those numeric proxy key vectors into homogeneous numeric matrixes and do `ismember` and similar calls on them, which will be fast because they use the vectorized Octave built-ins defined for numerics. The trick for efficiently and generically computing the proxy keys for any input type is to use the 3-argout form of `unique`: ```octave [Y, I, J] = unique(X) ``` The output `Y` is the unique values from `X`, in sorted order. The output `I` is an index vector corresponding to `Y` indicating where in `X` they were found. The output `J` is an index vector the same size as `X` that indicates the index in `Y` that holds the unique value found in `X(i)`. The numbers in that `J` output have the properties required of proxy keys! For the proxy keys to be comparable across two inputs (i.e. for the key variable in the two input tables to a join operation), you need to compute the proxy keys for the values from both inputs together. To do this, you concatenate the two input variables and consider them together. ```octave allVals = [tblA.k1; tblB.k1]; [~, ~, pkeys] = unique(allVals); nA = height(tblA); pkeysA = pkeys(1:nA); pkeysB = pkeys(nA+1:end); ``` When you're operating on multiple key variables, compute the proxy keys for each variable, and then horzcat them together. This will produce a pair of multi-row proxy key matrixes. ```octave nKeyVars = numel(keyVars); pkeyBufA = cell(1, nKeyVars); pkeyBufB = cell(1, nKeyVars); nA = height(tblA); for iKey = 1:nKeyVars keyA = tblA.(keyVars{iKey}); keyB = tblB.(keyVars{iKey}); keysTogether = [keyA; keyB]; [~, ~, pkeys] = unique(keysTogether); pkeyA = pkeys(1:nA); pkeyB = pkeys(nA+1:end); pkeyBufA{iKey} = pkeyA; pkeyBufB{iKey} = pkeyB; end pkeysA = cat(2, pkeyBufA{:}); pkeysB = cat(2, pkeyBufB{:}); ``` Now, do row-wise matching operations on the proxy key matrixes using `ismember(..., 'rows')`, `sortrows()`, `unique(..., 'rows')` and so on. If two rows in the proxy keys are equal, then the corresponding rows in the original input keys are equal. The order in which the rows in the proxy keys sort is the order in which the rows in the inputs should sort. And it's all done in the numeric domain with efficient vectorized Octave builtin functions. You can go one step further than this, and do `unique(..., 'rows')` on the proxy key matrix itself to produce single-column proxy keys, where each distinct input tuple is represented by a distinct scalar numeric proxy key. This would make proxy key matching operations even faster, because they'd be done on scalar values instead of rows. But you'd have to pay the cost of that `unique()` to calculate them, which is probably O((nA+nB) * log (na+nB)). I don't know if that's worth it. For a multi-column variable, you can produce proxy keys either by using the `[~,~,pkeys] = unique(x, 'rows')` calling form, or by reshaping the input variable to a column vector, using regular `[~,~,pkeys] = unique(x)` on that, and reshaping the resulting pkeys to match the original input. I haven't decided yet which approach is better. The `'rows'` approach results in scalar proxy keys instead of multi-column proxy keys, which is nicer, but it adds the requirement that the variable types support the `'rows'` option to `unique`, which not all types do. You could add some logic to do it either way, depending on whether the input supports the `unique(..., 'rows')` option. But there's no easy way to programmatically detect whether an input does or not. ### Proxy key type Proxy keys are `double`s. It may be more efficient to represent them as `single` or an int type instead, possibly even choosing which type dynamically based on the type and cardinality of the input key values. TBD whether to do that. This would purely be about efficiency. ### Optimized proxy key calculation For some types, you may be able to directly compute proxy key values in an efficient manner without doing the `unique` trick. Possibly much more efficiently. For most numeric types, including `double`, `single`, and all integer values except `int64` and `uint64`, their values are _already_ valid proxy keys. So just cast them to `double` and you're done. `int64` and `uint64` may contain values that cannot be exactly or uniquely represented as `double`, so you need to do the `unique` trick on them. Any other type that has an exact or distinct `double` representation can also be converted directly over. For example, Tablicious' `datetime` type is internally equivalent to a `double` datenum, so you can just use that. And `categorical` arrays already have a numeric form. It would be possible to define an interface that allowed user-defined classdef types to provide an optimized proxy key conversion. To do this, we would need to specify the name and signature of a method that did that conversion; something like `proxykeys(x)`. ## What Matlab does I have no idea what Matlab does in its `table` implementation to support heterogeneous-variable matching, or whether it's anything like my proxy keys trick. I have intentionally avoided learning about the internals of Matlab's `table` to avoid becoming tainted with MathWorks intellectual property in this area. If you know how Matlab's `table` works internally, please don't tell me. apjanke-octave-tablicious-8a1b10f/docs/README.txt000066400000000000000000000031721515050116100215660ustar00rootroot00000000000000# README - Tablicious docs/ This `docs/` dir is the project documentation, for online and local consumption. This is the whole project web site, not just the doco for one particular release. This is (currently) a GitHub Pages site. So this folder needs to be named exactly `docs`, and when you push changes to the `main` branch, they get published on GH Pages automatically. This file is internal developer documentation, not really meant for presentation on the website, but it doesn't matter if users or the public see it anyway. ## Dir structure * `/` - The main web site! * `*.md` - Articles and pages that apply across multiple versions, or are about the project as a whole. * `release/` - Package doco for released versions (frozen). * `v/` - Package doco for a specific version (frozen). * `devel/` - Package doco for the in-development version on `main` ("living"/unstable). * `index.md` - The front page that gets displayed when a user goes to the site. * `CNAME` - GH Pages config file for using a custom domain name (may not exist, auto-managed). * `Gemfile`, `_config.yml` - GH Pages configuration for both deployment and local use. Under each package doco dir, either a `release/v/` or `devel/`, we have: * `/` * `user-guide/` * `html/` - Multi-page version of the User Guide. * `tablicious.html` - Single-page version of the User Guide. * `tablicious.pdf` - PDF version of the User Guide. Yep, that's it for now. TODO: Add an index.md or index.html for those, at the top level, with a brief info, links to the various formats of the user guide, and a link to the main project site. apjanke-octave-tablicious-8a1b10f/docs/Release-Checklist.md000066400000000000000000000127111515050116100237000ustar00rootroot00000000000000# Tablicious Release Checklist Here's the process for doing a Tablicious release. 1. Make a new `release/v` branch for the prep work and switch to it. 1. Run all the tests. 1. `tblish_inst = fullfile(getenv('HOME'), 'repos', 'octave-repos', 'tablicious', 'inst')` 1. `addpath(tblish_inst)` 1. `__run_test_suite__ ({tblish_inst}, {})` 1. `tblish.internal.runtests` 1. Run the MP-Test tests 1. `addpath(fullfile(getenv('HOME'), 'repos', 'octave-repos', 'mptest', 'lib'))` 1. `tblish_mptest_tablicious` 1. Wouldn't hurt to do `make clean && git status && make test` and manual-cleanup, just to be sure. 1. Update the version info in the repo. 1. Update the version number and date in `DESCRIPTION`. 1. Remove the `-SNAPSHOT` suffix from the version number. 1. Update the `CHANGES.txt` file with the release date. 1. Use the current calendar date in UTC time, not your local time. 1. And check that it has a complete change list for the release. This _ought_ to be done as changes are committed, but we're not good about that at all, so assume it didn't happen. 1. Update the installation instructions in `README.md` to use the upcoming release tarball URL. 1. Format is: `https://github.com/apjanke/octave-tablicious/releases/download/v/tablicious-.tar.gz` 1. As of 2024-10, this is just in the "Quick start" section. 1. Commit the changes so far with commit message `[release] v - prep`. 1. Use form: `git add -A; git commit -a -m '[release] v - prep'` 1. Update the generated doco. 1. Regenerate the doco: `make doc; make gh-pages` 1. Make a versioned copy for this release: * `ver=$(grep ^Version DESCRIPTION | cut -d ' ' -f 2); mkdir -p docs/release/v${ver}/user-guide; cd doc; cp -R html tablicious.html tablicious.pdf ../docs/release/v${ver}/user-guide` 1. What is wrong with you, Andrew? Make this a `make` target instead of a 200-character-long bash cut-and-paste command. 1. Update `docs/index.md` with the new release. 1. Add a section for the new release's doco under Releases. 1. Update the links in the first paragraph in User Documentation to point to the new release, and the release number in the second paragraph. 1. Commit the regenerated doco with commit message `[release] v - doco`. 1. Use form: `git add -A; git commit -a -m '[release] v - doco'` 1. Make sure your repo is clean: `git status` should show no local changes. 1. Run `make dist` first to make sure it works. 1. This has to be done _after_ the commit, because it extracts from git history. 1. Test the dist tarball. 1. Install it with `pkg install /target/tablicious-x.y.z.tar.gz`. 1. Run tests on the installed package. 1. `pkg test tablicious` will do the BISTs. (But only the oruntest-discoverable ones?) Prob have to run the MP-Test suite manually for now. 1. Preferably on both Mac and Linux, and maybe Windows. 1. Merge the `release/v` branch to `main` and switch to `main`. 1. Create a git tag and push it and the above changes to GitHub. 1. `git tag v; git push; git push --tags` 1. Create a new GitHub release from the tag. 1. Just use `` as the name for the release, not `v` or `v `. 1. Copy and paste the changes for this release from the `CHANGES.txt` file into the GitHub Release description field. 1. Upload the dist tarball as a file for the release. 1. Test installing the release using `pkg install` against the new release URL. 1. Do this by copy-and-pasting the `pkg install` example from the [live README page](https://github.com/apjanke/octave-tablicious/blob/master/README.md) on the GitHub repo. This makes sure the current install instructions are correct. 1. Don't short-circuit this by just editing an entry from your Octave command history! Open GitHub in a browser and actually copy-and-paste it. 1. Run tests on the installed package, like above. 1. Open development for next version. 1. Update version number and date in `DESCRIPTION` to next patch or minor version, as appropriate. 1. Include a `-SNAPSHOT` suffix to indicate this is a work in progress. 1. Add a section to `CHANGES.txt` for the new upcoming release, at the top. Use `(unreleased)` for its release date. 1. `git add -A; git commit -a -m '[release] open development for next version ()'; git push` 1. Close the GitHub Issues [Milestone](https://github.com/apjanke/octave-tablicious/milestones) for this release. 1. Create a new Milestone for the next release, if one doesn't already exist. 1. Announce the release. 1. Update the OF packages index info in the gnu-octave/packages repo. 1. Put in a PR to the [`gnu-octave/packages` repo](https://github.com/gnu-octave/packages) to update `packages/tablicious.yaml`. 1. Add a new item to its `versions` section for this new release. 1. See example: [Tablicious index update for 0.3.7 - 0.4.2](https://github.com/gnu-octave/packages/pull/401). 1. Add a comment to the [Tablicious News issue](https://github.com/apjanke/octave-tablicious/issues/131) with a link to the new release. 1. Post an announcement on the [Savannah bug for datetime support](https://savannah.gnu.org/bugs/index.php?47032) if this is a significant release with respect to the date/time classes. If there were any problems following these instructions exactly as written, please report it as a bug. apjanke-octave-tablicious-8a1b10f/docs/TODO.md000066400000000000000000000122771515050116100211650ustar00rootroot00000000000000# Tablicious TODO ## For this document * This TODO document is way out of date as of 2024. Review it and remove stuff that got done or WONTFIXed. ## Overall * Convert internal dnums representation to UTC. * Math goes bad around DST and other zone transitions if you don't do that. * Documentation * Add more BISTs * Consider using GNU FDL for the documentation license. * Propagate NaN-filling fix for planargen back to Janklab. * Report crash: giving duration a days method while it has a days property results in a crash. ## Unit tests * Automatic MP-test detection is broken. * A single M-code script to run both BISTs and MP-Test suite. * Doing what the `runtests.sh` shell wrapper does now, moving it in to M-code. ## Build and packaging * Make the "versioned copy of doco" step of the release a script or `make target` instead of a big copy-pasted command. * Rework the Release Checklist so that the generated doco building and capture is a separate commit from the "config" changes and headline doco changes for a release. * Have Release Checklist test the local package from dist tarball before pushing the release to GitHub. ## Doco stuff * Document my new class/namespace-supporting stuff. * Stick a README in the doc/ directory describing how my new stuff works, and detailing the texinfo conventions needed to work with it. * Add support for namespaces/packages. * Recursively find files in `+blah` dirs under main source path dirs. * Establish node naming convention for things in namespaces. ## Areas * `table` * summary * Description, Units, and CustomProperties for variables in table * `timetable` * More documentation for individual methods * File I/O * readtable, writetable * tableread * table.textscan, table.csvread, table.dlmread * Maybe pull in Apache FOP for this. Will need to write custom Java layer for acceptable performance. * But most Octave users don't want to use Java. Better to take a C/C++ dependency. Or even a Python one, these days, I think. * viewtable() * Takes single table or struct with tabular field contents * Doing this in Java would be easier; in Qt would be nicer * But doing it in Qt would require users installing the package to have Qt dev tools installed so the build can work. Yuck. * `datetime` * Convert internal dnums representation to UTC * Math goes bad around DST and other zone transitions if you don't do that * I think this is actually done already? * Time zone support * Normalization of "nonexistent" times like between 02:00 and 03:00 on DST leap ahead days * Leap second conversion * `Format` support * Needs LDML format support, not datestr() format placeholders * between() - calendarDuration diffs between datetimes * caldiff * dateshift * week() - ISO calendar week-of-year calculation * isdst/isweekend * Additional `ConvertFrom` types * POSIX zone rule support for dates outside range of Olson database * This affects dates before around 1880 and after around 2038 * It also affects current dates for time zones that don't use DST! * TODO: First, implement simplified no-DST POSIX time zones. That'll at least get us Tokyo time support. Sheesh. * `TzDb` * timezones() function: add UTCOffset/DSTOffset * `calendarDuration` and its associated functions * split() * Can different fields be mixed positive/negative, in addition to the overall Sign? Current arithmetic implementation can result in this. Should that be normalized? Maybe. Not sure it can be fully normalized. * proxykeys: pull isnan up to front of precedence? Maybe invert so NaNs sort to end? * Fix expansion filling? * e.g. `d = datetime; d(5) = d` produced bad `d(2:4)` before patch; this probably does similar now * It's in the expansion of numerics: their default value is 0, not NaN. * Refactor out promote() * Plotting support * Maybe with just shims and conversion to datenums * `duration` * `InputFmt` support * `Format` support * Documentation * Keyword index, including all function and class names * Fix Travis CI doco build * Correct asciibetical ordering in Functions Alphabetically * Fix this: `warning: doc_cache_create: unusable help text found in file 'datetime'` * Get `help datetime` to recognize my datetime * Currently, `which datetime` gives `'datetime' is a built-in function` and `help datetime` gives `error: help: 'datetime' is not documented` * Get `mkdoc.pl` to ignore files in `+internal` namespaces. * categorical stuff * summary * countcats * Other "Missing Data" stuff * fillmissing() * ## Examples stuff * Lowess smoothing (several datasets) * ANOVA display (`chickwts`) * Linear model regression results plotting (`cars`, `chickwts`) * The thing that does a 2-by-2 grid with residuals, Q-Q, and Scale-Location plots * I think this comes from R’s `lm()` linear model function * Equivalent of R’s `coplot()` (`DNase`) * Equivalent of R’s “mosaic plot” (`esoph`) * Good luck on this one ## Wishlist and maybes * MAT-file representation compatibility with Matlab? * Documentation * A new Texinfo `@defmfcn` macro for Matlab's idiosyncratic function signatures apjanke-octave-tablicious-8a1b10f/docs/_config.yml000066400000000000000000000014551515050116100222210ustar00rootroot00000000000000title: Tablicious email: andrew@apjanke.net description: Table and related classes for Octave baseurl: "/" url: "" theme: jekyll-theme-slate github_username: apjanke # Fixed GitHub Pages configuration markdown: kramdown lsi: false safe: true incremental: false highlighter: rouge gist: noscript: false kramdown: math_engine: mathjax syntax_highlighter: rouge exclude: - Gemfile* keep_files: - images plugins: # Forced by GitHub Pages - jekyll-asciidoc - jekyll-coffeescript - jekyll-default-layout - jekyll-gist - jekyll-github-metadata - jekyll-last-modified-at - jekyll-optional-front-matter - jekyll-paginate - jekyll-readme-index - jekyll-relative-links - jekyll-titles-from-headings # Supported by GitHub Pages - jekyll-feed - jekyll-seo-tag - jekyll-sitemap apjanke-octave-tablicious-8a1b10f/docs/_sass/000077500000000000000000000000001515050116100211755ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/_sass/jekyll-theme-slate.scss000066400000000000000000000176471515050116100256110ustar00rootroot00000000000000/* * This is a customized version of jekyll-theme-slate.scss that turns off the * background coloring on inline code spans, which I think improves readability. * -apjanke */ @import "rouge-github"; /******************************************************************************* MeyerWeb Reset *******************************************************************************/ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } ol, ul { list-style: none; } table { border-collapse: collapse; border-spacing: 0; } /******************************************************************************* Theme Styles *******************************************************************************/ body { box-sizing: border-box; color:#373737; background: #212121; font-size: 16px; font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; line-height: 1.5; -webkit-font-smoothing: antialiased; } h1, h2, h3, h4, h5, h6 { margin: 10px 0; font-weight: 700; color:#222222; font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; letter-spacing: -1px; } h1 { font-size: 36px; font-weight: 700; } h2 { padding-bottom: 10px; font-size: 32px; background: url('../images/bg_hr.png') repeat-x bottom; } h3 { font-size: 24px; } h4 { font-size: 21px; } h5 { font-size: 18px; } h6 { font-size: 16px; } p { margin: 10px 0 15px 0; } footer p { color: #f2f2f2; } a { text-decoration: none; color: #0F79D0; text-shadow: none; transition: color 0.5s ease; transition: text-shadow 0.5s ease; -webkit-transition: color 0.5s ease; -webkit-transition: text-shadow 0.5s ease; -moz-transition: color 0.5s ease; -moz-transition: text-shadow 0.5s ease; -o-transition: color 0.5s ease; -o-transition: text-shadow 0.5s ease; -ms-transition: color 0.5s ease; -ms-transition: text-shadow 0.5s ease; } a:hover, a:focus { text-decoration: underline; } footer a { color: #F2F2F2; text-decoration: underline; } em, cite { font-style: italic; } strong { font-weight: bold; } img { position: relative; margin: 0 auto; max-width: 739px; padding: 5px; margin: 10px 0 10px 0; border: 1px solid #ebebeb; box-shadow: 0 0 5px #ebebeb; -webkit-box-shadow: 0 0 5px #ebebeb; -moz-box-shadow: 0 0 5px #ebebeb; -o-box-shadow: 0 0 5px #ebebeb; -ms-box-shadow: 0 0 5px #ebebeb; } p img { display: inline; margin: 0; padding: 0; vertical-align: middle; text-align: center; border: none; } pre, code { color: #222; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; font-size: 0.875em; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; } pre { background-color: #fff; padding: 10px; box-shadow: 0 0 10px rgba(0,0,0,.1); overflow: auto; } code_OFF { padding: 3px; margin: 0 3px; box-shadow: 0 0 10px rgba(0,0,0,.1); } pre code { background-color: #fff; display: block; box-shadow: none; } blockquote { color: #666; margin-bottom: 20px; padding: 0 0 0 20px; border-left: 3px solid #bbb; } ul, ol, dl { margin-bottom: 15px } ul { list-style-position: inside; list-style: disc; padding-left: 20px; } ol { list-style-position: inside; list-style: decimal; padding-left: 20px; } dl dt { font-weight: bold; } dl dd { padding-left: 20px; font-style: italic; } dl p { padding-left: 20px; font-style: italic; } hr { height: 1px; margin-bottom: 5px; border: none; background: url('../images/bg_hr.png') repeat-x center; } table { border: 1px solid #373737; margin-bottom: 20px; text-align: left; } th { font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; padding: 10px; background: #373737; color: #fff; } td { padding: 10px; border: 1px solid #373737; } form { background: #f2f2f2; padding: 20px; } /******************************************************************************* Full-Width Styles *******************************************************************************/ .outer { width: 100%; } .inner { position: relative; max-width: 640px; padding: 20px 10px; margin: 0 auto; } #forkme_banner { display: block; position: absolute; top:0; right: 10px; z-index: 10; padding: 10px 50px 10px 10px; color: #fff; background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; font-weight: 700; box-shadow: 0 0 10px rgba(0,0,0,.5); border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } #header_wrap { background: #212121; background: -moz-linear-gradient(top, #373737, #212121); background: -webkit-linear-gradient(top, #373737, #212121); background: -ms-linear-gradient(top, #373737, #212121); background: -o-linear-gradient(top, #373737, #212121); background: linear-gradient(to top, #373737, #212121); } #header_wrap .inner { padding: 50px 10px 30px 10px; } #project_title { margin: 0; color: #fff; font-size: 42px; font-weight: 700; text-shadow: #111 0px 0px 10px; } #project_tagline { color: #fff; font-size: 24px; font-weight: 300; background: none; text-shadow: #111 0px 0px 10px; } #downloads { position: absolute; width: 210px; z-index: 10; bottom: -40px; right: 0; height: 70px; background: url('../images/icon_download.png') no-repeat 0% 90%; } .zip_download_link { display: block; float: right; width: 90px; height:70px; text-indent: -5000px; overflow: hidden; background: url(../images/sprite_download.png) no-repeat bottom left; } .tar_download_link { display: block; float: right; width: 90px; height:70px; text-indent: -5000px; overflow: hidden; background: url(../images/sprite_download.png) no-repeat bottom right; margin-left: 10px; } .zip_download_link:hover { background: url(../images/sprite_download.png) no-repeat top left; } .tar_download_link:hover { background: url(../images/sprite_download.png) no-repeat top right; } #main_content_wrap { background: #f2f2f2; border-top: 1px solid #111; border-bottom: 1px solid #111; } #main_content { padding-top: 40px; } #footer_wrap { background: #212121; } /******************************************************************************* Small Device Styles *******************************************************************************/ @media screen and (max-width: 992px) { img { max-width: 100%; } } @media screen and (max-width: 480px) { body { font-size:14px; } #downloads { display: none; } .inner { min-width: 320px; max-width: 480px; } #project_title { font-size: 32px; } h1 { font-size: 28px; } h2 { font-size: 24px; } h3 { font-size: 21px; } h4 { font-size: 18px; } h5 { font-size: 14px; } h6 { font-size: 12px; } code, pre { font-size: 11px; } } @media screen and (max-width: 320px) { body { font-size:14px; } #downloads { display: none; } .inner { min-width: 240px; max-width: 320px; } #project_title { font-size: 28px; } h1 { font-size: 24px; } h2 { font-size: 21px; } h3 { font-size: 18px; } h4 { font-size: 16px; } h5 { font-size: 14px; } h6 { font-size: 12px; } code, pre { min-width: 240px; max-width: 320px; font-size: 11px; } } apjanke-octave-tablicious-8a1b10f/docs/devel/000077500000000000000000000000001515050116100211645ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/000077500000000000000000000000001515050116100232355ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/000077500000000000000000000000001515050116100242015ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/API-Alphabetically.html000066400000000000000000000135611515050116100304220ustar00rootroot00000000000000 API Alphabetically (Tablicious v0.4.7)
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/API-Reference.html000066400000000000000000000047401515050116100274010ustar00rootroot00000000000000 API Reference (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/API-by-Category.html000066400000000000000000000360501515050116100276670ustar00rootroot00000000000000 API by Category (Tablicious v0.4.7)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like.

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.

    8.1.9 Uncategorized

    caldays

    Create a ‘calendarDuration’ that is a given number of calendar days long.

    See caldays.


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Copying.html000066400000000000000000000110511515050116100264750ustar00rootroot00000000000000 Copying (Tablicious v0.4.7)

    9 Copying


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056771515050116100300330ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.7)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Date-and-Time-Representation.html000066400000000000000000000060621515050116100324040ustar00rootroot00000000000000 Date and Time Representation (Tablicious v0.4.7)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074701515050116100313030ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.7)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060161515050116100304200ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.7)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Durations.html000066400000000000000000000046521515050116100270460ustar00rootroot00000000000000 Durations (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Example-Data-Sets.html000066400000000000000000000102261515050116100302460ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.7)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Getting-Started.html000066400000000000000000000064201515050116100300760ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.7)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Introduction.html000066400000000000000000000072461515050116100275610ustar00rootroot00000000000000 Introduction (Tablicious v0.4.7)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.7 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Missing-Functionality.html000066400000000000000000000117541515050116100313360ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.7)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support
    • Things omitted for compatibility:
      • ismissing function

    A global ismissing function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. ismissing methods for various classes in Tablicious are defined. Tablicious also supplies an isnanny function with behavior similar to ismissing for clients which which wish to have ismissing-like behavior using a dependency only on Tablicious.

    It is the author’s hope that many of these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/NaC.html000066400000000000000000000076401515050116100255370ustar00rootroot00000000000000 NaC (Tablicious v0.4.7)

    8.2.45 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/NaS.html000066400000000000000000000075251515050116100255610ustar00rootroot00000000000000 NaS (Tablicious v0.4.7)

    8.2.46 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/NaT.html000066400000000000000000000075711515050116100255630ustar00rootroot00000000000000 NaT (Tablicious v0.4.7)

    8.2.47 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Table-Construction.html000066400000000000000000000070421515050116100306110ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.7)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Table-Representation.html000066400000000000000000000100321515050116100311120ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.7)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113661515050116100273730ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.7)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Time-Zones.html000066400000000000000000000141321515050116100270620ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.7)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/Validation-Functions.html000066400000000000000000000117531515050116100311360ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.7)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/array2table.html000066400000000000000000000103041515050116100272750ustar00rootroot00000000000000 array2table (Tablicious v0.4.7)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/caldays.html000066400000000000000000000065041515050116100265140ustar00rootroot00000000000000 caldays (Tablicious v0.4.7)

    8.2.2 caldays

    Function File: out = caldays (x)

    Create a calendarDuration that is a given number of calendar days long.

    Input x is a numeric array specifying the number of calendar days.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, 0, x).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration-Class.html000066400000000000000000000063161515050116100314170ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.7)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration.html000066400000000000000000000107151515050116100303520ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.7)

    8.2.3 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.

    calendarDuration_002ecalendarDuration.html000066400000000000000000000077751515050116100342350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html calendarDuration.calendarDuration (Tablicious v0.4.7)

    8.2.3.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002edatevec.html000066400000000000000000000077011515050116100324350ustar00rootroot00000000000000 calendarDuration.datevec (Tablicious v0.4.7)

    8.2.3.2 calendarDuration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert a calendarDuration to a datevec whose elements represent its components of. The components are the year, month, day, hour, minute, and second quantities of this calendarDuration.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002edispstrs.html000066400000000000000000000062011515050116100326670ustar00rootroot00000000000000 calendarDuration.dispstrs (Tablicious v0.4.7)

    8.2.3.3 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002eismissing.html000066400000000000000000000062451515050116100330310ustar00rootroot00000000000000 calendarDuration.ismissing (Tablicious v0.4.7)

    8.2.3.4 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002eisnan.html000066400000000000000000000063111515050116100321260ustar00rootroot00000000000000 calendarDuration.isnan (Tablicious v0.4.7)

    8.2.3.5 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002eminus.html000066400000000000000000000061611515050116100321540ustar00rootroot00000000000000 calendarDuration.minus (Tablicious v0.4.7)

    8.2.3.6 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002emtimes.html000066400000000000000000000063521515050116100323210ustar00rootroot00000000000000 calendarDuration.mtimes (Tablicious v0.4.7)

    8.2.3.7 calendarDuration.mtimes

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    This does not do true matrix multiplication, so at least one of the input arguments must be scalar.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000070301515050116100320000ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.7)

    8.2.3.8 calendarDuration.plus

    Method: out = plus (obj, B)

    Addition: add to a calendarDuration.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    B may be a calendarDuration, duration, or numeric. If B is numeric, it is converted to a calendarDuration using caldays(B).

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002etimes.html000066400000000000000000000062251515050116100321430ustar00rootroot00000000000000 calendarDuration.times (Tablicious v0.4.7)

    8.2.3.9 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor B.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calendarDuration_002euminus.html000066400000000000000000000056051515050116100323430ustar00rootroot00000000000000 calendarDuration.uminus (Tablicious v0.4.7)

    8.2.3.10 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj, which is equivalent to negating each of its components.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calmonths.html000066400000000000000000000065161515050116100270670ustar00rootroot00000000000000 calmonths (Tablicious v0.4.7)

    8.2.4 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/calyears.html000066400000000000000000000060241515050116100266740ustar00rootroot00000000000000 calyears (Tablicious v0.4.7)

    8.2.5 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical.html000066400000000000000000000177441515050116100273610ustar00rootroot00000000000000 categorical (Tablicious v0.4.7)

    8.2.6 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eaddcats.html000066400000000000000000000060111515050116100314140ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.7)

    8.2.6.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002ecategorical.html000066400000000000000000000137231515050116100322760ustar00rootroot00000000000000 categorical.categorical (Tablicious v0.4.7)

    8.2.6.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002ecategories.html000066400000000000000000000062041515050116100321420ustar00rootroot00000000000000 categorical.categories (Tablicious v0.4.7)

    8.2.6.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062631515050116100314720ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.7)

    8.2.6.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062721515050116100316750ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.7)

    8.2.6.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002edouble.html000066400000000000000000000067041515050116100312740ustar00rootroot00000000000000 categorical.double (Tablicious v0.4.7)

    8.2.6.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eiscategory.html000066400000000000000000000063231515050116100321700ustar00rootroot00000000000000 categorical.iscategory (Tablicious v0.4.7)

    8.2.6.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eismissing.html000066400000000000000000000061561515050116100320300ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.7)

    8.2.6.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062611515050116100314770ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.7)

    8.2.6.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061651515050116100320070ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.7)

    8.2.6.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eisundefined.html000066400000000000000000000064771515050116100323260ustar00rootroot00000000000000 categorical.isundefined (Tablicious v0.4.7)

    8.2.6.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002emergecats.html000066400000000000000000000076321515050116100317750ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.7)

    8.2.6.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002emissing.html000066400000000000000000000075071515050116100314750ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.7)

    8.2.6.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eremovecats.html000066400000000000000000000075211515050116100321700ustar00rootroot00000000000000 categorical.removecats (Tablicious v0.4.7)

    8.2.6.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002erenamecats.html000066400000000000000000000070311515050116100321360ustar00rootroot00000000000000 categorical.renamecats (Tablicious v0.4.7)

    8.2.6.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002ereordercats.html000066400000000000000000000072631515050116100323400ustar00rootroot00000000000000 categorical.reordercats (Tablicious v0.4.7)

    8.2.6.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002esetcats.html000066400000000000000000000062751515050116100314730ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.7)

    8.2.6.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002esqueezecats.html000066400000000000000000000061351515050116100323540ustar00rootroot00000000000000 categorical.squeezecats (Tablicious v0.4.7)

    8.2.6.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002estring.html000066400000000000000000000062731515050116100313310ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.7)

    8.2.6.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002esummary.html000066400000000000000000000060651515050116100315170ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.7)

    8.2.6.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/categorical_002eundefined.html000066400000000000000000000067011515050116100317600ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.7)

    8.2.6.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/cell2table.html000066400000000000000000000102361515050116100271020ustar00rootroot00000000000000 cell2table (Tablicious v0.4.7)

    8.2.7 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/colvecfun.html000066400000000000000000000065701515050116100270630ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.7)

    8.2.8 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/contains.html000066400000000000000000000074631515050116100267170ustar00rootroot00000000000000 contains (Tablicious v0.4.7)

    8.2.9 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datasets_002edescription.html000066400000000000000000000065321515050116100316770ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.7)

    8.2.59.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datasets_002elist.html000066400000000000000000000065501515050116100303270ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.7)

    8.2.59.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datasets_002eload.html000066400000000000000000000062751515050116100302770ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.7)

    8.2.59.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime-Class.html000066400000000000000000000063731515050116100277370ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.7)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime.html000066400000000000000000000202661515050116100266710ustar00rootroot00000000000000 datetime (Tablicious v0.4.7)

    8.2.10 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eNaT.html000066400000000000000000000075611515050116100300250ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.7)

    8.2.10.26 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002ecolon.html000066400000000000000000000117221515050116100304470ustar00rootroot00000000000000 datetime.colon (Tablicious v0.4.7)

    8.2.10.1 datetime.colon

    Method: out = colon (lo, hi)
    Method: out = colon (hi, inc, hi)

    Generate a sequence of uniformly-spaced values.

    This method implements the behavior for the colon operator (lo:hi or lo:inc:hi calls) for the datetime type.

    "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time.

    The inc argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with duration.ofDays (inc). The default value for inc, used in the two-arg lo:hi is 1, that is, 1 day of exactly 24 hours.

    Returns a datetime vector.

    WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if inc is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.


    datetime_002econvertDatenumTimeZone.html000066400000000000000000000070101515050116100337220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html datetime.convertDatenumTimeZone (Tablicious v0.4.7)

    8.2.10.2 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatenum.html000066400000000000000000000060321515050116100307700ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.7)

    8.2.10.3 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatenum2posix.html000066400000000000000000000061221515050116100321350ustar00rootroot00000000000000 datetime.datenum2posix (Tablicious v0.4.7)

    8.2.10.4 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatestr.html000066400000000000000000000066421515050116100310100ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.7)

    8.2.10.5 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatestrs.html000066400000000000000000000067141515050116100311730ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.7)

    8.2.10.6 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066771515050116100315340ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.7)

    8.2.10.7 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatetime.html000066400000000000000000000136431515050116100311350ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.7)

    8.2.10.8 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edatevec.html000066400000000000000000000071271515050116100307540ustar00rootroot00000000000000 datetime.datevec (Tablicious v0.4.7)

    8.2.10.9 datetime.datevec

    Method: out = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert this to a datevec that represent the same local wall time.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002ediff.html000066400000000000000000000061161515050116100302460ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.7)

    8.2.10.10 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002edispstrs.html000066400000000000000000000057171515050116100312170ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.7)

    8.2.10.11 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eeq.html000066400000000000000000000062461515050116100277470ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.7)

    8.2.10.12 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002ege.html000066400000000000000000000062611515050116100277320ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.7)

    8.2.10.13 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002egmtime.html000066400000000000000000000060751515050116100306240ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.7)

    8.2.10.14 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002egt.html000066400000000000000000000062501515050116100277470ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.7)

    8.2.10.15 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002ehms.html000066400000000000000000000063471515050116100301330ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.7)

    8.2.10.16 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a datetime. These are the time of day components. The Year, Month, and Day components are ignored, and not incorporated in to the result.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063651515050116100313310ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.7)

    8.2.10.17 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eismissing.html000066400000000000000000000061621515050116100313440ustar00rootroot00000000000000 datetime.ismissing (Tablicious v0.4.7)

    8.2.10.18 datetime.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, the special NaT value is considered missing. This is equivalent to a NaN used as a datenum.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eisnan.html000066400000000000000000000060441515050116100304460ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.7)

    8.2.10.19 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eisnat.html000066400000000000000000000056241515050116100304570ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.7)

    8.2.10.20 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002ele.html000066400000000000000000000063011515050116100277320ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.7)

    8.2.10.21 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002elinspace.html000066400000000000000000000067351515050116100311430ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.7)

    8.2.10.22 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002elocaltime.html000066400000000000000000000067331515050116100313140ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.7)

    8.2.10.23 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002elt.html000066400000000000000000000062711515050116100277570ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.7)

    8.2.10.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eminus.html000066400000000000000000000070211515050116100304650ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.7)

    8.2.10.25 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002ene.html000066400000000000000000000062621515050116100277420ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.7)

    8.2.10.27 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060461515050116100312620ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.7)

    8.2.10.28 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000063031515050116100320030ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.7)

    8.2.10.29 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eplus.html000066400000000000000000000071111515050116100303150ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.7)

    8.2.10.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy.

    Returns datetime array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eposix2datenum.html000066400000000000000000000062171515050116100321420ustar00rootroot00000000000000 datetime.posix2datenum (Tablicious v0.4.7)

    8.2.10.31 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062761515050116100313660ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.7)

    8.2.10.32 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000065131515050116100313540ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.7)

    8.2.10.33 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061611515050116100313170ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.7)

    8.2.10.34 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eweek.html000066400000000000000000000055641515050116100302770ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.7)

    8.2.10.35 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eymd.html000066400000000000000000000061321515050116100301250ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.7)

    8.2.10.36 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/datetime_002eymdhms.html000066400000000000000000000060671515050116100306440ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.7)

    8.2.10.37 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/days.html000066400000000000000000000062471515050116100260400ustar00rootroot00000000000000 days (Tablicious v0.4.7)

    8.2.11 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/discretize.html000066400000000000000000000122201515050116100272310ustar00rootroot00000000000000 discretize (Tablicious v0.4.7)

    8.2.12 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/dispstrs.html000066400000000000000000000066111515050116100267460ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.7)

    8.2.13 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration-Class.html000066400000000000000000000057651515050116100277740ustar00rootroot00000000000000 duration Class (Tablicious v0.4.7)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration.html000066400000000000000000000125211515050116100267150ustar00rootroot00000000000000 duration (Tablicious v0.4.7)

    8.2.14 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002echar.html000066400000000000000000000056721515050116100303120ustar00rootroot00000000000000 duration.char (Tablicious v0.4.7)

    8.2.14.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002edatevec.html000066400000000000000000000101361515050116100307770ustar00rootroot00000000000000 duration.datevec (Tablicious v0.4.7)

    8.2.14.2 duration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert obj to a datevec whose elements represent the components of this duration. The components are the year, month, days, hour, minute, and second quantities of this duration. The years are in terms of fixed size years that are 365.2425 days long, and days are fixed size 24-hour days. The fixed size year size can be found in the FixedSizeYearDays constant class property on the duration class. The month component is always zero, since months are variable lengths and there is no equivalent fixed size month. Thus, the days component may be more than 31.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002edispstrs.html000066400000000000000000000057321515050116100312450ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.7)

    8.2.14.3 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002ehms.html000066400000000000000000000061511515050116100301550ustar00rootroot00000000000000 duration.hms (Tablicious v0.4.7)

    8.2.14.4 duration.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second values of a duration. These are the hour, minute, and second values that when combined are equal to the same duration value.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002ehours.html000066400000000000000000000057731515050116100305370ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.7)

    8.2.14.5 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002elinspace.html000066400000000000000000000067741515050116100311770ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.7)

    8.2.14.6 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002emilliseconds.html000066400000000000000000000061011515050116100320460ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.7)

    8.2.14.7 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002eminutes.html000066400000000000000000000060551515050116100310550ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.7)

    8.2.14.8 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002eofDays.html000066400000000000000000000062411515050116100306130ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.7)

    8.2.14.9 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002eseconds.html000066400000000000000000000057731515050116100310350ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.7)

    8.2.14.10 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/duration_002eyears.html000066400000000000000000000055461515050116100305200ustar00rootroot00000000000000 duration.years (Tablicious v0.4.7)

    8.2.14.11 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/eqn.html000066400000000000000000000074611515050116100256620ustar00rootroot00000000000000 eqn (Tablicious v0.4.7)

    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/head.html000066400000000000000000000075101515050116100257730ustar00rootroot00000000000000 head (Tablicious v0.4.7) apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/hours.html000066400000000000000000000063121515050116100262310ustar00rootroot00000000000000 hours (Tablicious v0.4.7)

    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/index.html000066400000000000000000001327631515050116100262120ustar00rootroot00000000000000 Top (Tablicious v0.4.7)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.7.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/iscalendarduration.html000066400000000000000000000062521515050116100307470ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.7)

    8.2.18 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/iscategorical.html000066400000000000000000000062261515050116100277060ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.7)

    8.2.19 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/isdatetime.html000066400000000000000000000061361515050116100272250ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.7)

    8.2.20 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/isduration.html000066400000000000000000000061021515050116100272470ustar00rootroot00000000000000 isduration (Tablicious v0.4.7)

    8.2.21 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/isfile.html000066400000000000000000000044601515050116100263460ustar00rootroot00000000000000 isfile (Tablicious v0.4.7)

    8.2.22 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/isfolder.html000066400000000000000000000044501515050116100267010ustar00rootroot00000000000000 isfolder (Tablicious v0.4.7)

    8.2.23 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/isnanny.html000066400000000000000000000100301515050116100265400ustar00rootroot00000000000000 isnanny (Tablicious v0.4.7)

    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like.

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.
    3. Octave does not define an ismissing function, but the Octave Forge statistics package does, and adding an ismissing function to Tablicious would conflict with that in hard-to-resolve ways.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/istable.html000066400000000000000000000065071515050116100265220ustar00rootroot00000000000000 istable (Tablicious v0.4.7)

    8.2.25 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/istabular.html000066400000000000000000000062271515050116100270640ustar00rootroot00000000000000 istabular (Tablicious v0.4.7)

    8.2.26 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/istimetable.html000066400000000000000000000066031515050116100273760ustar00rootroot00000000000000 istimetable (Tablicious v0.4.7)

    8.2.27 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate.html000066400000000000000000000123071515050116100270220ustar00rootroot00000000000000 localdate (Tablicious v0.4.7)

    8.2.28 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002eNaT.html000066400000000000000000000101531515050116100301500ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.7)

    8.2.28.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002edatenum.html000066400000000000000000000055131515050116100311270ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.7)

    8.2.28.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002edatestr.html000066400000000000000000000066401515050116100311420ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.7)

    8.2.28.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002edatestrs.html000066400000000000000000000067421515050116100313300ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.7)

    8.2.28.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002edatestruct.html000066400000000000000000000071341515050116100316550ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.7)

    8.2.28.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002edispstrs.html000066400000000000000000000060041515050116100313410ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.7)

    8.2.28.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002eisnan.html000066400000000000000000000060611515050116100306010ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.7)

    8.2.28.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002eisnat.html000066400000000000000000000057051515050116100306130ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.7)

    8.2.28.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002elocaldate.html000066400000000000000000000111501515050116100314140ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.7)

    8.2.28.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002eposixtime.html000066400000000000000000000063341515050116100315150ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.7)

    8.2.28.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/localdate_002eymd.html000066400000000000000000000055611515050116100302660ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.7)

    8.2.28.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/milliseconds.html000066400000000000000000000064151515050116100275620ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.7)

    8.2.29 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/minutes.html000066400000000000000000000056261515050116100265640ustar00rootroot00000000000000 minutes (Tablicious v0.4.7)

    8.2.30 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/missing.html000066400000000000000000000075361515050116100265530ustar00rootroot00000000000000 missing (Tablicious v0.4.7)

    8.2.31 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/missing_002edispstrs.html000066400000000000000000000057241515050116100310720ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.7)

    8.2.31.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/missing_002eismissing.html000066400000000000000000000060661515050116100312240ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.7)

    8.2.31.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/missing_002eisnan.html000066400000000000000000000060171515050116100303230ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.7)

    8.2.31.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/missing_002eisnanny.html000066400000000000000000000060301515050116100306650ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.7)

    8.2.31.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/missing_002emissing.html000066400000000000000000000054711515050116100306670ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.7)

    8.2.31.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeA.html000066400000000000000000000044761515050116100264420ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.7)

    8.2.32 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeCellstr.html000066400000000000000000000045421515050116100276640ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.7)

    8.2.33 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeCharvec.html000066400000000000000000000045661515050116100276350ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.7)

    8.2.34 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeFinite.html000066400000000000000000000045641515050116100274760ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.7)

    8.2.35 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeInteger.html000066400000000000000000000045621515050116100276530ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.7)

    8.2.36 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeMember.html000066400000000000000000000045701515050116100274640ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.7)

    8.2.37 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeNonempty.html000066400000000000000000000045741515050116100300720ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.7)

    8.2.38 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeNumeric.html000066400000000000000000000045621515050116100276600ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.7)

    8.2.39 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeReal.html000066400000000000000000000045541515050116100271420ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.7)

    8.2.40 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeSameSize.html000066400000000000000000000045601515050116100277740ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.7)

    8.2.41 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeScalar.html000066400000000000000000000046201515050116100274560ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.7)

    8.2.42 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeScalarLogical.html000066400000000000000000000046261515050116100307570ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.7)

    8.2.43 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/mustBeVector.html000066400000000000000000000045441515050116100275200ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.7)

    8.2.44 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/pp.html000066400000000000000000000077771515050116100255300ustar00rootroot00000000000000 pp (Tablicious v0.4.7)

    8.2.48 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/scalarexpand.html000066400000000000000000000072671515050116100275500ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.7)

    8.2.49 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/seconds.html000066400000000000000000000063341515050116100265330ustar00rootroot00000000000000 seconds (Tablicious v0.4.7)

    8.2.50 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/size2str.html000066400000000000000000000065321515050116100266620ustar00rootroot00000000000000 size2str (Tablicious v0.4.7)

    8.2.51 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/splitapply.html000066400000000000000000000114251515050116100272730ustar00rootroot00000000000000 splitapply (Tablicious v0.4.7)

    8.2.52 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string.html000066400000000000000000000163061515050116100264030ustar00rootroot00000000000000 string (Tablicious v0.4.7)

    8.2.53 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002ecell.html000066400000000000000000000057431515050116100277740ustar00rootroot00000000000000 string.cell (Tablicious v0.4.7)

    8.2.53.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002ecellstr.html000066400000000000000000000057721515050116100305270ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.7)

    8.2.53.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002echar.html000066400000000000000000000062351515050116100277670ustar00rootroot00000000000000 string.char (Tablicious v0.4.7)

    8.2.53.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002ecmp.html000066400000000000000000000075371515050116100276370ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.7)

    8.2.53.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002edecode.html000066400000000000000000000062221515050116100302710ustar00rootroot00000000000000 string.decode (Tablicious v0.4.7)

    8.2.53.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002edispstrs.html000066400000000000000000000064731515050116100307310ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.7)

    8.2.53.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eempty.html000066400000000000000000000061601515050116100302050ustar00rootroot00000000000000 string.empty (Tablicious v0.4.7)

    8.2.53.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eencode.html000066400000000000000000000063471515050116100303130ustar00rootroot00000000000000 string.encode (Tablicious v0.4.7)

    8.2.53.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eendsWith.html000066400000000000000000000066321515050116100306400ustar00rootroot00000000000000 string.endsWith (Tablicious v0.4.7)

    8.2.53.9 string.endsWith

    Method: out = endsWith (obj, pattern)
    Method: out = endsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string ends with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eerase.html000066400000000000000000000060441515050116100301470ustar00rootroot00000000000000 string.erase (Tablicious v0.4.7)

    8.2.53.10 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eismissing.html000066400000000000000000000061651515050116100310610ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.7)

    8.2.53.11 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eisnanny.html000066400000000000000000000060131515050116100305230ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.7)

    8.2.53.12 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eisstring.html000066400000000000000000000057361515050116100307210ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.7)

    8.2.53.13 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002elower.html000066400000000000000000000062321515050116100301770ustar00rootroot00000000000000 string.lower (Tablicious v0.4.7)

    8.2.53.14 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002emissing.html000066400000000000000000000061511515050116100305200ustar00rootroot00000000000000 string.missing (Tablicious v0.4.7)

    8.2.53.15 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eplus.html000066400000000000000000000062761515050116100300420ustar00rootroot00000000000000 string.plus (Tablicious v0.4.7)

    8.2.53.16 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eregexprep.html000066400000000000000000000070151515050116100310500ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.7)

    8.2.53.17 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002ereverse.html000066400000000000000000000062201515050116100305170ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.7)

    8.2.53.18 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002ereverse_005fbytes.html000066400000000000000000000067541515050116100323340ustar00rootroot00000000000000 string.reverse_bytes (Tablicious v0.4.7)

    8.2.53.19 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estartsWith.html000066400000000000000000000067351515050116100312330ustar00rootroot00000000000000 string.startsWith (Tablicious v0.4.7)

    8.2.53.20 string.startsWith

    Method: out = startsWith (obj, pattern)
    Method: out = startsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string starts with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estrcat.html000066400000000000000000000062461515050116100303540ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.7)

    8.2.53.21 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estrcmp.html000066400000000000000000000065601515050116100303630ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.7)

    8.2.53.22 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estrfind.html000066400000000000000000000070041515050116100305160ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.7)

    8.2.53.23 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estring.html000066400000000000000000000071311515050116100303540ustar00rootroot00000000000000 string.string (Tablicious v0.4.7)

    8.2.53.24 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estrlength.html000066400000000000000000000072421515050116100310630ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.7)

    8.2.53.25 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estrlength_005fbytes.html000066400000000000000000000066771515050116100326770ustar00rootroot00000000000000 string.strlength_bytes (Tablicious v0.4.7)

    8.2.53.26 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002estrrep.html000066400000000000000000000072611515050116100303710ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.7)

    8.2.53.27 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/string_002eupper.html000066400000000000000000000057651515050116100302140ustar00rootroot00000000000000 string.upper (Tablicious v0.4.7)

    8.2.53.28 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/struct2table.html000066400000000000000000000067701515050116100275170ustar00rootroot00000000000000 struct2table (Tablicious v0.4.7)

    8.2.54 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table.html000066400000000000000000000262031515050116100261610ustar00rootroot00000000000000 table (Tablicious v0.4.7)

    8.2.55 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tableOuterFillValue.html000066400000000000000000000045321515050116100310050ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.7)

    8.2.56 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eaddvars.html000066400000000000000000000077661515050116100302710ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.7)

    8.2.55.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eantijoin.html000066400000000000000000000070521515050116100304440ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.7)

    8.2.55.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002ecartesian.html000066400000000000000000000077021515050116100306040ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.7)

    8.2.55.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002econvertvars.html000066400000000000000000000073451515050116100312120ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.7)

    8.2.55.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002efindgroups.html000066400000000000000000000064171515050116100310150ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.7)

    8.2.55.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002egetvar.html000066400000000000000000000063001515050116100301140ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.7)

    8.2.55.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002egetvars.html000066400000000000000000000061731515050116100303070ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.7)

    8.2.55.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002egroupby.html000066400000000000000000000075131515050116100303220ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.7)

    8.2.55.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eheight.html000066400000000000000000000057631515050116100301100ustar00rootroot00000000000000 table.height (Tablicious v0.4.7)

    8.2.55.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002ehorzcat.html000066400000000000000000000063241515050116100303040ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.7)

    8.2.55.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002einnerjoin.html000066400000000000000000000073421515050116100306260ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.7)

    8.2.55.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eintersect.html000066400000000000000000000065211515050116100306310ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.7)

    8.2.55.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eisempty.html000066400000000000000000000057041515050116100303250ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.7)

    8.2.55.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eismember.html000066400000000000000000000061361515050116100304360ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.7)

    8.2.55.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eismissing.html000066400000000000000000000072721515050116100306420ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.7)

    8.2.55.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eistable.html000066400000000000000000000054721515050116100302600ustar00rootroot00000000000000 table.istable (Tablicious v0.4.7)

    8.2.55.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002ejoin.html000066400000000000000000000074661515050116100276010ustar00rootroot00000000000000 table.join (Tablicious v0.4.7)

    8.2.55.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002emergevars.html000066400000000000000000000073301515050116100306230ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.7)

    8.2.55.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002emovevars.html000066400000000000000000000070471515050116100304770ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.7)

    8.2.55.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002endims.html000066400000000000000000000056351515050116100277500ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.7)

    8.2.55.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002enumel.html000066400000000000000000000061211515050116100277450ustar00rootroot00000000000000 table.numel (Tablicious v0.4.7)

    8.2.55.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060461515050116100315260ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.7)

    8.2.55.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eouterjoin.html000066400000000000000000000076021515050116100306500ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.7)

    8.2.55.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eprettyprint.html000066400000000000000000000060461515050116100312370ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.7)

    8.2.55.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erealjoin.html000066400000000000000000000100301515050116100304220ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.7)

    8.2.55.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eremovevars.html000066400000000000000000000061311515050116100310170ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.7)

    8.2.55.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erenamevars.html000066400000000000000000000067151515050116100310010ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.7)

    8.2.55.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erepelem.html000066400000000000000000000067011515050116100302620ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.7)

    8.2.55.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erepmat.html000066400000000000000000000065131515050116100301220ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.7)

    8.2.55.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erestrict.html000066400000000000000000000106041515050116100304650ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.7)

    8.2.55.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erowfun.html000066400000000000000000000157061515050116100301560ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.7)

    8.2.55.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002erows2vars.html000066400000000000000000000107341515050116100306020ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.7)

    8.2.55.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esemijoin.html000066400000000000000000000072311515050116100304450ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.7)

    8.2.55.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esetDimensionNames.html000066400000000000000000000105551515050116100322600ustar00rootroot00000000000000 table.setDimensionNames (Tablicious v0.4.7)

    8.2.55.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esetRowNames.html000066400000000000000000000061611515050116100311000ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.7)

    8.2.55.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esetVariableNames.html000066400000000000000000000076371515050116100320670ustar00rootroot00000000000000 table.setVariableNames (Tablicious v0.4.7)

    8.2.55.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esetdiff.html000066400000000000000000000063661515050116100302640ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.7)

    8.2.55.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esetvar.html000066400000000000000000000072021515050116100301320ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.7)

    8.2.55.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esetxor.html000066400000000000000000000065501515050116100301570ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.7)

    8.2.55.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esize.html000066400000000000000000000072721515050116100276070ustar00rootroot00000000000000 table.size (Tablicious v0.4.7)

    8.2.55.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esplitapply.html000066400000000000000000000071331515050116100310320ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.7)

    8.2.55.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esplitvars.html000066400000000000000000000076141515050116100306640ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.7)

    8.2.55.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esqueeze.html000066400000000000000000000057471515050116100303230ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.7)

    8.2.55.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002estack.html000066400000000000000000000072771515050116100277470ustar00rootroot00000000000000 table.stack (Tablicious v0.4.7)

    8.2.55.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002esummary.html000066400000000000000000000067701515050116100303340ustar00rootroot00000000000000 table.summary (Tablicious v0.4.7)

    8.2.55.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002etable.html000066400000000000000000000126421515050116100277210ustar00rootroot00000000000000 table.table (Tablicious v0.4.7)

    8.2.55.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002etable2array.html000066400000000000000000000056061515050116100310440ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.7)

    8.2.55.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002etable2cell.html000066400000000000000000000062551515050116100306460ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.7)

    8.2.55.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002etable2struct.html000066400000000000000000000072201515050116100312440ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.7)

    8.2.55.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002eunion.html000066400000000000000000000064341515050116100277640ustar00rootroot00000000000000 table.union (Tablicious v0.4.7)

    8.2.55.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002evarfun.html000066400000000000000000000103541515050116100301310ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.7)

    8.2.55.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002evarnames.html000066400000000000000000000064661515050116100304550ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.7)

    8.2.55.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002evertcat.html000066400000000000000000000064321515050116100303020ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.7)

    8.2.55.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/table_002ewidth.html000066400000000000000000000054111515050116100277450ustar00rootroot00000000000000 table.width (Tablicious v0.4.7)

    8.2.55.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tail.html000066400000000000000000000076611515050116100260320ustar00rootroot00000000000000 tail (Tablicious v0.4.7)

    8.2.57 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset.html000066400000000000000000000244331515050116100304560ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.7)

    8.2.58 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    tblish_002edataset_002eAirPassengers.html000066400000000000000000000076151515050116100336170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.AirPassengers (Tablicious v0.4.7)

    8.2.58.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eBJsales.html000066400000000000000000000110771515050116100324500ustar00rootroot00000000000000 tblish.dataset.BJsales (Tablicious v0.4.7)

    8.2.58.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eBOD.html000066400000000000000000000103211515050116100315200ustar00rootroot00000000000000 tblish.dataset.BOD (Tablicious v0.4.7)

    8.2.58.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eChickWeight.html000066400000000000000000000113441515050116100333130ustar00rootroot00000000000000 tblish.dataset.ChickWeight (Tablicious v0.4.7)

    8.2.58.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eDNase.html000066400000000000000000000112311515050116100321070ustar00rootroot00000000000000 tblish.dataset.DNase (Tablicious v0.4.7)

    8.2.58.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111721515050116100337460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.EuStockMarkets (Tablicious v0.4.7)

    8.2.58.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114561515050116100334520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.Formaldehyde (Tablicious v0.4.7)

    8.2.58.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151431515050116100333710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.HairEyeColor (Tablicious v0.4.7)

    8.2.58.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eHarman23cor.html000066400000000000000000000103311515050116100331740ustar00rootroot00000000000000 tblish.dataset.Harman23cor (Tablicious v0.4.7)

    8.2.58.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eHarman74cor.html000066400000000000000000000104061515050116100332050ustar00rootroot00000000000000 tblish.dataset.Harman74cor (Tablicious v0.4.7)

    8.2.58.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eIndometh.html000066400000000000000000000110441515050116100326660ustar00rootroot00000000000000 tblish.dataset.Indometh (Tablicious v0.4.7)

    8.2.58.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    tblish_002edataset_002eInsectSprays.html000066400000000000000000000105031515050116100334660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.InsectSprays (Tablicious v0.4.7)

    8.2.58.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000103151515050116100340150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.JohnsonJohnson (Tablicious v0.4.7)

    8.2.58.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eLakeHuron.html000066400000000000000000000105331515050116100330110ustar00rootroot00000000000000 tblish.dataset.LakeHuron (Tablicious v0.4.7)

    8.2.58.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126651515050116100342440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.LifeCycleSavings (Tablicious v0.4.7)

    8.2.58.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eLoblolly.html000066400000000000000000000111411515050116100327050ustar00rootroot00000000000000 tblish.dataset.Loblolly (Tablicious v0.4.7)

    8.2.58.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eNile.html000066400000000000000000000112541515050116100320110ustar00rootroot00000000000000 tblish.dataset.Nile (Tablicious v0.4.7)

    8.2.58.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eOrange.html000066400000000000000000000115611515050116100323360ustar00rootroot00000000000000 tblish.dataset.Orange (Tablicious v0.4.7)

    8.2.58.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    tblish_002edataset_002eOrchardSprays.html000066400000000000000000000133131515050116100336250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.OrchardSprays (Tablicious v0.4.7)

    8.2.58.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102551515050116100333730ustar00rootroot00000000000000 tblish.dataset.PlantGrowth (Tablicious v0.4.7)

    8.2.58.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ePuromycin.html000066400000000000000000000125301515050116100331050ustar00rootroot00000000000000 tblish.dataset.Puromycin (Tablicious v0.4.7)

    8.2.58.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eTheoph.html000066400000000000000000000143171515050116100323540ustar00rootroot00000000000000 tblish.dataset.Theoph (Tablicious v0.4.7)

    8.2.58.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eTitanic.html000066400000000000000000000146421515050116100325210ustar00rootroot00000000000000 tblish.dataset.Titanic (Tablicious v0.4.7)

    8.2.58.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eToothGrowth.html000066400000000000000000000115701515050116100334130ustar00rootroot00000000000000 tblish.dataset.ToothGrowth (Tablicious v0.4.7)

    8.2.58.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000141361515050116100335100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.UCBAdmissions (Tablicious v0.4.7)

    8.2.58.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000150021515050116100336620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.UKDriverDeaths (Tablicious v0.4.7)

    8.2.58.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000111351515050116100333370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.UKLungDeaths (Tablicious v0.4.7)

    8.2.58.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eUKgas.html000066400000000000000000000104261515050116100321340ustar00rootroot00000000000000 tblish.dataset.UKgas (Tablicious v0.4.7)

    8.2.58.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000101121515050116100332010ustar00rootroot00000000000000 tblish.dataset.USAccDeaths (Tablicious v0.4.7)

    8.2.58.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eUSArrests.html000066400000000000000000000140141515050116100330120ustar00rootroot00000000000000 tblish.dataset.USArrests (Tablicious v0.4.7)

    8.2.58.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116621515050116100337040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.USJudgeRatings (Tablicious v0.4.7)

    8.2.58.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111451515050116100353120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.USPersonalExpenditure (Tablicious v0.4.7)

    8.2.58.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eVADeaths.html000066400000000000000000000113641515050116100325630ustar00rootroot00000000000000 tblish.dataset.VADeaths (Tablicious v0.4.7)

    8.2.58.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eWWWusage.html000066400000000000000000000104121515050116100326260ustar00rootroot00000000000000 tblish.dataset.WWWusage (Tablicious v0.4.7)

    8.2.58.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eWorldPhones.html000066400000000000000000000105531515050116100333670ustar00rootroot00000000000000 tblish.dataset.WorldPhones (Tablicious v0.4.7)

    8.2.58.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eairmiles.html000066400000000000000000000072671515050116100327400ustar00rootroot00000000000000 tblish.dataset.airmiles (Tablicious v0.4.7)

    8.2.58.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eairquality.html000066400000000000000000000134011515050116100333020ustar00rootroot00000000000000 tblish.dataset.airquality (Tablicious v0.4.7)

    8.2.58.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eanscombe.html000066400000000000000000000122041515050116100327050ustar00rootroot00000000000000 tblish.dataset.anscombe (Tablicious v0.4.7)

    8.2.58.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eattenu.html000066400000000000000000000115071515050116100324230ustar00rootroot00000000000000 tblish.dataset.attenu (Tablicious v0.4.7)

    8.2.58.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eattitude.html000066400000000000000000000111411515050116100327400ustar00rootroot00000000000000 tblish.dataset.attitude (Tablicious v0.4.7)

    8.2.58.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eaustres.html000066400000000000000000000102601515050116100326040ustar00rootroot00000000000000 tblish.dataset.austres (Tablicious v0.4.7)

    8.2.58.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ebeavers.html000066400000000000000000000107021515050116100325460ustar00rootroot00000000000000 tblish.dataset.beavers (Tablicious v0.4.7)

    8.2.58.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ecars.html000066400000000000000000000117301515050116100320510ustar00rootroot00000000000000 tblish.dataset.cars (Tablicious v0.4.7)

    8.2.58.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002echickwts.html000066400000000000000000000114611515050116100327410ustar00rootroot00000000000000 tblish.dataset.chickwts (Tablicious v0.4.7)

    8.2.58.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eco2.html000066400000000000000000000117241515050116100316070ustar00rootroot00000000000000 tblish.dataset.co2 (Tablicious v0.4.7)

    8.2.58.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ecrimtab.html000066400000000000000000000164371515050116100325530ustar00rootroot00000000000000 tblish.dataset.crimtab (Tablicious v0.4.7)

    8.2.58.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ecupcake.html000066400000000000000000000105321515050116100325330ustar00rootroot00000000000000 tblish.dataset.cupcake (Tablicious v0.4.7)

    8.2.58.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ediscoveries.html000066400000000000000000000106601515050116100334410ustar00rootroot00000000000000 tblish.dataset.discoveries (Tablicious v0.4.7)

    8.2.58.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eesoph.html000066400000000000000000000107221515050116100322370ustar00rootroot00000000000000 tblish.dataset.esoph (Tablicious v0.4.7)

    8.2.58.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eeuro.html000066400000000000000000000117151515050116100320760ustar00rootroot00000000000000 tblish.dataset.euro (Tablicious v0.4.7)

    8.2.58.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eeurodist.html000066400000000000000000000101521515050116100327540ustar00rootroot00000000000000 tblish.dataset.eurodist (Tablicious v0.4.7)

    8.2.58.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002efaithful.html000066400000000000000000000121511515050116100327210ustar00rootroot00000000000000 tblish.dataset.faithful (Tablicious v0.4.7)

    8.2.58.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002efreeny.html000066400000000000000000000121441515050116100324110ustar00rootroot00000000000000 tblish.dataset.freeny (Tablicious v0.4.7)

    8.2.58.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002einfert.html000066400000000000000000000116411515050116100324110ustar00rootroot00000000000000 tblish.dataset.infert (Tablicious v0.4.7)

    8.2.58.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eiris.html000066400000000000000000000122141515050116100320650ustar00rootroot00000000000000 tblish.dataset.iris (Tablicious v0.4.7)

    8.2.58.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eislands.html000066400000000000000000000104371515050116100325610ustar00rootroot00000000000000 tblish.dataset.islands (Tablicious v0.4.7)

    8.2.58.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002elh.html000066400000000000000000000102321515050116100315200ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.7)

    8.2.58.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002elongley.html000066400000000000000000000116001515050116100325660ustar00rootroot00000000000000 tblish.dataset.longley (Tablicious v0.4.7)

    8.2.58.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002elynx.html000066400000000000000000000113741515050116100321170ustar00rootroot00000000000000 tblish.dataset.lynx (Tablicious v0.4.7)

    8.2.58.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002emorley.html000066400000000000000000000121731515050116100324320ustar00rootroot00000000000000 tblish.dataset.morley (Tablicious v0.4.7)

    8.2.58.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002emtcars.html000066400000000000000000000124651515050116100324200ustar00rootroot00000000000000 tblish.dataset.mtcars (Tablicious v0.4.7)

    8.2.58.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002enhtemp.html000066400000000000000000000105361515050116100324170ustar00rootroot00000000000000 tblish.dataset.nhtemp (Tablicious v0.4.7)

    8.2.58.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002enottem.html000066400000000000000000000102001515050116100324160ustar00rootroot00000000000000 tblish.dataset.nottem (Tablicious v0.4.7)

    8.2.58.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002enpk.html000066400000000000000000000113431515050116100317110ustar00rootroot00000000000000 tblish.dataset.npk (Tablicious v0.4.7)

    8.2.58.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000104221515050116100347240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.occupationalStatus (Tablicious v0.4.7)

    8.2.58.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eprecip.html000066400000000000000000000104241515050116100324020ustar00rootroot00000000000000 tblish.dataset.precip (Tablicious v0.4.7)

    8.2.58.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002epresidents.html000066400000000000000000000112301515050116100332740ustar00rootroot00000000000000 tblish.dataset.presidents (Tablicious v0.4.7)

    8.2.58.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002epressure.html000066400000000000000000000112671515050116100327760ustar00rootroot00000000000000 tblish.dataset.pressure (Tablicious v0.4.7)

    8.2.58.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002equakes.html000066400000000000000000000121101515050116100324030ustar00rootroot00000000000000 tblish.dataset.quakes (Tablicious v0.4.7)

    8.2.58.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002erandu.html000066400000000000000000000111701515050116100322300ustar00rootroot00000000000000 tblish.dataset.randu (Tablicious v0.4.7)

    8.2.58.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002erivers.html000066400000000000000000000103221515050116100324270ustar00rootroot00000000000000 tblish.dataset.rivers (Tablicious v0.4.7)

    8.2.58.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002erock.html000066400000000000000000000111031515050116100320510ustar00rootroot00000000000000 tblish.dataset.rock (Tablicious v0.4.7)

    8.2.58.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002esleep.html000066400000000000000000000113441515050116100322320ustar00rootroot00000000000000 tblish.dataset.sleep (Tablicious v0.4.7)

    8.2.58.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002estackloss.html000066400000000000000000000142331515050116100331300ustar00rootroot00000000000000 tblish.dataset.stackloss (Tablicious v0.4.7)

    8.2.58.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002estate.html000066400000000000000000000130401515050116100322350ustar00rootroot00000000000000 tblish.dataset.state (Tablicious v0.4.7)

    8.2.58.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000105111515050116100343510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.sunspot_month (Tablicious v0.4.7)

    8.2.58.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102511515050116100341650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.dataset.sunspot_year (Tablicious v0.4.7)

    8.2.58.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002esunspots.html000066400000000000000000000105501515050116100330160ustar00rootroot00000000000000 tblish.dataset.sunspots (Tablicious v0.4.7)

    8.2.58.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002eswiss.html000066400000000000000000000141301515050116100322660ustar00rootroot00000000000000 tblish.dataset.swiss (Tablicious v0.4.7)

    8.2.58.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002etreering.html000066400000000000000000000112321515050116100327350ustar00rootroot00000000000000 tblish.dataset.treering (Tablicious v0.4.7)

    8.2.58.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002etrees.html000066400000000000000000000114021515050116100322370ustar00rootroot00000000000000 tblish.dataset.trees (Tablicious v0.4.7)

    8.2.58.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002euspop.html000066400000000000000000000103031515050116100322620ustar00rootroot00000000000000 tblish.dataset.uspop (Tablicious v0.4.7)

    8.2.58.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002evolcano.html000066400000000000000000000112521515050116100325610ustar00rootroot00000000000000 tblish.dataset.volcano (Tablicious v0.4.7)

    8.2.58.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ewarpbreaks.html000066400000000000000000000112341515050116100332610ustar00rootroot00000000000000 tblish.dataset.warpbreaks (Tablicious v0.4.7)

    8.2.58.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ewomen.html000066400000000000000000000114041515050116100322440ustar00rootroot00000000000000 tblish.dataset.women (Tablicious v0.4.7)

    8.2.58.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edataset_002ezCO2.html000066400000000000000000000105101515050116100316710ustar00rootroot00000000000000 tblish.dataset.zCO2 (Tablicious v0.4.7)

    8.2.58.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002edatasets.html000066400000000000000000000064671515050116100306500ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.7)

    8.2.59 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002eevalWithTableVars.html000066400000000000000000000076241515050116100324230ustar00rootroot00000000000000 tblish.evalWithTableVars (Tablicious v0.4.7)

    8.2.60 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002eexamples_002eSpDb.html000066400000000000000000000100221515050116100321330ustar00rootroot00000000000000 tblish.examples.SpDb (Tablicious v0.4.7)

    8.2.63 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002eexamples_002ecoplot.html000066400000000000000000000151211515050116100326100ustar00rootroot00000000000000 tblish.examples.coplot (Tablicious v0.4.7)

    8.2.61 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000120361515050116100340020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html tblish.examples.plot_pairs (Tablicious v0.4.7)

    8.2.62 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002esizeof2.html000066400000000000000000000124661515050116100304150ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.7)

    8.2.64 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/tblish_002etable_002egrpstats.html000066400000000000000000000105451515050116100324350ustar00rootroot00000000000000 tblish.table.grpstats (Tablicious v0.4.7)

    8.2.65 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/timezones.html000066400000000000000000000100401515050116100270770ustar00rootroot00000000000000 timezones (Tablicious v0.4.7)

    8.2.66 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/todatetime.html000066400000000000000000000070451515050116100272340ustar00rootroot00000000000000 todatetime (Tablicious v0.4.7)

    8.2.67 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/vartype.html000066400000000000000000000065261515050116100265720ustar00rootroot00000000000000 vartype (Tablicious v0.4.7)

    8.2.68 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/vecfun.html000066400000000000000000000066651515050116100263720ustar00rootroot00000000000000 vecfun (Tablicious v0.4.7)

    8.2.69 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/html/years.html000066400000000000000000000064661515050116100262260ustar00rootroot00000000000000 years (Tablicious v0.4.7)

    8.2.70 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/tablicious.html000066400000000000000000027523651515050116100263050ustar00rootroot00000000000000 Tablicious v0.4.7

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.7.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.7 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.7/tablicious-0.4.7.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support
    • Things omitted for compatibility:
      • ismissing function

    A global ismissing function is intentionally omitted from Tablicious to avoid conflict with the Octave Forge statistics package. ismissing methods for various classes in Tablicious are defined. Tablicious also supplies an isnanny function with behavior similar to ismissing for clients which which wish to have ismissing-like behavior using a dependency only on Tablicious.

    It is the author’s hope that many of these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like.

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.

    8.1.9 Uncategorized

    caldays

    Create a ‘calendarDuration’ that is a given number of calendar days long.

    See caldays.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 caldays

    Function File: out = caldays (x)

    Create a calendarDuration that is a given number of calendar days long.

    Input x is a numeric array specifying the number of calendar days.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, 0, x).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.3 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.3.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.3.2 calendarDuration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert a calendarDuration to a datevec whose elements represent its components of. The components are the year, month, day, hour, minute, and second quantities of this calendarDuration.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.


    8.2.3.3 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.3.4 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.3.5 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.3.6 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.3.7 calendarDuration.mtimes

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    This does not do true matrix multiplication, so at least one of the input arguments must be scalar.

    Returns a calendarDuration.


    8.2.3.8 calendarDuration.plus

    Method: out = plus (obj, B)

    Addition: add to a calendarDuration.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    B may be a calendarDuration, duration, or numeric. If B is numeric, it is converted to a calendarDuration using caldays(B).

    Returns a calendarDuration.


    8.2.3.9 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor B.

    Returns a calendarDuration.


    8.2.3.10 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj, which is equivalent to negating each of its components.


    8.2.4 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.5 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.6 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.6.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.6.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.6.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.6.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.6.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.6.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.


    8.2.6.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.6.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.6.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.6.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.6.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.6.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.6.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.6.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.6.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.6.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.6.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.6.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.6.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.6.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.6.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.7 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.8 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.9 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.10 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.10.1 datetime.colon

    Method: out = colon (lo, hi)
    Method: out = colon (hi, inc, hi)

    Generate a sequence of uniformly-spaced values.

    This method implements the behavior for the colon operator (lo:hi or lo:inc:hi calls) for the datetime type.

    "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time.

    The inc argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with duration.ofDays (inc). The default value for inc, used in the two-arg lo:hi is 1, that is, 1 day of exactly 24 hours.

    Returns a datetime vector.

    WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if inc is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.


    8.2.10.2 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.10.3 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time.

    Returns double array of same size as this.


    8.2.10.4 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.10.5 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.10.6 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.10.7 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.10.8 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.10.9 datetime.datevec

    Method: out = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert this to a datevec that represent the same local wall time.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.


    8.2.10.10 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.10.11 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.10.12 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.13 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.14 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.10.15 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.16 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a datetime. These are the time of day components. The Year, Month, and Day components are ignored, and not incorporated in to the result.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10.17 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.10.18 datetime.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, the special NaT value is considered missing. This is equivalent to a NaN used as a datenum.

    Returns logical array the same size as obj.


    8.2.10.19 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.10.20 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.10.21 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.22 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.10.23 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.10.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.25 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.10.26 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.10.27 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.28 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.10.29 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.10.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy.

    Returns datetime array the same size as A.


    8.2.10.31 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.10.32 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.10.33 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.10.34 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.10.35 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.10.36 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10.37 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.11 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.12 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.13 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.14 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.14.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.14.2 duration.datevec

    Method: [dvec] = datevec (obj)
    Method: [Y, M, D, H, MN, S] = datevec (obj)

    Convert obj to a datevec whose elements represent the components of this duration. The components are the year, month, days, hour, minute, and second quantities of this duration. The years are in terms of fixed size years that are 365.2425 days long, and days are fixed size 24-hour days. The fixed size year size can be found in the FixedSizeYearDays constant class property on the duration class. The month component is always zero, since months are variable lengths and there is no equivalent fixed size month. Thus, the days component may be more than 31.

    When nargout is 0 or 1, returns a double array of size n-by-6, where n is numel(obj). When nargout is 2 or more, returns double arrays the same size as obj.


    8.2.14.3 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.14.4 duration.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second values of a duration. These are the hour, minute, and second values that when combined are equal to the same duration value.

    Returns double arrays the same size as obj.


    8.2.14.5 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.6 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.14.7 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.8 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.9 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.14.10 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.11 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.18 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.22 isfile

    Not documented


    8.2.23 isfolder

    Not documented


    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like.

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.
    3. Octave does not define an ismissing function, but the Octave Forge statistics package does, and adding an ismissing function to Tablicious would conflict with that in hard-to-resolve ways.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.25 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.26 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.27 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.28 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.28.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.28.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.28.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.28.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.28.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.28.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.28.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.28.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.28.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.28.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.28.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.29 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.30 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.31 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.31.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.31.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.32 mustBeA

    Not documented


    8.2.33 mustBeCellstr

    Not documented


    8.2.34 mustBeCharvec

    Not documented


    8.2.35 mustBeFinite

    Not documented


    8.2.36 mustBeInteger

    Not documented


    8.2.37 mustBeMember

    Not documented


    8.2.38 mustBeNonempty

    Not documented


    8.2.39 mustBeNumeric

    Not documented


    8.2.40 mustBeReal

    Not documented


    8.2.41 mustBeSameSize

    Not documented


    8.2.42 mustBeScalar

    Not documented


    8.2.43 mustBeScalarLogical

    Not documented


    8.2.44 mustBeVector

    Not documented


    8.2.45 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.46 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.47 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.48 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.49 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.50 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.51 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.52 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.53 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.53.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.53.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.53.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.53.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.53.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.53.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.53.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.53.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.53.9 string.endsWith

    Method: out = endsWith (obj, pattern)
    Method: out = endsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string ends with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.


    8.2.53.10 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.53.11 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.53.12 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.53.13 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.53.14 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.53.15 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.53.16 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat


    8.2.53.17 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.53.18 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.53.19 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.53.20 string.startsWith

    Method: out = startsWith (obj, pattern)
    Method: out = startsWith (obj, pattern, 'IgnoreCase', true/false)

    Test if string starts with pattern.

    Returns a logical array the size of the scalar expansion of obj and pattern.


    8.2.53.21 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.53.22 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.53.23 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.53.24 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.53.25 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.53.26 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.53.27 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.53.28 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.54 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.55 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    8.2.55.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.55.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.55.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.55.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.55.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.55.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.55.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.55.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.55.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.55.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.55.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.55.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.55.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.55.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.55.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.55.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.55.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.55.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.55.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.55.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.55.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.55.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.55.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.55.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.55.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.55.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.55.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.55.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.55.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.55.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.


    8.2.55.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.55.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.55.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.55.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.55.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.55.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.55.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.55.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.55.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.


    8.2.55.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.55.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.55.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.55.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.55.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.55.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.55.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.55.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.56 tableOuterFillValue

    Not documented


    8.2.57 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.58 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.58.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.58.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.58.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.58.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.58.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.58.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.58.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.58.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.58.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.58.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.58.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.58.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.58.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.58.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.58.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.58.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.58.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.58.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.58.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.58.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.58.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.58.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.58.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.58.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.58.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.58.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.58.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.58.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.58.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.58.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.58.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.58.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.58.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.58.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.58.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.58.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.58.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.58.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.58.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.58.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.58.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.58.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.58.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.58.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.58.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.58.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.58.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.58.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.58.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.58.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.58.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.58.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.58.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.58.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.58.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.58.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.58.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.58.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.58.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.58.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.58.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.58.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.58.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.58.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.58.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.58.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.58.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.58.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.58.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.58.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.58.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.58.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.58.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.58.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.58.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.58.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.58.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.58.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.58.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.58.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.58.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.59 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.59.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.59.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.59.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.60 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.61 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.62 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.63 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.64 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.65 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.66 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.67 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.68 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.69 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.70 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/devel/user-guide/tablicious.pdf000066400000000000000000016420011515050116100260720ustar00rootroot00000000000000%PDF-1.7 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 275 /Filter /FlateDecode >> stream xڍAO! xQۤOvk6n/mh}3Uy :D+QD["G D .#9_xMơd H="뗱ݖ t sby}_Mr/[\Evc7Ӂ,RP2% z'5-u5Оk)0%tgE#[po2_[s`iצjJ7%֡.!t(i*bڤv[ߵ@gk j})jj endstream endobj 13 0 obj << /Length 668 /Filter /FlateDecode >> stream x}TKo@WpR!J9U `{ֲ8ʿbcǍ8071xT(2-U݊yEDNIOML(YxV,,-YɣjPi^ljou";ݯEO@,j]XLmiBih,o9%|rYRq-ݚ 2\F,"(xܨeމLvg`9* .dv1ؐk'ݿb3"UJPI2ն3#կXaS,wtmC7AW>3:k^&'HRGÖdnO j_7c/SQG;dF%B+0H4gO}N=q~͐mE*'n0s {pC!7dJ/S/hDl DkD45>Ã9$A+$lۻwfaK햪s.,j; :ݏ}f3;Ze@ݭI6݃w޵lY³EQwZN#q8mG{ endstream endobj 35 0 obj << /Length 506 /Filter /FlateDecode >> stream xO0+|t;6I6R5Ej*1966ՠ~}RDsf /ĸ;ٻS  +d$Lq&ɒ6줼=H2}) #3Rx)eD\l%)גoۄuF]#"3Fݐ뜞 u$ű^Cn 5Ipz⾽M>a#藩%K XӂPpfk+,'Vaz %~Ɲ p{շ]g{zzDq8~P\!"X9d]u\6իe:{X&#AX\a<} `85cUɏj[GZza$bT+b?7}%wW(s-Tp5B>Dᅵs{i;ۮz9/x<l؏A^y?Q?/Ye& endstream endobj 115 0 obj << /Length 1260 /Filter /FlateDecode >> stream xMsF:JT훴[ętڙ&9AFkW3 `veL 1A,/@$AFH,(&=Z?Ȝ7Gkg4኱%H C,Dt덋6,J oܺ'bUwr#BƑa~7шd,y6R,{KјQ P9 ?+9,b9iJX%|Yc4ByI7~^9Խ'4@MX+^6MY=h`7M^71=I1zN1 ᠛CLń8 a kX/\Qyft+d Rg J6d/CHBT>Y4z2HZEWy!G=: YP &y7(@wp#X76oL>˫B0.g6ŵm܆1y5d!{6 #B̩首j MpGZ|D"V=?%Z>Ҷ-_E˙)>gPaߕӲp~%-?7qJ7V~[NtrWδ,2h+uxYM2궩CS{-FCrRܻ٣5Ġ΍(`ēB ŮCh6\Q}=7Sʵo]2 'LƯbW1%/ #D3=a Bue-L'f*^KsS>Y'˼gp@lcbt|eS}u uhҸ^7M <9Fju0 |v6Ge2v75ѠPޠA5U8ֽy6䭃;!"paЧ̼*̻E,<_X NJΗŰٿh17 p'}e0ky[u K9ƒ;\#B &zc51 [*$%!;F7>ߵ#5gL}3?׃axȂrOsU^yk:ssmNp)4(__L` o:9u!T}n:%ݰ`^3ZO['> endstream endobj 233 0 obj << /Length 1181 /Filter /FlateDecode >> stream xKsFA1T)X:T px| ۛ-FtAs?XBDVࡸc1xyw?n\qsR2 sۤ}/w?mRwG dd{&⑈j Xl2M]yUFif {A)`tk}w=ƨBt(yjںAhIQ|--nM qI Wy壟WDf$%Iʤ3\Q~4g61pE^!i W{Ф(]B+>Kc iG<%hY-25`W!,ZuSPO`.rɯ<6H>jGό"zdbj㧽$@ϻ#Rix BNX=Vuv8 ~#Lu[%ibfr jChADuGl9!%٤ 凝\# 99JlmR唜UtϏXNlBeǴ>m3L8aqi6"@=`f+͜^6$GHv9j")^eRJo@R!"lp=X:K,|၉KA3ӮL dH) ݄!?GXdcFT//N[`]\d9:+>& lDǝ]XIAx;z'"zol&,)ρ&lM(_:K1.[YHcmCR%[_(/~o ~yr3 z؅˶[&h[6Dp&?51}v_|KPvoBul*|Rng*sC߲Ҡr!u̹L%OۅE4wam IknP$ ْԜn-aWlǿU%_0fMvh;RL9}H.&xބؐ$?\VM7V+kwTR45壆NӀ? ]ͮqG]Y,FrmZ- HzFs$Uf|ΘkA}*I봠#<(o?ELJ'^ endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 832 /Length 2713 /Filter /FlateDecode >> stream x[o~_ >pIph/̓boRdH! 999 hZ7 ƙ`3Ćb0DC2>M $g SY5|]0ޥw0P {^#EΆ#Lp«D ^W*/d?Dr <<\yp-К]Z i[h5{x: q hB:z&> N,]N\eEw{{>$^<{XXn7 bjoowp^}d:?+[sH3Ϟt7KS}DQgHB c c c c0c7<33vbԥ.%u)KI]JRRԥ.%w)K]JRrܥ.%w)K)]JRJRҥ.t)K)]JRjRڥ.v)K]JRjR+zz S~Ԋy|='1v .q&bK"'bXWR3jyp{F2foL%B8.963$8Ff1dl%gxDF1>ro&JĈD!l[lx:C=fFyT=kGERr+agtNɁi ٢>2ۄ$ 'gD6~Uz:́2V}' G` 8$)uHbАOCX] 쉘P(a -IHuG#1rP X6Cɞc* dbv epl5c0 }Q\?m~5HH0=YsX$f4.kĐ#̎tp?tH=Yvx; #C%R| "'+̗ks7ۏݣA0: Ȑdm!M>%Ȗ,!_lCG^M~}TQhǧWd8D}q"} xo~2}X$EF~Ooj*,8=:nDfV;@YsAN‚/XחDfmE^ҶK|FL.)m$mUrwgIWtz`MG6tZ%V}IAxU*_K5{Ң=i՞lOZ'-ܓVIK{=i|OZ'-VIK*Oe|:>i!OZ'I*O }Ғ>iMOZ'-I T#*Ok}>iyOZ'IkT3!]=U~*?k???L_ät f=Azuxx> stream xMoF,3=ڭJ=TE=PLT0^u}gqk8׃"9$ABA<z1cK˻n=_t'!<*T[=xzj//?V:IPz#ɉgɨIgʀ !K? :i6/`7ۦ}Ƌ>OW~7:C>ϴ|-T"\)}'*s@_2ѓ!{?f앜1Gs9CʅDعR왌&tVe1+O" 91%+DqcAh{ qaJ hFOcPz$mԡڻ6`˼(&Ks,IP|Əϻ ulu 5#^[ jYv%6 Ȝ XgcFHj4'$x=l1GIg*ʽ3N T=e 6b{ &~f)|taX7iRduRɄəHۏ|=Vu%.`5cmȿ= endstream endobj 242 0 obj << /Type /ObjStm /N 100 /First 913 /Length 2423 /Filter /FlateDecode >> stream x[Mܸ17`,ù$!YÇ<ȴ;>Qc)iWKdŶ>*O:6+mQZ0*8֪T*?8ULA~0eE.)("ST.7ʳT\d|`2)`9`JU dSV!TBtzĀŪYB*VUQdIXH, =ٍ-Qb|OV1, z`&Mƪ`dBHTbwx:LP)A? )-LVxr.*{rH|TN#tC \  $U權C8UȨqFdUIDp&%\ıb351p(qM2D'B/"d@;ʁk KFܡ-"~ >~Yk]K/{-}8sn^l2xlﮟ./pR ^[qqm`a-z㭈t6|^RwjھV=z]Qynu^gz(92r'@e~'Y BM).%k!䨃"UI%ҙGtؐ.Brq1]y` uuI<)߆ݩb:V.AZ\& t' ˗xڃA'xuy -'y򤘵ŌВqi5 4<1Z1:ȡ*$f1|Iq#I &hn'kyT1Vд\!Jx2|9uA8ko$k!jRI_@W4ª go`q~z:  +o1JEx]J^?ٷN:4]k{O78IEb]Mw%}u,Pw+Tjyt1B"dAo +siT֥0+PRP#P*nqqLj6F @h Sa8= Rk2Dc mɞW-A/9L$kh*d >z\\$]bOkπU94-85/:[xCO-GbeM [CPsQGO7ШUI41C'bOʹ͓dU>_N.˛mcu&TMw/iԟ-W_jKbw#2B1Ox3g'o'7:fH@Pֹnly5)gl71{xD7|~]~px=ǥc72Md1.R;Ȧ '&Uլ7C@0VxL :fwr> stream xnF~ .9s.Z^B6Nĸ D*HQARsFڂ50 [d7?"b? 2$Rh"ͣhŇ߮>1<͵k$@Ӈ7GwWN~W=%L)0NiJ$E5.xs-Yw p$ U<|^j fr=5耂PMV%ʈs#_ u'(tHі'DJˠKc^uU x+pm2[.'T?&!=kqFbР-:L,`c8A!-37c+#WzeOQ*B;) )gT&6aųum&`!"Fn]8wKmp/4v.[_F[}eope+׉Trr/\!*[rV2//ʻn9Ӻav )jYZ\\fDVT閷鰑RD /^tm(}&ơz7wzCqNq{M &4)M WLZ^Uwfa#[;,'+8e#88On^_eYTlW`6St3 ۭ`q`tyGA =Hh! < KހJJZ7n2a@t_^6%=ѪHE.r3 Q< Vqce7uiUbG[M}Yㄠ|v> f;jx1IPpԻ2#䌟h?:Hɟb $8f8̶ U!Td_M[a 8W-[m:~>Itl39 yS> stream xڽ[ˮ+L6U|31E0l/^htcatI7U@KL|V}N⣊l*T6΄e6bbհ#3)Tdv()ţ;ʨ=Et $wkE6\TsJ&zg|ф!a 2^Ljbc`pR_ P;c;)TIdC.˝bȋ7Xt`hc0NG2T/bdR9X c 'Lp,N &91$ϴh4Qd)qNjI)AUr&4Yԁ9,LanRN&*br\Mq_%gJ 7Ed_pMaT"&^#w)UΦ:1'2LTBhR| [Ϭ\0 ,2{WĝwxWQ4K|44 *e8x~| MChYC8ڇ,h\ ^-^~۟??nv?/?|tbnXG2Vn,:}o^2fY6yXqn:~贮➴'9 AE]'h$wd힜 .^+y>:f+3MEL:EV^Մ}>!YX!{8F`qÄzN.P f|E*ok+y?9+@dCjmr77c'߄=j'DZF<ҍ@Շ>Gr> 1% N[dwHTAAF'['p+N>PsO>@b^꺶 `׍?NɟzRFO$(`+Xs<>tM,̓nB]e/H}sװWȽyM51ϥmDf:em8DLH1|EE?!"ѹ_b;iB2AS8^ͫMIG"yQZx>N}ّXޝtv/W!uf:tҬM<ԓm{do}] NՀ}6I>³6[tޣ O驘ڮd BMG&~I7BGIkm=z@ߔ=iwȋ &Dm"bC}hB?";Ė,}&駀9X/êWdE\= ޏM= '.r#K$2:mM]'rA^Lc36weu V,ˆoOXau@UD|tȱ t-8 ?XG_C|μ3˿o:3X~wjo0x$Pm_`Y},? _O{iX,aw:rr:+Ϸ4> stream xnF~ .9s. 4k+ 7 Zbd$4y)Eьyfd7pj`,?BFddp-7do/~#_ܼy+D0@x `z:b⧛3 J/pdZgR?\S0KBTѮood1w9H_uuGjs*Lznęv]i6գL_&PL? ΔbGޭ[u0 's1*Z)v pRXV "I aKl|*H.0jݍ}恟QߗyF 3_`L74Wn'!Ƈ8(.1)#i$yC5qa*"aU!arz4rYJ|C-3LZzYbK nB(GZW5m (k]Ρ-KW{tn抦y:6!ú}UA 8&bXҿ}G}Ӟ*0XA6ٯ7?OSeڞJFXflV mrT,8bRCsi`M& vYSi9RrAD(x6`;[a;Cdڀȹo-WT!B".|jR^ B%N+.,4 R=(-Z\e@'G@eA,)gRvh Rv3Q3n#49UyeϚcɴI^ɗ6T~I˞ݦzɶt0t+(V43wHBҼ(".QϢ\g(T yz$ >lo &qڬ|>. zeH~M |t@_G#NirU4e#8aҀn]\d@>̊2J9J+?Fҩ4mG mJXrXsAе }pЦ5is[\cIE佖/(2xp6xϥ_m?]yXpSh*Î%`ғ z|E83b>s/ƹ }[mwQdJĕA{X"ys endstream endobj 538 0 obj << /Type /ObjStm /N 100 /First 912 /Length 2399 /Filter /FlateDecode >> stream xڽ[ێ}W1yX;`, 5 $1ixhH{LwjcZ)*v+` !6m6DD$\39Wd @8(UH=l(eA)kꁟa09Æ=ô 5G=Eé5Eʆؗ.A5 H3;6g6>BX*@]'Ƞ9'#Eq wשta9+r\Lt΄#q$Y)qLȕL& $J@׉q:Ԉ!^I1șlR'R|@GG&b&W181$.dŞ+΋j !Z"\S}LY)MySH dJEH@J9ftpОЃ58a} |Ȅ#4$|"\F7+r\~AG'C2ȣ#Hz4.""0,aDP#pP/C]o,Bѥ ЧrPEtIL:NPV/^ fr?V뫇OVW|rja>OW),%E㚗 2>plN5?¿?FO>6qdaFLβatL<&4,G?yfȜ)ل`![ӄc'  O>d= l Cmu}6<\:yAh^XԂD=- v6GzΊc, O>p:z-I>gs6l;Ԁ急GXmɒuA`CNc`KqOڱdLm&Ddg :9@hXҀ X#sF|_e'!Z,s%Z;_O^F4K0yEˡ/%glv{I_-Rq0YbTE(vӪ770OĠI421=A@I 4WUJj vؑ48}Jr rʍ'(h<"#S1f Z/G?9,XpF9BXL*RgojxI6朴b)ɲYfx_])^yXLRjlqpG-aTd۳‚&)z2Cv*LG{IwBn,`TI!)G&|I9jpJsI8fn&\ٛE'ݲU4jYK3iV{!I9ˮcnmMe'XAn96NMbcmeEhnWuG{!I{rNMj6f]/V[ߥ:YpzwzԡԢt Qq =תlΏ]p(}o'I`׿6ٙnyajXo1<ڷI"Xd߼5ד[a7_5ІhRf]׃rS? 7ͫ׳D Go9]|u& `疴sBfmz_W>s*^QxEUūW*^UxU3^rN[ҖmI۬mVHHHHHHHH=ߓ=+Ybcccc+W> stream xOoF=Y&AX ٽZ'o͛#Y\"$D`!s|Up3k՛өl(e>e۽ )X{8 >[yrUok?D}% 5&KuݤԂC;JbIWJGo{!үdN6 /!͹vSKl#rvGoj˯fUD]0gGw?&luUG9\nT HTUR'Ue~J9ץI&Rz@QbdhRlm d~6mNJ*-Rt! > CUedvt()lCTAWTur}G7.}K endstream endobj 685 0 obj << /Type /ObjStm /N 100 /First 914 /Length 2366 /Filter /FlateDecode >> stream xڽ[ێ}cH@0`GP^@"n{5lϢgV9Ůn@c8 9NMVqرeT,QYW`r1۳SE1Zsukpᕵ> @J|+ }{C&-YYes&3hN*g=8*vdr)[" |J6+om*9#8|0┏|ʧw E SqB*YE 1z\XS B!#D{ KZ]IEW "cG&HA[$W̠}j__J<'* Xg Ud. ˜kg@6̅䊓.'ah.8P1DN q}⤨raU1VBhx#U,#J)LW BVkyZGyB|‘`nџL'TWk*(25d9yU\?j:͛|-Ĩ56K.̋lTy' -Vͪ{Z[tιfx!A,*jꮇSva0xԔ%¤ÙRV_uTGmr5aI`ՇχtW}Wl9f2m?DZ D*Ǻa{5mߣj.C+@ߋ|UEG8xor?NFn^7lmo]Y{Uw*vsf)6y>*Wʼ?.U{'U({|;qks|8>.UxU5W_ 5N\nQ< Fg*z`%e H;x:}>P_c@8`ET"_' Ȑ#y4\?n_\ѯFGmH pj_w镎ͽOȏުXۮrhKI{񐇠oV6O?s?1 endstream endobj 964 0 obj << /Length 1263 /Filter /FlateDecode >> stream x[OHy<$gfK]ĶiP3!#;vwЊsơ ;B"~c6ው,i!VQ|)F崇CcgA.W W:$H#\d(e^ j?44ZMLzrK ?@d;k*Cp.>‘ &CLvYsc 6S}16t(ha%<-fx̰AKlD X\.JHPHbcRECӺ@p1ut|57k8%, .ܝn]z|qWci0"g;eyyp:oJB^wC}}5* %,M_:f%òpxv$ga-x#R RA[}j(v^n:{2Xps2ccv KlQ"T8a]R_mit -!}Wi"ͯƌ4i2or<屻)$,;Tiq~2[2EvjZ, D"(XEQrn ~F6> 5|rǪ0-Q2p`{r{ endstream endobj 833 0 obj << /Type /ObjStm /N 100 /First 914 /Length 2458 /Filter /FlateDecode >> stream x[[ܶ~_0YlM H~ʶlf4_pa|R$%Eg9M@e6(2(ơ"z?%Rte;ggF".GGD=6^!B'S=Y'(a4@c:0NU  &19APVAC IXPDJXiC maC-f" )hH{p&#rL9MY')Ť W%#\Vy}n$'|ᓼ;CWb'J'8Y I2Ee#[lEjv"8r/Y'2j/UB=$N\syNU*UL)(tFS,E$"4bV*ifTN6"GB[iFi: ZL,6tUp *h*#QpxZh*ڇ}>>`HGQZ'Ej#$f5nr{FKG<.'|BjC(~(0, ɓկX?j|7Vg}[f~oF,!+H;ʬ y*<bëX߈?ݶ~gw+kdm\KjE5u%G,2xg _ķ5)'TA=:'" ;Iw.e'_?aSK8ÓFгhe4@Fhir^?|z{WEwYvPGDIj|{3KgEz+Yb4d4di > FسvÜIFM\L..۷3|zVnİ%w4L2Go]? bk}&RЖ2#m>Mgg <264@kA0{#)}!@$y|>j^h< 9 FfgЇT3vQwC/a?l{xZI93(ʛQי㾵AgcPo7([5fڙh}1./W_}_3|zVѥ7%V+~nl.NMZ/n+:n<(hRTv [I6-gi"P۴L)=n㱫ULho?;m*]ۍ2)l̠ }o#xP6Gġ8P'Actv):QVE| Y5FH 9dF'i6Ֆn<U(wSMEy#Y;rYF.Z4M5 7G-O /t3xX,6VUrt2on{4H- .`D;rHHo?  ]g;4uM_AS_f|{fKtJp j;(&1,̷1Z@t yw:w}Lq 2j זn~9wa09ɋQ/byIEƘ"?mJ# +xt "%ta?ط?[ܸe~~Vx/N@ t)ReQq#_cXK9^x%8^x%8^xe9^xe9^xe/R\j. Kǥ2pL\r<4c3gen;]) 3p< 3p< 3r<,dzr<,dzr<sq<sq<ss<<s<}QhaG/ @yi<֚ N<9^  ={c(]}6x/s@-{wFfzg=uղG1 d*6ѓ%^ǛJ>0CC%x,fVQ{ M'̡X~_9! WY.ˡI 2kH|~|G?{_iaRx̞`ܢ)AFSīl˧R㘈CZE"zGd]E`* g> stream x[S8~LbFKۙ,[By``5ĩ픖O_ɹ,qtD౒߹ &d, #RGgnݹu;! aLb_,@7Nm$AK;YAxhkBv{!jpIp"YNYw]>G:t{E_S>6=c)۰ Xڍ~G] &65vȳtxt-NJ}Erm!i,%9L E7>J ^̆ # c>nrTڃYR& Kc,nϰXH` n`ݦ;Hqt;#X&KϜdZkV3m‘[lY1rcV׍¡J$4T8I044˄\7՝(+$8;%hLCzTDWk-U1$!M*z z dxh+`q(} SGq)Gk$9b M]b.^`9*'Sqb b+ƚ5T9Usmn[}>fnOdyRʰu~IuF4wUg e[>Q%Ok64ku$$(5t ђC8zҭy߼>NMiMV^%?0H-Tnrf.vrCန7OJ%{Σ/xy49k1kPnώom@Q[D<&횼lƚĈHLJ`@6,nTՖL6K&o/z6LEޅ6l9v>]vs`C}ȉӢP߶r79EZ6~fd6+wG[urd27`ovF#/WN1_ CkXL>)j v"LzѩmEWNOl.I4|3UVFb(vGM->}훿MnWs?an91T6̞C7DȖ-u8\5,kcC] t^RFjƖXֿD&4~^7B??o} ;cϒ!v$^8}:78roߺƣEZj?Uvb6gdO ud90='|aj{nUpvMvIOYW" EͣL4QyN;im@.1n` sl~rufw!ήEz/a鮟Șݤ;+mM G 2xkiN->Tp_Xٜ[~ŴZ ty &|m!(I}| endstream endobj 980 0 obj << /Type /ObjStm /N 100 /First 948 /Length 2503 /Filter /FlateDecode >> stream xś_ܶS}ᐗ#@bI Yx0 yVvvh]E^X:H^JʅQ8e+ ʕmTx?-YET1FY"VYnS ϜF"$)8$9$"CȆDQD(X;dVQH)%d,)> ڒpQ9˜'+t[G(2`M!׌FAyQE#I8sV>AE,Ψ` g`F-q*K!f踠B|<.UCqYE2lqQxOaʦxR10sȗ / HkՐ}R˙Q CYL)ä,6aD6*qԸP}s&rȃͧ _f'płpDn8:)hV8([79q#գX=O\ KdO R.GEZjXleODidRM"Q-YrQQۖPL(ڀ8/lao+PY_,β*Ź.\25\FeJr/6wO~sb&>̂8B. šO$4Wmq /J q? 1T#ֆ܈Fܡ~ȏۡ=pZȓzrG/J9htR@<S? y2TOֆp,誽:4u?6]Ȑ K')1Au,@>m{|^ T-~r؏I a…i>?>/C/S0ez[1C+a n)Ozro1N8%,QؒkpL`x Sq)a{lR Ybr#HP?Bs2^09 P[SZNͫnyT?2P#碎fUN_ʍ&5^L+N2+ܟn)#Fj xaC n7{wW@-M]N9ϊ ?/wmP!@ՏkL4VV($<; 6oKm zTCjdQ.^YLfœ㗅|!kL. A84NfMyc/FúB/~D. vMP)Չu&'ej"K59BFl % ~MgacXh)T kL.-?Ƙ1!Ⳙg( #Fa] 1b5?=tp÷t#Ca'd%?-Y nw~j}wlC3O Y2"UK39d#j_*qIQclk? 2bTWE@2?yuZL2<}-51T?". z#bRCs~߿}U†!n-Y0HiVԷ2NķRKt(_VŨDFχ;U5ut:;d޼z/y|n7ۗPkÉK{Wvc&_/#og@钯zwBnMu͸u[_jAQIYeLIIBIIIII(;QvDىe'N(;QEًe/^({QE9r A(QD9r(S}EQE9r(Q('QND9r$I('QNE9r,Y(gQ΢E9r"E(Q.\Dr2*[c$a%A(.2"2vhնh(ٙ]i2pG>ߙW|srDT\ӹ_h%Ս&/B@-\pfus#IucuG!*z veĨf09,Y庞y^w煌)L>X&at ֛omT1"LN(>O0 0]hbd.Yx0f𤖒Kzz9C.oE}M|U ]VVAu0(fpN BRXb#Vœtj"8I2,4Ūs#5QF4p:OOGĤ PM*$/.6b]!' khۦ_Ȗr p#^5,fNd 1at)x S"~/֟ՊU )zs+>zw.-ň?-K>01Ի;Ks endstream endobj 1168 0 obj << /Length 415 /Filter /FlateDecode >> stream x_K0)<$_'HߊenusM7iT M{w (9e)╴QqsʎzCڲżWV⥛(~);vR7C+(&AuU;3n/G >{_t[^^vH Ki3)BysJ2Lu ںh|Le1ð[4MT)~Z!v+tLԬY@[C0}/BOR!3 endstream endobj 1128 0 obj << /Type /ObjStm /N 100 /First 1011 /Length 2211 /Filter /FlateDecode >> stream xZmo_s_V$%hb5(hE|I~}l.0r}gݝ!W+Z9#$Xa" N8I£B!H{% ? c(Gc F:zTxŵx NXBg0RF'0֐qx*(a|64ZOeFTZeXrH}*. :Rֳ! Ydt9h4F8GYֆoF\L7FIx&G,N xɎ1 g^GE=@O%E4^d(֑$ݷ"@\e%BP#kL2#Bb^QTf'v7{ n_EI`h.s13HZ$ANɊd7O$,A1 ɣ ʜ(jHhHdt`PPJ0dj@p@u"r\sm9R9s`Ι%2_ %dԑ܁՚Y!KIS"W4Ki0-g2h0!wЖi0KuvFh3/7'^G ;'$FLe׷$O{. nl~a[ͦjgeϯVgU,k¾E+~sJZ.>vy4y&>s1Y]Tb~*Us-E[4e+/VmY-?N&%]< GU/ ttXG1p@/˲^m&|@a i/qɜX DTt("x_LD&DZ&Ǡg˛UӬT|thGA2b8^pTʈ3Ɂǡi-Ӳh"<1/>8lޅqpP0!GE`4 *4xF䔑6q(^6WSGx +8EȘHަxgŤtX1pCѼ/ BLqH,u]6TtHs4&K#y*_-"H0)e`)I NZ eH8geTbmY]]NDP zTDO&`<AgƠ5j;/ h!'cz _Mv@c䟼z18nTq`. gR<DHǠuY>_@Q+ʎCRݔ@0GE0^LCT2Q盪^/ϮTox'.Izm>1>hayfW=& 6lJȑqN4*x򓙈3qLZgCa ` FdV7S-3p,()kN'Af,EڶjݲCAσq{J?NC@ 8rNNYESt_Wr";dT+_ }M!\3om~j/uKQOHS/X^ff.j`6âߟPk[& 8N Ec4r"6:Q < < U5HhVD!S8vH>!NpY $е=J^ۦ-zLQ4d#w85xlثtyT:{Sct >P 2{r tI꧱LZOQJWFn~7zQmZVSڷ}?%P 1(߷Ɲ!%O0ZiJɞՋ_/ᲿUz:hC7e`YQ&1c =`:!B선zA 8a?ۯ 7K?8OEMNZot5*~J!kpr[.&JzlU9X,3) t/ Wdap-*4 lQdN퇯ڒb)GP]`D{km4 }RN!hG);įۼ/Nzvܦ~%O~/Now6m]-w%M>+eFjxb*C%* 0{]n?,U`c֟Zr _};OqSeY2nb\ف7 >9,n> stream xڝUn6+xl/!)X,شEfS/dR ɋ_7#Feb f< imRJ](VTU+m=ҥe#* S(c#FH70Han(AYKlDeKrsQ8YJv&|!Pq`<1-w%Z)ZjfV$WTBf(4 W`\f{ 㼊ZEZE}<8~!<~A08ďbТ #ǖ"EP^ك*"Ͻ!"XQJX\!~w愔{~|^,q]2 x(O|-Q KeL@"X,+1kF8 ,4#U#̠clbxxyM1R?H<[`qi,[KEFA5rx."豠`)AAbx"d2UYSsiaP{ჺ{Pwt_:uw~tl9߅->o1ߞEnmj몿_f3mS~޷3r3v/^X!*˜Ǽg(n?53ߚahs8:u}WIRMH͠\tsd,C3'/6 yaqLg c)˚Σ444Սwz=2ov[/8 SvsֿζkF.6f UWf&NqKW^O[;w{`oi!|Cia i3T'j> stream xڍTF+6;Jʉ/rF 2Ptb鄜VUZYqb8Aو*FHVyA2=a yy\y.;Ǽexv;%1Tb \efuvaWX)J{?-fR;% Kn52gpJhnKn񰽯3.0{͙wZT[ht2ۄrE-5~Gk!P/2y?^fie.4e.>&4fB`?.`u@fX 9{ endstream endobj 1510 0 obj << /Type /ObjStm /N 100 /First 953 /Length 941 /Filter /FlateDecode >> stream xڍVnH W{䲗hgXFrFE!&zMVWlj[{@ڀIۂCp!Aa4CR%cÁ F* *bpF9rGCF')loEڼe9΂OqP@աT"`]"!(͆!x:\p"D*!ʽB 1It$nP I*E*-qLQ^,*LE>*i#ЖyH)"Eёr'& AE1KTJ/b_"qtШ4ۈ'# oAn0j9(H'eA|7TA0t2TAbQ d+E=/UHۧ'if$-Fˋ)v()ZZ]ŃB#4"RdIr!k(1:(t@4Bh-;W4WEIxS.ûw/<~jOxpsq(8}y\FtGWu/]+K#;J3`yM]5Kq, +U]W]yl2h/Bs˵x@SjԷ|-UWl)sYceVuǢ.Sqo"]v6}u.GoqU򵪧boqT^&mi^Gl{f] O-&uasV캥r3YibPһdmevOGrؗ|CovᷦOechGvՏ'u~=:VS{}jɱB f+f fU嫻v_dX˺9S8?1s(jqgH?)嬦::ű= endstream endobj 1661 0 obj << /Type /ObjStm /N 100 /First 950 /Length 970 /Filter /FlateDecode >> stream xڅTMoF W^67C[vu Ş&*dYm__cq.=ʹ *PiКL௃ gB NbQ\8FlD@BK-s,J\ r!r@є(s(сU ZP*l lhpd8pF.\8^)91 x B%.٣!dJ8"7ӣpfk+dceY3g.rSxM2e9MQihBXq Ql=k訩P(*93 aɡ4x|$=8(xU JOkoON|n72dOCf|X8s5ovީ;eMvi8ؗ\sy{}_gh!ל%gH߭򚡲b7ь UzX\#H fqu]uo Մ5%%U{'2!%z>oO(1[yA˺o鸘@ۘ[Sc}{tm=.TS, Qռsrl}ԽZpF?w'rQf8b'qN]x*)t4[Z44u& endstream endobj 1812 0 obj << /Type /ObjStm /N 100 /First 956 /Length 975 /Filter /FlateDecode >> stream x}VrH +渹J唪ʝG >$e ̡]DTTJHD:DrxXSQ P^c`J+" m IB(Ld0 !ㅥ\PuXUI V 9T y>6 <<)!F8+8/kvID;"Vry'D")Z0 H4J*F[iEHrPLA.@F^FEح6ȋV!rDp10@{/%ybg$%pq$gNю64Cӄ00G? LCTKK-r(,\m^q(pp.E`̋Q6@BثG$ GxXpD+ Pk"<a12 P`5wPv&ז6 v;as40pqPrxG<|c0=WI|3C=|*+3ڮ5 r?^ P,i-Xo,.[k>@V5aTji*6y(% kqFfŶiᘷrZ1n psMpiQ.So2Ӑ4pukQj.꺪ܖm/o iùیQ_m2*x\0V3=ՇC)!^ns7}Ƹny[ +7_WVTCt_͉ǯߊsSSOzOS{ySq.psVCbW_0TW禹zW| ў;x֢`pnĂn;wh? endstream endobj 1963 0 obj << /Type /ObjStm /N 100 /First 963 /Length 1068 /Filter /FlateDecode >> stream xڍMs687f2ii&M2N{%"]JwAɶ5gw*:%B+z:a=E% _Jk2f(QyK}PBiw#h%HJhWЁSQ@) 09i*RXKQH䨅Sy (qtE A\a[T e%`(#à-K!/rg0*)KeV,i*aټB*R(U"ETX63B @14*0:19FVg k)I[3r>[xIMGFU:æ?+ln$&N,rw_Qia^pۺ6z9~:m o!?H eCsP|jfcޭmC(rMCy._ǘVPDžZ9 M6zln8hcƾ;<.^p˰'nSܦM+oN,i-GT5-HࢷTAb ͔EA6_rYb p}0 endstream endobj 2114 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1106 /Filter /FlateDecode >> stream xڍMo6<GX-An Ffm!Jt_ߙ.e"<d %02Gq)ڠwFC2!ijasͤV`8&m +3% 0G*Kʹ˴hL;tV3GIf+d%2RʱZ+V^pf%sfp4 s5fk+ ݌aX5f\p,X7Ask"VUEQ5`iLEQ,d䊱5dkȇ c( ca( jNPjBs@qy2pg!*pC +=k¶: AfJ@HMk8@5q(AifPhdlƇMx00C`hC@5p",vyh 2 @8o `}|c``&eE{( uRV[_ +,|`9*),)%]h 5H~HI3Ň]~w]^CN'?M|jcf}xq[e*di;Lh~\f@%My/i%0tajOM>4m0!؝^]-qǐi'0MUs"!6xJSB~4J1>汋S38)1Ry"M? 1}{sq.5$ΤMHg襝3)uC9;Hh&iEFi}˶Xi alU.Cf闫<s=߯ݿ>g.eρP)W's(nlO?5¿F%2rsC7Cȯ߇/4,7J)ՉG.(ϱk|7x0eO.Sȟ J)>f^do&?s|K,BtLobfl<;oC|<쓎iDD\,> stream xڍW[4~_#4NV,+Ay@;NdXk<iazEB bMzQ:=qU:,>[e6^XS[IAN3^M=: #G/eL@ Gw+M=X$O90\8 71 RX؆8%{`dp5 >X,9ϗ˥|\!tZ#x<3HQ~+Ѝ7U~fY'Eu֎|q׵Sz1TqS!^kyp['Yw`Y;b–*!XAdYZYxu UgL}Oke#~ci m6D+$O |Z`nM s^Qj|܏*-.s endstream endobj 2302 0 obj << /Length 828 /Filter /FlateDecode >> stream xڕTM0W#'N|p"$nmæqH]gqC҉=y3ް  $(V &q>@ՆyϗMF%J*lor*XmH?f,Ӏ4e۔*/9e_E"Oɕ2a|6r48#Ғ&z{PI%VM_ô 2LK3ކeFkV!#=H;yBh`~ |g1]vkf pȽ({GFsqddx,L0dQwlz0Qu ȉsHLr{5vHW祿T9x9Bx @ ^ Ӌ8޷0hVܩȬb~}wZ6]B9-P \}e&а"SNT,$*Fl>^K wK"W,!&#o7akIX[)HL, ,9zFC80W"+&sl0("vơI HϞivy2̲N/ጜ1ֱy>.,E`rፓ- Gyf 8EMFGb ?k.OUk;k c@%ey-щ=$ Bz{yFIӮc םl4פc?aG5YuB\ғM'7]eO)azq=O@ ⅂, 쉍qit/C endstream endobj 2307 0 obj << /Length 2591 /Filter /FlateDecode >> stream xڥْ6_B)%I2._;7kGH)BRs(RCJ@t7nH|%a8Gh}ԮG<홒}8ie_xܟv4b5-^?\4 F 4d8B,*I< xzMǓ0k8 :sS"Sdυ8%27 f]7Zpڸ>bR*ByccJu^Pv/2˓UVgSD 0XɇzcʟvY"qx k FEjy#N̞'d4:v hj _RSbZ7YeõYkP)Q;ΟFм_qM ׅJߖ xNÓ}GZl;qw,(ϲg`Y]((%kW G"xt:frI+0eA0i\+L BܠJNopWÁ 8H(C{Tz٬1:o-0>jF%ւ^V XJ 0hcݘs䘿f%ˉ [SwihIbw ٠5\hKV4)e=~YwT3PO AQBzq&q bI$1le k, L<*Prv(F ҽ+ ]OU*,%d4n6#QG*,{ 88!(>H%?$}NNa~ǀg݀Հ7,]D+Q9 v1FW5\51vM/rKt?f,Rqj_RXewslʤ Lo-O\#ԋ: MVߕNЫ^^CBװ ҹw}qq}5Y3k9.^w׬ށzT󰗆g3[R?M^~] I2ShtbRNz9>=&q!:F]0K_eUqCc SNc;u^̿?}`P ޾꿗"Nw7/54S endstream endobj 2313 0 obj << /Length 946 /Filter /FlateDecode >> stream xڕVo8 ~_a&sfǿv;t[q_Sl5f[>InHQMn(PQ$~$?҉" LC>67 /ÈMC$<%%(%y* )"f^(e8G FnZ-~bTA2v6zY%p~g6>jښgQf Q@  0a ]ky]jR5B@iZKTUlT--bm9"%ZPl0nzX=Jsc$0i4)eDsv%{!%w`*? #c8rXa4n\FSszFٓ@䄛fKUk Rr݁T>WYsJqҿx:l=P:pᾦ9м@M^`0=1>t5u;Fӹ_gq>^,aOʒE ڥ!X{iaKT{b3/w/W~yLWvc H78(3#;Vj#-_8r)zKNyX;O n8"ýu endstream endobj 2317 0 obj << /Length 2289 /Filter /FlateDecode >> stream xڵn6_1oVwiZ!M&&.ZHSr=Rƒ]( X!yxN /M$.-7,$gF˳e( v.\7YY.͕m\tvq9"Oވ;\Yƛ(KJ */ JR-Y{o[?)2O5.>ˣlIaT"psr[&nTDIuKNB̭)+XL2HmWtjDORoNX;2{ևyl {h tvydZ#y䉦VzЫ"(hd[ E4{-"Å'9JxO#Ie> //,#M2ƕA8cVFSh:. FZ%PZy<=zY+F &lR9*#Z-N^r!ߊ.I aAĻ0n"Ǜ?GtEl|]6n^Q#Y)=Wk#&5F ?mbnᥙYDO V#$K{qP?jyi%%8WYp[V\by8FG.SdхC[Fdih0~/w>+-IbXձj;g*CZc{փaVGψ70u[ފB/P:xHE@ fXhI6f {tm #]y)rWm%yh!Y l* %e]C+#z 0hMQNm]299_·,ғlJV ,ۭD1{gROZdž%ycO&{tLw6+޳p̚%mrq̀V.Ń~pC{ /9S]+ʦ4C/L3CZϘOwb3vY5eȜ~#G%'bqria%]BjkU9 }egMIf#s Ǒ-ۄ|Z !?w ʦqCؚ'ŋU_}ÀZ[u7Paxc4=&u#WgAY=fs$u_ #q]fcIQUh6 Tg"4B wDjԥ X c1ڦ_ T 'hsփE^R2.%zOg;v4; m"ӾcUcbXQض ,6a"#6Pb+bvՀFA >Z$ȵ)G$ⶳz)c8{ ؂նaNj@n%T@Emh1ޟtHU8|)׮ʰ$1oU˕:0yhSqe7>AALsytljYljFD}[kc#Y; -2řG%aaT'ک'8FhR_<23q, pAX֝fF#d?̷nGwa`~Lp_/^>O/׿ѻON~x/=,A } Qr?`mT&yv*'R(CaG|AI)L熹InS{m'9n'OTlW{M WqO3ȓ1TL9y:!&<1Vg>[tl1BB?P8#? endstream endobj 2323 0 obj << /Length 2037 /Filter /FlateDecode >> stream xYm(PN(~\"E{@AD)Gʖiq5C g3 i \*UϣlU+|;y0|sٟx%?rlǢ6;fWnמRJD^j>)_c;ma&laƬ0@$mrI8 _8|yd( IREyk/NBY{Rzi$ݡ"kdYg`þ.4Y xDhZ˔mvl~m]ǜ0ɒJHDD'XPʆD}t$„d mq hmC@H2fheE鋏:9nզve:z'!l߂a,P 1C)bfa:[0 DAȣL < \&yEd~BAh=\y&ILWv qC{g~^1鲚ܩM۴_{vԧp.$?_ܑh'(_g碵1wa;^շd-/x-A3hŹjl4+154x{ `#MaKϩ7WPʦ$pS]t]h:b{W5ޞJp^]wH5JSˇ'w[ѕ@zTw?ϣf{y[N79euϓd_ ݛGlTkq.uYG!" ejj{ww{?bf~y0t=CN\ŋd>Э߂HL+1tH1?{o\ѩ+O]uC߽fn[JgFl-NWCW15 ¥AM{(ۋ)g\ 8ug^}ڽ|̷')x CCk.iɼ X uǖO4Vt(@f|#餤c_!bH80"1MW􀱛v> stream xڵXݏ۸_aKe4֊%&E?6}ZܵYt))^_%Y.,r8 7CYjf$ W:"~+%| `\8|4(\E+5}ou[wk/$ B4xoZS<-DvmcyiKWq(XsqBőB<$@u<*Lkxl b_3-/{nΣteYF܋K7}ǷXC56٧(Hx`Ӷ\77>D"E-RWڄ?ޠ\ SAnS5ϵl0-HO]3WkC9:Htz<+ yFJ0+kyrٴtH?F(8Y[I(=60^'V޺ R ̪E5$ '=H]{+1޵Vl7RΓhGaQlrq'1kIUnͳ?F ho0[V{Ţ#vu (DnFP)R,8g|\,v}{8r߻$FU+o,$9k© 'n)5̾q^8`ˇ[|A uzֆ?p ouH(Zحt3$C&+9*nZ<}kB-'OuQ}p ,-:DRItOWk-zުLEEWCq%8ÀtMr"|$/ хt׈ )G_up IHE,"Qq(#'2t)1TČ\48 (QG!=.Hs5% ٺ GQO1]e endstream endobj 2333 0 obj << /Length 1861 /Filter /FlateDecode >> stream xڥXI6ϯ Į]mH/@Gm6hh%oL5Ab0 H{V;Sbʢh[lnvD+ 0n<ۻ?$JŮP*Q6j)v|Q"r^=+mC$VE17I" tm+=X׮7QEmz->]!Wݭs㡶ucĻ,8un Q7H1q$HhKts ~{׽-=&0ATAz+W!TR@ܿnzp%bfdO~"H%/:6Xh-a4 `EBs)瑜<$H0_%?f{Lgo)t9rJ̾q( Z70A`LZdf >圜XMaNAsFC- vq|YeZwGD-(2`JXXҩ:DbLFgLcΤ0!u$e"PD\AT̷ #Sb{@8ep2Faړ{ɂǫPR^(ޤZ=:: x4 P*gA."F6u1b0. Zl2yA*M\u;\(hpvKP 9@-]w=.)}pSVex&$(sJ/E" |J̳^r=h$/4x…X^vK1 O`>A*qx$ ]r%4N=Ğ^DQ,s n1m= &oVPLX  5֥k+{޶BR{ʥȝ-G⩤`-뱚Yy)=aTXR9NX &Ŷ [" NHд!,T 5 ;o#VkId5"U(ejfK;&=~wP>s팹סip2]cMA o 2ˉ'm1@pɣc w[ゾE¸>ܒAdd8)u]O1MiYh }}'bAjSpDvY-Y?Z endstream endobj 2339 0 obj << /Length 1803 /Filter /FlateDecode >> stream xڥ]oF콿Ke Vql!@j=\sF ҩN#eKdT<Gi?zuHYƳaAo|[j@oQ=7R-"?v#m/NgǛ͑Q)/Lv?x%'CAUr;OKߑe]*\GGi$AiQsA qymI"rݵULʂs͞jdA[ݭP,ì^~,? "kq3.t\hi*wUfr]Y Q%?t'dPMex1TA7r%l w~,Sm:-a̾Þ^UU%رݻhv_6q ^e;2/M ?e+0;MWM+tgqί^?i'( */FW1@^IPX]PB@1sAdpRB8hH>njdSx(YWgYs$*ȢN }1~n&"f chϸW[h).sk̺^Hlxmj&_ ̟ OXp$ rQUCpLT-- (Ո ֲ0&t|7!g&k 1  4ڵZxETz+LVrdzňUeg{4EfFi["(9 uLj^fgv&:Z)<#Hw#WEMQOL{bڬqq[E r ӯɩ_ 7{jPn $שǡ(Rn2f; u藄-̸t1F&{]'YCv4  t|Nr>̴pMWQEUY}uJbh Yɍ8 (g($ ,==h{=l]"tY\6s1u߬kE1=a8;a0%q˽KǀM@jk}:S69mf,C߶h-7[lx*"PiHҀgGGÉv. ksSxKVlݦh3[B(R#4vHp%DEd{{QQDM[A{iJH%}PCBݤ klD (P ^ iO<<ΘZ6+ 8yOAOnIYWrI8kh&)&73--0q^10xLOxͶi\_7׽G`.7e1,zlr> 5cqq5W5eGU@`_Mdaَ&+rZrilŹ jh V4>mT ) ܍]a}JOa18.Vx\rDYӯ C*ՒaAFө8/&8r*GsENz;1_$+sfqnT,v;-QLoUV;%q0qZ8*Vg3xЃcmL%4Iyo>}µ 1Kr]m@Jl=T623;ʡhA*!4Y X~-[~CxQ^4z qG z4 endstream endobj 2345 0 obj << /Length 1532 /Filter /FlateDecode >> stream xڭXKs6Wrw:S$$@.ҔMv8ž.I"_$I^zWl&f/gQ~XM/t"Xz˖jYL8ae)WDg2$Q&(Ɖ7s4k &Б޸^gD0ܱltGt^m->~a5[ZXz7JUm=\v~,!$$F#Z } ˞{=0cV]BduAD?ʼ) B<jPQGsXy@ױbQ}mp)B('.GD+.OOןB`p4io=k?$i;{_ZsiIIO$.C-/KF{RwT0񩽁T4{ J3wӎf-yYGge[FbNN7Pcʇ;hJvwS@=)>:Im J'ŸE٫4oi1! aˬh^#;h4.;5PI endstream endobj 2364 0 obj << /Length 1029 /Filter /FlateDecode >> stream xڝWێ6}߯PE4H!-b7}meTɑ-Y6Xf ċxEeEϽj۷r㹛< 0X|}x$ r%D涷Z>{O>!oG+45s,$fM*yDwA dYk!ž&#Sj+"' W#C{[ji @0FizeP0\5B9r/XV8?m a5B8ƱkJ oK]R2 v}߸w;kt}o1æ{oAT .> $R/$IHh!sZJװ#%dc{:\33DNܪ]KZly rYc)ϓCoߟ^ߢT,݊i>&^5FuW84⓽j&ߡOP  *j|SG;f⣚6=ucq߰`60=܁\ωo&+umwVay>@E| \Ni֥n]h 'rrueg`eA)aܞZbvg1tRw4l´C?>Áa:Yz:pI;pޗ=Dp!b- endstream endobj 2382 0 obj << /Length 1095 /Filter /FlateDecode >> stream xڭWMo8W"U{&`Pned&`K$jTKNl,5$<7w2I)v7~[l|{B;#9{q'_ ʗ#}K?.0اa7R* pE#qx3׌x#8:8 =ʅHY+u,\g4`i^ߐ5muQ!1h/[HL NxQ]) VW%J=e8t{V)B٥S/in䐉V^&*Y)_ۮ~ 9 ٪uUBn+H9nڟ(Z>ol>^C[Ώ˜'Y7g2i>\G)&&ŐbJnj7uaJnƳ|w&O?/UJnL /h}"W#J`,lkQV \=a,eKVhĊq M}2P5'wчϩp@`>0gD)-z_F`M5Ar\K0X( Z5 I3x{cM@U{;di۪r)+-ymUWp~`Cл+r'b0z  ??U뾎XzsS,LBWڙ3i$3*n7s.UKMoX,.->%'.`-mq0gyq0!ԾnMсu,4d*RJx4ysdbl:nFagx?gE 23gPni[׍aUjHi]f4@ݼ˙'NM՚r  )A;Lk0yʘV\zm]<* b2.6nӨN$^ 4Fm0h|×w[[^UJWqB>7PVUc$n䴩ך3v vF棊dvV1RW/WRU8z9xmF%dBӜy䌶>@蚃H<7iMzdDG2nbo|/ d endstream endobj 2265 0 obj << /Type /ObjStm /N 100 /First 943 /Length 2063 /Filter /FlateDecode >> stream xZK6W R&vM*Uv^h 3XHʏ5(x,%:Ah|rB c(Q8kP"XjVhx6y@B{̓ 4! ifLTB'̊"x/ W5fd:$1qRKO$ipפI$| *-uPP~Umda yb(FQ vwj92 < /)X.jVq)0 ³0>>B!or> O%CFW'!h%e |F:O[A" [/- . y]pKI3|Ay,4lP79e?SMpUHy~E ?lŔ1zעx*g(/?j|3v, 6w[oʦ{!nՆoѼf[?ܢxX߼_zodT[WU57?uܢ0/Q<Y^uժk9XXD'If^}~.w;\.!30i5ժ}8ã>m/fPNɬn.^Nn10:r BkRd9>gOG93 h<:" 1T雬EۮG'*%Ւޙ۪ioܸM[)P- o/"s*^pܫ& #9FNf0\a= 0 ~LuonɄ҇$UI:'~2ڋq"1:GwSNeӔ̈́:H$ (_NjTK'4FFZG .vzM*]i#f4* G$ZwUsX.)뉔 he㧄ǝJ|x,q`t%FSk 2!Xm'=DŽ )+s?l&admjJwޔ_~~ND%FGV$)E ȫ&vPkX+'23b]3cknWt+="B9E7]qGT}r; NC!ӐP0a( Ps8sSD $'2P{,> stream xڭWێ6}߯[)RH%ݠEQHa6QY;ɲeFji̙3?8H)s 6:>.͛{$+݈]+0m1ѻ?Jֲ\0JR1"4|v˼ɓLpf eRIJ Nb -i< "S䳔V\xi8 ?|*~;M Cvld5qB'ϪNZU𑡥yeVmA'-CUvR1 !Q!u9V sb9 {5L̇ɹs& SaT]h?3nk)Z'"+b,r £lEGń\X9A٤DG`f ՝T+O]8a~>Pfn< c\Yp 9%ipҢFDБmhvL_]+.x6.1 ^(抄 6<*)Dqީ9M=@4X60j}Dؾm2(g7W f#ju*5/v Iccvb#H']Ia$l*ȇHpS>vPNгV׋4uEQ\s#`=n\jx}3ԕ !@f?*Li,L< JFt/w+itFO:ً1^%gWf~1>c5{N endstream endobj 2424 0 obj << /Length 776 /Filter /FlateDecode >> stream xڝKs0L ţM2iN'baN~,1V [yV@Њ}[-nNz1žybi=/lde;R~8~_<ʕdK!~^|,v>9!')t~\LlM\&jX[.t.f˸I\  ]R_O> stream xWKo6WsŇ^zh %`iqXȒ*ɦC H8!83Ll{__>0'H0X@ evlj{N՝n$? )CgEFӎB{ XLdUQQqJNY%8\9K03>rҧWLMryݥѥLeFX[7zC&T;'YoSf.׮i)O Afd' ixf#>> 54:γ̍f&fd9X"6%sY½y;c4)+Lĸ7!8NӇ^r cO<}nfn{K"vXke̥SҮK rP,FrZe6ݼtS%`LHa1 _"2`J@Ws1.\֫a^~wko,&CK!MtscZ?Wٷ5{^ܙGyEGT TH9 rV7e],nS.L;Qׄkߖw[ێvg&Z?`_&LMΐ#|3TȈNi"a~M!K|); \ L,Mto2o~;[s1혦qs>Dd2rA2!"qTΙR#$$??ĕ(A@a0wӬU`!7 g } XkƿnY>z&/a endstream endobj 2443 0 obj << /Length 1897 /Filter /FlateDecode >> stream x]o6=oXDɖaK-Z ipLB<}qxGYvn lx/7`ÿ`0)i 3@}\r0G=̟n^] ? 7}V7L\jj8R(bW\G$}7|ɌH3E؝ I2" gD7YY q q"H&'m+fC,~UUj6./>$<;'F .oR}RD[4@ F􂘝A_EB3<nlhٔK}S@/biF(ʆk@*0BA\9A:%BDC LEF#Xt b!DQ#0 E+>Bj)'|dMM[{{hRs]kb''k_<,qf0ȰHP*t_l.uvL jd rv")-)8-.(#b%VU̚Þd$cH'i$eĹ31Rįi q!;)d,F/&9K J=0}( h:4q=JQ"x&v#N57[p#7LIKI]$ h2&A>]PUPC3^Г4%mFe3s8A61y׊/n샋J *CRR <7}&2gې8؂sDqկI!Ze b|\'ޑk ]äQ}bOBq~EX$g'eSn e0N(+5Pxb9byu88`Yl3Ef|4G4afP^rca9u;ړb; 8KT4( b**3GNwFvxM̅o»ؓ D*C$2=+sqAɊ[c uRja±'m\d-10z1hvE8Rg`?v9uJ#4{q){eY-Us\ޤ=z Uso oVףH\Uɉ\ڢnW0AV^h"2opӍ=lc-N\7R{;0y4yIim;4>3994םB>r% /']uVt_B$#Ѧ;=+wodק]P<ӵ:W߳4;եfwٺnx.i=wFw<&9݂c{c'rω~ -ieosLٙx1唻1̳C7VڶhQŖJ*]kmjݛK#ԎJy#yǖnt,K c ?CgRl^AP e!ӻlh\z ]ԿZ~BFw#]CS+moe@ endstream endobj 2448 0 obj << /Length 1242 /Filter /FlateDecode >> stream xXo6_G T}K.d[h0dh$j.{QINtq70>x;-\yHYb[* \= ruM-> BHv+ˊ潯FDs0 5-o9;n,;g^Ix]0 8Ib:8-YQK+iEdFS:4u&Ys* $bsQk .ՁQZ:#򓥇 ;>u2FP4[fB;(5{]FyYM nhht4&>Zw=DE[`Ҿ]S9`p].x]!^x9|yhJ"[3cYuFcȲ=8-eZ%u[ .Hӛg.0%8Uh%-Oހυ\j$g1Ťc0ƪ*)[1&[QT yȽJ^DwpW@^ҢPf3ZYi@BL_"$sR?$޷yëjX}j!Ae2ݧ%4"BK% 1 5tiN`VP6sn诪 ;mHT%NvFԵ {OԵ6~T^io(!"F;I*?mѾ#se|X4,̍=BEH" LtiY+JO ZlXl ]A_15wȤ纡ӓL7Mgxi+1$gtx4CR G^wMtmzmф6 hL5HNr޹>T+U8w0tl٨'pT!,w3087hTW:<p蘀fwwA?fShw/- endstream endobj 2454 0 obj << /Length 1623 /Filter /FlateDecode >> stream xXKsF WhzZΘ,ߏtzHҦ$$a-$R%__`(iHMڎgLgYyEjF7 Dշod^v95uݱkQu(Xq8a/!{sa$> ro50<9<.gA.c/b.B7IC6畐 з\TY9 2sfnyAB#g{(H?rW>72ө}8S@G?m+OVڪ{e] l9s/ (}MUuVǣ;w~MÉ(Uﴑ %ZK>WMklǫga " շ+E@K"ӥ|Q?ξ.0+ۖO#TyjdS/b1<+߮uE).ݺi!ravMB]p+*A7gld^-x,fV@הkʉ ɇ*v+x ԘObwqצ/#ݥ8˜ F"M0{ _OLF"e ޞhqݣ̀jх }_3H6j<7ȝ: Q'Ŧ I١{'f@9A:lƾ\+u6TFY,N>1Ֆةxysa/VlZ 8~@Sm= 9rD[t4-؏L紜4.|젯\CE%qEF3Ǻ$#qzW"imZ`QtgX rRh[9͞GYR K*/4Z? ;(׶;"dw< |{~_ 1> stream xY_6 OGh%9=t6t r- _\9vj+ۏ迱s)6pd#ia̋}o9Em7]<7x C%.{߯oQJ4c歷}VԻ#/wAj䜓RI^yުTQeb',^_|ú=S'RP?d^ ʸp"޽.jX!L,"N*Ks\)F(y;A6Vemޑ^Fc) B'D8ff ɦL d26w )AD{RMiIRU9\>dTj,R$?.tYI"U5'eKٝ79+d{xIn ȳZS˒hFYHSMyR$h)"`!OlC'ٜM+o~f!<֔~F{lsoꁱۀd go ۓ*͊iX+dQay8P:`u` 10ӝGO- n)Qz;TLʢenNM hHLO4I9QD|r~i@"܅G=䝅;@}'ٓIz{\NǙؕ̇@ۅ"A&00@`L Wb>!/QxjuqnS5Jn%Ńz#zYVLPB ((+IORwnyҡtak} νrhz/uu貚q=ތs}L91Tig6ҞZ֪5*%R6q.ąO}UiGU5 cNka ɜN`cS}p+T|4:>1 R]țjMwQ'-f@OE nr??d@⚤(+z WHRJsޕ/<#1nJ(&L U |y3"ET@UF9}(l2Uk벮zc}:iIeIN?=Q&cAMä2+zRx b,4Xq7atp& 99l gZW QoIy͋T6`A _xYn;lp+SXBRWZ[+ecr:J> ! .}U8$"!Dl0Q`&F95r]uYi kW =PYj+Ӄ ]W=w  tƪXKt!tSKwmLHsۜk)uP W&3ص8no"?H&V K endstream endobj 2383 0 obj << /Type /ObjStm /N 100 /First 971 /Length 2430 /Filter /FlateDecode >> stream xZmo_9 \!my %UZ{ ήؼ03=C.55X g AƇN `bwJB!+sNΜ'LNو-yʖ V`fIHb\,)q?A%C33걨jHT2XBVOr:6%VÈ`/jLJzETvT6Qr6( krYv!* S.oa6ʆ6al23a}bEgqވK>F-oSy* jv`l$cs0aT`՚ϊuʙ\)&HP)R Iw)YQ6ᭉdU<"XKdd`bh+Ġ<#O&9[/uXLE -F3uslDBXrspW:Iږ)2'k6f~k?zad:esTxXHXoT47]7M;[Mu./ ~.Wa P_QK|1Zy`,wT0q$H 74~$ƙ8sgyӊ4jj 0lj6`8`'sg;JpsA^P|NfdFO`F7ivF-Y-,sbZYi6՛(Ӌ,Ӿ:B%kII/i}%/vsYir@B-8yydD@hшhDS4)8͏8S=dɣJ@}!Jd:vUvJ@#PmiXlU-4NJE*F>^phTl?QsErI?~Te۷?+h}D3˯T_=@N4c/nv Yq 7N١ > stream xXo6 ~_GP{%mw؀"o{pm%ͱ:^#E9%fCQĦH":_L}xu> 7f4Oo`ˌ(G)/JY뷆ot='c'YL9)r#'x PԾ햧6it7:NDV|Y~8Ed_ pOٸLej H@٘m&Tuͣ`2(Z>ksF.k@ hWcws- R$n On /m1 h#Am,\E3gtŇau89*i2> J5nVƳ<{ eq,ib(JI~ӊ\ʢѣO?( EiK6 4Iw{48AYǀ7haАw`"67*bP4uO>uasjѦrF޾|g/SR_K^{̒Pݦ?~ESW~>޺֜1tþt3mXABǴ[vgpش,x1Ĭ:Sg_u+cN9כFhN 7wZJEi7qZ'ȣ#x*6&9DqSEg%~͍8A2ն2WK(>a]_H\ endstream endobj 2470 0 obj << /Length 1516 /Filter /FlateDecode >> stream xYK60zHv_@4HZac6SYrEyN%˶d'MӤ,JC΃7|2'iz(Wy[/'pr.=fW? ?٢,ܱ+ida Ǎ}5 Yr.7Hy쳀;/gOu: xKPĺ,*ѐ4eO/ `sKg8%vI]̨.(;.lsi`6)lr|ù#?9W~aO&Dc5Mr@搹o[eb%Ir_篕֪\B/qkpZֲ^Jx?f :2oV#ѠQXFG`üR>]ʈ5mMaԃhcFM28Xd kp4X*R#G*D iлsȔ=lK!uӾjq2Ƕ%V!\k4baDSyO3KsXӂdEM_EA՘Gl4Ӭn-j1(dٙQbK=E e6x$+m Btxou/>t~}FE|qM2dQ%;T mǰPa8@-A@ oѨ99pƍq(s듳~eǵ4|`V·Yp J4twpHaxpt(FpDtnS6sf{<ܬTVWOw^X!YJXjnVs̀64cKKvW;T_miaLtIa=L|gPK5ƒ($n>#L t6ŎFԦ,`5=VZ0袁.v.621SvrBg`nb5̭+_? endstream endobj 2475 0 obj << /Length 1366 /Filter /FlateDecode >> stream xYKo6WV TQԳh AZ@ݛhō(yrHiѻn8-x)r8f8O[ԳbB4HʓR_s3ys/ahaM[ݔ&nѫ";BJ OQ7tGZo1=oW7Ù_(K| 4( \L.q}7rq`;am=kmV =0`tXl)-I7-]E-(A;) Sk5hJu+ 47E!H=Bo8qm'nb9Bo8 CHtmaUʪ 1jX8wLa}V:Nkhnk;¦(5RN?t-6fjeJGER- QiPV@"ba 8u!n * wT3uvMGdab]Ƒq9e"^8K!M(o-(?Zz1:f8 }Hy:=6EЉCqL{LrbmEP)3g ׊ցS1ZeTZ1RuhБY=zKk~b}A||Ag]\,D΄VL 3s+O};S?CCQY_l{;!Mu\{\U+ސ؆#gI%F%,jm;+nJYb gMudt|>V\;VRiOk0i!p?'zܱEX<1N% L|؟GbZw0  /q֞V\zh5Wnat(9qhzWI8P 9-]SX2D]Zw^~sM߅6[ endstream endobj 2482 0 obj << /Length 1658 /Filter /FlateDecode >> stream xXݏD"⅍t6ZATJZ '^>&18v\zfvf8%GT۳;3~la.doRP㋴DDi -h䛓n΁mz%ɧ$Lĉ@QhD…4KqoEV>;QRUNkK識@HC/E'SEK'{\zobocj[ 0}-GZwHK^q,Aߍ 4e}Ip)WP@j/D:U&rF2: NTy͌sݱ"h SHkdy^+PQЀ$YFC30X7,{hîjXUmfVբ=2.~7eJW05$CmNXu'@A ?1vK'3G+f )u`*)!s*T< `7M^nGCB")XPӽ<{Ũk[f: MO)me4yZϞVְ!v}v뺷$ P9J5ݫ 0G{?;=wՇkfe%="#X,L1Nw!'A 7>g7D$Ou=C8o#Ag;7kuDT(kG3u'k\WE3CwT}?ۨ@tgh0\ W(xH۠8ݔ>0c`D.aP)e <NbDl}r1g|SwI(F.띹EOS!}{t3Svug^PaNNs! GiBѴF9T@`1`)Rr< hG-iKaҽ*P61nG7 endstream endobj 2487 0 obj << /Length 1982 /Filter /FlateDecode >> stream xko6{/XӖCE tRocӶ6Y(iw;aN2`@&E~0(p4F8I6Z^fUmF4y"s88q՛4?hZFVTI^x$w5-ȵT\$iE݋׋4H<.Fa@S7?.#>[V8=-F3@<M؏oߌkʥ:> yF8aȀ`F3i-z?ͰrnJ A} uۭWkp7%ës7$C}߿ 40ޔWuF&% 5|?c}Qfv /MԟgmMGRooψXObPLF}{ ӡ 5Z[.YsA7VO5 IgjOEb ># |䐩8,STte  :Y ENh|%TҊ `E Թ28ې4JӺexͦ5ҙdޮ2%ͪR`pu\CsnԐPtꉢaV(}7K:ny9 OWr;ꞷ&^Qm%֔nLY/QpJDk|EZA8sAZ]kt{lٲ\O;̹ 7Aإ0Z|']$%Aps Qן\~9|oZQBD(Dzīr/ Ԁ1mR`0Pn2DY*HZ|M[U]aWUV:l5; 7(0a 7E^BܹR H Vc cߑC6B=-DFU'SH1TD ǰ)x.h .+K:)ǀRU-!t]19ooqEobh>|}6BDùG2& 9pf d Ryn4 n:$8柙 '#89 6l5?qҔhrZ%OuK.RsQY6U+"DAj*4lf|mYvV)QBj~ܒľ#&FIB5kըUWʥc6prIf2E})*aMO1|.דr#Fy,Ў25͎Og`/r5ׁFFkH?{&=wWR,QQ&BZ![#2eUT7l[zEGտz.g?hC̷-["?qeVЯi9xߍlCMGMPuW?,ek endstream endobj 2491 0 obj << /Length 2033 /Filter /FlateDecode >> stream xڽYݏ6_aܓ UQ{ɵ9WI+J7J-g>3XdbE~~Xj[j~H,b-޻ <9 M&[>{z_!ʒ,>ЁV3-T-aa˹&>,--R ]@J]܀a1wG\ڴب0ێR4^? SAU Bf A}{/_̈W@NIc%:F$D,M&)e/γlHS!{?z8pa2Ed& WH9"Q}w"iq"WӏۆEJ>.c=෥»ÏЌEA>ALEALBZi ,!2cOzUQ @\ tpWvwUXoV0[c>Ie3 -qx/=RcإeNYzpyXڵKy0hvDZ,nmg'.9{;i){(& syC+ Q5A 6MOd=b96xf%}Ge(nju:ڵdžF-] AkN.5R|nuxU [۬}9&Y)YVM0’& L$INnaCZnQCL/a -\8S-.QUPH< N:⤺400ɩBCΔIj[ͯ]Ir*hF%K~vt /;~GI>8-i @|tKkQs.'8 rR %Ih5tGYޱ~J?9eO]Lu:>+ ?+׻g~*cZ]⊃^n<ܻ@BZgk?r|ұ6jyeiTן'rD]".7#Nz^ͩ6kAڄlX A^b>Pa;ut`[mɐ;hey%*0=/ .=bc]*ӑX'G1`xj$0PO8{˰,piU1 '?KzXĚ =:k]]z6OmN멙v]Lz]^6n#.`&6GrܴB_1<=I~8``MjR+ND<`*|KLR%<J|(ӦzmߵF/oCjQ쉟N䳴q_nwG0݌'B5zr_@ջo~Q|E?KUOA?3®7/dギ{?,X, endstream endobj 2496 0 obj << /Length 1508 /Filter /FlateDecode >> stream xYMs6Whz 8ARTgzHqn2.ESÞw)@\,v𓣉;+Lhf4Gl;?M? t;MW4]xYҲR"}?o>ѥmXBzѻꛁ=8|d]䍤r\0 #ߑ'"si\:6DS6קșGHՙ,!5M ҙl|Ԭ:J] ek&ns]}Ͻpܶ&(^ӆzT;ߚȉxŴ+R(ovu Oᕭ`2Tl*hKEYtXpƢ}W"JRSCRhCAzؚM Ǻ2޴eM9uS֤jM4OzOyԏ2FkX/Wܴ%@%3gu^"ACc|E8 C$C aD*,ӓQ)*l$`fel-#Ѿ#6@Ml‡^Q!, i膽O':39ы7n=oCA|iʾX\ G70CVVgԽ}3_5Vy:]Г56'ihM1ųEdESXb8fIcEyDZU/0v8@*ZDzVԻ`Bz0QϹl!y_4Z78OIЕp/u`rgCVq ̒lז3tɆgLx܋)*u^htE} IS7Q$.uX Br "Uo,2[ì"Gݸtmڞ+Cgb)BRJ8~ $*7\C"BA$] !~`X)xb"\Ǹ||5WTDf՞I,Ib{}),-~ ޓGr 6 jIWN"P|zC<߶+$up/ `,xEpc&N0(ZpC@e f4|q<Ǖ{w;\;5AvXwP-v_*2Y>dt.6ip+q[u?^C78N'b֎`uҽ ~w('N:v~ \$w*%;t䶠hRASPPߊ8ۓ:u7jGS=9up-B:Z>,Gd=z{Yonƒ^x$fַΫ%4&q89x^T|'\o׽ =Nu4tڿK endstream endobj 2500 0 obj << /Length 1305 /Filter /FlateDecode >> stream xXYo8~ϯ#DxHH$-@nb<6m+DGb;4W@ Gw"p̅3|=[.rzk'w!>8erUcHz8sY|*]F$܋5J8%:BN(8&]VʓrQ4yH+3f(J3Cn$fd%TY&.~>W@U DB1D7K; B|drbr ΎV0LuU;Ճ1y,lƲM粚o}U;_zi_TI&͔[ NśNE'r3>7>̫i$ԣ 3 L1|H|YR:$|t3!pi-2$efV&8W_F^֝P#Wt>MG*} egh(&(:ĘvԚMD;'kFH+;'Vi]5u曣"kv d2UKf v>Rڜ{Ƙ/|!Y '42"WV*&&$1ּYN[muWSTDUSuUenËGiSٱ.|a0oTC>j!Q܍GTV`qEp%\E>T_q^>i/2rCec3@pdeQ d(q4Zfv˵`k2pf[E¨,LJp 'Q]N4[RʹE]fe-gfڶUuUZ/ .AcK:43 B6S09FgvcjbN &c!_s7jW}y<q,JtzsvJW.02ja7f"ߞZ&mj\FP_5Ydwx{ O[S{os]ȐbFC>l/|g/G΍irOMBd#PE2:W|=u]7)[b::DjpzQPuoj4 5jV7/@r,XPeTW {T~mx)CNܐ/K͵@ZUH6A6>Lܾ{jo8z3XP"BGe> stream xXK6"U[EsشM(=peBW:C)K ,!.\E.bw Yd啫zwﮨAHY^}6 uR7pjqO~ܰeO-;Br{OU-ۋi/^ =_'%OKEIP?@sxYvydyɝMJ;7' (q.65؟ՃV:izRZGܓ͔=y5) [ IyF;`í K>;m礚TSg%N74x2︀p"6] ^Lnʂ#Zk[,7 z7;.ҳiC1ٷ|ҲR柌p;w"c\g#€8]|Dwy '{;_BcdpĀu'&hB`ވ w.[T8od>*y$a1d:\l?%E5Vz'OOA `HFfzEV lct]Klqxvb_s,E{\BzBU IIgGI t% niThNg{$W"L-{˪6{E{f:3~3`3v68醳'9!2oۼZj pȈ^OOzLO&dB=Ҋfr2̺4ґ 55!Ws˖haE%6_AտpBb(~y\O11-3ZS1xdbUYNV+#  LF/N *Y7jF_\2X |;S`"(@;إ#RNb*|gEt,^ @W ֚X7>۾!Y3SqDI2ʶ} &toSeZdU8}}>|8gϝx 2 o;Oֳ PI, GAQep}ٲzdh„}٩XTzY:z=ħQQ|. *>(qg?3J&sOaX9OXLuƧ&3@Ǚ%jǑŦ=w>*~USv|dFʚM4]@tډ9ǯ-<ۭ`iŠ endstream endobj 2508 0 obj << /Length 1629 /Filter /FlateDecode >> stream xXKs6W͘ 7`'iǝ&mmRӡ%b"U Eʠi::ŷo`s2$Aea,6GTG7>bf ѫahƜj(jt.u\ HzaDN~?|| (~ gC < 8 =]>Ybým̾AzY~1?r.?pA,6f^E>.r*׭4K!"?CL`"3mKƺ9.PK*+8lS/u\8i;ZT<坫4]j:"-ot?+<D-pR/:Fv!A@P뿯3?!|!kjдȕ\[^f4^OjP :̅,sl1npcxXyeyS+hv|Er=sOɆ`H=|UGM9y&iHramY, 0BA 0nA-70jh`@=V vOݓX b䳕7ŎMUޖҭb9y5epB#`_FniM 8)"/vA=LP_y6GNn?v.agb^3'̘Ssu V8'J[9 PTG#Oo&(o5Ku*%hDJ8w%;[!N!ri@< FkRDn+)Vj}qb-KƮ5ow,?A0;1XKh:Oǔ&🗷Vߌ!.{nZor,ycح^t*ӟz17|\**bpVqjWhIbovs.ܯձ?hS0jP>18vBd/ 8vD,"@hrk[BMl<)gCΛns."By7*CnmM,Id)1/ep?{1sRɓ?/Ms]vt Oj=@u:E4P B̭;yKͮHtIVҟ\ݼphrVm[UԔ,;en%4[!ÓSP,O&iڢ *"yŻC4HQpD $+텕zA0Ec L-cy-hU_qٜhXW ,ftaM,c!uUCPjGE C TZ&XQmk΅ovhnў} X<;H&#h;x y#y{Tp؎L<Sgu1ƈջya&W;uY}a:9/:5 endstream endobj 2512 0 obj << /Length 1615 /Filter /FlateDecode >> stream xYo6_"Mߖ M. aHHB<}Hݑ'Y%i( G&cMLgMBs2u#tI0%XMEtXwV[\M,К,]VxrǮ|[BaMw]Q["Lڧ,Zm W &#t~*ta5mJTFsM,@8gtzD=wmcū$R ug XIqeg#aay] 䱷qB]T4ٽ:4byw{H+wSځ{0q;ܗ@IQ%=e7v(h쫅7ӯJPB^  #Rt:j N#ef6ȗ]r޽6-a2k9^an6#n#fNT1n~ [/֊bqoZn ?Ǚo̓ +@ZGlʆ )YҋdM"l*ᓚrʁ23UA NՔjaHeV&t^5jz >W4eSTovaWZx+fiJ"ΦWwV e(u?@yI ^Nb؅WP՛ݸ-ڇwYe '}+SU߅)fֆ|{Uۊخ$5m=EH((ányJٽ'c>B %^G֙Ib:؛wDl c/Wr+5.3tC)p%V=Xk&QzOڳDb)Ҙ~/.Q>E֗Czot)- ~Pz]Ɇu궼 u}DYp(B .bA燯c6˓]u;o_J*qRV=+MzNCࠁi#R+F%(1a-.G6BEx>@.ƾ Pv! p!b9^~b4p46y7S]P6$ѤZL7hEؿGиSײkm޽ ;6,п^V>fn7o@f۟ҋ8>f1"2pq_ S?FiZ7/U@8h=h+}z:H~umcч kO endstream endobj 2516 0 obj << /Length 1509 /Filter /FlateDecode >> stream xXێ6}߯[)RE],Eri8@Mh+:_)˲v7n&@ș39̅?>[eϒU5^^p=φ`ŏ/p]g.lu34JgY&6l,}dA'hJFVl/|n}Xu = t7it܄FjsH67Ȱ$ YJuw1) $IW$!=R498LنxR6$C0ll-}(jg6y" 㩂uRzbM4)hynBj}qj vN R4x'"Pe0ϱU )Em:z'^`Mji`IUv0G lͱyS1iRJ re u)rɹ4[y A otz)Q%tx"U?<̩KCU1S`& k8ַJ0 [澻/\罀LBD1DAo\mkUIqw q_\Kɸ#;hᯒ{38y)i7)o%vAJЀEu^)tȒM}n+5Unb{$@W\L&tkC첹J$'pS/Ӫ?gM`4ד߂=_*0 endstream endobj 2461 0 obj << /Type /ObjStm /N 100 /First 926 /Length 1422 /Filter /FlateDecode >> stream xYMo7W^(r3$#@@AQC*H}PNH[sN 04KPT]pD]TvQmAőᡚ3g'L.D\4TX.W2!JB&iO9QPԬGfBH 8iw)H.J jP sNURs ^,l*q*X@I4;xМ7y IWsJ ixH9<@2Ij>RK[+}F8FSQ 8fPS# f9 CPMPaM{u.gkdބ8|,^!EJRhx&U@%c[IL؁$bqK :nL-iJA؋HBpdb^jsI,,/o"kQXZu#I.! -sU|ZD,`聀b!ż")a9QCjkiL'6 L"ggsw̨җnǛ?Y {^ܼ]Q8]2'>'F;G7yH½|^obf? %ϡ#]{zbl{{yuUM™WH|ai#[yqO~\zxFJ[_=gHR!TdvZ=R4σ})7$E%] 0'KH uWN2o9M)>χ)@Nc"0%qO+܅]6tYwBI}?xvq{ fݮ>nfx\cXygCr`& ٪5,~mo/wcmumv RAv[M`NFb)I&Q\AzOw" |2zqRh*C|_3:8x=&G/SҀ\s(!y99V?%pH(N@ݑ@Q 2nqvF>0f Y~rlnWng#:}`E!;v8$7tcƒ㜄2o}DPxc&oW.'1M0Yhhx8Wz!&hD8pq($QDhHT\~ endstream endobj 2522 0 obj << /Length 1729 /Filter /FlateDecode >> stream xYK62R=M@"Ch^+d_!g(Q]'E A,I y|{ yY"-\/pGt6O7WE u[lMV7y-ovVliad+\x÷Uʗ{k淫7?Q8Iy"]/qAa2]WmYwS`N¡k' (8P]UFN j; ZKsdxb+f\]ɛ.xu;$Ȑf@ۧ\1cL~0Sx:̙)Y3%h&I2QF%!U7cX1-72*0֤CE+Up~8cBXBr|+S?J c-rjBE"K<lY`;Iw%/2|{PeЪjz7 ų{.)W, Wc^\#@אBN9e{UED$~R[筐5-).ֆ™Jy\H3^@K&YqcAZ?AZ^OS݈$eYakԺ @hT+MV*C,oz: kGyu7tʹyׄb%ϦC"6 4'R؊i.3Y($;|o LGsːi^=xh9F)1U}DѨ&Ό?pql&݌GšeK6z @\CTF5srp$6u9_""XD"y!0'ZP)ԕW]vh[=!=!@0+K5LԃdKn щ,LNG}zPpqnbƠTM3D+Ĥ~#ug8hO_ Fdx9mN_y; endstream endobj 2526 0 obj << /Length 2115 /Filter /FlateDecode >> stream xYY6~_Qo^[>ʵ>dgv$IaA'j[嬏,OOׇ)ծIԃuP)HU mf>7E"~Cw_BFËNMpm9C^(8m$IީҪ-( 8x=S!>Q8|"].6Q KI I"f+-Mյ(VIq Z{}#g( i*g(, bFDNUgz80#&<ᑆw=+M(jI-n=O+0J>үU{oN\~Ӱ TvSK }+壊6)D׫kD"KB n{%ɯz궝ԊUãEDjNU{-i88͘4 5.iIxUK0߳PAg>gʉiD1ӪypW3XW㎃Hm%}o@(@_v HO0EFr>dg8?גM'EQ8 4Wj;;'~%?TS꺢`)£Ys?TŮ- h5odB;BQwE}[v ,Aϫ*9HE$11|w{7moJdԕ$V#w{>1^Q @ bHO18d[*]?Q754=E/i&@/ Za+ zO!΂éB3dAuZ|ppD^utC}n74 b"p&4ǦC[}lz\[wpXl14I ܲj=yʰjհ/ThEw{ ZU|4f՘eޮ[~rˀp:9s~]כUj^W泗|g3GJ8fUdE| ź y%8F 7Rf0ժ|]t]u#.3cJA=qC`R5y2Mj8Ø+p7ۦBx5XAATRx1ɓ~ϸPq'*Y]"5J7 )dъ[^W2gj?\t62|2qF,15cP[+s U %|0ٯ endstream endobj 2530 0 obj << /Length 1343 /Filter /FlateDecode >> stream xXKo6W(evE(9(2Ñ %YlA>"g .C>WzuQ~4ų-=]OJbOJ5CƥUΒZt)Sp3ɿGOE3$lĵJ٥G 6puU*V[4"b1;npl(Y `@ &>_2a0=wg#3rE`pЧ#p^-43VFh3hZN%^ .P)RaƸ/(>w-wᓺQ2إ|tw\tOE@4B^,G.bryQ=iHp-C YSM4.ÃїQIITw9(Ёȑf'웝]+t:++C|crW;ߎ_Mk^mG^'kW|l#Q;W3sI3ncH== ǟN ſ0tW&4W|`|<;̿1؂Fl#:o,\#:]`ѮRm?e5Q(6M(~Jd]a@J`mt{7&.wXbS\w@&Dz-B\鷞q&Z3^هr;ֹ^B||u GlEP endstream endobj 2535 0 obj << /Length 1744 /Filter /FlateDecode >> stream xYKo8W"%!>]lh}s{`,:V#Si~g8,RlbQyr> Y>,7 zwfFθsQ^-~yE3rf+VY͝ Xra.|OFVRcy,_Yv:#qHu?yƺE<ɺ]܉>J4yZKh˩Aixcm-))VB4/=m LeEc ( m.̘9׸O[bI3*1MjO<bRdEhM.G05ZT: C|y5*˺)|=kmkL ԉ*X2ivYC_}ubUE; |`Rk `Klyޞ;/В4blKP98GF(&Ή37@n #UjZsc^[-2#ˑci:,b~+y ʊ8xh9$E`W mad9fM :c%S ʺ&p~dMeYAPEMM[DI br~DS˶ OϜd!-(v!ދs@)ۂ f?yJ={{l/f]C?g>!G1vFTY}Sjb`SRka{w^C`;~S҈7zG endstream endobj 2539 0 obj << /Length 1075 /Filter /FlateDecode >> stream xXK6Б")Y*C_[XH-Tחál+?b7`ÙoP^PǂsΣ\dAV.~aN/4mF9YXe$l},䜓Y(DB~ JijsPه7-v>8h>A54eQ,LҘlAw8$<cq,dhj 涪4,ʓ$hv蝟W[><4)-J{)WK!8( B"0W1d0$#\rƎ[vjc|k]U~pgwy6t$)T҈R&Vfgd*]opG~Ѝ> CLjH%D[F8; [4\V/Da9Ȕ}E/4鼘Xڱa [Kda2\L VNn];vտ#GSM&6l fȤ*|6>ag9,X~f$6A<#<ٞB> stream xYݏFKA:( ,VM?UJ.y؃,b}wi`vfw>-`F٢\-Wy8]^} c)gS5|k81B'k"kÁZUw`wj8n^Uهfr~Ε#qn,2{K{[+u6%~`,#iVF+zѻ->JE;`*M]ETt7g2W+$0B3_wC zKn(Dgf;,[N% C$p~ Sʢ*e>EBԵe޻'e  GD|׼L[wS`p%[s U/#5?| lM`sGX٩)o,,oŐQ CsTS!>ٌ);+Yn^񐳩ߏUGqlt4e47\(z8.VԢL ؇vo|`h8^̆f‚{ٳj#s!ݓo5-12&vډZ3 \9ߡ%H,x7tƼy1` 'fP{B=!0go,iۣK]Z(J88K^alWaՒ:z䙍d]O> stream xXo6~_a%20i~Ҁ=tZt!Ai[$$.w;r*'inA"}ߝ$f1YϖiY1ׯ.˅ $\]|2g"ʸfjWjoi0oiZn}-ayꗋW3$yq(uBQ1[Y$Ҍ HXd\Yqme $CfUHj'nMoܞئmP~_HVZA4ztXᙝkoCPZNY^p2mS{B$7U-y2X*{\]U2+"mO J,#ꡓ| ܹۓ[ QH]BwGZf$V33h*/D;-] fieg }dHڊU#rp<B"Q*X]%QRg lIוPx43IcETyc$[j2mkpX ݴK֪۷Jv [v^iUzRV~]S򩫝ˡ2'8Z0ItP6!zF-e 3>ם>I{)n Doe MhpeH)@YFFX)D ogiNvo;{oCKE G?e߼\-W͙>$74%< fYy<\gq {޹Pf"v&w$0|8(BCd <.)$+K^;)5I##~zbO0o+m8];$<6,ud3 J l`C }yp;Xx]v"~@ lقh,\4N{L<ɲc(QυSz2{>p +3JR鮲@enC{}Ә};N 3_x IjК}rqz3MSr(wGjR$|a)ҢWUqv"9q8 3%u+ 2-hն<[z+^~[뗖4zSۊ9:3$8,@OAhe-$-ZGHYyoQB31*Jt?R2!(ic8,uTP_'2.ҨA < Lq!FI .o ձ_>г=wpg<ײmQţWP3tDi_& endstream endobj 2554 0 obj << /Length 1439 /Filter /FlateDecode >> stream xXK60r) T=([.CW`bKɁY4( %M`"pf(~dLq/x:ɶ']՗9 ^Oɯd"XojO.؋^,mqsZVzC/fA  )HV_FP%D#x0 ]U5 R3Ǚ5( [iW^ppU93V7ZD g~Ds qZ04VkF8M{w9M9 $-5;^fn5$t#w[ 4`Ae48Mc&>"dg9xI}Ci{+ ՌdDQ%irLC*%MΖ2I⺕BMў0p`k̴ix4QIxΖ!nS㼀Rd`ՖnX7qpa2ъx' ZDU -dpd-)_T v@|2boۨr $hP9-F)x$&3&F4]մZ*Fj-Wq$lM j%Bơ:8@_ cͬ%Xv  #Wv6apv s(nA {Lt%5z>ӄH:RÜH r=R٫=Vic#7:"ޤZxv!koګ>aD=xG>Z;Y}gM.:{Qv3`4T9Juӡu=N @㕢yg,^/|#8stFUԕZ=Wc &ϩ*[chOM+z{i54 U4e!sZJ#Et!fWg,hQ+,LǟrimnSdnUK<-@yBvy7 JuYƅ6G'$e~ Osыl n_ӫ=0eiX:tvQ@輣8$moInʽ`㰅Uʥk-ap Y;ŷ }m Xh<d>lDd>+= 8jJǝ=XDG ~}?%3Ε_$ptKH?vz{g+Q/Ǫ:茼f1l!<惁^F.}"q&p$bwsRP_/4K{e<-|޿+hwh:"B~Ι endstream endobj 2558 0 obj << /Length 1786 /Filter /FlateDecode >> stream xYo6~_@{ҴȰA>0bO,ɢ yM}<2Ć?g'sϳ~4Ye'n-r!:?/O~|Ƕ™,ﻮ䖝oJ<MgWחp'e̝;|{qŲ3pgSG9NdE0- `˪WHΜqm.^5Նk cD]'~O "_ua4bGS#g t 䥨6P`}  Ncr7 A躽]d7w(iD͓c 3dQi׫m7/h[a"Nb4fɊ2A:-APc:_Uq0iw0W<)Q:/*j͑;6f,3W"˵ձ!R_tmmBGv/|>w-BX p5e}QwֹwTl B{{l605[ƩpziIA ~T`IC ʦLĹXoaVSA+p=i#6MAI4YS%ڜNU.YT;EAMϡUqr5V)mL e2<(+rۡk fy27"M )yxie{^Νzh%!0T "ݥE&7G2@)wUά:KJR+q":} L ,dNkv'L#pRcKl// kYVܤ[Af bHy𘞤,t(f7*Ǖ7$+KH*ٍS Ի;/b.ꅫkd (x\cIs4mw)r#{"cNBSWlu^I}@h;:_5E\dSi,WDD^Ј*+Ӟ{([`_~a#VzyGȅЧC2vqv~oB+A=PjxSf<̰yFmJBIE6yĆyNM By,cQm˒j.@i>\_\Z*~ESI2Iw@b@J!?¹* 2d;\՜iJ'⃞9d<{%] n)!ۖ}쏽s4= endstream endobj 2562 0 obj << /Length 1048 /Filter /FlateDecode >> stream x_o6) 8RliZd!Ffl52eR$%~r7N5J*9OIxaϋ4Ot%lOsR̲r8R&CБm[S5sd0,vZsѥsb]BHmʍ5g!n@Fv{t$ {Ɠu(`Vڛ:cݫ7q#v#uuleTҘ!.R#~ ɭH3^;M4OGR8{EkwJ\Gj ; tіUKPl]Ue[=~! jgA*jc.>E5Z")BѢkA^ʵ*KRd6!odKPdqPa35"&3S)r5{4;6f,e4[-,NWn\zW$sil-Y̯TφR!cfl2F(!'[BA z+S @f ݯ֕O;'\ǒ % ^Jfݯ1=SQ,=0X<,Er)/)%quH_xZ apˮ$X9Zi v>U l ;$K3CSЮuYq4@{ŞyIk|οky}O$3m!N&֡Y?~(GUyu*{cNT;@G@.k h #Lt9Dp4E> XE,J3{-]ҵ_u^wѰ5xpuyuyh'Om3k[K9I> stream xWIo6W=Q@(QzM5ыgL;dʥ_EY3s0{+)`A$q<`Ej<;~[Bqj,LT2TGq/˔4RbKy5\-߰HuBNpF;bI84X)l%usF}v#q5Ď;/>Sm`Bc 3 H0A٠,f19lG"pI4zٹ̟nPl^)5pڶR%du/f?EH%ZrFGZL ^uFxzã+xZ']z~8m80,њ{' A;> stream x͘Mk$7+tL.C,%eC2v}jvO|0Vk.J!IJ!+IxNh/?n:LA :Cii|O0H4yJ]L d(@ *5`hbI86 w1%5Ȫx FkA0Wnf8_`tCN2 3\13˹)@yбQrie22&˽?l@RCÄ?:J|^Ơ+Z I V~CcPШ Oe @eM9![>hYG0"pi%Ṽ*%O]ܺbYr Ma)QW,@b  鲔 R@-ރqyO둂]iͣP(Dj U;Pgp 2" z1!djSq7A8 cXjPh8:Vȍa˯a@P}|>yM0EY4ȳo7(zc&&F?OͷpFWcӘ-d}pL+ q"úxeVLO<'rx>XhXGry:oeyNѰJS9$K$:CS*OҼ\! -2DPɥv ̥>Hr%k>еNm]( )6yVRrlAnzيC> stream xYKo6W,z)zpܦHF-kZiKi&3VuM pǍʽUnebʳf_^,瀠3|ym|ͽ_mƪ6Z\} Pd?(ohེSFՅZ;AǞͯ~ {Aơ3~f$\?A&>? zDZwiJ)rچCPNm YT7ժf {5tNsӀ4fnFډ@\_+Z9uwA0R4IoY(u9ha[nǁݒWz9t>K]Cc~.{olxb8ϵh?ϮK'x0nMH3-nNٵp1dw FbWZCgg@>; dZ=Zhe KUW)gid/+jl5g^"ݱ Mz?@ 1ɑ N.5{f|K6G!IuWZϒ!{ ²u<(&cJ N ?lH)Q祼\V"1͍S֯KD`%bGO*0qgn^(rOaDhaET, s6@;nэo-*e0q{ >:md龄dD>GB“~Z^j/+2ƞ2q6+m͛XZag]/;7?l>6<__w:%?_s8Sc畖ClKlvP&6YH8> 3)7==`Sg`R 8{RR;wT JLϦNnu1k%A5 nK[O@ -'?Do$T[AS4(V<ޫ]/-yKk3Ns?)Fy).eE$ swv(P)}KGch@9eGl -sF6fMF"_vtMx9 endstream endobj 2578 0 obj << /Length 1549 /Filter /FlateDecode >> stream xY_o6ϧ0$&J-V4E,k恱iG-:㑒hSI0)xwd(l4G4f<7g~V#Z|xw ]a򷫳/lhju]oĶji!YJs9)go=$yrHy]XŠn󈥜ˣ$qMPr8,At&R58O]9o0NFE,K14!Iҧ]|͐)bQ=~g!_58Ol^-QC mG(N^7I%UvBrX>!DS>dHa㓕k -Z6DB_nj;ii5qj:9&ydSeM, @$ ٗqb(8R"NU(&`Bu@o%_F\SMw4`Lܙ`|QR&1JZ.+~4<͝hLwRL^gc&P6`4/}lvql#JU|Zø)/SgWȩ$-ʪ9`|3m&`wX)ح4KMmzI٭)lvOaZi+rTuf+_h!C ;@ @>=O^d:T*b O"}7(uwpiu<B $JAGX_S 3A@Vxcr_ %EcP #b6(fH#3;wkI\dL٭ds=T*a1nyTrTؠ:\8ECOJ^=n*.8-5Fzkm6 R vN7 3& rKWc/.R g{L8Ӣ2?iGHExSlԍz Γ4.hrv s ʢkӜ{k c-nYS~CgWuɮ-;pQ q"I,ڬ.[eap_ = =#yl}̃p^V[.pOS ,!p>0¹ Op-8ōP<џnhZ_C=(p*Zn}6 cP1r"^xAd퓞GaΖ%ьMh8Za%iW!lM|$9E#֘6'|> stream xڥYݏ6_a%2҉mHn͡&\ȒJuPda057!%V!UqI*BK5 >J0W1MW" 0Xczd+8~?)Bh+Kǟ_8F7*cȂlɒ@ ).8ɻcdę5O $D$Vâ80gIIEGo*TBU8NHς(Ha==قXyց_N=KJS$mE9 [RH*y͢p`9ݏYd~7N0(yJvݗf$aQ<((ZA.dz(q 9ɝM*t1c٩.9ase[חm7e}},eٹ:=p8^{gv-43Q0TXXu7'vSczZwQfob{?p+kng}]o:"K"inh%Ѱΰ{܇IoڎucuYKy7o۵BI MH1`cU2>Rcԡ3("q!dfu!ѱj#XMns8Hen.^~ؑݪQ̥LOo?ȬG*$aPhaB\"c0qE32x{ '&7=cy6>pC4o5:,  d\Z40.du}cS׉> stream xYo6 /acq; CM~Pl]ίv)>kImEXI")[V \׊pGʫ ^t4 t{tW̶";bnj.G)[!צFpmzo/NHQbm:m۬_o>z!Gc,&,zd98"Q[3q kzqyyY22FD%m78/x]K6k1VQP'l67Du*8Ȃ[(󦕤 j1TD:[$mC_iJ+0cP t`<9 A~2nl׷"}E3w1⵽J#`u8k9 |܉B"PŬ0ZICF4i kY].Ӛ8K]cNDTDlSҨjS9(Ad`ԁcup_gd-Tr45E#r^%(Q5 M*ROCg&<Hþ3]rbVhaƑ0@)pt/65l`N;jN-dյZfu?c?OLm}{n"}fV Ez=-wK}TE:F)~@Rrs{lПgM3$ǻCBt}6qSxKF s~VÊ}A8)Br|ͼeM2`)X| Q,ӳ+(W 52}(b0㪨O. y${Ոy|{b DU>t cHj}}žŻh`qcO (zB» zƩ+񬝖t[k:}q↨D_7j )TT+ 1*lԡ߅Xpg< s@d~#/e}pi3^ބ˳퓇E EdRJW?Ҭ ~9@j6^Ԛ(&Zf*ImEle8՜}]qFSC`tmܶ`DȡګTfMUS5g>w-7Σz 1Nm`D>d}Y;cpmn`W w=-g83([<(k4jErɔ.<&C:mxKJ o =¶VA*m})}MOo_q%5vY-R'$>a:z/H(DN#uBؐDSɃ9 %z{i|=1lV"ڌ'{ LE%7`Z, :vs(va"L![ Og: Q $ル0pu4{qwe"v0M  0rKB`Ykܤ@Hg Ə|n1\8;{/+=pE͔POdegzy k,ԙ$Ur"7H#FbsIZmd [*jKeˀ5+!3>$, {u$oT]e*=Tgp.[p~8G,10(6j>aQ6EI{a^I^St.Fǚ2_LjE%ڶ endstream endobj 2595 0 obj << /Length 1483 /Filter /FlateDecode >> stream xXKoFWBoRA[EJb@*w'YRKR,m-1<7qϛI,L'UjBwggFmM<י3o2_da^J_M0k 2>ċ\+L_;?|.'^OХDM(-!Z99j[9G0QQ8Ҙ-n$EF5HS+% 1Y(nEtI(6-FTZXk‚ݮk}p#wLº"Uc=fk.`q:{]RYmJv"?Kֲ74w7A-`1K  [ri*>Q^@$m0**}Yߠ"˲;Zn=@"J1ϊK 7& bn讄RѡxQ+^sk*Agձ7vkoR:ox&)OB2qlIuM!YQ/}~b Qi̒A~=] pZwj:T.A}(^  \+ks߳JI9qD1 q$ %JJ`ʒ0ZGbɩg :|0@}VBڎך$k,#/ZDLh/ w%$3Nh^ү>,0x<`8{8,Vi1p-Pˠ1Ri8X*k X Eq}`UT2NFu\ge 34/{"젞6i1A累Ovw䌑eCZjnq#S-]CD~5OƤǍ|Ȁv֮"FCHsQ<|+9iTe!W Kk(8 N7]˲83[BoE{-nZҴmesL~P\)F”`P`?%q~] m 29%WLVPaUR*6JGJp۽=l83Bkc.=F@2r m5=)zfEղ/2 xv 2F^{˜ i㏞qB{tmwyݼӭZUu_3_)k8ޗY,*O' e*G{^FG?oY%{e@Hs(O ' endstream endobj 2599 0 obj << /Length 1220 /Filter /FlateDecode >> stream xXKo6W"UÒ[.شH|srPd:VQ^#;CGdl"f84<ܳ pabeO6~ㄓNOO;Z+k>]+ %?NF췿? 2a;~#}l3'C?qHu:ۏY^T6g82!ߢ:pg.j- ṖǾLaYvy@vTNkWi6e,jqzE Ƽ3|'9h8E!7Ԙxaz ; .MqӡM(E)6ض֘L#nP7օ3E3JB8 bq""-DjGK--)~fu%uk5i:M39#dUMkyt;匚d&ONβ-2DvvXVΦ%dVp:4NHy;eΉI|!GR ~)d UJo`P=év$_pF_IF>\ގ} Lbmw-R$4{9ܭU^Ӭ5CGV%ZSJq"sh8 ]Yc ?ѼgsS;N_U lZ*2 , ɨTQPI3"v}ZeSY +dcv-r ϲmY|M[AJ_YRR;G (*`EpUuS;2 HXmU™:]v|\2}yHTRd1Bi*E*O婉)$0?*ErncM[*`REWcz .aLWF)bczĈcM .Kg*#HYJ(ƫѕC 2jIC9d:!E)VN]]3}> stream xXYoF~[(dxMZ[AQFTw.^ #Iv,}˃?=+ C72ky}⑴^[<8=󓗯=7rߚ_ MWօjvgNv̉7,8WRϜ cώ8j~]X~zDdG̜8 lEvw۽0f d fSAE <\*}#DxCy_^M9դetR<-&ݠ  s3<b|˪\F)E7A["Q#tv @剤LgG ⿊E@a۪,H) "9M0ż7T TBYĴY4^ zlnfFxMŻ6zli "s@d3Dk,YAY[r3XySA!`A٪\t́Qם'(U`TMq(tK9yII(uW+2eFJ0U5O껝*Mwt0_ 0ϵT[S G 0|\ c.q Z:IGtR뵾Cv5AgWݧpLxd٩k ӻZJR/i騭^j'i3-ȾVr;]dK+Ϡf8H0Ab N}l0%,Q./K~d`Yr"rTx2sh6A}8uap} K0"Y4 if<`@.-; YVusJMFOTz"*$%d"xlA&Y~(ݑʉL 'M! [1xy[K9h'%<"Cz .;#|''@ `*p0ؤ&CD_J 73Dm Q|;dlr!I$߹/U}Uw% zA7ʭ08uqY+,\ޒhk>u C]N_^?#y>^y e0('|1G$m12A$ !4EdvdBr2,w/(>}Y|1A5)V(| zWj+Ў~$ʅ;*Aa %f@ߵ6xf'T{]>>)6?}: endstream endobj 2609 0 obj << /Length 1517 /Filter /FlateDecode >> stream xXKo6W\ R6@v)H@ki/8ίό)EZ ÀǼ9q*p VyX_moV4,4tzi lݭ.{~Ԣ]{qK>kъk/4`i3G?YWD00X YW~4ҭo|\!S7ʋ2. o>SJC2y+ 3O٫uq- 1@MU]퍬gy/+*bA4$+CAT65X#jeSxa'=B(IeӶB4&18z ;ڰ5UEdY!pٶ \͹yR 2,[VY\WEqƬ({Dd`W'Z-v2B6-!S)Te)8H i6Rnjonϕ%Ӵr՟(x&+vj k:fw}2=v/'BwmL8(R)6 W#"*y[ߎVէ|6'1r><(#[p|OY,u?cj?AivK#e(g{30A 9~2&񍗺3/hHu,J锢q1;ΖzucP#- 2B34X+ !1( 0GlG 'TCO\'QwN_".h搳0笩M{Ǻ QA/ t dҷxQ)JƖe; (`, ieė|Ɠa<芜uu% CMG[!])"3)j)J-*3KOMQU`QK) h6G_57NEycwύŃX_>b L@ڳ< OF|ߟ;Pi̱ e&^Kx6zܶg^SM:{n[tAHYvv_l74u /Qrz9ۯMtp앆R훮DA =0vʒԧxo:')p+q}'QM _12Cke%' D$*^teK}&>TpdtJٌ_^V=k w6@a4\A =aӇt)v @7ʨN9;e J?7pC!TR9&덢 &pZ%`?ޡz_`W#'Ö'A+ `A#Qk,5Svh%2I[5Lӧ&?%WDt&Q9X^)ei1 յ> stream xXYoF~[) dy Ї&mHCJZ[ (R7k)&h({εͮoyga.<o-n\<Bg@lu8|]zKZ Y֕|NvtDQl7F/ cώdzW8rHyO,@=."#.s7 ^8qM[ BufL-',M+*!׼(9cku2b}&J$P </椁eğ*rS~쳎 &Qy,ڝ9T*, Od)] *VOȋYΑNsèꆿZ2MT]s,_7u"trN iX5.ozwvJ'(vt&- _0-E?/|t| e#տoͫ@p{>I&&!,y[|"||~m^ayMJw `bU Zj]NABM@j4U׍D*Fˋ[}p^Pa\mNF>p9|J\|CW-ڜAE[!D F$Bs'=Ga:Ɓ ™O"4z&ЦcE fУb~d@*2:Q:W#}M#78]n{uy i 4tV&n pjϘT5TW܉VJ=32XJkA뎊+F, 6@#,%й)!zJzpK˥g2/g=z[ʤ T]Ksx-(T$cHPeS|bpғj7^ jl?:qjj ȧ#;PN-پ Y6gtd03.MBw>q9ٔl[DnF'Lv59ǰr'm=%'7liW@vAu(kUy Z=Ef>&&\L~sr= %[4 =âsH؜c muL(H@K7 {wקunRPf@_ʣu v|(KOcqޣm!> 'OnHJ&ׂ?z endstream endobj 2619 0 obj << /Length 2339 /Filter /FlateDecode >> stream xYKsܸWLNl א$U׮R.#iā4r)V/rrR9lJģn|jMzY Z~|DAw$_J^gjus7Vu[}v^5 Iv(v.ܙTYFž7|f34%X+z>'%i0bR/hIض6hmiЈs4oVnx?[Uy[Z9_y`*H]+ꓱg?vS[l ŏ ?;vvPϹRcv<%kxkMr6$)R]PK%$eC:iZDp$0ۚEUC|\xQj"7<l^6M?g9tm5CG/b<7Aol-nptR7'\7ܯZՒ%]$ienf)r`̺ԩ~Ib@q8`*њ7>Қ~eڮaY2T dDl1ۢO&|u:\;ƹA&ѷݰ;" R"'*{9`KWD[򵫜쀕|[ +*;B73nZzu/-@E|kHu˥.Kx9-Gh(V >"V=g{qn!6F3DRe?f)`cw -nG~j)w21al.6YSYC@8bz0w X9'rTPI*֠f!Ijc!h } J;/u gқoi@X"s^`F ^7 c݃&r=\ftInUSD{KS:K $=D\w\Ahg~_xg2*Tp'~8F).0 N)w\ǣ<ٟcttm$E);́TrW>6z?$-֣Xp}IڊR[4 _|eFuֿL'9<7 mKL_q)hD ,b^ EЋkX@D 2w\Gl gX@J <@hc}vnsά)\*t9O$"I:8?nF*IW8mF]H[ikl-/:5 =m- D'*o)}VewRQ^GC-Knck7k?A,-=~oHd,f6gc|lC734YKhYa@\"&c+^&3X)m~(^Bfml?8[dDFi;ykL_nju= Dwڏp}_lPt]?74%\Q@)kX-hit6s0,~8#L1uN%# L= endstream endobj 2623 0 obj << /Length 2095 /Filter /FlateDecode >> stream xYK6W450R~ȡǓ,AŠv+QK bq.T*"'X, EWܽ U}Z_sѝp^_}S,+"X7ӭy{-ҍ_/8NFnm)n$߯~\20J<0^yQL*޾m{-ӯI87;~a 7 +2kEC_MkoWu0w5ۛ +"7ODDCfwY^ Tfvnz[ +lv-eցSN]^ɞFaZx) #/yɶ|_ :NQh45R49Le%taWбW(%pg#x nO1|4@XO|Ϝ r44B8.淿a/̭;l'ڊ7xi/>(>Pr.*궄⌆Hع 7]cWHEÌ!`z^wDZ/.nl4֝Ll> Q]z"p>`$v{q°{$^CKOTE,XEf }THixHk֭PQ?ve&dwn\q +80xfUuޘԟOOnl6ɕ8/X ;`i1)ˬyS*ۜ%ɡ"BBga5=#Y~YIbYvOgwMy$7 .m%e?7f31{03ϽbJy-}D WKT&2R5;|-{8@0bu^`iz|usO"`bd_33(L]Ms,j^(#@%cEnm] RmGMKZ9fPD|3j#+TQF[ X~C뿦_ތƭ>IA)w]\\-j`* >GYp$F.gq~8scPf-3>PjVbR釓J?pE9.pG; Ӆ LL l{j%Έ<%5 *+ 3ѽƧ[VZ)g |!J0:Dl=|Ӄc\Is=}pjwPZ>7X}s_oYw]Όc>6ETyybf#F$0ҐM̢%RQ͠y[ i5NA3k e/N# R Q;ZbwsX8JnH Yzqc|q3 ZO,ZsVԛ  ]?J酚;ab@7Ɇf>{y" mɹ*Kf07Qr:RR@ |& hh@b^iYt@3xPC[rP¯K5RL"R=71M N 6JCϤ9P emoNREV޾3750Pr5@=4"t$ hI;_ܵV4lT; go[zޢR$S BVI2 endstream endobj 2627 0 obj << /Length 1863 /Filter /FlateDecode >> stream xڽYYH~_᷀4&\ 8>dsiVm6 n$6Xꪆ\Vbb ]Ad\Z,˙tK \~b]yun^,^A`%e p)sY2ҏ=Z":x pHt8"JB Bp[UuQڞu 9DYueu2c{8ZYBsKf?9.'VZnpD|MS;Ҷ%t^z Rc#AAj{)Z ([ӳjqJ[d#ȉfְ%-*uy{?i* -UUMV&ឬ dUi ɺa'qA8X]W_%U9yE 笄|eȤ$nQN5Zׅ@?`qcu>IX^ph 'D)+[@P}-8@'qT1$p,4L,&96:8Nxoj $1SEH|M5{/!b(ⰳH'3LibK͐(2KBJdrkZ[*kvtAs & =ī}*Ͱ | [}To6xjn#uoHu9rMyq[6SO؏B-;2+UN-(vPs X$?]zbdx9AA RUwo͆ř*|9,CI1o3StTQK Ÿ́{ N Er\oA Ȑ{SRhIa4_@;e8{J\mX pu\oHvk%ߛ6t~cBmU'N}_5)r(4I']B5%LXSe|4'ålu99J d7Ew5,*t׺2chѦDs)d&a6M:Nik:ˋ۔3mʋFl^}.JvyVũ}̦iwd #u5X X& d, 7ָ<` C q Dh} h̔ 4rlG)z=9u\K,E1tU# %Nw2Q>! dRR َrS^nDqcDQ!WJOt`BWp?'t# Qޡ Ǯ?k(-is\Y3cD _"~Uʀ@Μ Qli*s\*I*ݓM勱@SKW> stream xXKs6WprfB >!֩:NL(R壎.HJ8g,p0˃?f%Jwg[/ϘYBgBXs/ar3>j짙ܷ^8Aù:'¥ڨZZ8~Ąg xr)|+Õ}˜,$]npDۭ\U_-fߠ, q&c~SmV~k6cn"3iM\Um߂|zcyOx'8sx8Y7w)Ti3+)J nl94&Z/rMEihiDZVHn↾6]yU#ڊ~Y$3uq蹺(+8a0 іYoX]]C̊B8v.zϟ.i뺴şa􆦕کٷYjW%Bc+UEѴCEĶfTڥ@oK,Q6SDмrK+W0hWkھB m.ZՃ0 q>|={l}TuT˖J 2aZ_\;ZmA4|B++5G֛?ځQ8tǏ5&=Os࿇ЍD\X^z&#ZYG CL8scp 77/lUHV&-gn'Pч&6*BH8qgcGq/b= 8tM} 㙺ڔ UOfA0p@34_4 p=OF"nO}-ׅ2 -1Xxdn)@{j:Ґ5"^wٚŜP."%ˉ Q>c!z{cU.>78jkNV^%eu;L;VL^7v쮥K'M{Q61EI6zڮ.r[}hiY,1l_yW]E C7CWZU6igYe CG&ɶGz ,2llMJOm2ʷbVĶSwmO1Rߌ&v諕06(P'3Lh X~>rƐ!z\ Ӯ z)[o}0 =H% (yQ̡"S˭h-P9p딧&bMccO R5Mn"X {J5qHuN4f"zvi6ҜV~w&Mҩ?ڻ=4n:Yo3?VŲ 3UjΦӊ SGtFWXm. \'0Cn&%D֊HTE0LDɮv%52 IDaYÔDNᮂ[_~285HDK;]`zvt!3"@GN*Wn_{k{A ahh\8n4p "<zq_ ԋu|R#9ET*[tD=w?%sժ T/ara$њf$ {ZOK ᦆT.kb@{4G=y8#ST' ;Knu(><TC=[ͨ[8F``} 8N*0At73S rRol@jE8[ͯ+}T.23]_la?Nɲé!*-iYzUgu#3iJ}`L`TwꬃUݺ_.]> stream xYMo#7 W^dQ%"b7pA԰)6dQlf< Iԓ8\pQrr[QI6CD1 "57 9 Bqu:x :4S-.W(@#JeGQ̙q&-! \n]xpWk`Hmΐ0< rF[ C0chFBa-W$N* 3<Hv0~e5%7-Z[1 rc0| sI`,Y0_-p[lĩر)Xı$4b 0VBS*Ť72T`'Y U?SyS {Е,L)Gs0[Yj͔HB*&N"Jsl#eIll!LP&Ishś `PQyVЀ%tidnc!c!}`{ Q_"Xl6-ڔmF!L Wmfb)h]bS 6G7?5OHa:,?,ןtr_xo01mFP3[-mG{4,ffvnn]ڀH& m@Yfsh\Ӓ [[hj>r7g4~7_4ٜ2P>2{zC>smOnbfjo-$M[&zIF6'YnKFl\|fX}, (ΥXb>7P}lrJ>;Thc#vv0>v3UpҨ4*= X]ADC|a!`\'j8avil^î~zO/a7 q1\=n<o]&Rެύ?BꞺ->a,b70i'h` j2rK%5GABڇby 4=`SB@&@Ҁo:l#;ٶNW"4JT2$`Z|±Hcc0mD)uLVDҧV3=#~gBb7N Nu)40ɐN8P8*I0 rv~ endstream endobj 2636 0 obj << /Length 1492 /Filter /FlateDecode >> stream xYKoFW 0Y.#.PpusrEW">3;TbHEܝ7Ow,۝z/gl GWI9-cQκޤFUs}+~;@Z­ZJ^$kpaϋLyT)h{3;.څq? bst7eYM*'/澰@Ze shNl/p|M5̈f gB822=фޘ5zgORY,zya t.Akw;mJ]MGxlW10ؖQwo`d^dovW?9 &@6hV%[.^ y[n:VUiHxDNCwj̤LV  ϦU+k^ Ữw@%f҃P/8”*Vr/d~5;c3;3;wjɹDixs%I>oYZ !z`·.Vr?>bHzܛ;Z9dQM%0q wd 5߰8`~V{Y'ƛp=YX7&`D{0/Os`E!:>˶XwAeunW7;UVr(ע c[p0 jy?]W@[@{8Ҁnnu^Oƿd~9}b  U78m 8GVj}8b)̐ݡ#@yDFaUڤөnx iˆ0htӝ"`0n;-YU֬&]p^d*%X/A缢[Mzz%~|G觛e`VRVb%-hqRۼRi7mAd Q.U؝B6L49yh|wD4QN}/Wut=ߨLi-[ ]|{I9i':<;aq{Mޔl6&]9ʧzq!%]?؏Mwc i^tڮ?֟<5~4W* *ϚB?9 endstream endobj 2643 0 obj << /Length 1774 /Filter /FlateDecode >> stream x]o6=K"DI{HȰ~  ihbJIɲ_;I\9mZP }*G!y8q0Or{]w9G&8@\ y8ujt!~ʸ$c4$'ohYgOTPߎtr&Uf @o)lVT yg⌥hڀf̴eKoOu!߅J #|#;9q fBABTx~X( uAQ]dkRDxf>gvBll鴲iBA'8 zWҐWjɾ*(+6eY-VF~\/h2BfpMp;yAq 5G`O*w +Nj Z?cᷦX4B$II,AOL<ϊ8V"[W](+W] r*]IQT %o]:[aÁIq/J5<(r & {UyR1u3ưPD3`:eZH㉚F[.+C|)ӈzɆL=!\sg5.#. c* ӰT p0X\ 2ǃA^g{T3cbA}]~ =*ك/Ixh 0Pv]tLŇz,&hѴ_feZD0%;%?|`o)< ڦwF{N#5&Ū[%:jWTy)yM򬬺]G[nE5ȕz.3bg wġ,~pM+$Y ƩY[! %i$!<nPP0lM) :vm 9" hJ92%`,6%8P'Ć(_G rӖ B"iavoY6@ +M0x)F~"94}Q#R'H@;C'|-' ,{wİy-*({M]5:N/acAZ6Iin*Y;OjMvF3q b?B9=G)^u´|~a&Q+n' !iȳmTMm5*רfJ8j2RgKKa»Sdܕ!r`m$l9 )uE43֘vc8G,.BZ';qeB endstream endobj 2648 0 obj << /Length 1753 /Filter /FlateDecode >> stream xYKoFWLOLC'& (@k);3Kʡrwv3lEd-5#/\$ř%g n~;Bc@y:{eFVd/VwãVV{uu]-|k>^č(N`ջ78G ҅vM c閡gڮG҅c鸺/׹0Ve%f, giZN}/MjZ7-mF&wYLO4KgHsͷ$=kc|žϺ\~ pei,ߚճd,ol~0MGp\g'4ñE^WXgKi-~~?B -qJRJd=-tu&9睢"n HgK"o  Q-23mWKOޅwAZNjni0 BdA@qMҚ-9KheU\^ 3_L 4.cc#32h5M] _pRۗE2 uP*Us$7UnF1@0(Bewm!FBku֞5 _BpZ$T|o\kPl}nrS@&5ƎE$R0K)6bOi-z0hZ=P˜t}VjؽKfa2**cR)^| y7Ǡh D'*^d@;  V3(Z"( JY!qGœb9glFwCRYIZ:p_c㯉*4-JQ]J b@ƉqpS[iŒlƘ5fb+j&uW\rmi)] NSbsmR|˲T9g qpł X0_aMEbRWfaJVu%Y5/vԆHLźcNʠ^C8muq=)Ukh&F#qn,}4jJ~ۂw4]U6vKrnd;&ǟ0^#t۫޿v[&^ɞLa̓D2ߡl"|[6.ǔ+.nx`R6^y[ Ө \;p>:$]Jpv^t_l9e1(+*pxa!G³q s8l.A> stream x]o6=b a֡ Y=Ūr|Ͳ/iHrlInY!'ERX'VJˣlU|mVL0 ˳J^buܮ^9S ɞ(o~F S vTľ7~dA!GeJvIy"H 8tItrS)uZ@f+7|BuȜړhq7DsNTfm~XA+cIHؼ[/ҏ$E(L,#ȼl傟E,ȼ È|Z1xDj5JċlGcx|GJMFll8w"a3 n&cg#̙XWql5Tn-=( ؟i wgܭ11#G:Ae߻}t҇l[ik8X:e'M8̞B˲m{틨S4Uχ#-ىIR4m+bk'UH<|6,O{NJk:+z,y1qC!L\9.8%zUm3k9 8em۴ (wa ty@o-of~`(ȁ 2|rSp.^Nn%"(38GelRHT;*so2;ƥ@Iiɦ: ox̆sU_2 X=gwhǪ,d= #:78 Y,-$T+[|i!}ɐ+4,Il!:l*=`Z˚ lX9Tdl;B:Ii .QC75!;uzt^v"gwLB뱰'|Vt_ <9#sx%ȐosN (SqNϦMҫ]Lq})bps H$V9$9Άa8M"Kv)ITs@ȎWVnuUoM`4)q/CȢ38*aB'@v/i7A >(RL'+`뻾e)JI4ՒMo P.xe}猱 _ͱN'`9^ݦywt(@i(Ҵ>U7d3Mpil4BX{]jYju@ύ\ufD脣*I7HA[xEJ# yr gS}ɫtUD,кDod_MrF(}% M$ۆV4殰e%n83#UhvD~`J;\נ#`F_oGih[rTj>Xh{$_9AV(Q H endstream endobj 2656 0 obj << /Length 2241 /Filter /FlateDecode >> stream x]s۸=B+5c1!nڙ4Itz6$<@$$8v1/~xl]`w5z CzvP}Z?_w^#߭w8梱R/WazUޛ~ GyZ֙\6 ^{z߯gƛw2]~HˆTmZ $[OiYܤ^kL=I AC0*7aRL(2@{DH}]nv迮]^ZҌK<[䰗6+ _$"dOƲ;+'ky% voٰ5-,L˯\NKIhC{LQm 98w˱ vͻtx뽓Yq8O\?XEZT!N_o"#xv5wfg qjY%0?/q&([yIz47 Q7ˮx%89Se)3Jf6( D!D0PHb! BB&IPG.6-;CoUt}峰@)2eqU8~!9#tU8J OԠ\"g LՙvvtL" 1"{uUhCoRsZska(y"!:>XB1j!Xl܃VEFuu3ktYs{>ȻѮ0^aiDMA\ LQJ9 db"mCMV.u:ew(hrNΝKe_ :`q00_`saytm~Y`xc&:I<"EtIYI%m ڦV3iES2B \}'/i$;T%ȞYmثj[ڰ"[2Sc\^^ V7qu!A?wMq%m K۳Bqm(ܶ .E5Y-'Cc-J<[?9פCǴRGNI G2i,/\GQL[.ڡ^X9W,Dn,xK x2 9%'rB0] ۨaf@`wއ#Uc qVtL\'5d)++ E#PE?|iqIVT^Գ6,xMer u9iCbnOtC0mttĞnM3sB$)U7b' 7d7I 2pۡbbT'k7Lz poL5SC:#k\ ^pf82:|cO~'C.Ľ`l>B}GKêHժOt+>`*I.> @9n 7|܉*=^IVQAV"*Z~ 56ؼ endstream endobj 2660 0 obj << /Length 2045 /Filter /FlateDecode >> stream xYKo8W{[%Q{Hۢ 4Yd^YȒGP%KN{)| /6[ |ɹc ziY@YbK=_UgJ6lԞ$q(ɖ.+a[u)GJҔ:'Yܻ%IeQܟ>շ܁xWypLAdsJl_:,wu1/IjUX=[;J`VdHh$ g|@ҵZ`*fwb)b*u&$mP6/ lDNSC!Ğ2!Ϗ-"J?~JpZ22{`]X/N+ùBTum.$((S{TX7j[ҐfO`ؗduwmhX 2: /]= ;.o>sހHȽ!]垐^/i*6R0O5Ɲ#lE6+,93ʗcqSf쵆[˹j_chhYzͺ/@ @"loOf*")sƛbbCGu,:~$Mpg/A5r}90 _J&+}@X$W lh p= sRHW4I>_#M4 Nڠ,{Jȼ.mVʚ?EY(%YTFRrI%*_o/ endstream endobj 2665 0 obj << /Length 2062 /Filter /FlateDecode >> stream xYYܸ~H[v8&ybws%uť}Z nX,W`ÿ`7Yy87>Q#wwo$w0uWl>:OFQ߹8N?~`­>FW{n,H|' Owx׻a$ _r~]nA=.c/b.B/I(vI:?k]a~U/som!#~AwN;'Yn%Ik~I1XjiGf8F-/C9D?> }g?Uz*[^ق$`; vGk| L|./}[(uAeXOuUn![fIܝyY 3q &w"A_'|ڦf#v$uԹdz$2{TTK[]ጘTK[ܝT7[]-zh[M~'M#*N!T8[a/ M)S4r* T11|!F@xE|8_dį÷cgɓF'7d(&2Q=J=à/0~|/GV-(M`2+1ZSWT%bViUú̬-)uŬYjI6%Iag/96; _SԠ$Aan4Je<$%Ϧm~_պ>qeP Nab-{}>],XO(:*qmOI!߃wr%xDEr,Hu)SZzp.KlO}/Ձ~hޚcŪC k>Qtm`!Τq^ur%~2"DmLI- sZbqq:LKu˯5-><,DiM  'CHG 5 &PVbo~Y,7Lٴ,3.`5wDS, Zf's&FQC VZ85H?{U[uְtzru[lc`!NY|“kN|)mԵ|0p1')mߪXٯ@{M\|v4'*?ӔCJc6jQ3s ` }-k* au |BԞg2w/D[G/RlPb=zӯXRK!ڊL+N")f^S?CCQ^\R:?NYaO0kߋ6V?]٦D၃ oF/]ǿ <݁=[CV endstream endobj 2669 0 obj << /Length 1593 /Filter /FlateDecode >> stream xYo6_G 4}CEt-hAH-zdw#eɖ֠ȃw oŸ7INbu*js33Oh8ϯ~yEu27&Wd.|-ycAea^CK n~E.귳_5#$8C/p\ixAHRw Rˎb|N+ XT|[DkjNLl&)`M$ɢG![K/6R\S0&b/,AKJ[+L`EwP 8b'DZ%ߢ'BXOhʨ5B&r }YXZV_k`@}QLH?.wj/U=&q7SipUUR]Y@7] 2#Сb;,BFXUR3 |$QpW߹:+b\7bP_̰5/.b#ywE l{DzRoWoZNi /Fy#+Ha*/8΁,NLLL AHs9!7k!vh۰V\ΖknUб9JSmxڦ54lWCV4;h:9.N"qkkv^u1~_,7mw\Lj* CJꀑtWHU;D4' + 4"*DkJ#$=Bg j-:@GjЦR~P[_nP+U)5y՛ 2 +jcE@=p4 iZ3' qhE5^)Wa}c莔#UMS o]6%k~/c!0,9%j?hT[@>06ۍ=lL*[؀G\IPBʡ s@m甹ď}@e_ C!eyy-hĪǏJ *I^Ĝn+.;H$=dzyIFsz@8ńT_h0uگǯ:xwusQ{yF^#r~= .sn╕R7k_׉B3Gإ; -ٹPbao2ޓJ{ g8۱#LK^ݔw|^j. uԵz =%gi-?LKQeܓ^q4s- wM#65dN,$z!e%^J\cHCx9~\cȊ˟r"L[ؑ(ڥԩ>?vk;k;L#7p^}敧{6,pzU}0=jK0[X!QZ1^Jo;OHD:\s{ endstream endobj 2673 0 obj << /Length 2138 /Filter /FlateDecode >> stream xYo6_@Jw=l:t5(#ѶVI(iGɒIaDx<wr/X* C/U\v+"|.06O_*σf;)WW{~B0 ڍחDx-BkA;I~͸g=C/h$ HëKP sw [1EnU>^WL`fmݡG:+ϟ*cQy%y+q;W+ވiKj |fy B/o tW,׺*d7-#GF4q'ݺP:X b/':`γa@\V-ђZqCjwpr`qFOB(ёZ4M &e-[jDU] ,t$f$'vx)x'opn=ZʃFJ^@VZ{-C62*HHl}m}'-ѩR`=? m,N sIL*iŕft( -J\Y=W-w(2i/,-ŧ{Yv?t~y10—ԹX% Mi>]~pgon"[/r.j+tv@X#bIr+=\A Dg8 >ƔOT|FLP9Sna\guNR[+,. @M=z"b v$U5łU|arH@gFf2~)PoSJvK=p- 2O[ssI;]&V'\v^Wla7cIEQ^AChԦNtX\Z&.5D ̋x@xܾ9mMS!Z7FwEˎ,p'27s͊!  aX[.8I3Q6;Aܨa KR  ǦVz:(ފ.QR݁xGYݬx[G<>(r@(yf$keL}Qfݵ0対Z3̷ך#vVɆfCvǖ^OK\p)ҁwqcjvRBQnW l@!wFl9a've/ fki JBO>;X!ދo, ,},Ai-j+34>3-K:|)'A}vbHsY(apM bFFx(848 /W.V->Yj&џ ?&9J"I!7g9Lp_0zQ1*X¨^m& X1ŁCZX'Nsϲb Lٮ"sBz ̣.`a- ۘ@W@ T!BDl/*nHůPXذ,0C&@Џg1L LRB]zeJ,VN!a~@sv%p endstream endobj 2677 0 obj << /Length 1733 /Filter /FlateDecode >> stream xYo6_@[r>$Au"5X$z,w;R"76yzZ"χRCزW[99skUYJհ ֡L;0w鞾y:0rӦ+cD%qD-гމIkx1@Se5b9%/L'ldJ3%UySUfjj@YJr7PRL;<b!JR M-v0{\^ʺf>ll$tQoTaFFh!ѵ4нrW:`iC3z얁%QX\f CAc4`VAvɵPR DB|`e46r!L悦c2q)}0,ٱM厑yeUоp*{ 151Ԇcb^m 7t+[* s8a)\C>^Mٶ $qFˊvjIktMz;Q >7[e2^3ܺwӉ5=7. C ߚZa3v:8&F  `|q5h`hOeRe"5/;- %|rόw0S泾m@(s2} lՀJ\kYSd7lCv};Ы^1O= UZ ?gZ..DD=zmGnߺx箎0;Y\>uz>^n6=?7eZsEwz dp@ endstream endobj 2681 0 obj << /Length 1653 /Filter /FlateDecode >> stream xn6=_G5]miba}I X.D%~Bʒ,9ubE:<<.s")n ^x+@\0* cN.>m^Qz}ߊ~\ nc,\y7tz~/ێgy_(b>#FvXG x{1 R=2\[.\ r'X/@YI$-Nت KDum7d%2[ya61x%@ Zf]"oPupmpKٞv<XڏKX8o&~V1O50w8 =bO9VӤ}{iI?sXЙbw'R=|:sl~gLnJ5[ m+]R .ֶ㭙ں019aR!2R)C bcBɔ!TYi^]Qee?$ҿVP&R /u1#S=>~ba1D蒗T%$K2$^Vִ]Vr8Q@˩jGz0?ҭ}]L2+#];p?D-yQVٰѮhUU{(E\zd:Mj(y,EO m*ֳm)m>m đѕ9׈BH-s&UԲbjˡ) t >5ԬfAIP:poÝl05HM1>@8@N NUCxϵ ^ͤrb">C>Q+Fא&J+ Kx؋&r>0FUj^[,Z6v-9# 1!j^թ̻O,wW;ZYymA)Kc) ,_{Wd]y])T)D#o0r$$8 DSRŅ x[Cɛ$aw@H? C3wj(GUЕz` '{-<}nըU2/,22t-d e:%3!ȐӉk%erd.7nӨ~*]10sA +̀f^M.ꟛRiw4pt393}c1 1  )X97\P @8{P~|z#0V?:e. 6d|5+/Bp *tѬ''Z f% =Q8Q3F"4Q1_l.@3 ݮ}rltajO ] {ވ\/Ěgff"E5Uw<9i#CCL!fUß}ýtGzo4u>E\x;xM(73*%HmO4*+SƳYTOD~b*O^LB{z1|y:dݘD4r=of*dGʱ&ҏ)Rx6-a endstream endobj 2685 0 obj << /Length 1304 /Filter /FlateDecode >> stream xWO8XQHg;=J[+fU?a?i3㙟>bG%qLˤU'W˅V0ܒ0>c8%+h<65n\,l0cR$Ig$\əleS r2񗃳Ӟi9|]xLu{ q4ii3U7SaD' [<QJӼD '^<qN4@< %n?*h1 {L[vn`7}a}]!>vC<A^"o<άFZ8J}. sx匜qSL$9$Ջ_xq 8VP{VO/ mX(\VΏ!ݡ*|rr4̏ne%,7wA#~ ǔ}^l #!nV4*?>z*TeZ$>P<7ûw㯧_{L1\4RN=ˡg-u.r&k˒ endstream endobj 2690 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڍWmo8_$wg=E|(-Ep*v%t*rƐM$ CۓMf˪3㱗YR+}-^,3|}PAw rvYZ̚-fs>o'G}Y Q2,v8go^Ͷ>C|., ]A 7<-d9oy#Zem :>7 `0&AX瓐U[EW\b? b$ COYp;(WECk._8zBLbQJO4ϦP{ I,Xa!3^߉NU|Kf^ L`dYb)Jk#giPVB#T4Y-W) bu:@\bQazdId4b}p%1meRm$v#{DwXAVGy1f⿪S$\^gR\sUWAc)yUA5(/~$4N>r>g 5[U'X0;SU"Vl5`-E\B4ٞϫ͟H˼=:Q4AV )>>YWպ' [|^'TxvN$Te#N]R :E\# \9x鯏:vk'pRJPG-+5~D }f~Uۨj8:I{>G~]Uٚ xp)ZT/NVC1kIʮ 엢Q;9>2tvԫ{\<|J D <F, &!%)͈R:DJ~P-纋nwz>Ua#z) 3U5U ?B9$ˑqv nRo±\;kcF.Vkݡac(`|"DyӬo{#g1ijrߏ|1ߣcl[u7cJSzX˯)c- fCcS;AOwGFw1mLLU4*sҪ!CóӋGMI1gm9.%-.?Q6[S3cqq98dt0V8Nd endstream endobj 2694 0 obj << /Length 1199 /Filter /FlateDecode >> stream xڝWmo6 _t g{؇/CÆ(D9OGrb- IK'IL"#O# .n?QcgݳevtrId껚-'s hHΕD$H <&. bCеS&,bWբXO=j=AyQaz?B;ŔX`QUZ@A=$XELo6'=DGӲ$zGO-RcT\UPx~乶cwb]fm9gkgɫJy5%\j!Ev["vv5= "VUbՒI it)hY/ZQR[w+Ѫ=-ڔ(+ )naEY 0w74$5S3K9s)&"/QŤdG.>j+%gB:UԔC}-MV~UdY_]]a$ #_Ah;UT:^X6nFrl2WC|׷.S&Ⱥ%mO8ѭߝ; ΌGU+ZUuU . F׹><ֺA[lQKq**;"$+a 7&9,P@O}dMl[ ~C gkf+eM%=~l%qeqlM7lKrm^5< ~J5{F_S|X!w02݈߸z. 3eb-mDE52,{ 5yRy3b<왧kp(c~Ht1jfalkcfo}/ {O/\nYR&;"/k hV⹖|p$|a_vC%5L{mr㊞햑arXA"t86f4Zoۚ%̿S endstream endobj 2698 0 obj << /Length 1485 /Filter /FlateDecode >> stream xڕW[o6~ϯ02 uW=$MR@.և(ȢKщPnMw<FY"G(j6#| 7(n\&Ɉ :}u;y*\(؏;7nW)3^~<]L Mt4)HD4 bX-.?Iq+ '-ppYVL 0-dA7ANyg(#A\9cRt4F8h\{^Υ3?h8sV(>SmZ:|ӈЄŠwK `B mְd[x V5u](~x{QTזL.y :}JI[f U';LI[!iYj'w1]@9j\ I fa W@X8W߀&eWě<Ԅd$)g&r$' HCOעȔirML\qD%noȳcNDCїҮܛ~E ) H"D,)J76brx`uaNm~c@p!R8`JWߗPؽ;5k.mwCsؐ(P9oK%oyFҮ_NU7wANNS-`Fb@>^p.ȥ*Zv U<'WVamָm/u!ĢF C D&]z A%aԑfV=m@?G0=Z +!G81Ulf\|RJ5m\4e gQn"jH`v/|fY[`94/S;}MSZO+o&VLr=vf㳣q,bo+tuK͞aY'`@_WbeKd`%; y%ּ"$Qc%<Sٖ/[ePܳvb 'z endstream endobj 2702 0 obj << /Length 1096 /Filter /FlateDecode >> stream xVmo6_!`_$H+>s@,1P i10mk%y~w+qHU];Eβ1VkiTFxciW6A:{Q[6$CU= Iszh& We[!vï2C[y3#H$Am ܿ!l ;`Oιeݚ~J?\vV?ȶj5ccP@| #}-'1dNQkO\96u` - $gzw$2;GCBk NֆJ˚3=gɯ ߑ4TQ/B'^ao^T6;p$a#K jXПq jR[b%}u zZr$pä¿g3Pരf?rXXe#a~s`;vHlVu+C_*ׯ~(1~e;׿]أA'}\mI,A9۱.9j+#Ka=>&yO\)yYW3w3re'kݓ*o7ge|EB-uTup8#d.apPYjղQ =5"]:KF :GB8|:?Y YMeaVwD,Ɲ|zzvNaɦmnYN5-xt| I$>`ӺR^0opR/؆^2{;M +O= endstream endobj 2638 0 obj << /Type /ObjStm /N 100 /First 933 /Length 1354 /Filter /FlateDecode >> stream xXM7 W^d"E XHl/-$94]6H}4O;4DQi )P--dxRJ́r $O|oIqVLirO Z:CN9ax =f0$L Fѐ)bcH.}H-dI<ȵ w1$Y0gZ O)FieXKn@ IX 3%_@`4\WiopiP_<Vo JJhOgXgIHhXT }8B L* {aSpz >u}[]/V@(<Uw!(8_``$ aHR0K=O o܃uΩaUi31+@16<+`IzP I~l  Zܪ Ro7kA؋C!>@`ن 5Hg.eN)u}[X))f~uqZMX?{fao^~|~yx(y͓ݧp An0ځ=3< WtWz~d KQd; DE9Q$03*/uKlV;/~6U[JN||ȁ͛aF^?ٽ{ه+2_n>×iEn.rcz> dj1< hyBd#rtD!9A:G:pKB!)4 dBў9RXrPlkJy~b<"e[.R@8Le(hJ: 䗿BMI[d9y*WWDaG*6bz,S(GmӸ(+3>Ӷ 9mOF)jeE&;{[y5 4y3I*(z4i:~G)=9` endstream endobj 2707 0 obj << /Length 1366 /Filter /FlateDecode >> stream xڽWo6_!t/Pk{hml>0 %Wwǣl)Æ&y:x_|'Y|Cmޝq7Is8m92?/j;7|%7Z5DW$ #{"ԝjTT$Hx$p?/.,: 8r. .<!:S/u4 [7 YݬF`N7 |/1R+6f"xJ]r;ZumUF+jyOHu"WnGxĉ}ٺqsffw:oBZ3*f9ܝM SD_*˗@RM`/2viWY崹ZDm,kG>ϲVy3P{OY4v' uQ)( B筛b4p4Gc 0k'Z]7_LJli^5ߑRޏ>?x7r)U;?A%Y6|BDWZmY+ZJ{rd51MY۫ĥj>4PVW2p?._c)oUyC] iNoKT=h, Y%[PzN@F+D|4ʹ;m@=@Ix!PO_SLI~\!F]@&Qo$nɒ+IB EQ`rz+~*|89O# !FmejXC TSV!>8]6Ƥ kUqR¼©X-]>!aiS20&ɟf$"vӭNmA];] 7ֲCP}[ $/; sa* <^&⌫!9i]x({HqDjo$O.o[3S(|_WtuC i GWW—;h=-pSBXFF*b۞2H؂"}Kf>s (a Z!$%4Oȯgn\~v]UyK';62!0i*Yrv'c#,YPD8F_+ #F_k7f;,+KӢ,% LdK׭j^5nATz*{rlfB[ã>94UٴcÛtl^WVEl ]`|Wv*Z)EJqMn4f;Nq z0VyffF1ؼaXLͻ eɿE endstream endobj 2712 0 obj << /Length 1380 /Filter /FlateDecode >> stream xڽW[o6~ϯ00E] !.AbX-DrPN CxD<߹}焍&WbO8$y;AH/OpJJ%O|3gN~.GSt%4EI@L UuFK{`ӈsz3A4Q$neG KiSTS1J8K][yNᶓ~L3R'H̚NAJ͹uJc PnkY? k Gx˩wF $&x8$|rqEQ/ܪBIELš1甅 7J'vͰрGP;1eQJ'[DZwQ dt0YK6(MB >yGE7{T畨lv6 >-E. o*܄,!?@~4z9N8qs#0\Swswl7 8Cj.!51-ZQ@QVjq D=PXUSs RQX~@Ehڔ'3a^{vkcQPT tB݃-C6~n vMџF@Ujs8v+z4e<xԒjAxbJ6!Rr>7 a}.´qkGI5KUEҀ˩(3;8Mws1GH(oL[H_ǏE;i4\z1 FH vP e܍|oh+5}w1r40zcL ],ĶB _ iKnS>vmDn.I!0 \[q_<>-\Ҡї=4oTC$GH7g+[R­~ mX Nl 7NvD_:D!m :md%{zomnΡ% ص?Kph ܂q"^nQ -lFMq9M*AԢgn&5ΠdU?_gلP3AR i)nr a iG3lFIL&~q7U?D endstream endobj 2717 0 obj << /Length 928 /Filter /FlateDecode >> stream xV[o6~ϯ 8RuINkZ+6YHfiǛl^1tH~|91 Aʠ^_@+3?\ kxvv{A+cYw++*8MӰ,͗n.]M8)aE_/ng8ILxdW&J2(\v%H.BQ$TZ&W!H@M4sLq2qjAͧ(V;^Zqͩ <0N B<@@w?)(5'6N_!囔 b-.ܴQڸtI獩}Ϻ[MTD_4, nȮ Lݱ7*@>x樂.~ZrIUش"jQHkE#%wR3Z ︢动[Ν%EҭhX=9YFVH*MGSwI HK_7p'9iJaݯL5qp"_@ 5*)5}<ۿ#o%CU Ǵ݄,wtBЖz7i_$;D>Dnwu͘gTQ6x`+9Tؙ"VGAja]k #wۍބ*JEh~3`ZYg'y4?S)-ל&oZQ 4}˕"%9Ho[> 0gis_ 4_\Ks {Kvr9c`헃#5[\IPL#K7-sgJE ͗Vk_Mt%<~e%k lFۗ.n _zRp+z{zlӥ B}'cj 7hI# endstream endobj 2721 0 obj << /Length 1451 /Filter /FlateDecode >> stream xڽWmo6_a D,IzmҬ-!h<Blɓ8Q2C/sObOLR>a2gܬ6 ~&#nvJ,婘\Ub2.٦KL0TۛE?FW2{> w*)q(ukct%!AH&>`+њƿяxA!X‰/&ߜ̭]onh+ޱvua;Vmw^ BsW k/Pgoij`IuU5 c]lJv8pUޒ0TI_Yc2{:MCO%:~̩x}~e0<ݲ%^qG"1Kƾ^(r.hW4F5 d97!hcf˄%G}&y vdun[^дQ?o>Xck*-o\p@xTxfP9ʋRwX2Ȯ+@ݬ3(+AVA߹/E6vl׃q:w -&6pxO;s0p `HKN{5+QB5.<=cs J(Pdoi֖6l%zw3-<:"]mZWbRiz48H)/`T*8 ].J\vD2fzJ16~. 3l[o5-,ԍw@AYof:@hX `ZàSµESo7v|pfJΰXzR7cBVA4"SV< "5L.uِ,Te+Zw5F>ږdSۮ/Dա1D~فc%-cqe,9FHA; i2Ʉ;K%ilv ˵S4EG/KYD ,ة:/S:s[o|! 7HMw j]32# %% HS-eߖ-2 Ǭka-kGs]umf"LgYP?d%MzobSEz y4kCk+bP88(~M+-n )hz.р)x0q19/a ,&]v#SܔV ]WV9,ضV ][!MrV/1.|mkm(SAT ظ?oG2L@?n@a'W7{&n7Xu~kYxՎ,c:&Q] 5J[*,;< uxj28Au0ܴkO]_z&*X*6!^ƶyR6 g(F}q= endstream endobj 2725 0 obj << /Length 1360 /Filter /FlateDecode >> stream xڍWmo8 _@;pݺ6la-0}P%b[9Yi GrP)|"b(?>*Q$LQ՜EnGD|{108_ߝ~e#2*nvu7obe IūpYp;,gȶ8y$v^g/49YW#C8/X1)IJ^ɮ2jenQ?0$I8\ҨF!P6Hn)-o#E6Jv_#ʪG<1&0J;0q2z&w^j[fDbnt.hm'E*_(YQ۫YYNH'w gBXsH,;s\nzQ$1TX\ujDW, E r<ZqysAr7b7>yye" R$'|T^܈oY2xdB.{N1;.rru8}X[=-#3Or½K"+hrRA1gCvlI O+gqBa錢DFY4o?g?3VEvP$"zI k%;vk2C3COU=DG1T,gVYR^Te)OgYƐKtG[Giڵ7BĘeΖ""a>xSo$:nqY:hIw)X}ЂZۥ{ ݭ0}z7ĞЮi(m?Ϳpgc7V~!ŜF8'`&MЦ=νp $#`m:hT]+0UC]yiԃ#NPڸ1h؍d +#kըVm̉}wCDʯugD-moG( I&܁244yͽ ++T -eI endstream endobj 2730 0 obj << /Length 1421 /Filter /FlateDecode >> stream xڕWo8 _`Q-p]ŒaP%ζ ޚ'n.\TlbY F<]wrLuԇW~qy/șl L,Ze)JZL(Tɑ` I) '_8có,<(9CcDߪ O 8冽QteM#/p֕%䃵Ȧ97AʦY6tANK(TaPE#[] }к"=Ee層Αcnb/Bs9R7FJR/ Wh=N /1GE;ma&ňx,`q J@@< Q8^+(Q ff-xZ+ۍ|$$`gY֦.`س& wEQ8fr`K![J<~sDjKAIp`ն}ۆ/\X~ؕCduK9Qwek%mj)ZSqo]mT,IU=o %WRFWpp{5ZF8vVAy4z>=A)[rLbi0C><&L,)鰑0v8, k$ώ^\^j "'e,rޜu_6P݈CՃ)g`*uѕU3)FW'hDgOoH;%P*a}PV(pN7)>Я>P'QIqoyyN/W0I^;5'#$#t o`6R~"G3Gӷr-Tsr endstream endobj 2735 0 obj << /Length 2442 /Filter /FlateDecode >> stream xڕnH=_!dZX47d:1"lI А-{ߺHQ m$0`VWV "IY.Gn`0&on_E 幙f*\|r~{*'}\apňkѝn \<'I߾{v3T9.*p=PS*uE BVBT=n-`J8J,Ա`F8/,wKh>-q=nTk('|;W #wGKe|rЩixZ ;pUX^(Oe-+sTw@4mlDoOšAoW .2%S>t9y 4pt/{<ހشݶfLy!W#5rp0FAR|L./yBR7Ew5/"EV@3D'C7(=tZo#5{7lȹE ,t$= w{\@F1hNW96k)7X"P{)OTf+AJ!ٰ쩰ґG{pB-Y3gǘ3W83+} tĘeܵ|͋UqxcZ-q(p~C3HW{B(W!sH ,DwkuË`8х 勼+ Џ)p.~amva|%U'ZQJ? ,H!r^LԹE똰'j%l"FD|s//!q5GGNt=sf\qb5s&~͙eTەC a=j;(` ACaFsaX%P*:OJDO҅D@Ҝa+@#*PǟN֌dFMM+ph(`]bTJ)0R; d&gQ'r)4Qs|LoZw)l4r<_ P)1Ksob- QӽGn_8HgYNDc9P#cҮȲ+roS$:8I   b8}ig2(怍*>](=IH33&2vÊZ!NO Qfkw=srp&uk2 tj7Y4pzRƚd>N؜RR6UQv`.:$X;O3|ZUND?PDq{]͜9/ Se|O?99q `T~{L?,X(G$4 x3sz4 Xqy[eBJ%)_XpA玲*=^-} (|4TV׭阋< rCr2k4d^hb;Ӕɾs!\]O- .Yf.-GD[JO\3)Z[qq6p&c_2PG-<" C dpWxi '<\~`N|<&<80](AhAڝ5KЕWo0^=?XI &| .#ascӳ=|z  BJ;~(g 1(,|Rl%`9}"~b A3PJ> stream xڽWn8}Wv!CJ.-EIhzQIJtR?3ʖEJ gfh1O>|%Aj.B `/20+`GO!VF^eyL݌vt]K}ϣzjt|XW3=Uzݤ0XSa,qBl?D"d&e ݁;%1逰.\Xu7m _&!C2,•!̔ѯTQnMG$]gD:*ns5Dz#*Wn,J)9T)鼢-v`GՆ;Ev;4dpɑj] u)̆fVhE@rBp!i&d7cAStEjR*DF%V;_tw -&oh\$R;&0f!6q)$|гZ 4 텶c2f"eCoM/ZDN ٗ dЉ{!ElSm7Fp&Ae޹]؁{ qn"lPf_# vuӎ+껒VEi0;G6vXb݌"2&|`V1-nɡUKUѼ6 %k6N{+wZmo 0tTC5uIv|`DR'zmd+E̷:`G4g*GY#ij,Y=RhʐKO$E.-?ZtrH x%TJ o7~C> Ui?D]f]^}y sn{QoȥGu?1cx65DZ@)%`y!]X(J6!~q|W%8_Bow_-0̰msL6t?yOȤ[L 4𙗫g-ʓwaBS w߮# endstream endobj 2747 0 obj << /Length 1333 /Filter /FlateDecode >> stream xڽWmo6_!d@KJ^Z X$]&bo#Ѷ0Y(/w'R)aEEǻ.cýyI,J|s]wr>#狃'gBxьe[,ǪwM^e)30$әE_Wjs5 FR6{x}p)`Op(/ti2iDyYt) H)OgTed:zrd(yz=dWֱsխ58N3!*=3Ů)A~Np@1 | p.5x JU0 .Ҏ#s$(KlRSA'4?n!8#e X[S+PftQ5N;wdiGYtɛWc\jc'ZىQޠMY˱N='BO#;*=(:ef#GPF3[$~0Aޚ^L1N)sY=\W8)@IǭpHm8ۚ>:ɀ:u=2sQ@i0lj`g'.x9#6{z0E(,Bm}c\vZ Hboe^Qn+ն#ӱ\oMzIhCY>qD)">,c}?v{C<Ę^fJNĦn/ 'W?)Aq-F0u7bш]~jXV6VO,:֪|HёoT!_B,*>Bwbb}Ơ98:܍#`=Bp _c<Э170p0/:;PH7'~zAIl7ZٸMg ! ۧvzխΖz?Qt֔LsT)pv yv~ -dRr ̟w-LiC/"6&Yʁ7(oyvQBPP Xܩ ~݊R:R4N1i5.2d&¹#86vס>Vdejur/}^nrKoU׺rżOѠ\)>Pޡ&j>܃!i+vŽ轺9k05UU)_uoe #ݯjNmivWZmڕ}W+Mo"|L b!vmIaے/tuQf<דvñ]}ݭ1Dl󐑋mmaagF)ǻqwY/ ق endstream endobj 2751 0 obj << /Length 1631 /Filter /FlateDecode >> stream xڝWo6 _^ࢳ=ڴ^4K0uL)ǥ]1("HZ~bzq4Lȳ\8 bz~$G[fG_΢h }&eQ mѴ`Mdo~_ʪ?}}Ǟǽ0v ii9qp#8@w7ٓ,Ehy"\b$y9yf@.[E(915S{*!0Q[0 6+Jr~#vo]<۠ݎyK[=)+e lL'h.;~ٕݻz*\+xσI'd+EQ2]{G0 |;U!9c5 5rÞ=T=B@kc;@$|ȊJՏ[n=cEպi.vSs*ъ ~ cB;" C߹VK=`d#!Ww"{5v+>.>}7Gv%rҮź"6a6ݕovmVvJ~x"|$ ~ 0YY5*!P& aRPZ71>:"8cQ0U`2*Shm'Sp;L#A+N7]FAA`Cn9zcAN/&&( 0,5v`?fK'pپ% G#-l l`ik ĵO$n3e}l{mX?Ԝf3*W$U(]B:vli 'tMH$YwuFxηp#xR1i{b b˜.ew@Y*粠"/K8D8'snL腇,kVici>tYgjzּ$ v.Iz*= ۠3' |.A/1!10$vMNBJZw.|Mwjlpx&: endstream endobj 2755 0 obj << /Length 1429 /Filter /FlateDecode >> stream xWYo7~җe;@Q87N]Zb%:\ʮ;lijCp8$De4㘕I1V'ـON A0ܑ|79}xʨUzpUfqoa%1>;eTSa(rFA!_&?&7S!^JCB x"P` +)WK`Lk(X^,cnǷD^e#δ+>Š`(2GKANa7u57DwQ73ZiCۆsi!6-MMăZ(*|FA9KRЗF N~=K{}8 &X _D`KY-eh G4gI@'ҝc+rWQ!8+T aED۵Bc+v<ֹ[hW#sFt|{WIH4~PtV!wf(Yj:P60䁗rzaJq UF[\d%߆~pJƸ4]+DGOf%*zI6 hy i!sE瞕 w"s81b#q;O]x¨<-\jdϹ;ey Fٖt\F!zS.<"j7f^˜GaYI"bB(6q,X{≚ >(sܮM=ܧOs^\ \`TQĄm^4a.(D! B5S+| n;ω;`mv7G4 'QymItza=wxAתqOD_kez_L5Q nWoEʢ(o:hǖN5ŕ4a!O rJVN^I?_&\+ƍ> stream xڍVmo6_!d_$ bIʰt,uť8ٗM(]$fw=|x4q!Ni4Ϊ`m,n?L|7c`8uj9 - K/> stream xڽWKo6W, Ux1zpbiA@n\*E^w!wi0lRن dZz:$ onV{Kp;\7EVeS^ٰ&M6>y-/!5m&>)tBMSV'WHQq0+!/׎ Ys*)WY0UZД غt} :&luƦccj۪dJ/ʲeiwO&POhv\Q/ E 7On+fGc@)z!ʮC:&6XE|-܅( 7yl񋉾@_ֆIX!cGk,r&Zmtts1*ZeL뻷ą3mVԜL6k9r7kK$eVt5ÂUi&,f_ץuMD?@5~ȍ,-ݜr 6tBOs+;'kVo^>u 䜿&lw,yI+H)CiLsxrxrV3N &Q9꣭{GP/GBՍ+{GxaJROU͏ &5ڰ'9稓H.d)ߚsY}weۡ kG+=;?FqKro] .gsM ZМaOd9"@iz2#AfCO;ݏ[l*r8t!Vǰ=5c| !(fB§0]쵞׬D6U:5ĞS`G}֧d J2vp4xÏ] R&b: 큊)^<(F -0r.q t^* S kˋ(Hij4&Oୢ4GVH#8i,{$A7!l8،sbt E[1x$nRU PC8aT,O&&棜g',ώKr #Op `geط(Fy8佺u*Zpx+￯2g)D@5kR>> endstream endobj 2767 0 obj << /Length 1210 /Filter /FlateDecode >> stream xڵWmo6_ad&5'] ÚlaȊX-i~GeKu:= i:N2otO<#\|B=.hB=y̗}Sbr\XtA8{ws'%ʹ;yN_濜||FJpZt?FGiJI!7P V8P*;D~E3t @jn8UPy4BxRbg}w[T٪2gWLl۲E?_ܢ2A(B#w&?U !+/jCbY "Đj$}t{j/ezf!}(}!\@qQ@ʯWc)vG%[7bGA$ɲ!ʅlW-W䲖k& .~Lz[9ZmΔiJmVHCF׳TQmwB0dӟ/, CoSus мbbZS?5ULҪu#hSYLFaFc}fB-wl)K^CC~YVk5:.1፩"^hڃbKpr9G$K8qş#cO_ܴ(~{x@:?ݤZ:51ғZVy_~C|S,M%3>L?V;vNz^"ծ8m[Y*ŗe-Qm^:LP% uuBA0ݥ@AfzkWxkZ/අy^tAU*ZB@L攟Tyvv֛NЧv>)Pa!^mFs;v^b s vׅ2_9:1ۺ~ ΰ< ze~/!]ݗv` @z};Twho endstream endobj 2773 0 obj << /Length 1506 /Filter /FlateDecode >> stream xڍWo6A*U[!n-ҵHN~W \VpEJ es/Q<<C5, nx ,yYyk]"B_u2@p&Bs][ H F"|1 Z)jER[%~ x1G8T[W_0xXW(Ǹ7zl +*,=iF;ZuPqõ0=( %-/ :rX;KJ4݃xcyMWFBn_q[Z+B]y*Q& .6J QVS(-%uAa2uаA <^W-&WӫlKXle"Mvor)Э 8xj =k:W BkCdy\XJs Ja 9LΧ0K̛`̊pTRK,~(#g%ŀw2oE? *؊+d+>e!EPUXi?u3ܳLˆ0&>/i*FAHaI< ŤմU]C,~tΩ2[ bT `w+ITii0Y-H;p%&%6n4X Qs0oZ!h3?JrM ?.a$sHgCӆWԅ4KVv|qqfY\T/׉Iz+gz?ő6Y& :e^}_@Quo Hm;9t[# 'R8tҭ`:Qsv"6p,Ɔ_mUE;bCz8_-Stx 8ܫ?sӸ>`멐^Z*ڬ7a8rmfd֨]PSuR> stream xڥXKo6Wae)v7v7H K, "?((h^f8J0Lr>IÐQ6)VGR6ן?<>$,y0ߏU[ﬔQˎ~%սUS/ ^N?6c!r. dC c$"9xӮ{c1& y]Gd Ҙx6S뢮ӛd{ 97LK={(B4rVʪWŀrF0uk5?9ր(a*2Oiz4=Gi}HٸnxceҨhDQO ymtWW 8X9[ ֞.dA W6։PuMt:vHAG m-nZZ%N9ʔe) Z9;Tiz}iC|93JKLDR f(9NY2rl{׌sc&ˮ YǢDlsLzB d*L,QGtJ[kڂ9OV^՝HSiS=r.2 FNF dI\H8N_'bB}jS-~+@J=8NSom/>Cm 6mvDzgm;' }0|"O rv_,FG{zq|||d+iFff#0eD dzVUxi` /UAGU]U{\9ԨZD 5dϊjնF@}{ʆj"P[ Sp5Ai"$w5zzPIum*KI BQ3w],7 G{ tB0LFFϤEԞkYW@IlIpd0l ]fmso?θa8{ ϕt$W]=\H/"2[Օ.vB WF5Tԇ90cڞlg zlUN wP-n{9{Zv>WmohrEng\F>} Q sA򭡌 O ҉x~%ݜ1#zĝ[[]_)]A)`y V'vmvkS ^,-dhl;Zc\(H.TiC6_d gh}.]2Ά(y/# av M$d-Ư= W{a I$m6 \L#[5 DRbz"LՅ(@CfZB~yc*_ѯ?x^ݐud /ns+08,F4>/~AꡂO"p ml{>={]"rV SF0q b= endstream endobj 2785 0 obj << /Length 1139 /Filter /FlateDecode >> stream xW[o6~ϯ@Œ+&]:KxOicq e'ٯ!ȭX%<΍f eQD8Y &?-O޾OQRЂyQʻ|3(Eljv'nĽP+"3P?\,u&ax$8#p-rU˻0*{9aJ"w ˫S|Հox =>`r'> HbD)IC '!I'i8/3p['1@#wd(_}RH$4Aqs^|~*SP K&lvh3,Ax""v5lsLRkq9υ. Q38:|@D&J>b0Ƶ~*@b7Zfzz(;# a&4b\ߡUU*ƅ`x%P1čdS)ᨒqdzڪ'웿dS|ҫAE,p7F+ݜ( JK3`wȠ+*Hjq_Qr[xE\IjFCol:]4==)8.(hblAD3Y^c'toVl|qI^&Y&Gohcy8˿+finkvvC|ef)4&&NX#%@_eA;QSڵƪԃ4> stream xڍWMo8W=,(⒢$KzhmiuzXEȌMT J6!rD,r88J6 A˴U RbP4ON|e3hJ>7u]핍b!)^Dqf;|RʪRQyHQF_O̒deH))4~*+\T|#J "Q\Z%|ndNn\D9(BnLOΆZzaFrÓ(E1'uz]uan]|> Ay1w4J,ڸ ˉu['8]պtQ[ШP\i[ F4TܯuPVSaBˍ]jBSm`C'n5^e]]Y*حe4XUAA'aO_v5]>99y %a4)dųOG{iZ :;)<XƗ>/SP?, AjZݮ J%^@M Y݆NTD6izchzu-`χ쿢̲3`a|_ }~<9r%R}rب+/ MkjTau 0Ƿ484~FGQEPVfhn5OvLڬu#UkzK $'*D>VT]R?1(<\‷±U+:7Fcηј\wBG:47[w'2mݴÄ F^YP7QɘZ=!ˠ|ww~, ӫ#N-a8_)gwe `p) Vds|0v{^g<Ej 5!p8T65 ҽ7~*|n)y{JUi:Bnٯ<%O endstream endobj 2793 0 obj << /Length 1037 /Filter /FlateDecode >> stream xVmo6_!`_( DJK}H6Ecl~`d!uT,na0)xsĢXT%QʨnOa׬#\|x}‚ gˋWBD,URh/Nn2,MSRų,VʨVL$JOO^͟c Ώ-BW4xc%-(K3QFYɧUXA4E{C A~wh{GI~ӌ4M8̯/p7ٺi?&"i:edPKltu/UnZD=^N+j(i9M ᕔSQ;y鬪8ei$k)DYsvq5Vrwd =J>]$xߺ]UvfivFTy2EIB={Ì&XDŽUǀ`O # H1>@GmT6zti^"#u| gy!RaSw+FmM̈lpS=nѭB_mEJQyp!&A٨)}PoTU\A6 p/!pфtAI\ .گ) Me9ԻNe*;&~kju .lS"iXxA*^( 2엁|^N-Buoy6>S2|-΢2$.t*gXDbxul,.Lj=Ϸ;bT( -`peP!g_BSrj{8I_+1'~3|nT/f~ʎ^^?طfmizw;ۣM8ڡc蹟]A  @@PM6K`>v4߆pE-|R濘c#fSiXFpXXL ]oߛ'S|[ķ8ztg_Qc΍խael'EΈNlqÇ:Zt1k/ endstream endobj 2799 0 obj << /Length 1386 /Filter /FlateDecode >> stream xڭVYo8~ϯ0@W"D!in"- Efbnu8"մ!Wn]`^oa# et!ɢtTT޶#\>`BGy<;q>bd4c}l>^-K_(9^\{ъc?H^goNgk<g(D1taab7rF:S?Ja|^BZ?]99dlL yx !Ó1 <MYB9̣C0*iS;?-.9Y^(zz|+W: d8TW;Ewt ZJQ{?m,BB!z3\ sG>WPhPK RuQ!A.O._1e@6;\p6w59nĄ Q*%) C1<}WB}%JH[#dH[[6 Ѕ #r#ųbAlnFb9`Snr`X?ZχuܘִOd ޿MB"'B\jϭi#u]VkBΉIhP*Y-*b\n<Zk!lR'3 'ƙ)p3m=+1ЁSt QCv M3t[sf)ۃco;mf:7,u:/Pmn7/i݃n˝>ј,( Y:'Eځ/\$I7ZN~.cBsEutpCV3 endstream endobj 2704 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1809 /Filter /FlateDecode >> stream xZKoFWE{rߏI$0 ;A@S-DURov`IlMQu7L<)/1%08"D/Xf@Jf (KMPcRD ɀIa ˤR#3 O5Ni&##h.MAlddFX}A@Cr hǂ QM(piDw$WCsHhLJ4+,@VZ #6l(H"!4'z`e>EXV0-eh/%(Qi hC4e3  pkӎ 4B  +dZ6@DYBQ^c5S.p}`Zg26rDӌD';Ṇc6~`<|^A9Kgٳ61WU=.VHJ + G85luLrM_ -wƲN߶_?\-hQM5ϧbՔEg4Wxg>Us?i6l&ph##RmyLRE>5iptir}\vtO/a޸AV :dbZNz!k8_/{K1MМXk8Rۛۆ_dq׫ZίՁl:z@cw ǀ>=&,ڎfX>LRkAqZL} &ꩭO3jaY:+b~2Y֬.'KE(k~ iqYS8#Zz!4?U=&zN BPpޓMM79:aؙí\d F-kKIkD^> stream xWQo6~ϯ0#ER2]AdP}d&"[$' Qa0lRԑwwa0AƂ4i/[oL~>.Qsh2nG5i׭HAғ0R{\SUn(qHgGgOg82 q4HRI^KӀ_L&N(˂h"ڷuȏ8EsƴhJ7?aT'T7~;f'8jڼ|2oAxDjD MǗҘ iw'SbT+?(RI]P(1!!{Կm,.Wα}ͳ5A61I`$&u[ |1Af!:R׍ a#[C|3J`u%kA$UPW13eBO UJD"7AۦmIəRHGS VզY.Bp߇ЦK1L%9"j1e#΍ Ӷĸ03NcX"&bF<}j ;`cSߢޯeka uOl^v Z/ɯ<૏a*laݝ麶iG/ž\AIyU~B/;㼬;iGuY }zVX ?ʯ -w$V͔B2>Cgӑx6_]ǫ]ӥͦ6KUJRvAƒ ]O۟xk?>OB|V_}`2 dݷج:PPқՕmYiJ6 7zɩOo< BrBopc'{^Ωj릵J6oz$BHZTJ&u Mc8F(Ym44~ۍN^R P=&w2N+O/`6'g $ orhL$~i//!s endstream endobj 2809 0 obj << /Length 993 /Filter /FlateDecode >> stream xڽVKo8W=Q@%E=46E-j_hÐ ;P:-57a1^μTG.kN/`y3m{ќܛƮKoF^oV${QOw(VUBA\_/L10< ]z\P :3yIQ."QVRu&.$ 3&B!PL^CˢХԲS˿ջ]W „ l_,f>)^:?T9-6sU/_)s~:6#]R k1AP)Rg4qFEr䠾84 DK],Pz@=ed=$> stream xڭWo6_a`/2Pi$&-kxDd9rb L}#c"dqI>)v.A?|;=EXl~լybnq寧~p׏$sɶS?"~vq5Qt&8|.=DX4O'pWcO(:rOvlqЋZ"srasO֍nInόn$˂;B$Y0)aVjIR&CKR ab}P)R/>9NC`yx Qw~A@:6uh m( xK ՘12ݖΟ.Y IFͥ_n}aڐ`#XfFW$ i~SjF &\nY?qF~8p9à)M+<uɚ ۄ\$YTeQ,j;q\ TX1c>;ѻ h(PgjʶG ]a!-eEw*gƠ#Z(X*I0':`4tQpNFF=H#bc[yh`U]v"CC!֐@$iB>ϸ7nX 9 dl%h4;0 sHC)*IBV?BILQ̭O6[@BGfއs9o!_`shF! g`.Q^P)}&;ui :*2le&iX$*Æu E?"Dx6DTD ]x;S7iZ.yXMZ7,l{{C3{A8" Y>W2wW.dHV7k`7ǃsq<.<ҙ&pȱMZ]٩%ֺM6EvZWna)O"l;*2R.Tn58]&s/_V9/)bjvE0c<ȊbxA<X nm~‹ h4RW,N-[ ivL8-;,5Q7܀1V9M'F7f,m1l;JIJ:epw!@,(8,u^0%CDi8>Hm29'Š>Ԁ&{;>cH䶚^LM٩_kY2C; sNiR"(b:\HU/D``@X2zw_6C[EIۍ3 HN<`4gV"~AKY}*pTba%f#8ݖf'_ji/j+త8>mq$ endstream endobj 2817 0 obj << /Length 1370 /Filter /FlateDecode >> stream xڭW_o6ϧ0@ĉ(K-6IM0EH-L5nȣ˱ @x BAFQD8˓Q|^0crz˕,`:5-7"o ">q,7$|3eSaGL$7'ӭNYR>` EXJAƔE1uhE~5ɯ~ei+R"FjHeL- 5ռ#ƞHk5)3 UWK6O.F7z5]`p#Cm^TJ\ӈPohk nvc' /й|}ܶCEq?wPZ"\ˮ5ӝ^wq^ȮU{spPe^*?"r1nmkU9;װ:f ]b}6@ݻ\nr}(K?O)kW,U*l9<|z.4$SIKȄ"z:7lƤo @58 EQ#`C/XA^aG0֪zڭkhC\QOPFAj I~^-mݺ\Lnfȴddb|z)/W Fb")P 6ɭB<9?D]7VΏNdj(7)h=I.8pb4O5򑸸 X< ݈xR> stream xWkH_az$ZiW)$M%6²d$9l9QBqpAo|oKD<.S׏G; yl`U |_F\YUD勖id[Ǔ8'gb҅x3"L>$8*fk5}8FcedUY |؈}scᨴʪcsHa28Hemcۆ4cH?YLIϝ2Uqsqt'Rm) *5V|Sg3)tMhW-. J--ϸfC-M;ZU"Ĩ?U!#B 8%ޥլF3a8ݎF COru Vw|ZyNY}1st}Ӻ{eYYxx{. v2$Zx\fit<|ك endstream endobj 2825 0 obj << /Length 1698 /Filter /FlateDecode >> stream xڝXmo6_a`&3+R,uIK$.!-0Zm"z$*m?;8C>{1|?>gI /U73*T(hլ;M>iec(eonnLGM؍Ҵ~K*ՕQ f8ndtJ5Aw@6)-z԰Lr,j87ug:cǐx/^Ck9 hE"F/1sP|@%:t!񟶯qCiG[v ù7H|t!@Q8Se>'p^*^(["0u/mr F4AX}f쥶Y$|!}cp3x a sv:jVXmC?%; Tz#y(aA 4mlt;̐Ql"ަѬYvu|o(ƪ^g/5zU7ֳ@X5-q֪Oו5R j^f( ;Tf(v6 ˝zS$]@SAK/m:~F0)(շs|y&;=Uf{Y ouA%nG%`SwcYMuSlBxh-ݗրZ" ;= mͲ,5\!S޴c0nvߏ!剕 AQF2J뀇R~a2 s},i0#.<~-$9GJ2~B둻0VVnt$a2:ųC'K.!!QNdDP3i6&y4 +3 H'9H7x .k62W0|^VV9̅I}s/+u7EY;@oKpچa tڲʍݿfEOt`qqz񊖗MaEnս=s&J8S&LY,t"2BMc;_Mo\]sm7~DY&pyf]$|c2 ]LG,;\X.&=\Lx)uըb_9ԳzxsМÏ' 8 Ǖ7;Z}++9Tw-_,8Y92`CO}f2s ߅z_-V> stream xڝWYo8~ϯ0vbUaK4ɶѢH@KETGxwCZ.<3#> `4"?Q^T/F;17(f'/.d? 2>m[FjoEK_z8NFI-\zpʓe}b&8Ot4IcG1,Q8n=LYG/2PoI#)I(0eD< ™GGSVW8@#)%-߅tkl;QO|Y)4^Nfqqa1}DNdkR"*]L,ˈ~>oRbCV$t N}yS3ۣDd'U٤e!) .J"ã4^}*vGh}_KU9!N(N7lIsݪ8P4i檞ڧoUٰ[8f_iݮR endstream endobj 2835 0 obj << /Length 1323 /Filter /FlateDecode >> stream xڽWn8}WRwuvEbH,ӱI$n˩X`23<ńOLR>}A2ɫnF 5|8Cw`y2;8É,婘̖P9]e}IO ?h\Vֹ^,By?KxN%( x=Rv.l&nKXW,}SX(t~EbLgԬ^iY5b,zG~Mf2km^0,=킅.Ay~/,eVS7uf0l3n25j}{:\{F E2n3駌K„,`t&;!Tc u{3]DR*q_)B`K3`Zokv;<-р&12nX.J5pB NpL0Xy7d I,KdE UĖ@5.;Vb@ SEcuhرkS$MnHC j+ٖ8d=8-v^;"ECSV[矱:IzEi֦^el T3D&wsfyAfl3؆XH<ތ&E~Oie{}>.K:J:`˕ǣ{3!VQnԺ?[͋c#h@6|jlTo0=Yn73+*I7-dGcvV>vcJ!(YӠ]AiF^p lg5bVv{{ u 'pqo̩^x5WZ76 e,W٧Rlrb\rȉۃ'Y`ŝK8@Az%ԧcwc.@xuQߓE)IKrV(Oh )̬!+a3 /%sUEu|4tEBxJ-&fh#C:1P0etf$̭ūo47I 2#0שrm6rQlF9lEiIcG ax 9)N[> stream xڽWKo8W Ċ !E& c"#і6(PtPNUK)r8'>$'izyMՁoWrB?"'r?⽪y9y`Y,0EQ̎o/iN.m! Ibqߟ~<8o.`Ot(/xY0>ye$<FL;S ^$} )3J,cԵi8fB:Qub;.K--֚N i֚4þSxMXMz<K-Q }1B&*WM#>AԩSzq@ZJc,?\˶/B-$-aׄYN4R䒐g>5Pkݖu!(ELO_Y5)gTɝd{ ;й1Ф{çQX1b4fp4csa8x?0f+׾IhKZw8$)WNÉBy}Sc(N+Q\5!s?TK'kO)m CEz צ$Q*mcfqxc{aɼ3/Jl0}ˆ^8 ASG`je{#L]^KS)Po!,c J2Z 7kdLo{U|}ڛCz[67z z>R%x2%=2)<(M,N\p-mmZJϘTUHVUW,{tf~M `j eͤ8{OPuadZ8{lkl>ae·hW:` k-g)z9ZB۷7W51!kp`ݣM6S5{d`xQ$T@"b&*u3~5K啊k#N.Z $ ڐ=Tfr<= g-Lws /U(#fxڀ>ֲ)wW?r D&~) AGbHl jg?J]( -i ng.7-&KyH_8/Ruڗ7E{Xd+@,_|r}!KK?P endstream endobj 2844 0 obj << /Length 1401 /Filter /FlateDecode >> stream xWo6~_al*#2!?bE >ms$G'-!H|e( (/K~UN$%8SFbYEuk_~]vߧ>-`9/1.#NOz oy?NCGK2 )wu 'r47ɵZC=bk]7DӨsCBacL4:WZi2sE׺PՂf0,E>-nG2o؍YC>}&&{-vn|e vӥhO` IOvkL}0LSUHJۼd'.i e1> stream xڍn8=_a`_d VIbҤm^,iEr?3ږ%pC40I&yeRLsXp{Go>鄳d%,n*8]U+tqPΒ$ N.$ĥZt΢,KYY4|~F+C'ф!P=΋dE8! w:0aD| ZB-i| aYpVT]C|-}YxYЋ+@,8lZ)WTB'z :P"8f+4;rc| a6UK(5BCh mj5}miEY ѕ1л+AuЭASel!B䙑4{?9GZ6޶x$JuzokK@]XH=?󳯴 F^>LXWv 1 huQEp58N ޑB<19VOXRTeAa>3-*5`sw.XGˈ6ވ1n%gS*V5?FʦZEA ihtLkڹ.X '`tb!NZدh{MGQPU+VAo7+$5!ݷr_$q3}@@>{C'-+>&@+k) ^aA 0 p RF놊X<{*) c3F(eu 8/42p7Um6DHLSbF *3 *gR%]Qz0Уo W: n:T? $PnU{gQI2Czc mE5%I@R׸Hhmhg~n+9.[k"Jڵ;K]t@.R6=ˈhFpH'8)ݤt2]Ƙ?w.GYmx7,aޞ6*+fufL_/xhu-t=u{:l4߃֐H endstream endobj 2852 0 obj << /Length 1117 /Filter /FlateDecode >> stream xڽVn7}W Xrnذ.e]-\ʎWQѢ/ΜY>a'IB#w'Wx:o_fل3ZOfmWfrC,DoIU4Mӌ_ƕK#ZF83F8KGM,D+ O(s%-'yRpaO. ' jF'Ɣ\Q\aUQvvn. b#Nܵ91>KXz w]j/B̏ʄh'9%U+װ4^IJo7ۑU˃{۪aA|^z!Ls^K. q< CTڷ etLZ>Ӭ J ZQIc4cC?tي.J8.8iznk+siekI!w8,F }f>6r5c`dzzXv@sswF-eg <_>KXsFs)<jz**}4Ӏ4vGZRq50ۀ[Ѷ^ m,E/VF6ycn[lDѬ$a|9xV\Ps݆.Z@ckhkvF!e6uR}nU;W^)rldؼ }&h=p=ɪeg038-ncٶ{+@uA+ ߄ ]!d):Ŗ'<58xRQt^Njڊ{[2z#kKS/<|DK\PSB~+C-gO4F܍Kz $@OU. endstream endobj 2857 0 obj << /Length 1006 /Filter /FlateDecode >> stream xVo6~_!dF5GJ~tCEiGl<ʖV%?<y}h0`AǴH``Ϊ]p7Iŏo8+x0].A6Fp1_$=Ji]p`$<TDљW(1e|kX(bA q0 KmeĄ@jؤ}gz-leuhL F?<&~tHe" >7OrTG ~(YQ y0!DcU>%oVɞ4f}77qx[kزFȽc"2*,8twYm-NWUecz{F9M]u3,{*7P%ꖿ%b"`.jEd&lcX1tՕ7|h(EϫmJ-VڃW3;J~=508V֙4󚆒Pm49; o,hGVi}/hG]p>l YV HMдwtf4v˵Տ5mW -dSeqe'!L=f^y|{~hq6wԏ>>~DKr+,čܖm_ ~}|}^_ _`_prjL&gRi|ۜ FPW>.튷{' 3..џ*9WU.B=}UGkݲk4T;K^gw endstream endobj 2861 0 obj << /Length 1077 /Filter /FlateDecode >> stream xWo6_!"D}tC$k\EA[(ewQ8aC"w1^μ4hg^Y_0.=LN.` [!/bʣe4""DUխE'5ݴ붭4DJc{AQ!UνzՀcY|A `4"4^V;CPcD "AL00ͼ͏~b(S(䮷ahzorPphٮK]5ّ Bﱏ,ֵʶX}'iҤ5 eX0I+UPah>?RڝhĘ1Zʝ[e+ejN^ ! XbPh[WJUq<& *o<Du1H!"wLFQ 'IO!b}}2=89eS8QSuf,ȏsCmKyF}2M)dB'r+) -| ߈ca|E&VstZ^&O̎:3[,uUٝ8D%m+8 M8S2%%zji=}]^V cuM1NSzP~8۵t鞓9 `z](eZ=^>gۦj律|ܙs [QoԞy>Aƍs0sP-]=wjZC:rvX7U̥:h ~ֲ|L:Tjd*M+%tjpr3Rh{ӏ_3 ld<; Yg1}\H Sy1~'_dw۶]Y;2 響˦+M*D]V>EDoꃳ{=k0M\- .BK,>F,Vn,(ng + Lj΀ Qzy*Ζ 䨴wMC2QSW8|4Bi_|o< endstream endobj 2866 0 obj << /Length 1605 /Filter /FlateDecode >> stream xڕWYo7~P^)Z#p@hpҮv2rf9)&IL"O1jB#af@8QΏD8Inr g' 'I@u#ez߂A>UԅN|,3YvS)m_8oZ8[OiuSh RY. 8M8i .Pe[sP*CvQlT}=\$Йj1H3l$r  u7䭲\.fnp%HdAB=`qI)Au;UCo-[%mK4FRV$ l6<.,6 67;l/oT\šS_ɥ.Qe6sW9$<Xe+YWC&`!bwmF*ح{~ =QzJÇ\gَVbie ` ՘CpdЍ-0CfGNjĒu>+ 5}p^E*0YC0@DoFc-aoPX KX&s*ݬqKEsU|&!>:F_`/AF0q v`@W$.ɾ^nʶJمPC43Y٭ڎ%Hi{c!D7:.g8`fM'\vv3i&@x~N0Sn;Y:AQyzd47겐_JKâ^sll]oe.h5bn -7!X%K3f0a1˦ٓ[cl2,A౏emMSjU` `ul6tjK XA泏iϽ>LmqNmcBԏ6'{T@6*5 !S3p;(0ﱷ_ᩔr0TTa?\f'zAa(j0te4Tl,: 6 :n&@Bi"#kI<$}&Đ(I 9 "5jpkrϱDgWgWoh}İ4^,|(S'OJoLop`!IQ򣘁%hkkpt>z-Spfu5:>i2{X &+e_ #mUQ Q2ge(ii6wF0Zۮg" Cَ+rv7R @CrYY^y]gl<~Rm7{|fނ?Fszkp>qmG !Ų9ٳgy iU+5Z\tq endstream endobj 2870 0 obj << /Length 1645 /Filter /FlateDecode >> stream xڭXS8̽(sg#{Z JB-"X9ծCh]Jo:̠Z_'G?F(_nn,FDoId|돽8IKTW\.UxH^'QpQMƓ`:}!b~f4gjߨ#z>IxhD #pWYU[kcZ9aH @dDHюD܎д*3ĴFYZWfUeUR򶺩q o ae>.aoKQg-w׀8 +l=KA:FDqDN 1'"u|ːwꖈ*# P<&ȔBf,*׍mkymwi^霑ԙY'ENU-m 8-%y몱4ǾLgS% q$S1*S;MV&IbUF(^zsg$1wÇ3YW6לlPd7L3x+ptF8:' {ͺ=''̼#]}C&e@S BQ8PQ9ʢq@?Rm~k{)Hૢ$Q|?0 +*3ق63̛;{e7K7?=~Ak`!խhڒ(u9'.rl@I<p"#/Nx)e],!Ȋ|~B)'lI6K8p"|_]۹3%YXP )`{N@Mn|,FNۇ]NQVYMQ&k5wg?]esS Q"rArԥg\]r=vSpu6q³k'!d(XJ)v>lO`pl>}d(朩:Zoy}7qڡ0C^ߋ3hm1 $dns v>ww7@fGF%^/s}՗eeO;xt0Wi"2Xp=nBN  G ekŮ'WY5+ cXe f(F‰]er+lK ?OTM_R )Q{ff$mXKf1răM1-Xg-Zq/ )BU3SÍab[`#2&l^q2(YUt)6[~5p}!U?;x8b{\p' ,|zI<4]E]Q|X@Ә [MS WK*:8>H7T}0:-ͱ:(E{+懏Zqy.3k|Fw}˸FC<me endstream endobj 2874 0 obj << /Length 1030 /Filter /FlateDecode >> stream xڽV[o6~ϯD+J.+.Mѡ C1xȴEQPخ!pD|sBc^zY"ɽ]pq9 k=",7_M]͗ނ8&~$\~wr%lJQ00Qt&:k^y,!iyBY *۸&rqƇ@s_~Cˆ^EܾCWQn}qF4E_9()YpcF)Ä'^%4KJTFM d =тh4> stream xڭWo6_ae2k,uCڤ[: oC$ $?;e;a}xfبF$ ˴UIz5_NY6bQXF%nE͖y~;+x$IPO4 ή.Y-J'qgQrmbS!xĒ0<ƊE$% υ63-yn TJUt0DѪ!rZbiX 6D'ڋ&K:ZіR"UZ31EUVv'7((8k̹,c LBk4FQ4pJ5,d-AEMqVb wuuЂeyM; nS’wace#v)Mw@sNct?$LaC۟$I+P:Mŭe ^~ ݽBovpYo\tM{Q#Y~|XnFֵC0=N$;)i[OaV$xZn J|ז[YX~vܗHBְ̲YӋ2h= ѡ9E.{c{> ,E? v]Qsa*-;sx*H= ZB|XAX(JKVD]M l+eK_ڍiSHp[ض *`q³rZ2Q VsL0.Anj# 0P.4NʽD,wy>/j K, !JC!U[_zKJ-lퟟj#< %>r` $})x}Jp3PZU6 z7R+s:u3)}M6زrҋҢf, |2*kxN F[oT?򀑞Y"qCOTgF./pplX+V=+ $syu<*748Q@ipŽExd'fT}$')dj+Hb?ҀfK4=itǣf{:Z4IwEf{NU;I|'LZ޺*xы;GhϽ8V._EaJ 3}/,V}; r>;G{oE%IZ mR endstream endobj 2883 0 obj << /Length 1763 /Filter /FlateDecode >> stream xڍXmo8 _7h$QIM p0=JrB˿`|(ͼLLCU9ZɺUf: IMga9$Tʨ*WәǑM?}o|gDyBn:AH~%u<dd&7ZN>MY4+w![٨mJ Li~~~|ڰVVMn-t5f))u^[ДAtFIioҭ6$oW`uWZBG׺*X5~5}e^,ܗL 2kَ.|,3{62SB鲨l^a]znqJZcGBƜ9_)!SFE}:F͙֤1`tK=E׌47$} ]C?H>^  PáivRCǪEټHJY"5b$YH4!)9zXvKk$*/)`ڕ'Xm0(FI3c8sXaO/KoskMI5N2vbnyhsCH\nD‚?s)wp`uՏrfe~s+CݧɋVqh1~]S˕%FZ:gg'Rů`pNmT# DI`iz 66 6Z2ciSsRXl4)%hQ]P@KijWFwލuj7(V`vk"BDMEӛz3٘XSd2Z :Q$L"vOԙuŽR*]˄}i-P=^f$5QSՂX @婛mB hʨw~ g&}m5`Y cjuif yS*[VVjto {B,,άZ.y o %C- 5n%i9M@`d`6%[6 G f-Y=^ϔI? GXV,/;[75%w]f^azаҝ+n'D'󷋯9Ⱥ,iZмZѰɞ/ԍ}M4&%i6YR/yڲ|,Be5 `%`Uw60Zyf__͛5MСv޴t@ X55 ?ug_tz4}!rIQB+YVK#a:TԀC4Z4N fGTZ[ͭK4Lf1\xSIJ<.Òk;ƨ%P~ºNw;hRtMK6?I;?N4z<\觌cD((Ӽj=DW7mÅMΓH!I#n?o#Wyt [Ϛv)FW5V=P?Xʔr36s[Ҡ endstream endobj 2887 0 obj << /Length 1206 /Filter /FlateDecode >> stream xڝWKo8W؋ TZR^-g7EsȴMT/ErhYj-p87NIN&i9&EuFT&:=ϛ8P$rhj\ \\j%(Y;mWU\m8B?N` K,8  ǓhᏒ-3,t|=@]OBH^- Тٙ xÐ !?$&OMv}`%nx[j5*7rթ]I%4tymF˦>q]AP,ЯnP1 f9Rb}-HyPKQkT74 aPPf$޳E%Kn 9\Q[J1L324l4_42J`l[J:oٳuF5S OꁛFڈNh|)xճ <\m庩W{!V@8U;4rlHY%VupMWcZR2wMgOCWnqA 6}[ͱA[<0|#&<\_vjoڇ^v-sG&{ U,.:!> zHQ.H%P;F4[K,W퐿$Sz*:ϝS6qowzuSXrՓcےwuC)#(E9% !de2RCW"ɯs\074%Ҽkrȩߨ=u$a&tUcOٰU n4-~!ڬBҢڑ5f(cj.z0ņ˨* ܑո>]rڵqť6fx ~5>͆+] 2$/.2I7 / wcSۮŵw:^0вc%VCكp~vڏE a` V3h8"EI`ސI`QBxl:ڞ՘3%vRn˅{^B endstream endobj 2892 0 obj << /Length 1291 /Filter /FlateDecode >> stream xWmOFίHͮUk9V UU&^l\}gv6sZTUgggv6'D8$lOiu/{깠4F{OJ9RD$ݵM2gt=7ۿ8&ӕOtP &׻};m*{ct"sćI K?1y>x|'=/f=/bD]rLg BZ1V(nH ao6V2cxJnCL!(Rl4մLh㐾O2]ٍhT<->MmɮzqҬ^BY5S,`~:TI|6]XY܏EE=lٿ?S۳;H gpz {[C7Fz?so8p~8{z$W{0Q Shjs{g}޴n7z֯i g̀ L _WNF4*Lg?0r a( u~4@sz츨t][+~,>3/4d͛ endstream endobj 2802 0 obj << /Type /ObjStm /N 100 /First 977 /Length 1475 /Filter /FlateDecode >> stream x͙n7z C$3$ #@S@hk ˛ڈ-$>{@Zm{g?!9\ƙJ2ћ]4^bgS CS b}AM,ZBd#&#:K&`2ibsQ/SRKeCoԚl<0 98#B0:PKZ(ZHTK]%62څeU/QbT b'6^gЗZ?XI{O踄Y-a%)*,jF"Au(Sjx N_̞ B!i58kV68h1m#‹t)kLe1$-c2aWe;XDtK-~4^kDVق(^00@OxuWQLiuK AcW'p@DÒT&W!1h9TKlX&K/5|I-r`qu~GXSTb$hd A,G#8Z7{#!3jmXoSuوa@'%jOs1%ePIG uR,2(VʓIsj.3/)%7}7y 991YV[0O9vO 0Oj'n^?,f\i޶VKo?߷x14? |4oa.vZK{u3}d.IḀޡjWs J@u S1>lv:AƹNpD}8҃33)-#zw #ih7ώG-F}G`!6Ef,E߃,:"fw }(G{8Ξs$ =GB9鈐/Tr=L"¶{܈3&3]<]?f`Ҽ\<\O;mt,#u$6V%G$Uf*s槧?\V7Ǐr~:`g⃽^~犆}G\qS6 $P{$PaHۘb8|D[G^)\\ݷ|zk/la𰼶գ>6]_MW֚4`;"sMs\󚉹'5"vF1(1&0uDn&' !̳|!)Za̘pL2qgqύn&~F)q?맞^w9}9b'b #uD1+'LpLiH 9zxҘԓEYTv> stream xW]o6}ϯ$GJDmC[ +jcClѶY2(:_~-Ng/C$qQc^N,IovU=|sv!_?L8%9͙7_ ]K)vZ ?ap;\$WRf)0JSN}REg3_bBǘ KEBX ·vW Ѥh"A5>1q-m9[p!o]!~- hJ \rB3_ʨXTvWwҝCѬݫVٺ"nJ%L{$1o\1MܳhJ|M_;{>ǡUH)49kZjveDN ?7&i\PnL})1hbCM`xO[.JOPY?4 TT]ژ" @(mWD @/ϖV+:5h~@ ޫ+]ˁC'%5՚Vk;?*}t$V?Ezڤ"0 DwM z!#H(gtՙjPelGAf#%P|.x0 '00/8 *Iߖ>{ڄi,` +; ~yg3WLNxS+(33C endstream endobj 2903 0 obj << /Length 1531 /Filter /FlateDecode >> stream xڕWmo6_al"wK!햭E~Hh, 4\9q":=N 'E0DZ_$\ܬYMh!p6|xq|0'բ\zjYi8d:K;xMRٖr:, 0LW7/Yl7M@th^M 'Ya³ixڬŝ<i /N?j^uaHw<=U!D^Ksm8*Z9DilUcsZ07Bzūqx\)0Jm]oz_Φ9dzTGb3h7rbͺM3fΡl~R S ;kCk'j#m)ʦd\5o1os${">ScNo4 0#I\xaeKW}hēbTH&H1}&h",z'g#sj[wЩNmmןǠ1zU3ڂm~,LY[yewܣ%T=:ɰON%`@0{t^1oO{QGC&Tl{rXZY1e5"<)1t;8/N2dz|S'SŵLLgx缀Ts3/Ұs~؍|w~oE@(#H6pm{z6K$&S_#oWy=Z =6R/zF7M/+88J?QZuV; vp)3?K )#?,Y!Gw$$i#,vk> stream xڝXmo8>" =NfvNIfJ ;M{/)2P)~D鈉b4 <&ovBo_ sAh^,ޝ}dZǍl{enNaFQLojWjI/>-/P,"IE#B8SM>=X^}^rQFW¬DžiX(i*jtzXm}Pk ,K1j^$y03pe)+ϷU?vH({u%`JrGxz*G]߂ƥuQ;TAWHj `h5a1 H">^}C`p ߦ(F y<{$w R ̚NcEsWUYT$Qo0,ySs']ݞvޥ- lo}lQ{eՖl)4% Ƽ:kG]<h}J+b`C(^#3K]v![!ڻJ{xHFrw8Ƙs,!<I"lLOBfkc-⑦Kgƃ| S[df[۞XYރɝY>F7e3 iI"vʮݢ69H "UO0;PP>ףcХA\hq|,i$S{^.4J [S6 Jw VSd=.Ḱe(kĴifb/̃CM@JRL+"SŘ68lBK`]&ql1S̒Mֽ5iLꩭOZ |'S$v_9%׸j: ThӨI?A:%hJHXκ1hKgGʵb*p OyW"rsѺ)Qw̶tXu)固9\Jd5,C>G#=D/M9S4!ִ{bm LKCb9t%yFR/40qir@Rtj}l۹2]-Z5^S֓۳mhl1]0gn Koߥ&n? s?\{钗/xb(FFQuRC|z v}:З-FR69חi{Z^sN?&>RCZ36F+e!qw9W0ٕqvJ^y$;WXH` '߸UP@;fL!Gݞ+\6uELY'-*zf {1U8-(%:G/B0_]ξG` `/7,<ĉ-?8+PpY6$Y'Gj71Jsg&*^Dy/~>|﷿)5lߍAy~EJ1_4REbTQ9 }>?hzvl3?]{e@1OW-TCckz{5NҩYC}yg^[찺 ZGBdǼvnJ?Bxq`M'n?l<^?ah8@G0ߚ{VT_.Nme)Bqlк`U 4 endstream endobj 2915 0 obj << /Length 1979 /Filter /FlateDecode >> stream xڥn8_a`*SEgEg2%/I%`>~M*z!y7ƋxQE2M*[/fW[ͫ7|GaUb4NUtʲg*+ `IK$$]sLRۀdqfu<,ϕ1%-<. ?(*5L T,O"NAq53\cEh OHH@zNVQ5n6WP x5± L.zBd("55T[xEm?y4WV/5}.q6-L.whqTӞ,&fsW(^)^t}J1( GO,OäLiR)?WR{4|<%Jypoq|b؆Rz[B1jE7ofgT*~ɨrE9IC QpKVZ( >F_*giV$LÍK}k8UO^@ӍԠ*$< Z*E3@JLJJYMi_e{Ȑa2]6B>~jãKHr̘H]!y*-)19AG,S M+$Ys<]`ccEԤ2{n%>҂qТ-ӝθ3GsE+'Dz4ɻYK>Bc\V{OqSx^W!_ehʓr"PetϲC KCoHk[%=j~_qA._?'nòW1OCGP,I t^?2Eh;=C F/yw)kؙW2 #H l+JF"Fj7?Z endstream endobj 2920 0 obj << /Length 1356 /Filter /FlateDecode >> stream xWo6_at/a-ڴhCFfldtlt#wJgl{:~GއL?9+,c^&Ŭڜ~[hr!#狓/t&/E)grvku 8Y,$eg_};T:,K2,^\,F(:J^d"2N^#<+0"kc|EPƬnkݹ5BxSO H~DJnܔ \D5v;i2^!G\덦 쮿 '!K^6鹁ft9=cC>=dBP?Ɨ]W#R͜WL<*bX2|CI I7a}P3!>7}f~%<赝Uj7Tw BzWc{ե6);?1<֯kY*٫:LFN٥#_k>#w|2- z_^6[6(E}#I<09~[HPe7&#ż S*"WX$}BcP_ G.dUpi^|b_1tz8F)I)HEr# ֓),߱ Է C{+x,<./M^ۺ;̂OdS}g|3o;M{1#niVEKʩ[=Z]fl4}ۧ ~6 ɧ0B@)sdL@6SXwfv_'lip[0X?j"l6HS:0̂%dwf-e$<:Nf lq ;jYA#KL̟ssOqb endstream endobj 2926 0 obj << /Length 1416 /Filter /FlateDecode >> stream xڭWo6_@M(K-M"݂bm""KE5:A"x<`X/ˣ(id$rR zPliMNBXD(gbd޻#\[e8I?HAN{Z(x0?O><*8?;νXL#4YBYxJ]6xelD89K+qCgFj3Ws?ڣו,z٥Nc, ÅW^z3ʋΌnl UkXaD%1eyy<E8OCGe mT) /Da,6C ,c*xnLi@Wp$ȭ2Z5~*.3bxa9ᓏO/'LKBgNPʾ>nBa04>!  > zWk!Ouz/#,HehS@u,ɭvag:m|mTWթ{]kRODJÒ`#em`§KT %ߨ%^Ɓ]N~ F8c)<`}_/0> ֣ϙM&Oibz u ~5Zj# Lޮ' endstream endobj 2935 0 obj << /Length 1812 /Filter /FlateDecode >> stream xڍWY6 ~ϯhb al E}AckgZ. &EQ"eQ$8qՌ_HA?\8I Dr?TfwZm~E^~>8.~yC^+4 <)/^-v&aLP楇8IQ xyL6׫q_HDLӯ?͉)H+^׃]$Ͷ0#V?6joo#NOҤH0Ž?ԲF`hM .4t#¼oE>>] )9atLr[] x׺BMQzoy|7cs$`/OW<+|ɸUucźv )c[bTPm9'88K M5v` "n7~`=rw%T!Iv9ȌS&1B8'dHlHa ) Y0đ\W܌gHIJVs j< Bq3 0@~(L I⊨}Ō<;KkroX$߹ 4*s҇ڮD$FFO~KBQE# $; PxPVGi{B.)^ 'ch7 ;7.GC,])mhݷ88at9ޡKNseWA7ݹx#4\efzb ZhcSPImYD\vE5S%.2auk b!lRPG%JvO|L4'<|(!<@xqq"M_mYc> stream xXo6~_al/4P1~Y0 tK%ݽ}e"YI ȣە]4b#>YoE4^Q1׫=l||ƽ]u89yo<^j<=BT "]8NQΤB0MFx_7g/N0<^xD8hK(FハzUImB4v4aFy QfRzA- 4|{9KfF, ?YBwWwؼoVhQ^U5 ~ #$ۍ#H4Ȣ3IFCf7@oTԏ8J h#_ I Ĕ=0i/ 4N$ v yE+vql3F>?ޅ< #pS<z-*SBK!6ߪ <.晣&jp%uʕw yx"܍!~~LYKli\=/[,AZ!5fQ=ƈhf-*̥Eb+K<&eUI0OHlzB܈%Zz*\ɢi1ddԫuT(9k}Nz LRee4-"^e`R^Bz4^GCD/RvvMۥJnQpZځkmJ5J^󘸅B Ppi8fgMU5  IB v8-چ;!)վgoa,#4W+tKj&P10ȭW r6QjmmB$! -}i Q=wL|,O휕s~AڑP-N=I=> !nWk?WΒ˜fZVxESO'Mxނ[5 endstream endobj 2946 0 obj << /Length 1236 /Filter /FlateDecode >> stream xVKo8Wً zf4iM6==2c ,;P(E/ ֈ87d ?6H $~<Ȫ=jWl=p#:O/A0`$4a}Wx:Nt^|4~_}Åy/gr8aPq69><^pA y10A(gc,& }„mhɻ,";UC{r5wP&NLSNjR}Aʒ8'1oK&P&d|T4@E,k)gESn{~R.xd] ]Pu:5^6˴ԅlL^h%J^NW(`VL/UZ.,B{SYy3ₛt{79꥚Vm&+n5"3*LQY!5nI+̒Bf~JqY]G`$BsZ-uݣxL$qejNOJBSUr|^.|*{^ ~d%ؽiؐQ<'46Z o+Z/H/duu8} U +~km >q)ӀeYF4td{?l?t2B/_v9VsMssa Nl۵G$A[܌s^Miod|͑9>G~pJ" " x,y;@u,LcFFnj4Qvers7d%FV)B{x'>& 5 Oj endstream endobj 2951 0 obj << /Length 954 /Filter /FlateDecode >> stream xڽV[oH~ϯ@~ >8jtbJGOz>9ŔFu[shXw⭐gNODP9mjT`qoQl<?: @tͦ~P*i"iL7UDFmMڱ LX<q7ܝ;fdJ3P]U0P:}L:06vpltOCfMPH=UŒ.% CrR E5I*u+,Scruc lf?3S& gV37(_@:KР7>wk]jXw6BIr\  endstream endobj 2956 0 obj << /Length 1514 /Filter /FlateDecode >> stream xڭWmo6_al*c1CVvpvhAbm&"(Kx#kP<yo=$Eße7"ţluĝZhpۑzP4_]M,]ߵnKY֪( FA' ԝT1SA D?_?zs1C=1yQD{#dĆiaPOsml.kiUn&RnQ2dqaĢ&I-k=U4(RpF,IBaliYPVE츔Ky'.26*dM^J0d,I@ 0VEV]RxH&ΔU)|m1diSv6yeQP  *u,&B1 tAMJ(0 8?g;r~UXWsUcV&e1xgiPU]t *9C;K;ү `clXKA2 #dPqn  m66"fj 0t($Ô\깲.4^eHA~Zrg>-m##IwD!WR@>sW={ Wm.k*nPcVmdO Ҕ{.ZpA3:bCOJ{J 0z:A7Tta6JpA⿅;Lm-IW g^2YY,aH=nC&K.jj* Y3)3K hD (sq抾a-. B7NBC=(4,sUg -r2d#4CrI7e! LꥬIAҵUsRAdJ*Y=Еj+̱Y0g*'?c_aƕf 32=N>dJܑ<Ѿ̥3e[@?=}aH酁^Ugu6[Chv,=t|~Aѭ[%o OaYyvC>R7s7Wf( /}ECsOu-b`L> /ݭ«C86\Mݤ8E”SQpSK~/rIP!:|C .8>bT$ zsGF]0QD3oïF{Rv7uu]ӓ1-Y͖4U_|˳|<~Sxq9v`o;ep&t=+ͭCڻ%D7N4BVM w1:W(zJ[!z]dam_U}4 Sq0^xkYRn*y?ҚgNix6gOUU1RtSG98ЍsO4,i3fLpS.Qpx,+:mZ_0. endstream endobj 2960 0 obj << /Length 1152 /Filter /FlateDecode >> stream xWn8}W}Y Ji$8(i`$B n"κZ}Yhr4spn&?dI'Xc'ʍ@p'(r2gW(GtQҍdA3w:MƜ-`uܑF/bg4ॾC> /NCz^(|x[ze{+6׫V{K7/Bg^^ ;&إbxYJӀVZ;#~}X 1# r z3ϐ.|~QhSC\y*~̜k )K{po&xc# Kvel]y\M}ċ8F}ϯPÕkw|Ibtq( )FZ{X9('|ö$;ǘg.K J`M= xiVKMC4tc咭1H%J!.t]@0?c5tA8bcd&Fy ;gzنTil ,8.t>Wn S)A$tcͶ.l.ŶR`Obg #YfG=COu?Gxc㓺Fr2!"TDU9[}Jۖ;e6+mEoa\85fJEA>5$Sm['A=k|BUBc7kyzfelߙ{J{&%_mNt?'VMȿ7Rwv꟱P Qe\VwoF}P{41%RU7\¬gϻQ[ +(UthhV;Qo bm ,(Fp֪QIl!jqdDQ"Q*Vueb֕o:Bii֬v_ch%K+r#ySlyyLn!;t|lCTY3@f\0 nZB|V1T% endstream endobj 2964 0 obj << /Length 1123 /Filter /FlateDecode >> stream xWKo8W ĬHCǢ"XMDnC]`/ Dy|3> I,LŁow0'7(0f~鶪Q>la$} 0"qRNe#ˉ<#0yGFkoH>q/P31t!eA{YHf!  '| =FBe ,Te0rZ9ޱ=_[JQɉrV5hZU9ÃhO2ŭDmw=n# (F)qN ]Ug}x9pGs\z\,D)&%=]ǔT(WMynn{#G(ŲZ̜$Һۗʠ ˸Sh`vV?Q{G>˒5p&;Z8JQ<ꙸ)ӥ*gϢmm8U[Cl l@: C<"UTRW ѐM $L wQ}Sہ׳X:;MSdnBsB6( I̕^6@!"2z=./Fj!2z Dܞ6WG|C0|i4JF& a)42՘lk>aZ}A2B.أwKfQĭK /WK~#6aсO;[V5h=sH`h[U/ p*nL&c4+8j\o(SNUkǣ1\_qL 5s]>5ra nZJRgf}]*msNAN{ U,?#TAv:=Awdˉ,Ken٣ikHlGIJOFttFS8K};[>gڍeh4AB]:.7Gij0_=;:yʌUKT̀Zj ttJ:W*ĝ,6 oiWvfvn(!wH>z޾>G4Gnv<dM| H6 7)`. _4Z endstream endobj 2968 0 obj << /Length 1504 /Filter /FlateDecode >> stream xڵWo6_a`%Q5͐mik1}`d&*K%9G9r<wbOLp1/|RBǵ  /7Hы3)'"EXl1V5Oثt8Y2&d'Ήq4JS2oGg;2J>q/&"! | qB궴fәFӏ/7OxV݊- ۀk&LaH"KSEWI澗`3<>gAƮU-uN@wh:7k]p+U [sUcW/2qŎQEn<(SKM6^3N"pT=z,ڬLb.; :!FN :!sBw;eq $!UVoU[='6&>w=JrDXKFY=G`? lطXڦme| E1#P'r#BnZĄ _w\P6Ut2Ia{bL;\ ;_DL29Fc1Peq!K4q`O Og}@ CAѡq62!1߬^\J{՗=2NkUSD@i;"φ:3-o([3ƈ 02kSjڌ7(|| WP]kfAě'PbV7޳`sTwV-`p0_MU_9{8gUcYH]rk^q,<-Jbr$f*l&-pv0Ex X/r[OAesWHf}Wcx' Hb&qNښNHkҀK3L$Pnl>P":HX>'9|M卜rKNߔ,Aq8I)ÌW|KԾFxra 6 h*}5uH{蝌r~ʴ+>W['!? IR>)?Q$=}wZߖCNe%sX2i3d=f0+(PbИ ^FgI݊ s4iP v3p;v( BҸf?rmg.~UypCI_b}BaOK>?r;ߠI0Jaz0q__ܜ'~^{Ln"Q1!I8QICZ 6wK^k< f' 3iR$&ᚈ 4b. ;o"j~H4RyF˥T;l'\6`8]$Fl/˜>*'AqRm_fހx;Pv %@X6v Y#3Bٮ 0W JzN`xSk!b(/ɉ{R_2pD@j~@v:u Ke珠OASe#r_ endstream endobj 2972 0 obj << /Length 1458 /Filter /FlateDecode >> stream xڭWn6}W YQwmgl6\ }`$"K*%wٲIݢ!9sc1pO gyOx.gn? ⨧y<9,ቓ$L٧[#Xq8o­zTZ0 &hcrqt:Y_̋݁͟y<c G 64]aP1{~aOi#YPS^6fK.I8"B'Ql/nS:S<.e sfJelckť*'}nO#L|sϴ,ӼI+ yUdHskﳚڀ "+zRieO<ᭁ]h5l6ʷ0!M;^ـ<&sUם+/U;Gsm;VWYUI\b`Z'9Gu 9@tx'3s!JuN}kݘGIBMU>y3leZ\,:Oܐ{y*-`(峥V(WyBphrM Y8^|V'˦8y 'iUTźڮyi0#'Zϓ7h5x<RxP˓(W˂x 3{\ҷvNq oD 7 (@FPX¡66n4WCHlP?m:keت{%O,֬7?"p\aNqz_heݫ X"/;þt>>FE{wZj tDl[Kos?ш44'*YOu3Ӥ\0 !Lc;  e1^B䍍L! A0ޡh^>ٶj7RI=2=zce`cr[%3xNJY7U91j~G/+t Gn>Rve"mEَS}s|b/qm414[ fmG,T] CYHD3ZnS`$Il endstream endobj 2977 0 obj << /Length 1239 /Filter /FlateDecode >> stream xڽWKo6W"zZڢn]HȴMD ^C=8Eh8y_0dE4I>c$n? ?@^~NIh`2[ 'hPre}ɀ4m5[I#Ą)K8^ $ִ[ Z ^2EKXbxRK"Wj?0?d4`>? "6ȤRoHr)Jؽ'00FJ dreٜnV.چюcFf1Ajaĝ'D0Y ^#[y} GLpBod-TVQ)]\k@MUvǍȳ>[6 \ֆRwov4ChXmWEUkј.r];Ȃx 7Tb4xİ^UFDV Fd.+ȐyI!(k;6ߊzԫL_移z޾6:p>d^G83|Rz{{J}- Y: ){KacEKeTCpQ`l+^mx徑oIqp&v]lR '|zMٹ y> stream xWo6bF!Kڮ`hK, ]'wǣ_zEx#;:r!ϣlT,N|ճ7O'7䯓Wq< |y0Lw{vQ(0d oE1;~C5UZ"Ib">Nޞl.8:yAldˆ,Tp{fLYݵ.r&c0b;m*8_x)]A^.u׃Ss>ԴnjP݈Ou; AbZn0Z65Qg(䉔)ZoQ SdZ29} -m 7d`/?{C1`OCb!Vp?%htʓu:ν,d't~ r|ou)1AjT_u]Ϟ5_UGx蒓%7|ף4Ea03oZ̙+L?! \J/ lي{V$sQO:&/o6!HvoO|?桩` \DHx; b6zA5Q i3< 4} #?ChVeʸ1ww^ g‘QOSw.(:ʏtBFkZ+cggՊôŜ⬜?t` =\ץ&=tKRYJ m _օ  ~{jKPqoݗc= CLr0u;Pa;m@vh}1c|r^tX,H-{jlH):EW:~{&3198,ZąZ;c]ևȹG ׵|׍I31 ,ŗ:W@3CJѰEߕR;u5E;N[! 흢B]Q5JKp;":0]{+oqsOB/L6M е endstream endobj 2986 0 obj << /Length 1574 /Filter /FlateDecode >> stream xMo6_a` 4Q_:&mעi; nLDdS${eGm!D>Obd$aj}9h{3Ň'@ /f'?ʲ2*d-&st%N~$W<4ͼ.ZVm*qg'4{{rCGD$azBa1ɋ4IJ3Zv(8qٔNT'umT0V`E"J"EmNqY4ygil͚Pتk Vt$7o;;h:'od[  U(a}s귲&@̀YkpiD@,*VvlB?S.kC(b΃“ןrҁ=d=i|#J]D<;Z_xfNKC + "[[ u*\NZՅ_-yD}vqv񜖧M7Q/MR]E y*[Z }/Nީ1l 6%YX$0 E :7fG~{QeN$G q}AgJnE}$}9$O=8\nB{׆blؽ^quG ^w+>Y1HPfk lFy% sI&#b=m ŐV\ Z6v?zEmbuVµn7_^ (7#7;jлju6btf)g1_(uς{(U!6M"!r8ϑT|Saև6nTa{<:̟ nS?`W}^+C-?KΘi-@8(H4^d^S5Sfl17``;AZޛCl;, ޙqEwnpWa(6C(۩N@CPq8S[ARfmג񇑀'Goz =k6Liz*!+]*;a\v$wYǽɕ]H?kAN= qU`1QΏϔ'9?^VϠߴ|LM58ۗ)]G2V_<kzX endstream endobj 2991 0 obj << /Length 1909 /Filter /FlateDecode >> stream xko6{~/[a:7ʒ&҉wǣɖ8EC:~LlL{y$] Z/'8fpp9ٷ?ıNMb27^X%ym<3gpox͋37 p<ǼeK4pr'؋݉Y6 cr<؋- 3gA &RXyǾt^Y~Ofgq~!R5ŕNJE M%<0>؁M7B{cް[!se4O{r#9P|Or.!>EʽRkbWTo fl jFt;!` l^@!WWfoK#В~QuS\ӸnMeVh6pio!KpAIaA3ѨO3R>CF!Pn,~kgrui&sZ :n 0Ɍ=cS2+ 1Fn-?[i> #t:x^۪~Ó/o nڬ !r.jaɲBH}`%uL:#j]Svr7׳Tണ1g, ݼ=7AO13BYK5}(i>JnamnH=$=˷d"T)=bkߤLX^I:pd*kiHG/ 9aut}ʻ -,%:Ӗ($WLj @4T xUk䌱tOn柶MqȏPR0_ը̯6ˏ&wzYn*\a|*jz\cDTO]ɰy uˍ(ʬU)P:rOPAkIιԅhh~u"jw_nzx6dVȽQ/Ŵ*+uQx=kr]]PTS|7@ "KudzJm- )-Zu7a|i됆;(Xi6e‹XdH_Q;P+zO'&ŖAi؊84/0ryF3p6l.{+]U5g9FM7\ Q_\|YJ5ҌZ#Ԃ@!P"Nִb3Pj㜥!Q- @Vt/ЄKWlvNyyGh3Ope ή4MP >⏁~ mNVfwin kF^ ј}%0BDYA צCψhzC'HS^L/>DӻP~/qU+JA31ÚZ'iU>xuѱP@&C 1c+ϖЦzaCD DuƋrZ*$-esO'(?.Ӭw?2>(UqѡpbC39ύ'|KcMCIBf8nvD՟pXh45,R9m ,^ 'Dd86^VF^DZTIPJE^ _OaԔ9< ΫH>cPL%9Oz!踚R!k3!ښ iT᜸ufE,@m  8 endstream endobj 2899 0 obj << /Type /ObjStm /N 100 /First 985 /Length 1855 /Filter /FlateDecode >> stream xYێE}߯'Q-DA EI(^6zg\vN$dw<"ESuێsTF9άZ$(oH9 !<^A0*D/Tb'_E6`*F^p"De p2[l)4(c)})8` +a+b,A!eqETd(T0%9`ś0+ޭH l!ey⁇Im[c  7r!1Vd TR6 1$3 Me [r!c,()" DAo1K,e,r.s$MHeU,_DTa+YEo%>zOIƲxd$FH19$sDb*i1/' Bos%KƊdU*ɐW9 Tr ɛ#jeU"W!8'*1Ob9R9h6N֋@2[l@ 0)v$Q@ )+af"c"$SlN<8]Ԫz2OoyWϻV'Ӻm]XOG4o ^_CMQ2C­*SU˯ .%gj6{y%+U2ikQ+G(?Z$I|D ׊ݭ`zlNjySL Bl) 8**EY˕]Rfod@[2Q gWg]x:Kg?Nn~QUb|\w\Wh9LEۢj_Owz.|&hQ/uW'%{ح즌yO~9xpd۪&##=v;ׯ?_˶f쪭ǍC;XUr4?{ڍ2:GeKQ~x46^i@_ԻG+ƓFqk]odzf!Kvt<P^,Pts}T 68'3{K|Gtaxm2kswwta8ܚtׂ_ Z`>:K&CcE*o?~RA|}$"VC3}ݔ Tkpp'ޯGϺwXGgf3YB;Ť隶tTA4e5TjEˈSQr=ksE9QB '#>=C?kOPuDrPK*M0H_|ZJp3@m,KlVW6LlgNN.Vȥt/ޔ+7{b aE+f&fJU ٶ-FWz\VΚn LPn)Et {zз R5:ޕ{ fjKoW<\>,'908괇!>RWԾ#=;'N[(䤂'&?ZBB/bVdw)xz'/:Ù۔\"߁}(Ib,vыn8zfK)H+S߭r鏹DރfJG]ۅ)0S=`R"g4[> >=0`}`k1' Hyp2}l}܇[J!m]Ѳ-G q >m)ZnoUڃǠ{s/Nu,W pyRH/[N [P~ endstream endobj 2996 0 obj << /Length 2040 /Filter /FlateDecode >> stream xYKϯb Yl> ddg`$/%Hvf?Cr2@ZrOw)%?^mW+z+6p3Zo?J"qۍIݥ{AW~\|OfgjSlza:Ryw?^p3 <%cE c_H哄#ө*_&N֐OOkIͷ?cx_YYY4߱lX6Um?ly-dΝeY3Yǯٝ-r9kJxӜ*LJ'=ƛC <)oA$B2 -h]8d0v>f=pjB9v ~Xpl ڃ#5od n{32m\׷SQICf3l6d*_fn:רlMtt]k+Mnx::$ Mq dЌۙNb[45t@i_<~ĵh@Hsh*y]>΋;2)^t|;'A3 ߗ/= Bz^0"^8HgW1${S;a=~mI`$ sp1ͱwR}R:cM .L6X,ke_KFܠ]f :Tq8 IHhGIp3@^c.~Fo1 x#Ze%vinu8@THСSFS|LBX[4CǮHGfd@f"e 5m}ڶb&O0/J4b +S@ϡO%%&ј.nZ 󳆌ƆBy.49 f $m[TZ0( m˚aYKGeo&Dzzc \7D|9* i9|Ϋ᤿BaCR=jmDW<5 )2A~5ۑ"Ͷ[~X^a9;*陖z|1HQİZ-9u6 qʞ)5E ֔;\g|)"?XR&y~ "8 QMz8+k3ۮn$!f6Ew ]/4m39P޼Lc6Q>ԁL[XTH_gϱ;KGcZzkHV^J, LUZ6yt/=p v`;r{mµ7R(Dn7=X9FS!Lt]&:XpDyUJҧA0fD%#)f2vcZ]d|.wrS ]: /Ր٧!/mj7O endstream endobj 3000 0 obj << /Length 2482 /Filter /FlateDecode >> stream xr>_e-*U9la&5ڋw0 I)R~}iy\{ҁFh4h/Zl&I۴Xw!a~n?oC-p v7Z:Sr$IP}J,EM8ϳ0dO};wr+ECOˋt%)Wu.WY}ma,uwEMٙYFo0c6b\!iNTwp,ǒ>s 0 玼 .b],V (N'."fdBiZ&x=iwMw[FA Q*mm0njb7g`jPFu+ٵ\v <ޝ`,TdIw=,OGT'5ڍWS CGw}=n$>ʂ]tّ8- vc -IV30a6!|oE(еҴ[}&c'DoK 2+`jHuk XqVok\r{VTfj(lfh[Y|Dm=anU5qWsZ&/NFYRN3Ɛ1)h}t%O&!mܓp eSo^u+N35o`/CEP1# ;(5g`QN#QGT- =ѶlVxyf:ԟYY+I8>M]#x߇*M5kO6!psǃ BR8iPs"%kP),)қUjJn nœmR4%ONЭທ;@TQ 7s[m6i2VS<ĎTJJۍHHHTe#@3~ ƶowAۗ t)΋a[܇g|~-e.W0R[+k)$ 5 ȐPgVhMun96JƖIápL͵(pq8r.Wx)Ich7\1ũVy_43M ʳip3 k+\MJbl  endstream endobj 3005 0 obj << /Length 2033 /Filter /FlateDecode >> stream xێ۶=_a%kEݝ)haZm6w3eG^(Zù8XO,V"`~:/h񖀸`~~q6M" VJ,ֻ)vqS_qeޛ)R(qQhEP;D"Z8A?V/+ĐzEY/,:]mE-.m `/QdɊܿ뛲m g"@Vi!)CigS{0 *3Q$ fz?i9Ut+4vI,wͲ KiQ:ɪEuE)HEwU?"iԖN{Ќ`lŃ'DCVWX^:Xk'W,d4O'V7 {Û9L-;wlF &"3l+;G*ڌbw !|yҢ2_ўգvCoe1Ot¹6HZ3b09vO9:<<魹p rͮK{CYtͶEm % @l i9Tt1RnXyX1e\Ǖ\?7|#-$՚8gsZO0I=r{!)f'KǂkZC{Y]O HGCm hS*Fͱ5|PZ<$)\IՖzva̒l4z%Tݡٿ|nHʗg?<ν,VPgHC™C){=<|1& ڎ7)u\:vs@!.}FH~aSm +xpf&tLqތbW&pM2−WFg#e:g 7Nƚ`UiፕB~*"5Y;Rqek5<~0v(5K^MD'/K ]"h 8NaM!e -,67u~ 7l) WjZ D ESjʹ1\\%Vʖ1&$ N397n 8_O Ŝ@w+:o"9lQ[Gx 47+K6lNGI}60h`NokjB(hBx? !ty]ܘ7*xu׈pL []_6Cr@ >'<.=)HXk|oP]{W)Ob1I~3Jn[iZ:BhN WͨcxZH:l.-,$Owӕ{Y[5#>Ʈ2lM9 Pkngns K d~ҭS]|smp7TL@h8T(m?SŧW4i9U/eQZ;"DnRO>VfדEBfI)Ky= 8H w@ endstream endobj 3010 0 obj << /Length 1186 /Filter /FlateDecode >> stream xڝWKo8WH*,C[lCH}Ks`$ KM~+f%j87/;F?R'?f;p '9͇8vxgAƝnj[8Azպ]/b韯qvUu\/L8`\?8 ~^F>KO2׋tg* 1ލO8wn*P}.gx08=:fI}z15$X `?8z`jgVyc'hqya꧎q1QtΘ@7z a 蛶ed 7Ȫ>}+[@U݁n_x-FHOl8{>@fNMuTd0W6l53s~^.mA9Ⱥ:GI"p-c_솣 ףt/CϛAnl2sS]E~.[u[!S{@(S}W`̤qA+{C{ !۴r endstream endobj 3014 0 obj << /Length 1461 /Filter /FlateDecode >> stream xڕW돛F~?b]0|FIsJUjZEkX߭K_ߙcKZtfDU6BVE}:nw"۫|g/W7I hݯ0 RNt՛*h%όf*qH4 n "!^4^'ܣy%!oA,2 2 kwxIq gu׾I_g8'u&ODk5D' vVP{ K7n ^۳>&&^"L E!웈AUXE{GF_k媕Ͷ~\S-p=l / d=Dڹ 1v*n"Ug{F5`wG29 |єN;P'ٿX◰6nt݊ (P+Nn@3޻;8E{0nqҗġ9SّeEV󦵮MQdjK J:F?4st; Z•v1,z[.Ҝ)y<#s:0Dk9xy9<꘽q{s3?>сPK*k3$?F<(]*;/I30Tv As̐ iQ#\0u/H@Kyqoň4d'1Us^< HT^pNmŹsޥ w\v.M&]*]xjzc*ndjN92O] H5D׋ yUԼPD-'yuNpj7TLg endstream endobj 3030 0 obj << /Length1 1626 /Length2 9213 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 3034 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 3036 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 3040 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 3044 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 3046 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 3048 0 obj << /Length1 1457 /Length2 6520 /Length3 0 /Length 7517 /Filter /FlateDecode >> stream xڍxT6"U{Dj LBHAz7i MzG@s=w=dYϐO h>A~@Q\@!B66#(NfA0[4Ʀdp ( B@DRd8EȦpBBј}~pb.$d hۢ!.A0!SvuA#2\(`AA0W[_?!a00.np0 0TBZ /py v.p/(`A*ZhO4/E[w[(C-@E^`P $GAajsp"GEB@sp=UU}QW1AD⢢"(k#/WoS+`)`>}PO+BAA B P8ΰc?kLPO#?A_Op׿[,`fW>!q( ((( 3-Q ?Kuꉂ p|y/9AKijh,5# `øXza>GUXE]G@9s:V>k93 z1YE5Sh܅BG W5̡ jֈVS`NLhFa++&/؈-}.oOvktQ ?VY:^6*@|%)ʑ6Uu>qX# ťbw}=(-0~"lyޥMlVe4 z0Fa{WR Z6 =uf_A+͘g[-o;z" SA fYovEߑp+4\yyz]'XMI 猴62tnKNP83x_%:L:E:a %x=_oZ%!49ڔph$@v̧f~XS?ηe0L>,*{*`C8W{jq(T%XBaM"m)-m:Z=#Mg_-.$Zm5~xC1&.V.KiDbۉ`Y8?}:LV=UӖhoG)4A8* /~0}%;ݴ4}B݊i`4<~fLOHZhZvuk9B-ՇPsGwo;ArI~fk4w OZ/UKx"`Ċ=3{9ڻL~0YzR$AUAg uwP 8f1/_~߼ŀ5zT2{8cM~{bߵ/_l7T`8]=qIje=իM&~+ 1AԧpoKOaLɩ^ _+zR)5z`b|1n#! ɴ5opiX;{ئvE}BE X}Pۙt!=1z0hpXOGs|EFt0j^Q/:~ܢq_B7]"5pXͣ+7Z$_-ĂOwԊߵi.6qe|3d7^}Z{$چOx,gnmX6XD XgFKbYǴվʼԖ_}ڶs^e}3VBld@l=v1mKb^6\ Lwyߤ(7޽\Iߝ>gEχ\Au6YTEJ, ^Ťnr/GUĂ5Lz/!pT<7pvM ?XoZ}tkS4#o-+UoWh[SZ_wa]ucjXFA1B0(gHy|}I{j\beP؉`V ^Yh;Qާ|e?bzM\><)qPI8㤓Cj¼s·'(pI/í,r?q\KTarہy"9 kS;>AţՈ}c]s(Hg#szv눴Lt! #dRb^nBJ@/q-oC?53}Q>V9XP3йr$c@e!M]aITsm6w=fE=hu/,1(W~Z]Yn); oO؋pI|ڔȒ]bObMralFx/[ɽdك{<{[3F)余 ƖI4vOe%G(K|}1 ݵ4ywq5+3& {GDWo %~\緾M*[ZשRH\q0X, QaZMc<=YJ`00 mB!r& |Yuq=9Ј@4֭>ڑ .]էV`49g=W.lJp&|j) YcM*"|Qr0] W!sk={OJ瓗GäL˯&4G3F%LгV)a_ZMgȢRďm>u4}>PeOZ3W:v{$zqKe43T[,}=3 & ~>1c~ 9Qd2QTۺ}Ιz&em NqYgI!6ZM$L%Ye%i@ai FX<2n8D++A_屾.I;?w*xR@$ՁMR^.{(L qWf.R_9JtUWnfȐ`rl?6(]Pֹ i'fyBmg)ò{is%b5kxCziYHI@ ~棜D9T#hf%deӑsj`dR𭆬]4Mdpy+LY(\2J荒tL>ĵ1#O ߥE3·[Rj;/d*62NհY Zn&D@\ȅ+oxf?ue>Z { :R} ;jٳ~SjPy=AW>V97֗wi?A\di$;33Xl~jy+74wUiɺ#Aa(t*Ū6W.js9LY\u3߲okk6և?wgoP\jz0sIBu^=˭./0~^R]s,QQ$v3jrEHYI" h/p ;E.+Nt<tWzuz| VnH^2M}-d,dvEԴᣫ/!I*,@M<3EMP tn1j{i?a2W0DHqG ,'2:RN?|!XM1OJҏ(v@.hSb_'{F(fCnyVQO&)\LQU `_F_S۵7(S7gK7h@<H"d2M9R}'1.4(4Oͱ0y \)ζ33助"q#_=f~퐬3ַww&`[,[p}yYdg.;B W6~|o7!ywjo09XFuߺnߩM%CTZEh(ו+bNT^&F4λㅄ[Zc,*13T sX-OJE|m=bcG°\x& L݉'Ӹ\{1$]衳[o bY[赞RF3k. GM XmL~uxCXg)"c4ǟڟQ ZxAkROr(b"Gm]!w/3N*j&PyfxUҲ}؟%t]9Yf4ܷI;%#},a0;E5ݘ)v/+9#Or{e}%kpyX'Q5QdJ4#9<,KL2{,vwcUn3Z WXvoNDmèe0p]7,ƓfXq!UgD{6}ar> 7Le"e%lz}j_ j #)/;r3g|Mw|n;zF?d\p R2|lxn5"L&On|k7!2RϷ[L}g ׆y,slsoֺ us7_D"˜z 쯞 fzІ߰1sm  \.-`'F IyP*}tAKpKƧMHgG;N}Zo|w,U6~ M:w C7.wy &BS |AOES B-2soYHM۞^L|rJ4gZ^ۑb~/|H}Y%:U Gj$:sߠ#CqMx*0؉Ұͩ"n >Uj2& :֩~-k gˮ|}攍+h܈"-yOs ؏ቧ?|PvyF|JXZNhZ,<-*e| nt@,}(5 8hԏeY)U/@Ǩ$A%VGP,Ln5۳؁Dw~n >O-@U)6B O\! . ~u8y򱸨*D,T=LYg^2Y_ hǥH\p(-Brwi'^E&ێEW%\^"<+z':wh־]~mZ_po<[ݠ>XֆtzȕVI,*?5> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 3052 0 obj << /Length1 2904 /Length2 20820 /Length3 0 /Length 22458 /Filter /FlateDecode >> stream xڌPY A;;wwA{p.!$ݓy'-uu+ 9%]xjjL&&V&&8rr5+W[p@g+{?,DƮ +P f `f0s0s01Xg3v23d.p^V<@eJ ` lt25Z@MmV@Wtuuad`0sappxXZT.@gwWc;?1,\V:z; )fotT@63/gcSS;Gc{/+{ -(!J07ehl7v756E ! 0UO}.V. .Vjdfq{3Q;; /~bV@SP߽9\{{!s+{3_e92[9~,v&&&.V 4d@T#Tb:|T13̬L]&@ +{AbtV]&1~>hm~uČ"ZRRDCgaer89~dl?<uփX ~;)u/# 7[ۿTlͭ+h@`M5/h> ,,(:VߜA3ϳb :W׿^~Л?ׇ 4[w0 ߝ!LYr:+xFp/mqkegdG'Dv)ɂcX|z5=g'_ 7]2Nn\HJwe+c{OeccgLpH] Ҡ]x"^̠L$IJlyVtF9(SRοl}lwGWN y[r̯1H6kWȑiCB2_`o(6ҙL=Fgos ZZnR{D| n {Ȫs<4=nRZ>=O/gnHp0ґQ 28ɇk`M`zuq%W.^NtҸd=<lS&MКMOu0+ ң9s dkyHdV̪%N#o{ PI-h gu#ZS51صt  " uG'(rc{nocv?"X:ژ7G*Vfc< \UK Z˖OSQ n~E(.K^ү!OәYI!8sIָ6Kwי7m|=o`<<*EԸjkpt7?<#ftN}9!KgzTI Y `Q@) !,=O Ipe)u\`q96}9XcʬYjoq.EfZ3kc+T-!Tj\Q5F)wߧ$koZS\'5 !Nb3}0PH! + 1v;(7K|K{h}3Fŏhq`mʶ#H ~{N/s Owc&9YQ=^-u\ GpQ|ѮJ -S=.3wȃk=- ['k@a?;"\>].Zޖ]=4ْQ$.YpmQ۪Jo =bߗJcq}uHjWi|KąHB7Ngm _aX78]tY}c/؝hu\|y\Y$&7#QFG B(̫7csցeY%E؂A8|>rk}h6#YCBO Du^j|ڝ{u^rg%6ٸ6p: 6<>ƫfs-Tvk]2 xK?1xh>;ub6px=- $?dLy=A;&NÀ&r0f 昌"͵Wi nдܯl^Tӽ/%AQ$#[H):/"{!B:DBƟwLH&0?hwec?T+iD_V8$Au_qYɝN* W K_ |H~!歺~|%J $[6vn00 QХW9e#Ί3o|z_tD\It<1P?RxUL/^E.(RВb QIK!N6əzZ"9im\M ~pڔ%rړHk#Xgs. +)a y(.wFp,0nI vƚ!mhb([AIlgઑ s>>"4ZI%e:/gH%/pt*)P!`pIc4nPz7V*]yrAwi+H ëY$A1Ї߼ q7GsB~OPj撏) mԞQ.? 8b&5+G7qٝ4n(K`á{(bw[!TzL*lƲoAyB{xIk?f~gMl=#W]H<䇭=Oazs 2DG/ѓWϹ6uPW]_U/6hMiFSݥ}ѳS&sq9p mF*#nj%.0$N2iR<܃jn<5?<5]Zv?HuR N( }Ne#;V[۞N@s^%퇩].CEVNIFHo/z3qODs/cDh2w 3ݷ ٥۔9}p[M gLmL-1{mKT"D0lQAsԧ}P:aK]\ڰ*6Zo.k:O,ioƷ':%9/GLmt-;|OWAͤQu?Ր5J# 7M$nb !\&5N WS>hJJvXh/bLHftqnJO<.04$|cЄi^ [ zPi챖szQ;r&=t\OCeUg)y ^˜Y#?u%37$y&j߄>(x8NXgb&Yj1R^LA59!MRxar&OšږZq;k(`凿O0\fnٞW0}:8"xe!zTA- #|?I9s+v4Fdcw\ql:4a;CǤ?NH>$P'Ŕz"wѐPv/b+`<'{oYړ^͎QqԖ3Wm6Wxu)_J"xɘX;ϒTMh^ut_܍4t"#]ݧonKBU9.g=]ĬoE,P kԌ&"#s'!13g-rg_. i]SX|KηMCjrKhGKSUTvhmNMЭ#J1 <gZa-4x|V>%4d~0ue:5HqLymTo$c(RAhYQM7~r{nE8l+9c a&G%d7 G M~_gzL}v2Oncy{84y{z 1$$ص)}$pl>Ow۬m7P D5itD3?3cOwA惘ֲO||vvk'EZ*އy5\8*m]g~ Y1J-;44m"|nmuTg:"BJ^DD]::k`^&tsR0U!(MaɥJݞ- h8VTȣ<~ yi}i[*/KOf13o]Qۼ=vx-L ?Vj!rd'"ekWȰ`^P9ffl!`ˏpW_[L{PFHYمяǧ 8)<{{lj6̓c*-<Ќ115*ʷIz\˚׋? bIqh=bvLf_EtX{ay-kÖN3SÌ&=;39Gbiyn> jTmUӉ`No*@BETEwLj0% Bnj˸W\5V4[K4>$Ґz zښ/:|?l;z.lOem9XI.^&&g GCf ޫ 9'Sx-M$C2LNQP2A{2l-j|=i U9Q@h.k vZ;Tg &U|s>ԴSẾRncAO|E~nM?[ 'c5][d!Fpx LTf/`L\z"sZ݌啼{? 1x(ˌbD#{XdƷI:QH$ްV~ 9; 3wy#ìi5PfŲgL,Z[E^HB<3PA4!k5d0Tr!y1FpUAv Ea&:wdPo["n-kB+Kklo{r }i5iʜ6,iBY#S!gR9ޣlb`ʮ7|i|vђ wIc<[ZLXYOc+lϚeDccAϪoAQ᫑+{R{3rİ'ŶoAOŠ\%]OfO<,E>qQ4}%Hb3mYGZik-@fgǝerQ9Iyxy!l[;ONRor:ҏ3ۣlC*---HV }j!ߠvK.Ǜfr 0I2^Ǹ?F˼Xjc]+=Buc/He~w:L.́U:&IRd\ TM7A"We"i)5WE_/Z}\3`d|E{1#P'"q n2Xd{g̷NPJ$`)Q+_O<:n]r/ s /P ຦ǿqm=Z*SRz[X"wE[wñ[q 4n{夃EAǛ&ny<y%c:aN9.tNp}pN6.-H}TL*79g* ~mS_XCYTpʉ}A_Őhah-Ai` hůcTA&"1ѭ T".L_Wsݗ_ߢp;|cmw&Jh "PB09]gVWE:A$hHe.fZZk(;fY ̉ !O];{;h}~d.|L0Z3,K5T:IvEv͊e2G .|%R/!y5<>.[ĒwOz(9 gg0EFInSρHېWSfQg~j}g˜ /o q7Bc*[3*P0a'9}yaڐxd?"iĊP䖱8yXVge銉ixKٯV[ۧAJ!pgG"7}09x0ԗXݦliÅG9E꺖qKL4.M'.<+N"rvw|Ptz))_Tȳ~˴Sn~cc,3B!`2 r`Md5ېWoP"q[:˹O"{,!b) s.Z3:&G䝼 H%w-ؑ<,Dp`D% >sdR,nZ؞{k}ޱ/|)pe&]=|oXO"Wvk[<9~6`Yx49Nh"_V'M)!]CVdMbwO)2Ns Kc v5 Z*V*􀨆MKI =R>o']@|QW{Z$'AYvwFadul'x5B{WEV݈A-6V?{5co \0,#/\PXS}WG\FƦF,9-&rCh/:L+AϏWJ: &=, һpvW,/{W& fVAb\tm%_6nyx&7ejakR}r1j,fO[ؒteɡ XmӮGd</?rf/5H\G6ѮfV"K;y_xwSu/ڠ̓~}:KZ-' Cz)++^"]iJhjtemBFruJEݖEе(xœԲM=s,@wK.;nH )ֽ̒r:(PWqBKy"T:iKi!)`ފs4։Iniōe0O$-ʽ^l+'"²+]1*/q;锒8]jcqCC?Q*+g)q֎Iu s5>uQr?Ws˪+/bi;RCV>>}g"%zr'܈).|gߋd4JmsO<)K6O _d]0󵳗QÍ{6sQ)em-/2.:WKg`i^ÃWT@IF{BEd3&Zbfh_+_oB&ztm{Z%T~WI&3õqt~@Pd""G5 :oH3+/ۗ0,U >XҜϏ,2L, k xX6N^!D旆,N-6W e Xp"$TD[Ƌ7lQJGI.cOQ#bαc`3ʤ_5L,t%|i~ui Ɖ~*U z$ωxI*.~@ oS~I j腙,. &0zƩt3 ]7+s{CA[8͔ 3ƱSJKJ @̨Kr\-6j|B 3!nxUB Ӟ+Z=Pet'~N_T.;,nH_=椊%}P'SkHD.96t pg"sFCw'ҧ[4pbxNZ<$2?vqW:;[kQ*ϨϨU$"Q5>{ ufA=aPO5!%]c{E! i=((C/(V?u}nLm_&g#ɅW{Fx3_<{&!9$xlYB!Oy }ƘEy0pT9tqqtȬbeV锄1Q|-yiH/bRX}|* 5-޳np+Fn9&`j|g+J5+9dqY8?K֩V&.JN|m̄1 pgU_ԫ";cIZ|sa zJBH#gYUC- PqMC ) g[uQ\νg$Alug™@'^_[ZkG\ u8܁: Π*g=v枷c\ώ@Er-y'A8cS6pq^ 6@1MI2H]rKZ7;{g< !`xB9spD̉F?7Zp1QGwl2 nopv}~c^#q=cdz21O[ `UJvMo$lP%oY+V4<,>Xfdy޺Gh¦ >udC ʢhT{ utBrJa.8fKc g[[)%* OugvP@xRGX$ijuW;IN+{zlQITGW7z|+1beLmOa.m9.2{Mt\H/Yca*g,2%=^:,*s9fpmosc?8U-`㬭pU2|z?~Omf#r8^Ag?jVP1X yLPǒVg}ا)5¢ӧLjd22¶O"hQ>)ONO#V.rr&\f~M<#^}O3Vi-=.?7/1~rDld^h-ǥr m gw]Wޟr7^y1)$ -3C7]A dMPz B ;Isϊc@I` 9|7#.Tw#iىU 'AROW]K%Yn( `X^*\ EG*C u"2 Y)Q-;ߠ 'nxJ'f >*>@τ2o,e&qgjQqV!v*VLp{Hnd] f wF>Acח증[y;{V`(dJb;3uT;-G1␈+Gex4Qv' q(T aN7J9`nVOg=!=8?΄GGIhq@?#_oTX`x'Hfωs%oBBKyڵec 67[#@s+]=VƎtuQZ¶̀%ϓT h>56·A?q.rk}0d݋}C篮d` 0X+G(~\uX㿠L<2ZP٩l ?0A?VizS2 8qE3χ}1̬ .;ICNOSӺ.zOOP9 7R_OБouz N{uDZyCń2J8Im(9mwSE+)(]yz7+eXb*KIy8i:AWeGy~mWz1S?iev{)4!.@GơJWEv'YVX RKkEWP1%~A~jM|D;|^ҵjjo065N̾)_/%N"]<MRT;3pP\(;_}I/\&ޅDM$u2UDz0˙+0gWCRn^(zs!EAdckn^B&J*Q|"L^|w 5xYt[G2.P!bi9݆M}e|b ZQ$Z/\/^#<#ة*ֶC5|s{o3No-оRGz }{c/Eb9OӲ4 K*nuv;f a&hrsƨ&95'?<7Uu$*ULX^U[pJ.^9+2՟ zG=|.<-v댨oTѷ}k6Y~t^t.Ն-=].Y$<047_; < ؀8]e8ՒA#8up-g̠㪖vd6͠Ynr4W y[K!MM2s9Q9_<-pqZ SFaui]Az:: 0I[ ֑L+\V&|kCsq=)B~,V6n=H~&w9$6tJ[^R$}D iSX5[G5u;O_T=]nEu<[&~`lSYӊco$kt{i$ފ0T5* ^{|SVܭp2A,F 7,p5xۀ,hs@IF-?N0[=m]P|[^널l*]|[y2_Zԡbx{xZo~ݱ d*OIZ:Sg 5MBuRu;3u_ɽk7ޟ }0|-#"**!\l_/0|͸QWZFmItzU5ƏYYX.q+nv&Ez3[:bNOܸ%P$] ݍtދa7KyHϩqBwErBeXRĦyjFԛ%l )8Ig9$a_Bͬ7^x`|[R(OyI:Ҩrku}1O^+b9܅@ )Xl7E+mbm͌b籒zYJ`Vxa"҃>s)ҽqO_;I $6tJ5v!ܽtفq[1B@tfQ kߺ5IJ/{e=OӺ#9Nq( u{SeT݇C n L\3L@d,5ry(c+pU^N, /QAJO-DgdduOn٥LSP*zUG۔|RP7dO {V 9}-RĠ>IPocХԼ\N»0xV#{['DPu+x@k~[Cb˖N=<m! 6ŀ kǬ0v{6LQ̺.xV+/v^Koa=VۍvUμ Mo0W|me\jwyN,EcTX@E?urr\j%U7ݕ4ElQ;H7M< ={P^9k K?83cNF'5g}qah=:ə aLyμ4UT0I "JqH?% y_i&q&z+ت{`@ā%'TEڵfYfUWJOJf3 (]GmVYs(סW2xR*/5y r52Na,\]!r}x-x, c+7s!9eC/Te!g%&K/_L<P)BgǷϢڴh4,mq]dF=h'b3K(8mUι )|Zpokx]ONf+mʞpRWCIwuۈ4sXZK>lLy3;N@BϔNK."j踭.cXWRP$}q cr1z!;N sFCMW9_@:+B^N#Bn.Z~q߅Dbt4lnuɁFmm3m9}3voV%kJY㿦Sa42s?Qп|jKX}O (m!C~SNr?^hLAs 9hCo_M TXwR *VՂY6yn :A5Z1m*-;X~#?~TSqD/Yb&$I2l UMC~&doztم6 Ɖ":XlC!i@:>yz5@@9aoh_E`$:]|0D{kdF oL1*X[{wZ&.@r>9R T:f_sқ;$P9j5%D@exM9SLZHi>߫=ʯ4a?IRHISAd<)CxVɩkeKS M ''u:.<"'}8s %+\f/ɀ]d GZ(`1p=2i"̶} aVdZ:+ydӺN mJ\j>Qҿ&a'"TbqQ>UꊳhgDAɆ&Za>"UoCW.U*_]9.جiWӼ_ۂRGsj75/V[^9x6Dyc55x2J̋ՠdc,*޾F{[ ~NaGR?ԕ}(@3* ~ 9ʯScƷ1$25"ό:>ڂ'hGV&lWxn"9yөfT8򂊓]nЊ6o<i]VqпOTԧ]3E2DH[G,W}"k_Je]dĒ^hnt>%6 {Wc8:G d37YMl3%,$R0: f|!n a ^jSRXڵjHz иn=Cy#kXy[B26!hV@{8{<)Z0huɢ: H8i0 ڴړّQfT_/FXPlD糚u\>Ot#w>Bqm-wf;"dfUttD#*o̐&XMD˳N̚vIyμ4IkRI{|gp.f~Zw#y|4դ6ƹo:lD)ؖ7[~r8ŽA$ةHSe;kpM)SB*L3V~OplՍU'OnK4XȽa@ܱlxM] Eg[f=zo<ʬ쯀[z E#Z&&^ԩ|a+0i emEFbynLI/s^kUK=|bs, 'Z咍X ^[)QVW,b KܶÊ3RnC=x/hFS`sws3I;]9zЩ''EoEKgU)L ɱM|(#U8{"hye6(֬>чj҈BYVٮ߁! ]ߌa0(Бھ3b N&C#1'N/])xH?ߐܮE(1@߲XZQ}줿EM[Aeze ĉ@֊aG-9+@bj54{XU[؄75CR)K-Z{]7rZ1}97^WPzv1 [D|ZShNr-RV𜖨GwA +NYo-- `_QWΞI,`|D-yoy?Sk=GeZa.YE:Di9nN;e {ߑ)z%Wq!..}:1-s ) U":W!"΋gZ̍ S9-ǬSYZmS̈HzEȥLOW#bӋ!cM|7ۏ^=*%eْvY'KQ:~+m ƙ+R]G[oqpEpa~ J)3)9H}]iC{/q).v %> (x%C{ocbec¾jg6Ic-:[c76Vʣs wp3#NvqBQ LMOg~aŨ(7$0 'ӹ68GlQKJ&S,yٙ&q­z]<_, OZ47Ƴs:53ݴ/Q%=fa=$ endstream endobj 3054 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 3056 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 2993 0 obj << /Type /ObjStm /N 100 /First 1006 /Length 3655 /Filter /FlateDecode >> stream x[kOHί]gje{/! ݐ$ts81LxիJdr<>>\fl5/ʂs- i[;BH$B+: Vmɲ䅱xLaKma! U!RLDpn<ԓx8 FK2LsRed*$>2RXM d8G8aj%Y tpYp(^0AZip$ U, t+,(5QP΄kt\JF&5a3P!A+.r:Wҵ#dn x!5A Y V!) Q N0XRJD9śKJ<1* \%$T-KLM J(I(,B9D r^ (Bt7NJ-!$ĄBp)\BSv)U[-UtE ce"_)(%gac@[XJrLW> hhC@Z@xJqd-x ^]j|!TJrjIʭnq,Qo vO$@a\￯e^<—&yaU.!p6\}:!5Q#1Att28q^>/j?.*L mf頚&^T'{qL '(Oquěзs (R&6+6^DޕWngH6xށ +ˀ-g}&ЫXXe&Ƥ of_Ř ;/{4O 8JȞa\~_[l{2=Qzlzp9\9l8F77gߣAL'eٯRV`7"8Cg]+oC 3)Y[R)cՎR y⢱yIO@ʣ@S9qu ۱vEQH8o%ԯ ) CLPz%%a)Õ":ty:+lAe>m &.^6?%5PS 5χ+-;.;9fA#ŹhnÈ@P]6:&cgL>x>s\4#38?|>j$?ߋ~ӏ6a1cOS`ŋ!{?gsP8vN7߷N. px8 glV}l6PgӪb'}cSM'+h.h]b]:Ŕmyx[р[&T~(&$. sO.%ťǏ&KoI٣oQ]Ư[E*y@cl\f\>O:gzj'7:Vj6UggǯFTwTxE%x յs)P"XO-e5aɼ:< WxQ8ZXg#rC.!Ն;w?IE#}^yUmUẮ_ZȩNһ/S: }\!56A Pw rmbjk־t092ީzS~~&koֺ2y9\NwjwlֻF?%5Gᐒ Ogr`>#O_ Z}ҲHZD1ZXD1ZX -%TwZmzC@lSZ9rVA ZjYtSΪE> jGlje\Iviu޲Ǵ-RͰȣ=uˠvfu ]vUn%]nvݢh"y-"\&$fuҲ=Xblj%27MLJ'/w0-~zIƋ:³ vj@·iچK>MA\ cCnһyqjF/%τIϧx-󎪤bdOP䞐oJIIJAJS vWU:ɦ+aN3a:˪tJTHt)3ќoJA z&̐j6QcU3[mFof16 vYK}6o1elr{0<MȔF&<4*BdLvdgliSWne .Rgl,&7:+LL$+lYʪtV* Fld 92f[T$ƥ 3yq['_Rr@\m) \3NgM lȹ :}§_ TOSV y3^m+^3Yg^5$V>wvkwYg^>3SIJ?S5t`lJN?"mNry)Sn(V:m tZr i endstream endobj 3064 0 obj << /Type /ObjStm /N 100 /First 985 /Length 1772 /Filter /FlateDecode >> stream xڝѪ$ S UB 71 0vyHgfHrhtR-ct4c{2 9tN+7ا>q_Kj="HKA[uz ^*Yn eo U`=h`뱗'qd%a ~ݰ/hZMd6l6[x :ퟥ L^YI>MmE6O_z͐mf_s{5=6H=l=z=z{(=DiHU{y/a Q|`2{X{y V"q aT)ma'-c%*x`TxVm&ˎUr+qz&6ɉE^c $`aQqi|z=lS{$x{\=ls{$ö0O'66c x8cvٗ#j{t`\1#Vvq:G#oyOx/vn^^=ˇ?}v3m}+Rȭٽċ|kkq)NkaøK^V n~^Zq^[A/?SgKuVOm/y_^1AC%߾\U H o5}+nw:JhuI>&̐ MH_ H8w8s ͖gua˳ٲ-_͖5oy[ְe&S[V D,tyU7灬9e`x1㋁5ʄbL()@ &Pr`I JkJ)hh !0i ʟP4 oS ,Bq'fRPb7@m)?JM r,~N +R(%JD!D I;i?'΁)j5R8C4*eljHɲIlRM )Y6M I!efRJ٤H )3R&@6h&eh ER42KR4 )Iђ hCdR$E)Ґ"-I@4H&EJR$" )I pC gR$)ܐ™.I@ 7p&KR82RF&KRF e4L @hHQ2)!2)$)ԐBQBF8) maˍpRۂpR#J 'eR8)'5‰,zDN*A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDN4‰,(A8'pND#‰R8p" 'JDNPC eRJR!R8A4 B%)! dRN endstream endobj 3066 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1737 /Filter /FlateDecode >> stream xڅ͊d FD(0 1/0^ zƏ?RHԩMuTg'➨C<N"^P/!u _kb]bq39Vol{dO+@b .Om&2N`z~wpY5^Cmƣ'GS棫)zI5Ʊx3EB^c6966<޾8d58,Vb5bM| jS\I?FS6˄MR/l?_$E|O?6=|aM6:[񵗟/5l[|a ޏllGb+Ꮚ󅵁aM}~6I,?_$-(j{ $?xt5qR`8)ҁ/?ob߸ß/_+^ǯoW)ڛ4&s(%&p@U?MYM +89PG 9@ w:'pH@҈oBoi?'ݟJy^z#籠h~c ڷ|$wX'=y yFe7%QV/ )/ 灜/ )`4pQ07pQ|EEX拂ˋbbIU+AceR!2) (B )IY%)HʤPI R!efR$eRfC̤PI ̆I%)32RF&e@hHY2)!edRFI_QSsRdRJ zvI)S|YM`"EK zY>O &Pr,w&0|jOhO-S|* 9"E|* Lh\TAMȁ 솔lZݐ9ݐ3)$eRvCdRJT HCdRvIR!E2)R"iHLH R8"%)HΤpI R!3)\Ր2)\)!eeR$eRVCʤHY )IY%)Hʤ PC eR$)Ԑ23)TBِ23)T2)!efRfI 4©Y8-7©Y8F85 ©A8P1&ofp3?o_ }tRK/o\w8T {eY>Q'|.w. ]>?&jP'|.Ge`.,(A>qOK4|b7hdD)ݐ|"'!%'JDOHCJO ,(A> )Y>Q'|R|O7dD)Ր|"'VCJO X )Y>Q'|b5dD) jHR>Ԑ|"'!%'JDŎ,(A>1R|O) %31MW{Ww#ј   i>J endstream endobj 3067 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1728 /Filter /FlateDecode >> stream xڅ͊\G FOYB^YBzgۚTvX'}k8` >98-1i?1Ymɚ%~Eul7[8C_xZڀF A7`{R%R>Rٶ :}ze| Ҳ!Go4$exVr+MGd+cOnĽ]mZE4&2 m#K]i+:E&iUm-=0MC㡯*]-.U> SHyJ0=zSXU]ؗ ivUuN u{WnZZEٴ"vNƶoh's ,}`wk+ ҆Ca{h'[UNtC;9RvRUC;9V춇d,I-(Njl &NN6<0>vuc^noh'G[2>Emtm|>VӇ?|ِJO~|Y_ߕ4/Kd?~ DH>e ׎) \J!Z9.G~8g ,p.8@ "k@rqX1Yp!10%e8RFAʈHő%y;Gx䑒"RY%=#K1Gvp@n8/ 7p S in(4+d7 8 8wo )X,|Uo~ AvvP Eh(49=)4kµž>K=;J:NMOi6MOiE`4MkeGZƐ8ٔlFR'rͻ)N6,(ʦ8ٔ".K9m\ks%6xznk*I:R E")" "))p RHqsKUxph=NR4ءhCQF48ERDS4ءAhp94HhChP94~#}!B)ݡCӧFwhhпUпCybPD/ъGjRIToG*؜Kg/}Mx Dyp"%ATDDg=F}·A 8/Kà@WO86[ i۠6ρ6&mlw- E`@m&ζy6l@#&RۄMhHm61 Rm"M8ۄDDjp )H6lRmm&Pmm&PHJjp  '@AJO '(HN>)Q>'| R|"O8DD*p *HT>T|'zAJO ')Q>'|DEp.^")=%9RZAJHi)-RR#=&w$7Rx"0^I^ endstream endobj 3068 0 obj << /Type /ObjStm /N 100 /First 984 /Length 2608 /Filter /FlateDecode >> stream xڅZMoe Wh9^)  fZ@iVmoRSd}I^Y!759 o6dXdA.Dqrq,d.%Ie+^$WPNU/y8&>EY@IV1䇗$*+OY;b#?pքAKȎ*!z><07ī*1f11|tHIFMIVW5*8\^qyJ*)G (Wq$ !H\Fx\BzTcUo%FYq$?*$1JtE+JvE.&+R ^ULJ%eQ\eGEǥLh e/_%ᇫ};3+:noO/̷Oڀ?/?8R~LK@x, @C++BD:}Jz@ jKoĤڐ?<~eBB.t8 Fm H+\_s  a :@ڝ!XD\FHuH)%L0 SGդjRjR5SM<Gi)Q㎲_v8RKʱL2 }#.)S7(L]7p8j݀n@2`-AAq\vup -=`As9es]sਔl)RpS (GR))RpJQ)T tJ`) /J?Jޛҷc쥏;WEKND.bE"NDgjQ5~Qࠚu D'@?%jp?ǹs)vs)NsF@`8Diiis8N66q6q%` !tpY\i9(EF~ ݉h?Ne)n.\ AA(ګdbo)*}<_F?OUb~NA1 Z;p8* ;EFťSQAq Dt8 NPCI(Lh)$7BX$t2 onN&"LS * ,=2tB|125{hT:er~4=h9gu˷ZqZ3`7~,ePyfoU|6:n8 qBJ mbmٝ7n(;]ݠeyl>~ȯ39E^ra?T T vf#z-s+ rq /,__؍ a?}qz\xm2djFv"lkqioo_ X|MӵKkWkW٨}ksaJdž\搌,)$xQ~P3jV3jLRf>P"|= ٨9eéBGy.\/-?(j@ֳWVo![IͩC݋BAQJB`&zsQxjZpTRC%k#5Pylv/1Խdl!{6lԂxPu.=7vԴJ(Y^!Lr .w1y-#Kl{V(h5j5pl4ņԃV.:.^2QSnl N&=uJ\hAVEx􍞞w6PߢqGhiG!mj#_^[FrlB1˦砹}T9UzѠDmTʆҳ%ZsJJ&)=kjGJ6$m 8U74E-Ff jM [9E,McRszd,jqjV.) ?4wIYLJϺdRzMJ/7IsY,cRvqMʮXeW-eWdMLAg%W[t2B.F3e>I=48I74>YΦ\2| ֊WU9E-JE(ή(d^jd>sl@,Jώ(=hI gS^չesZu7\4ZuTu:a+Rlg]sX,Novۿ=wOtzNG/'?];=7/?ug#aj?F0qz"???kw 9g7_ޟ4O_*ʇ'~}t4Ei:YqVystys2^& endstream endobj 3174 0 obj << /Producer (pdfTeX-1.40.28) /Creator (TeX) /CreationDate (D:20260228054204Z) /ModDate (D:20260228054204Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.28 (TeX Live 2025) kpathsea version 6.4.1) >> endobj 3096 0 obj << /Type /ObjStm /N 78 /First 805 /Length 4277 /Filter /FlateDecode >> stream xڝ[[ܶ~Уpl***g&9'cx|TJ͙Z-u$_([5ypx)JID.KDc#O0ptD&lD'%–~bK'¡ D '@&RK,֒\<˰4G-PoT-L 94LU %: .1Z2MR1JbK&&SR9tbӜLbenՎDEP+O%*U `2Y$sZ:C$Ir4P6mJ,qagC3w8Ǵg]Ya{R_ׇ J͇ᑅ2'KEuhGO,1χ#Cߘ?>Ky/'BA*;Nr/UG?b=5|8h>q3'#oJ\^ ME&/f<e#QPdJ4pzJ1"BBUd>ify1z_>Q{ЗtIkC {F9s) _L9pF\^{i< ;Kt.m; ƈu4'=]=ZӨY'g 1SΉa][7// n:l >/e]R8ȿ0Sif[qJY_Ce[c.+@^(^|< w'@W; Z5l$jnRd$Voc}vX w3_E>P<:")TvWe_Yn8lq㈆*;gڎHN̠򑉩;dtBGQl0jc 0,y\zFv9viLi8N&k6w+`=%NFjଳnУo|fn}1eNXpr8ݼMCNf+h H&'Ei؆3)f ^yaL.'I;j.W2Y$7u}IbaW}QQleD{=Vtt1mV `RM"nJLYx,9e}wH3d̔S~C utpg Q.s5 .;>O #)ҿI6@BĻȓ3Ǣ-= k=W\yu:LRǨ!$՝ ӂ-ق5Rq@g>kPT9MA_l>LיLk SK^(rѹe8AOPӽDn&akFZܭh$b_-nM`M:UX>kǘ5>Ip{>|]A1,۷Ei Ih&o]Q!no.)0N:/Ne.O8Tw;>W?f~&Kw\ϤUp;.Rj#0u.^A6gzzCuhH)oæS=d\&X*<WuT֊45]];M[Է$ <o9  †))6%}]L ;%!xUwb0hn&d|~Pz&&m /襎J:Է'bL꣊E0_p>\lNkR-[A&[>L1y[ul'x&><ř xWuקO]ASHx0>5m}{7<0:o+iʭ^0mVQwH({3|{&4Gh+: W19s6k/iw6 .O Q_hA4JL@lrmso`Ax#*1Ń;./MU\ƈgUɹewsZ|>ܴ-)dqύ)ےvx- WTigq.USV>lUWb!`aǷ]PA #L,F8+:΅&;l`U_+([) Pk]uؠVꆭfEǟê.έ o@=AEp#>YOBxp㽬"O:MW =/ez <h ΅;ݾd.<× $ sRS60څPHpf/\ҩ7զGK[_|Kt][]#V,CR7:KE k?~!cE?I/S9xxx#|N<F'/ ҡS`?%gxZ ˍ97++YE_pI 6/lzerv/gƱm5eKsctlry.!o-֣'dȹ1UVyyR0Û[ k  C2 A+V*d8HdwٜbH!)8Š]\D?ŮGF1hYSZ|\ðiƧkvRg[y%>gj84*z{MWި=0yp?^ ,25߱G~oVg90k"BxP'/P6Ly͡:L B ;}G-:D}U\K~!yRjMdzU2G4hNBN':P endstream endobj 3175 0 obj << /Type /XRef /Index [0 3176] /Size 3176 /W [1 3 1] /Root 3173 0 R /Info 3174 0 R /ID [ ] /Length 7209 /Filter /FlateDecode >> stream x%yd}ZUݾ}z}}ouz_~_G @`qp$h\8!g" e "9PV L JxƱ>7y=zT*JET*srTM0ڜOFfåTZy S:?Ʈٜ0& 5a,ERXa0Jq~eX.MtWz {8'$p^-S5G"\p@\[xCh©T.b xZiӂO <-xZiӂO <-xZXd- \+VpZk \+VpZk \+VpZk \+VpZk \+VpZk \+VpZk E)VpZkcOWzOSi٧d<| x ORi7i/90saRXa51wNa?pq8 g,y6 0 0 0 D/^]e$(C`\*`̇bXKa,VjXka 6f[alvn{apa8GpNi8g p.epu7܆;p}x!oҶ5+p ڴT:&5 Ci0mLOmN ´0>sxe0:B\ 1:+`%Scjt6& [x 9 ^;xkK 90saPy0BXa ,eVJXa u6Fa lmvNa}A8cpNI8 sp.E LU܄[p@;>;>;Kt.p LN]3ct̔1S:fJL)3SSLYW(8̅ a#hcxO<^kx[xC`{&3gl؞=c{3gl؞93gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{3gl؞=c{۳p۳~*]-^`%u66;`g*=>`pa8'3p.% 7&ĩ݆PGЀ^Kxouz*3gDψ=#zF3gDψ=#zFѳ+%HP 0U< `!,Ű2X+`%հ:X`#lͰ6;`'ݰ> p18'$p98"\p&*\[p]ԟDگ+pՉ^'z}1,*X k`C*}䩼V`3ݰ(_|u׏뼯y}uׯ5s6f@.3nԧ '`߸{p0!<<'sx/8{xN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN9sDω='zN:܀@,( 6܁p gK!]Lfo8Cpγ 9ڌz<55z/mF^kQ7g;EAQf/̞v)~2meh%m=f9m3-uljV k[MֵM2mdgTk,cޖYMrny66Ja̺ӴnmƥtuGjӢ=i3¡5\mµͭH";۷lõ6f#BmGy(1۔oQKʷCyw6ۡ|PMv(PʻS)C)ʷCyw6ۡ|7R~HP~ 9P~Pt (?| Nuu&P~xOt(?+ P~xGAa.O-Q q8qo*)?3P~xM0N7M(*Ca\[ˢ9凑F</ڤTCGyY{s=ϊ(ߣPQzQ~xZD*أ|Ó"(?T{QG!7zQ~xTD^(O{a{mދ6D[򃷢m@@.hP~J(?x):Dǀ򃧢@) P~.E+@*P~P]nD򃻢wDŹP~(8H D?t#ٔL2ĵE)?,S~ 2wHY.L@Q(?8/Ί@N(oEvC8(E(Yu R/A(QtBU׋C(I Zm#w!_-|g BG-/=P> Bʇ% _,z|(BʇoϷIV([|MDV(O[(BE޲Q_+V(o[|Y$MP>ON[|I-TE"mQ['[oQ_QE>[oQODlo(߿#|?^|(΅8h87DqDJ(߿&Qɦ|R|?-HeQԜHHɑ_N_U}]ss@YQ(?#k\k\k\k\i|hPTB#umP^&MD /&]k ԭ9G/ wx|Yy(Sg{eEP>N(JqQP^d-KF#/'CyM!$ބP~6ʯ݇P>3JC壖 嗋@(R ÒW/P>z B{?wGmR3Kn(_QӻKn(?!P>vBqqu ]ՕT'lQ2v%+]JU.ASifIoAts=^uݕJ31L]s{ ~+${$~kq]+3DM7c/^kp1]qS~?2{ ԭCG@c`N)A{#qwl*Z1YZZZZZZZZNE?H?l)]>̲\ղ\Պ\Պ\b\b\:\:\\\[[[[ZZ[uj~J9hVVVVVVVVVVVVVVVdVZVVڔҜ]q1'Au%%ղղԱ&>i*;zX*Xu*N|2?ejժ:UOiŅءUժUBTuYJk?{Y0>-Kcg.tbSA烺M+N~3ִMʔ.3 Ӫ0-r:=oK~ZszoJ;d|ZNp&Ǝ8I6-k'Sz!1}1w{cL tfJ1&ar5 xcŦuM2ŘuߦYΌ+5ꌥ7"aws';KS;?c,#u)}~sUaXg[J_13!\f)l̔!{ٍM)ec:O=$s=HXG6:S-1C%:Ư}.ƞmL&|g=1r?m1cODۑ'j)wykek%)v'V{;|?db h#Iޭp?c{ghJ?3 ҉s)}ߠN~BWɄ/O6%j25T^1d·Ryx=47DI]ɇL4h RGLJ/H@]rU/ uMg|v쐿 ץ1hubL?C];S.'12Yߗ-::GS;>>}\?1~%ct~;?ocLbOa*Gc?131%,c^NT1&P{Ӻ֌^Rg>TY77")n:IѦ6e9J?;fjjrj.L_<;t?55b4r{W)JSR_o1}PMojh;6Uu9򳱃͝ՏϞ(g$ţ9x4y81xMMSpIT4+*ؼ|ij9෦c̿3ѴnMm^O?ث͠᪩תIoti$M6'c9TTw0*"6_?1nF㎚ѽ.UV܍9D+*[Vl2/xjTu4 ؛*c'܆نơT?;_ȆGƨܿbr7<6Ʈq&U;<4ƨܿ7c&*߉1 }Qs1v`Torwixl^K/F-l4(l`6CTz6:C4pFS~垍VM]k6z?X<m*8ӝzt.+iNP 0U< `!,Ű2X+`%հ:X`#lͰ6;`'ݰ> p18'$p98"\p&*\pn- w.܃i_bWK/y endstream endobj startxref 468691 %%EOF apjanke-octave-tablicious-8a1b10f/docs/index.md000066400000000000000000000077501515050116100215270ustar00rootroot00000000000000# Tablicious Online Documentation This is the documentation site for Tablicious. Tablicious is a package for GNU Octave that provides relational data structures for Octave. It includes implementations of `table` arrays, `datetime`, `string`, `categorical`, and some other related stuff. You can think of it as "pandas for Octave". The repo for this project is at , where you can get the source code, report issues, and find more information. ## User Documentation See the online [User Guide](release/v0.4.7/user-guide/html/index.html) for info and API Reference. There's also a [single-page version of the User Guide](release/v0.4.7/user-guide/tablicious.html), and a downloadable [PDF version](release/v0.4.7/user-guide/tablicious.pdf). Those are for the latest release (currently 0.4.7). You can also see the docs for older specific releases, and the current in-progress development version (for the `main` branch of the Git repo). ### Releases * Development branch (unreleased) * [User Guide, multiple pages](devel/user-guide/html/index.html) * [User Guide, single page](devel/user-guide/tablicious.html) * [User Guide, PDF](devel/user-guide/tablicious.pdf) * v0.4.7 (2026-02-28) * [User Guide, multiple pages](release/v0.4.7/user-guide/html/index.html) * [User Guide, single page](release/v0.4.7/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.7/user-guide/tablicious.pdf) * v0.4.6 (2026-02-16) * [User Guide, multiple pages](release/v0.4.6/user-guide/html/index.html) * [User Guide, single page](release/v0.4.6/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.6/user-guide/tablicious.pdf) * v0.4.5 (2025-07-03) * [User Guide, multiple pages](release/v0.4.5/user-guide/html/index.html) * [User Guide, single page](release/v0.4.5/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.5/user-guide/tablicious.pdf) * v0.4.4 (2024-10-23) * [User Guide, multiple pages](release/v0.4.4/user-guide/html/index.html) * [User Guide, single page](release/v0.4.4/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.4/user-guide/tablicious.pdf) * v0.4.3 (2024-07-06) * [User Guide, multiple pages](release/v0.4.3/user-guide/html/index.html) * [User Guide, single page](release/v0.4.3/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.3/user-guide/tablicious.pdf) * v0.4.2 (2024-02-07) * [User Guide, multiple pages](release/v0.4.2/user-guide/html/index.html) * [User Guide, single page](release/v0.4.2/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.2/user-guide/tablicious.pdf) * v0.4.1 (2024-02-07) * [User Guide, multiple pages](release/v0.4.1/user-guide/html/index.html) * [User Guide, single page](release/v0.4.1/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.1/user-guide/tablicious.pdf) * v0.4.0 (2024-02-07) * [User Guide, multiple pages](release/v0.4.0/user-guide/html/index.html) * [User Guide, single page](release/v0.4.0/user-guide/tablicious.html) * [User Guide, PDF](release/v0.4.0/user-guide/tablicious.pdf) * v0.3.7 (2023-01-05) * [User Guide, multiple pages](release/v0.3.7/user-guide/html/index.html) * [User Guide, single page](release/v0.3.7/user-guide/tablicious.html) * [User Guide, PDF](release/v0.3.7/user-guide/tablicious.pdf) * v0.3.6 (2021-07-05) * [User Guide, multiple pages](release/v0.3.6/user-guide/html/index.html) * [User Guide, single page](release/v0.3.6/user-guide/tablicious.html) * [User Guide, PDF](release/v0.3.6/user-guide/tablicious.pdf) There are older releases, too. Let me know if you actually want to see the doco for those online. ## Developer Documentation * [Developer Notes](Developer-Notes.html) – documentation for developers of Tablicious itself * [Join Behavior](Join-Behavior.html) – Notes on "proxy keys" and other join-related stuff * [Design and Justification](Design-and-Justification.html) * [Release Checklist](Release-Checklist.html) * [TODO](TODO.html) * [FAQ](FAQ.html) – Frequently Asked Questions apjanke-octave-tablicious-8a1b10f/docs/release/000077500000000000000000000000001515050116100215055ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/000077500000000000000000000000001515050116100223375ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/000077500000000000000000000000001515050116100244105ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/000077500000000000000000000000001515050116100253545ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/API-Alphabetically.html000066400000000000000000000131431515050116100315710ustar00rootroot00000000000000 API Alphabetically (Octave Tablicious v0.3.6) apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/API-Reference.html000066400000000000000000000047261515050116100305600ustar00rootroot00000000000000 API Reference (Octave Tablicious v0.3.6) apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/API-by-Category.html000066400000000000000000000313061515050116100310410ustar00rootroot00000000000000 API by Category (Octave Tablicious v0.3.6)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    array2table

    Convert an array to a table.

    cell2table

    Convert a cell array to a table.

    struct2table

    Convert struct to a table.

    tableOuterFillValue

    Outer fill value for variable within a table.

    vartype

    Filter by variable type for use in suscripting.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    startsWith

    Test if strings start with a pattern.

    endsWith

    Test if strings end with a pattern.

    contains

    Test if strings contain a pattern.

    categorical

    Categorical variable array.

    discretize

    Group data into discrete bins or categories.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    localdate

    Represents a complete day using the Gregorian calendar.

    isdatetime

    True if input is a ’datetime’ array, false otherwise.

    NaT

    “Not-a-Time”.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    calmonths

    Create a ’calendarDuration’ that is a given number of calendar months long.

    calyears

    Construct a ’calendarDuration’ a given number of years long.

    days

    Duration in days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    hours

    Create a ’duration’ X hours long, or get the hours in a ’duration’ X.

    isduration

    True if input is a ’duration’ array, false otherwise.

    milliseconds

    Create a ’duration’ X milliseconds long, or get the milliseconds in a ’duration’ X.

    minutes

    Create a ’duration’ X hours long, or get the hours in a ’duration’ X.

    seconds

    Create a ’duration’ X seconds long, or get the seconds in a ’duration’ X.

    timezones

    List all the time zones defined on this system.

    years

    Create a ’duration’ X years long, or get the years in a ’duration’ X.

    8.1.4 Missing Data

    fillmissing

    Fill missing values.

    ismissing

    Find missing values.

    rmmissing

    Remove missing values.

    standardizeMissing

    Insert standard missing values.

    missing

    Generic auto-converting missing value.

    isnanny

    Test if elements are NaN or NaN-like

    eqn

    Determine element-wise equality, treating NaNs as equal

    8.1.5 Validation Functions

    mustBeA

    Requires that input is of a given type.

    mustBeCellstr

    Requires that input is a cellstr.

    mustBeCharvec

    Requires that input is a char row vector.

    mustBeFinite
    mustBeInteger
    mustBeMember
    mustBeNonempty
    mustBeNumeric
    mustBeReal
    mustBeSameSize

    Requires that the inputs are the same size.

    mustBeScalar

    Requires that input is scalar.

    mustBeScalarLogical

    Requires that input is a scalar logical.

    mustBeVector

    Requires that input is a vector or empty.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    dispstrs

    Display strings for array.

    isfile
    isfolder
    pp

    Alias for prettyprint, for interactive use.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    size2str

    Format an array size for display.

    splitapply

    Split data into groups and apply function.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    8.1.7 Example Datasets

    octave.datasets

    Example dataset collection.

    octave.dataset

    The ’dataset’ class provides convenient access to the various datasets included with Tablicious.

    8.1.8 Example Code

    octave.examples.plot_pairs

    Plot pairs of variables against each other.

    8.1.9 Uncategorized

    iscategorical

    True if input is a ’categorical’ array, false otherwise.

    octave.chrono.dummy_function

    A dummy function just for testing the doco tools.

    octave.chrono.DummyClass

    A do-nothing class just for testing the doco tools.

    octave.examples.coplot

    Conditioning plot.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Copying.html000066400000000000000000000067701515050116100276640ustar00rootroot00000000000000 Copying (Octave Tablicious v0.3.6)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056651515050116100312030ustar00rootroot00000000000000 Data Sets from R (Octave Tablicious v0.3.6)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    Date-and-Time-Representation.html000066400000000000000000000060501515050116100334750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html Date and Time Representation (Octave Tablicious v0.3.6)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074561515050116100324620ustar00rootroot00000000000000 Datenum Compatibility (Octave Tablicious v0.3.6)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060051515050116100315710ustar00rootroot00000000000000 Defined Time Zones (Octave Tablicious v0.3.6)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Durations.html000066400000000000000000000046401515050116100302160ustar00rootroot00000000000000 Durations (Octave Tablicious v0.3.6) apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Example-Data-Sets.html000066400000000000000000000102141515050116100314160ustar00rootroot00000000000000 Example Data Sets (Octave Tablicious v0.3.6)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the octave.datasets and octave.dataset classes.

    To see a list of the available data sets, run octave.datasets.list(). Then to load one of the example data sets, run octave.datasets.load('examplename'). For example:

    octave.datasets.list
    t = octave.datasets.load('cupcake')
    

    You can also load it by calling octave.dataset.<name>. This does the same thing. For example:

    t = octave.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on octave.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc octave.dataset.cupcake
    

    (The command help octave.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Getting-Started.html000066400000000000000000000064101515050116100312500ustar00rootroot00000000000000 Getting Started (Octave Tablicious v0.3.6)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.3.6/tablicious-0.3.6.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Introduction.html000066400000000000000000000072241515050116100307300ustar00rootroot00000000000000 Introduction (Octave Tablicious v0.3.6)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.3.6 for GNU Octave.

    Tablicious provides Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Missing-Functionality.html000066400000000000000000000105151515050116100325030ustar00rootroot00000000000000 Missing Functionality (Octave Tablicious v0.3.6)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports most of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that all these will be implemented some day.

    These areas of missing functionality are all tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/1.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/NaT.html000066400000000000000000000077521515050116100267370ustar00rootroot00000000000000 NaT (Octave Tablicious v0.3.6)

    8.2.42 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Table-Construction.html000066400000000000000000000070321515050116100317630ustar00rootroot00000000000000 Table Construction (Octave Tablicious v0.3.6)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Table-Representation.html000066400000000000000000000100201515050116100322620ustar00rootroot00000000000000 Table Representation (Octave Tablicious v0.3.6)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113551515050116100305440ustar00rootroot00000000000000 Tables vs SQL (Octave Tablicious v0.3.6)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Time-Zones.html000066400000000000000000000141241515050116100302360ustar00rootroot00000000000000 Time Zones (Octave Tablicious v0.3.6)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/Validation-Functions.html000066400000000000000000000117411515050116100323060ustar00rootroot00000000000000 Validation Functions (Octave Tablicious v0.3.6)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/array2table.html000066400000000000000000000102711515050116100304530ustar00rootroot00000000000000 array2table (Octave Tablicious v0.3.6)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/calendarDuration-Class.html000066400000000000000000000063061515050116100325710ustar00rootroot00000000000000 calendarDuration Class (Octave Tablicious v0.3.6)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/calendarDuration.html000066400000000000000000000206471515050116100315320ustar00rootroot00000000000000 calendarDuration (Octave Tablicious v0.3.6)

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    calendarDuration_002ecalendarDuration.html000066400000000000000000000077001515050116100353740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.calendarDuration (Octave Tablicious v0.3.6)

    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    calendarDuration_002edispstrs.html000066400000000000000000000061141515050116100337660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.dispstrs (Octave Tablicious v0.3.6)

    8.2.2.8 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    calendarDuration_002eisnan.html000066400000000000000000000057341515050116100332320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.isnan (Octave Tablicious v0.3.6)

    8.2.2.9 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is just an alias for isnat, provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    calendarDuration_002eisnat.html000066400000000000000000000060311515050116100332270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.isnat (Octave Tablicious v0.3.6)

    8.2.2.3 calendarDuration.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    calendarDuration_002eminus.html000066400000000000000000000061401515050116100332450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.minus (Octave Tablicious v0.3.6)

    8.2.2.7 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000066101515050116100331560ustar00rootroot00000000000000 calendarDuration.plus (Octave Tablicious v0.3.6)

    8.2.2.5 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.

    calendarDuration_002esizeof.html000066400000000000000000000057631515050116100334230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.sizeof (Octave Tablicious v0.3.6)

    8.2.2.2 calendarDuration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    calendarDuration_002etimes.html000066400000000000000000000061271515050116100332400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.times (Octave Tablicious v0.3.6)

    8.2.2.6 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.

    calendarDuration_002euminus.html000066400000000000000000000057501515050116100334400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html calendarDuration.uminus (Octave Tablicious v0.3.6)

    8.2.2.4 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/calmonths.html000066400000000000000000000064611515050116100302410ustar00rootroot00000000000000 calmonths (Octave Tablicious v0.3.6)

    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/calyears.html000066400000000000000000000057671515050116100300640ustar00rootroot00000000000000 calyears (Octave Tablicious v0.3.6)

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical.html000066400000000000000000000173171515050116100305300ustar00rootroot00000000000000 categorical (Octave Tablicious v0.3.6)

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff: - gt, ge, lt, le - Ordinal support in general - countcats - summary

    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002eaddcats.html000066400000000000000000000062361515050116100326000ustar00rootroot00000000000000 categorical.addcats (Octave Tablicious v0.3.6)

    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002ecategorical.html000066400000000000000000000135671515050116100334000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.categorical (Octave Tablicious v0.3.6)

    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    categorical_002ecategories.html000066400000000000000000000061371515050116100332430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.categories (Octave Tablicious v0.3.6)

    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062061515050116100326420ustar00rootroot00000000000000 categorical.cellstr (Octave Tablicious v0.3.6)

    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062411515050116100330440ustar00rootroot00000000000000 categorical.dispstrs (Octave Tablicious v0.3.6)

    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    categorical_002eiscategory.html000066400000000000000000000063061515050116100332650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.iscategory (Octave Tablicious v0.3.6)

    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002eismissing.html000066400000000000000000000061221515050116100331740ustar00rootroot00000000000000 categorical.ismissing (Octave Tablicious v0.3.6)

    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062351515050116100326530ustar00rootroot00000000000000 categorical.isnanny (Octave Tablicious v0.3.6)

    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061171515050116100331570ustar00rootroot00000000000000 categorical.isordinal (Octave Tablicious v0.3.6)

    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    categorical_002eisundefined.html000066400000000000000000000064321515050116100334110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.isundefined (Octave Tablicious v0.3.6)

    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002emergecats.html000066400000000000000000000075741515050116100331550ustar00rootroot00000000000000 categorical.mergecats (Octave Tablicious v0.3.6)

    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    categorical_002eremovecats.html000066400000000000000000000074351515050116100332700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.removecats (Octave Tablicious v0.3.6)

    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002erenamecats.html000066400000000000000000000067571515050116100332500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.renamecats (Octave Tablicious v0.3.6)

    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    categorical_002ereordercats.html000066400000000000000000000072151515050116100334310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.reordercats (Octave Tablicious v0.3.6)

    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002esetcats.html000066400000000000000000000062401515050116100326360ustar00rootroot00000000000000 categorical.setcats (Octave Tablicious v0.3.6)

    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002esizeof.html000066400000000000000000000056351515050116100324760ustar00rootroot00000000000000 categorical.sizeof (Octave Tablicious v0.3.6)

    8.2.5.3 categorical.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    categorical_002esqueezecats.html000066400000000000000000000056231515050116100334510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html categorical.squeezecats (Octave Tablicious v0.3.6)

    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002estring.html000066400000000000000000000062251515050116100325010ustar00rootroot00000000000000 categorical.string (Octave Tablicious v0.3.6)

    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002esummary.html000066400000000000000000000060301515050116100326620ustar00rootroot00000000000000 categorical.summary (Octave Tablicious v0.3.6)

    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/categorical_002eundefined.html000066400000000000000000000065721515050116100331410ustar00rootroot00000000000000 categorical.undefined (Octave Tablicious v0.3.6)

    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/cell2table.html000066400000000000000000000101571515050116100302570ustar00rootroot00000000000000 cell2table (Octave Tablicious v0.3.6)

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/colvecfun.html000066400000000000000000000065331515050116100302350ustar00rootroot00000000000000 colvecfun (Octave Tablicious v0.3.6)

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/contains.html000066400000000000000000000073461515050116100300720ustar00rootroot00000000000000 contains (Octave Tablicious v0.3.6)

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime-Class.html000066400000000000000000000063611515050116100311070ustar00rootroot00000000000000 datetime Class (Octave Tablicious v0.3.6)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime.html000066400000000000000000000177311515050116100300470ustar00rootroot00000000000000 datetime (Octave Tablicious v0.3.6)

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eNaT.html000066400000000000000000000076211515050116100311750ustar00rootroot00000000000000 datetime.NaT (Octave Tablicious v0.3.6)

    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    datetime_002econvertDatenumTimeZone.html000066400000000000000000000065221515050116100351040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html datetime.convertDatenumTimeZone (Octave Tablicious v0.3.6)

    8.2.9.35 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002edatenum.html000066400000000000000000000056541515050116100321540ustar00rootroot00000000000000 datetime.datenum (Octave Tablicious v0.3.6)

    8.2.9.19 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.

    datetime_002edatenum2posix.html000066400000000000000000000061101515050116100332260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html datetime.datenum2posix (Octave Tablicious v0.3.6)

    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002edatestr.html000066400000000000000000000065501515050116100321610ustar00rootroot00000000000000 datetime.datestr (Octave Tablicious v0.3.6)

    8.2.9.15 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002edatestrs.html000066400000000000000000000066461515050116100323520ustar00rootroot00000000000000 datetime.datestrs (Octave Tablicious v0.3.6)

    8.2.9.16 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066461515050116100327030ustar00rootroot00000000000000 datetime.datestruct (Octave Tablicious v0.3.6)

    8.2.9.17 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002edatetime.html000066400000000000000000000132301515050116100323000ustar00rootroot00000000000000 datetime.datetime (Octave Tablicious v0.3.6)

    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002ediff.html000066400000000000000000000060541515050116100314220ustar00rootroot00000000000000 datetime.diff (Octave Tablicious v0.3.6)

    8.2.9.32 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002edispstrs.html000066400000000000000000000057051515050116100323670ustar00rootroot00000000000000 datetime.dispstrs (Octave Tablicious v0.3.6)

    8.2.9.14 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eeq.html000066400000000000000000000061601515050116100311150ustar00rootroot00000000000000 datetime.eq (Octave Tablicious v0.3.6)

    8.2.9.27 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002ege.html000066400000000000000000000062031515050116100311010ustar00rootroot00000000000000 datetime.ge (Octave Tablicious v0.3.6)

    8.2.9.28 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002egmtime.html000066400000000000000000000061171515050116100317740ustar00rootroot00000000000000 datetime.gmtime (Octave Tablicious v0.3.6)

    8.2.9.20 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002egt.html000066400000000000000000000061761515050116100311310ustar00rootroot00000000000000 datetime.gt (Octave Tablicious v0.3.6)

    8.2.9.29 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002ehms.html000066400000000000000000000060761515050116100313050ustar00rootroot00000000000000 datetime.hms (Octave Tablicious v0.3.6)

    8.2.9.10 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063271515050116100325020ustar00rootroot00000000000000 datetime.isbetween (Octave Tablicious v0.3.6)

    8.2.9.33 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eisnan.html000066400000000000000000000057521515050116100316260ustar00rootroot00000000000000 datetime.isnan (Octave Tablicious v0.3.6)

    8.2.9.23 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eisnat.html000066400000000000000000000056261515050116100316340ustar00rootroot00000000000000 datetime.isnat (Octave Tablicious v0.3.6)

    8.2.9.22 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002ele.html000066400000000000000000000061771515050116100311200ustar00rootroot00000000000000 datetime.le (Octave Tablicious v0.3.6)

    8.2.9.25 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002elinspace.html000066400000000000000000000070171515050116100323100ustar00rootroot00000000000000 datetime.linspace (Octave Tablicious v0.3.6)

    8.2.9.34 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002elocaltime.html000066400000000000000000000067011515050116100324620ustar00rootroot00000000000000 datetime.localtime (Octave Tablicious v0.3.6)

    8.2.9.21 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002elt.html000066400000000000000000000061771515050116100311370ustar00rootroot00000000000000 datetime.lt (Octave Tablicious v0.3.6)

    8.2.9.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eminus.html000066400000000000000000000067771515050116100316610ustar00rootroot00000000000000 datetime.minus (Octave Tablicious v0.3.6)

    8.2.9.31 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002ene.html000066400000000000000000000061641515050116100311160ustar00rootroot00000000000000 datetime.ne (Octave Tablicious v0.3.6)

    8.2.9.26 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060371515050116100324350ustar00rootroot00000000000000 datetime.ofDatenum (Octave Tablicious v0.3.6)

    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000062401515050116100331560ustar00rootroot00000000000000 datetime.ofDatestruct (Octave Tablicious v0.3.6)

    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eplus.html000066400000000000000000000065371515050116100315030ustar00rootroot00000000000000 datetime.plus (Octave Tablicious v0.3.6)

    8.2.9.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.

    datetime_002eposix2datenum.html000066400000000000000000000061741515050116100332400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html datetime.posix2datenum (Octave Tablicious v0.3.6)

    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062141515050116100325310ustar00rootroot00000000000000 datetime.posixtime (Octave Tablicious v0.3.6)

    8.2.9.18 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000064101515050116100325230ustar00rootroot00000000000000 datetime.proxyKeys (Octave Tablicious v0.3.6)

    8.2.9.8 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002esizeof.html000066400000000000000000000055531515050116100320140ustar00rootroot00000000000000 datetime.sizeof (Octave Tablicious v0.3.6)

    8.2.9.7 datetime.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061071515050116100324720ustar00rootroot00000000000000 datetime.timeofday (Octave Tablicious v0.3.6)

    8.2.9.12 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eweek.html000066400000000000000000000055521515050116100314470ustar00rootroot00000000000000 datetime.week (Octave Tablicious v0.3.6)

    8.2.9.13 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eymd.html000066400000000000000000000061031515050116100312760ustar00rootroot00000000000000 datetime.ymd (Octave Tablicious v0.3.6)

    8.2.9.9 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/datetime_002eymdhms.html000066400000000000000000000063061515050116100320130ustar00rootroot00000000000000 datetime.ymdhms (Octave Tablicious v0.3.6)

    8.2.9.11 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/days.html000066400000000000000000000062121515050116100272030ustar00rootroot00000000000000 days (Octave Tablicious v0.3.6)

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/discretize.html000066400000000000000000000121171515050116100304110ustar00rootroot00000000000000 discretize (Octave Tablicious v0.3.6)

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/dispstrs.html000066400000000000000000000065541515050116100301270ustar00rootroot00000000000000 dispstrs (Octave Tablicious v0.3.6)

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration-Class.html000066400000000000000000000057541515050116100311450ustar00rootroot00000000000000 duration Class (Octave Tablicious v0.3.6)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration.html000066400000000000000000000134151515050116100300730ustar00rootroot00000000000000 duration (Octave Tablicious v0.3.6)

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002echar.html000066400000000000000000000057061515050116100314630ustar00rootroot00000000000000 duration.char (Octave Tablicious v0.3.6)

    8.2.13.16 duration.char

    8.2.13.17 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002edispstrs.html000066400000000000000000000055311515050116100324150ustar00rootroot00000000000000 duration.dispstrs (Octave Tablicious v0.3.6)

    8.2.13.14 duration.dispstrs

    8.2.13.15 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002ehours.html000066400000000000000000000055531515050116100317060ustar00rootroot00000000000000 duration.hours (Octave Tablicious v0.3.6)

    8.2.13.6 duration.hours

    8.2.13.7 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002elinspace.html000066400000000000000000000065371515050116100323470ustar00rootroot00000000000000 duration.linspace (Octave Tablicious v0.3.6)

    8.2.13.18 duration.linspace

    8.2.13.19 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002emilliseconds.html000066400000000000000000000056701515050116100332330ustar00rootroot00000000000000 duration.milliseconds (Octave Tablicious v0.3.6)

    8.2.13.12 duration.milliseconds

    8.2.13.13 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002eminutes.html000066400000000000000000000056071515050116100322320ustar00rootroot00000000000000 duration.minutes (Octave Tablicious v0.3.6)

    8.2.13.8 duration.minutes

    8.2.13.9 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002eofDays.html000066400000000000000000000060101515050116100317600ustar00rootroot00000000000000 duration.ofDays (Octave Tablicious v0.3.6)

    8.2.13.1 duration.ofDays

    8.2.13.2 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002eseconds.html000066400000000000000000000055621515050116100322040ustar00rootroot00000000000000 duration.seconds (Octave Tablicious v0.3.6)

    8.2.13.10 duration.seconds

    8.2.13.11 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002esizeof.html000066400000000000000000000052331515050116100320400ustar00rootroot00000000000000 duration.sizeof (Octave Tablicious v0.3.6)

    8.2.13.3 duration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/duration_002eyears.html000066400000000000000000000060231515050116100316620ustar00rootroot00000000000000 duration.years (Octave Tablicious v0.3.6)

    8.2.13.4 duration.years

    8.2.13.5 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/endsWith.html000066400000000000000000000073361515050116100300400ustar00rootroot00000000000000 endsWith (Octave Tablicious v0.3.6)

    8.2.14 endsWith

    Function: out = endsWith (str, pattern)
    Function: out = endsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings end with a pattern.

    Tests whether the given strings end with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/eqn.html000066400000000000000000000074601515050116100270340ustar00rootroot00000000000000 eqn (Octave Tablicious v0.3.6)

    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/fillmissing.html000066400000000000000000000110471515050116100305650ustar00rootroot00000000000000 fillmissing (Octave Tablicious v0.3.6)

    8.2.16 fillmissing

    Function: [out, tfFilled] = fillmissing (X, method)
    Function: [out, tfFilled] = fillmissing (X, 'constant', fill_val)
    Function: [out, tfFilled] = fillmissing (X, movmethod, window)

    Fill missing values.

    Fills missing values in X according to the method specified by method.

    This method is only partially implemented.

    method may be: 'constant' 'previous' 'next' 'nearest' 'linear' 'spline' 'pchip' movmethod may be: 'movmean' 'movmedian'

    Returns out, which is X but with missing values filled in, and tfFilled, a logical array the same size as X which indicates which elements were filled.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/hours.html000066400000000000000000000062651515050116100274130ustar00rootroot00000000000000 hours (Octave Tablicious v0.3.6)

    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/index.html000066400000000000000000001413611515050116100273570ustar00rootroot00000000000000 Top (Octave Tablicious v0.3.6)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.3.6.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/iscategorical.html000066400000000000000000000055541515050116100310640ustar00rootroot00000000000000 iscategorical (Octave Tablicious v0.3.6)

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/isdatetime.html000066400000000000000000000055561515050116100304050ustar00rootroot00000000000000 isdatetime (Octave Tablicious v0.3.6)

    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/isduration.html000066400000000000000000000055221515050116100304270ustar00rootroot00000000000000 isduration (Octave Tablicious v0.3.6)

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/isfile.html000066400000000000000000000044461515050116100275250ustar00rootroot00000000000000 isfile (Octave Tablicious v0.3.6)

    8.2.21 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/isfolder.html000066400000000000000000000044461515050116100300610ustar00rootroot00000000000000 isfolder (Octave Tablicious v0.3.6)

    8.2.22 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/ismissing.html000066400000000000000000000131331515050116100302500ustar00rootroot00000000000000 ismissing (Octave Tablicious v0.3.6)

    8.2.23 ismissing

    Function: out = ismissing (X)
    Function: out = ismissing (X, indicator)

    Find missing values.

    Determines which elements of X contain missing values. If an indicator input is not provided, standard missing values depending on the input type of X are used.

    Standard missing values depend on the data type:

    • NaN for double, single, duration, and calendarDuration
    • NaT for datetime
    • ' ' for char
    • {''} for cellstrs
    • Integer numeric types have no standard missing value; they are never considered missing.
    • Structs are never considered missing.
    • Logicals are never considered missing.
    • Other types have no standard missing value; it is currently an error to call ismissing on them without providing an indicator.
      • This includes cells which are not cellstrs; calling ismissing on them results in an error.
      • TODO: Determine whether this should really be an error, or if it should default to never considering those types as missing.
      • TODO: Decide whether, for classdef objects, ismissing should polymorphically detect isnan()/isnat()/isnanny() methods and use those, or whether we should require classes to override ismissing() itself.

    If indicator is supplied, it is an array containing multiple values, all of which are considered to be missing values. Only indicator values that are type-compatible with the input are considered; other indicator value types are silently ignored. This is by design, so you can pass an indicator that holds sentinel values for disparate types in to ismissing() used for any type, or for compound types like table.

    Indicators are currently not supported for struct or logical inputs. This is probably a bug.

    Table defines its own ismissing() method which respects individual variables’ data types; see table.ismissing.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/isnanny.html000066400000000000000000000074511515050116100277300ustar00rootroot00000000000000 isnanny (Octave Tablicious v0.3.6)

    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: isnan, isnat, ismissing, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate.html000066400000000000000000000121641515050116100301760ustar00rootroot00000000000000 localdate (Octave Tablicious v0.3.6)

    8.2.25 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002eNaT.html000066400000000000000000000100551515050116100313240ustar00rootroot00000000000000 localdate.NaT (Octave Tablicious v0.3.6)

    8.2.25.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002edatenum.html000066400000000000000000000057331515050116100323060ustar00rootroot00000000000000 localdate.datenum (Octave Tablicious v0.3.6)

    8.2.25.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002edatestr.html000066400000000000000000000065761515050116100323250ustar00rootroot00000000000000 localdate.datestr (Octave Tablicious v0.3.6)

    8.2.25.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002edatestrs.html000066400000000000000000000066741515050116100325070ustar00rootroot00000000000000 localdate.datestrs (Octave Tablicious v0.3.6)

    8.2.25.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002edatestruct.html000066400000000000000000000071031515050116100330240ustar00rootroot00000000000000 localdate.datestruct (Octave Tablicious v0.3.6)

    8.2.25.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002edispstrs.html000066400000000000000000000057231515050116100325230ustar00rootroot00000000000000 localdate.dispstrs (Octave Tablicious v0.3.6)

    8.2.25.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002eisnan.html000066400000000000000000000055501515050116100317560ustar00rootroot00000000000000 localdate.isnan (Octave Tablicious v0.3.6)

    8.2.25.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002eisnat.html000066400000000000000000000056411515050116100317650ustar00rootroot00000000000000 localdate.isnat (Octave Tablicious v0.3.6)

    8.2.25.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002elocaldate.html000066400000000000000000000105701515050116100325740ustar00rootroot00000000000000 localdate.localdate (Octave Tablicious v0.3.6)

    8.2.25.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002eposixtime.html000066400000000000000000000063521515050116100326700ustar00rootroot00000000000000 localdate.posixtime (Octave Tablicious v0.3.6)

    8.2.25.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/localdate_002eymd.html000066400000000000000000000057501515050116100314410ustar00rootroot00000000000000 localdate.ymd (Octave Tablicious v0.3.6)

    8.2.25.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/milliseconds.html000066400000000000000000000063601515050116100307340ustar00rootroot00000000000000 milliseconds (Octave Tablicious v0.3.6)

    8.2.26 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/minutes.html000066400000000000000000000055711515050116100277360ustar00rootroot00000000000000 minutes (Octave Tablicious v0.3.6)

    8.2.27 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/missing.html000066400000000000000000000075011515050116100277160ustar00rootroot00000000000000 missing (Octave Tablicious v0.3.6)

    8.2.28 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/missing_002edispstrs.html000066400000000000000000000061341515050116100322410ustar00rootroot00000000000000 missing.dispstrs (Octave Tablicious v0.3.6)

    8.2.28.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/missing_002eismissing.html000066400000000000000000000060311515050116100323670ustar00rootroot00000000000000 missing.ismissing (Octave Tablicious v0.3.6)

    8.2.28.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/missing_002eisnan.html000066400000000000000000000057621515050116100315040ustar00rootroot00000000000000 missing.isnan (Octave Tablicious v0.3.6)

    8.2.28.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/missing_002eisnanny.html000066400000000000000000000055321515050116100320460ustar00rootroot00000000000000 missing.isnanny (Octave Tablicious v0.3.6)

    8.2.28.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/missing_002emissing.html000066400000000000000000000054341515050116100320410ustar00rootroot00000000000000 missing.missing (Octave Tablicious v0.3.6)

    8.2.28.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeA.html000066400000000000000000000071321515050116100276050ustar00rootroot00000000000000 mustBeA (Octave Tablicious v0.3.6)

    8.2.29 mustBeA

    Function File: x = mustBeA (x, type)
    Function File: x = mustBeA (x, type, label)

    Requires that input is of a given type.

    Raises an error if the input x is not of type type, as determined by isa (x, type).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeCellstr.html000066400000000000000000000064471515050116100310450ustar00rootroot00000000000000 mustBeCellstr (Octave Tablicious v0.3.6)

    8.2.30 mustBeCellstr

    Function File: x = mustBeCellstr (x, label)

    Requires that input is a cellstr.

    Raises an error if the input x is not a cellstr (a cell array of char arrays).

    TODO: Decide whether to require the contained char arrays be rowvec/empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeCharvec.html000066400000000000000000000071621515050116100310030ustar00rootroot00000000000000 mustBeCharvec (Octave Tablicious v0.3.6)

    8.2.31 mustBeCharvec

    Function File: x = mustBeCharvec (x, label)

    Requires that input is a char row vector.

    Raises an error if the input x is not a row vector of chars. char row vectors are Octave’s normal representation of single strings. (They are what are produced by '...' string literals.) As a special case, 0-by-0 empty chars (what is produced by the string literal '') are also considered charvecs.

    This does not differentiate between single-quoted and double-quoted strings.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeFinite.html000066400000000000000000000045521515050116100306460ustar00rootroot00000000000000 mustBeFinite (Octave Tablicious v0.3.6)

    8.2.32 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeInteger.html000066400000000000000000000045501515050116100310230ustar00rootroot00000000000000 mustBeInteger (Octave Tablicious v0.3.6)

    8.2.33 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeMember.html000066400000000000000000000045561515050116100306430ustar00rootroot00000000000000 mustBeMember (Octave Tablicious v0.3.6)

    8.2.34 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeNonempty.html000066400000000000000000000045621515050116100312420ustar00rootroot00000000000000 mustBeNonempty (Octave Tablicious v0.3.6)

    8.2.35 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeNumeric.html000066400000000000000000000045501515050116100310300ustar00rootroot00000000000000 mustBeNumeric (Octave Tablicious v0.3.6)

    8.2.36 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeReal.html000066400000000000000000000045421515050116100303120ustar00rootroot00000000000000 mustBeReal (Octave Tablicious v0.3.6)

    8.2.37 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeSameSize.html000066400000000000000000000066631515050116100311550ustar00rootroot00000000000000 mustBeSameSize (Octave Tablicious v0.3.6)

    8.2.38 mustBeSameSize

    Function File: [a, b] = mustBeSameSize (a, b, labelA, labelB)

    Requires that the inputs are the same size.

    Raises an error if the inputs a and b are not the same size, as determined by isequal (size (a), size (b)).

    labelA and labelB are optional inputs that determine how the input will be described in error messages. If not supplied, inputname (...) is used, and if that is empty, it falls back to "input 1" and "input 2".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeScalar.html000066400000000000000000000063671515050116100306430ustar00rootroot00000000000000 mustBeScalar (Octave Tablicious v0.3.6)

    8.2.39 mustBeScalar

    Function File: x = mustBeScalar (x, label)

    Requires that input is scalar.

    Raises an error if the input x is not scalar, as determined by isscalar (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeScalarLogical.html000066400000000000000000000064651515050116100321350ustar00rootroot00000000000000 mustBeScalarLogical (Octave Tablicious v0.3.6)

    8.2.40 mustBeScalarLogical

    Function File: x = mustBeScalarLogical (x, label)

    Requires that input is a scalar logical.

    Raises an error if the input x is not scalar, as determined by isscalar (x) && islogical (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/mustBeVector.html000066400000000000000000000062731515050116100306740ustar00rootroot00000000000000 mustBeVector (Octave Tablicious v0.3.6)

    8.2.41 mustBeVector

    Function File: x = mustBeVector (x, label)

    Requires that input is a vector or empty.

    Raises an error if the input x is not a row vector and is not 0-by-0 empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    octave_002echrono_002eDummyClass.html000066400000000000000000000106001515050116100341300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.chrono.DummyClass (Octave Tablicious v0.3.6)

    8.2.44 octave.chrono.DummyClass

    Class: DummyClass

    A do-nothing class just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    Instance Variable of DummyClass: double x

    An x. Has no semantics.

    Instance Variable of DummyClass: double y

    A y. Has no semantics.

    octave_002echrono_002eDummyClass_002eDummyClass.html000066400000000000000000000071361515050116100366720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.chrono.DummyClass.DummyClass (Octave Tablicious v0.3.6)

    8.2.44.1 octave.chrono.DummyClass.DummyClass

    Constructor: obj = octave.chrono.DummyClass ()

    Constructs a new scalar DummyClass with default values.

    Constructor: obj = octave.chrono.DummyClass (x, y)

    Constructs a new DummyClass with the specified values.

    octave_002echrono_002eDummyClass_002ebar.html000066400000000000000000000061461515050116100353550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.chrono.DummyClass.bar (Octave Tablicious v0.3.6)

    8.2.44.3 octave.chrono.DummyClass.bar

    Method: out = bar (obj)

    Computes a bar value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    octave_002echrono_002eDummyClass_002efoo.html000066400000000000000000000065471515050116100354010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.chrono.DummyClass.foo (Octave Tablicious v0.3.6)

    8.2.44.2 octave.chrono.DummyClass.foo

    Method: out = foo (obj)

    Computes a foo value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    octave_002echrono_002edummy_005ffunction.html000066400000000000000000000063141515050116100355110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.chrono.dummy_function (Octave Tablicious v0.3.6)

    8.2.43 octave.chrono.dummy_function

    Function: out = dummy_function (x)

    A dummy function just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/octave_002edataset.html000066400000000000000000000244121515050116100316220ustar00rootroot00000000000000 octave.dataset (Octave Tablicious v0.3.6)

    8.2.45 octave.dataset

    Class: dataset

    The dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It’s provided so you can use tab completion on the dataset list.

    octave_002edataset_002eAirPassengers.html000066400000000000000000000075571515050116100347730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.AirPassengers (Octave Tablicious v0.3.6)

    8.2.45.2 octave.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    octave_002edataset_002eBJsales.html000066400000000000000000000110411515050116100335270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.BJsales (Octave Tablicious v0.3.6)

    8.2.45.9 octave.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002eBOD.html000066400000000000000000000102631515050116100326150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.BOD (Octave Tablicious v0.3.6)

    8.2.45.10 octave.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    octave_002edataset_002eChickWeight.html000066400000000000000000000113071515050116100344020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.ChickWeight (Octave Tablicious v0.3.6)

    8.2.45.12 octave.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.ChickWeight
    
    octave.examples.coplot (t, "Time", "weight", "Chick");
    
    
    octave_002edataset_002eDNase.html000066400000000000000000000111741515050116100332050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.DNase (Octave Tablicious v0.3.6)

    8.2.45.18 octave.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.DNase;
    
    # TODO: Port this from R
    
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    octave_002edataset_002eEuStockMarkets.html000066400000000000000000000111341515050116100351130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.EuStockMarkets (Octave Tablicious v0.3.6)

    8.2.45.22 octave.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = octave.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price,1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    octave_002edataset_002eFormaldehyde.html000066400000000000000000000114201515050116100346100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Formaldehyde (Octave Tablicious v0.3.6)

    8.2.45.24 octave.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    % TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    % TODO: Add linear model summary output
    % TOD: Add linear model summary plot
    
    octave_002edataset_002eHairEyeColor.html000066400000000000000000000151061515050116100345370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.HairEyeColor (Octave Tablicious v0.3.6)

    8.2.45.26 octave.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    octave.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    octave_002edataset_002eHarman23cor.html000066400000000000000000000102741515050116100342720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Harman23cor (Octave Tablicious v0.3.6)

    8.2.45.27 octave.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    octave.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    octave_002edataset_002eHarman74cor.html000066400000000000000000000103511515050116100342740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Harman74cor (Octave Tablicious v0.3.6)

    8.2.45.28 octave.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    octave.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    octave_002edataset_002eIndometh.html000066400000000000000000000110071515050116100337550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Indometh (Octave Tablicious v0.3.6)

    8.2.45.29 octave.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    octave_002edataset_002eInsectSprays.html000066400000000000000000000104461515050116100346430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.InsectSprays (Octave Tablicious v0.3.6)

    8.2.45.31 octave.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    octave_002edataset_002eJohnsonJohnson.html000066400000000000000000000102601515050116100351630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.JohnsonJohnson (Octave Tablicious v0.3.6)

    8.2.45.34 octave.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = octave.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    octave_002edataset_002eLakeHuron.html000066400000000000000000000104761515050116100341070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.LakeHuron (Octave Tablicious v0.3.6)

    8.2.45.35 octave.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = octave.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    octave_002edataset_002eLifeCycleSavings.html000066400000000000000000000126301515050116100354030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.LifeCycleSavings (Octave Tablicious v0.3.6)

    8.2.45.37 octave.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = octave.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    octave_002edataset_002eLoblolly.html000066400000000000000000000111041515050116100337740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Loblolly (Octave Tablicious v0.3.6)

    8.2.45.38 octave.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    octave_002edataset_002eNile.html000066400000000000000000000112161515050116100330770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Nile (Octave Tablicious v0.3.6)

    8.2.45.44 octave.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = octave.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    octave_002edataset_002eOrange.html000066400000000000000000000115241515050116100334250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Orange (Octave Tablicious v0.3.6)

    8.2.45.48 octave.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    octave_002edataset_002eOrchardSprays.html000066400000000000000000000124761515050116100350050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.OrchardSprays (Octave Tablicious v0.3.6)

    8.2.45.49 octave.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.OrchardSprays;
    
    octave.examples.plot_pairs (t);
    
    
    octave_002edataset_002ePlantGrowth.html000066400000000000000000000102201515050116100344530ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.PlantGrowth (Octave Tablicious v0.3.6)

    8.2.45.50 octave.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = octave.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    octave_002edataset_002ePuromycin.html000066400000000000000000000124731515050116100342030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Puromycin (Octave Tablicious v0.3.6)

    8.2.45.54 octave.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = octave.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    octave_002edataset_002eTheoph.html000066400000000000000000000142621515050116100334430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Theoph (Octave Tablicious v0.3.6)

    8.2.45.66 octave.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = octave.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    octave_002edataset_002eTitanic.html000066400000000000000000000146051515050116100336100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.Titanic (Octave Tablicious v0.3.6)

    8.2.45.67 octave.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    octave.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    octave_002edataset_002eToothGrowth.html000066400000000000000000000115331515050116100345020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.ToothGrowth (Octave Tablicious v0.3.6)

    8.2.45.68 octave.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = octave.dataset.ToothGrowth;
    
    octave.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    octave_002edataset_002eUCBAdmissions.html000066400000000000000000000141011515050116100346470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.UCBAdmissions (Octave Tablicious v0.3.6)

    8.2.45.71 octave.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    octave.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    octave_002edataset_002eUKDriverDeaths.html000066400000000000000000000147451515050116100350460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.UKDriverDeaths (Octave Tablicious v0.3.6)

    8.2.45.72 octave.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    octave.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    octave_002edataset_002eUKLungDeaths.html000066400000000000000000000111001515050116100344760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.UKLungDeaths (Octave Tablicious v0.3.6)

    8.2.45.74 octave.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = octave.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    octave_002edataset_002eUKgas.html000066400000000000000000000103711515050116100332230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.UKgas (Octave Tablicious v0.3.6)

    8.2.45.73 octave.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = octave.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    octave_002edataset_002eUSAccDeaths.html000066400000000000000000000100541515050116100342760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.USAccDeaths (Octave Tablicious v0.3.6)

    8.2.45.75 octave.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = octave.dataset.USAccDeaths;
    
    octave_002edataset_002eUSArrests.html000066400000000000000000000137571515050116100341170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.USArrests (Octave Tablicious v0.3.6)

    8.2.45.76 octave.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.USArrests;
    
    summary (t);
    
    octave.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    octave_002edataset_002eUSJudgeRatings.html000066400000000000000000000116241515050116100350510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.USJudgeRatings (Octave Tablicious v0.3.6)

    8.2.45.77 octave.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = octave.dataset.USJudgeRatings;
    
    figure
    octave.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    octave_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111101515050116100364510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.USPersonalExpenditure (Octave Tablicious v0.3.6)

    8.2.45.78 octave.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    octave_002edataset_002eVADeaths.html000066400000000000000000000113271515050116100336520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.VADeaths (Octave Tablicious v0.3.6)

    8.2.45.80 octave.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    octave_002edataset_002eWWWusage.html000066400000000000000000000103541515050116100337230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.WWWusage (Octave Tablicious v0.3.6)

    8.2.45.85 octave.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002eWorldPhones.html000066400000000000000000000105161515050116100344560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.WorldPhones (Octave Tablicious v0.3.6)

    8.2.45.84 octave.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    octave_002edataset_002eairmiles.html000066400000000000000000000072311515050116100340170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.airmiles (Octave Tablicious v0.3.6)

    8.2.45.1 octave.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = octave.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    octave_002edataset_002eairquality.html000066400000000000000000000125501515050116100343760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.airquality (Octave Tablicious v0.3.6)

    8.2.45.3 octave.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = octave.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if i == j
          continue
        endif
        ix_subplot = (n_vars*(j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    octave_002edataset_002eanscombe.html000066400000000000000000000121441515050116100340000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.anscombe (Octave Tablicious v0.3.6)

    8.2.45.4 octave.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = octave.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim(haxs(1), x_limits);
    ylim(haxs(1), y_limits);
    
    octave_002edataset_002eattenu.html000066400000000000000000000114521515050116100335120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.attenu (Octave Tablicious v0.3.6)

    8.2.45.5 octave.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    octave_002edataset_002eattitude.html000066400000000000000000000111041515050116100340270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.attitude (Octave Tablicious v0.3.6)

    8.2.45.6 octave.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = octave.dataset.attitude
    
    octave.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    octave_002edataset_002eaustres.html000066400000000000000000000102221515050116100336720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.austres (Octave Tablicious v0.3.6)

    8.2.45.7 octave.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = octave.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    octave_002edataset_002ebeavers.html000066400000000000000000000106451515050116100336440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.beavers (Octave Tablicious v0.3.6)

    8.2.45.8 octave.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    octave_002edataset_002ecars.html000066400000000000000000000116701515050116100331440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.cars (Octave Tablicious v0.3.6)

    8.2.45.11 octave.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = octave.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    octave_002edataset_002echickwts.html000066400000000000000000000114241515050116100340300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.chickwts (Octave Tablicious v0.3.6)

    8.2.45.13 octave.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = octave.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    octave_002edataset_002eco2.html000066400000000000000000000116671515050116100327050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.co2 (Octave Tablicious v0.3.6)

    8.2.45.14 octave.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = octave.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    octave_002edataset_002ecrimtab.html000066400000000000000000000164011515050116100336320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.crimtab (Octave Tablicious v0.3.6)

    8.2.45.15 octave.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    

    octave_002edataset_002ecupcake.html000066400000000000000000000104721515050116100336260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.cupcake (Octave Tablicious v0.3.6)

    8.2.45.16 octave.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = octave.dataset.cupcake
    plot(datenum(t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric")
    
    
    octave_002edataset_002ediscoveries.html000066400000000000000000000106231515050116100345300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.discoveries (Octave Tablicious v0.3.6)

    8.2.45.17 octave.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    octave_002edataset_002eesoph.html000066400000000000000000000106651515050116100333350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.esoph (Octave Tablicious v0.3.6)

    8.2.45.19 octave.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    octave_002edataset_002eeuro.html000066400000000000000000000116601515050116100331650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.euro (Octave Tablicious v0.3.6)

    8.2.45.20 octave.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    octave_002edataset_002eeurodist.html000066400000000000000000000101151515050116100340430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.eurodist (Octave Tablicious v0.3.6)

    8.2.45.21 octave.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    octave_002edataset_002efaithful.html000066400000000000000000000121131515050116100340070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.faithful (Octave Tablicious v0.3.6)

    8.2.45.23 octave.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = octave.dataset.faithful;
    
    % Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    % Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    % Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    octave_002edataset_002efreeny.html000066400000000000000000000121061515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.freeny (Octave Tablicious v0.3.6)

    8.2.45.25 octave.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.freeny;
    
    summary(t)
    
    octave.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    octave_002edataset_002einfert.html000066400000000000000000000116041515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.infert (Octave Tablicious v0.3.6)

    8.2.45.30 octave.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = octave.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    octave_002edataset_002eiris.html000066400000000000000000000121561515050116100331620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.iris (Octave Tablicious v0.3.6)

    8.2.45.32 octave.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    octave_002edataset_002eislands.html000066400000000000000000000104021515050116100336410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.islands (Octave Tablicious v0.3.6)

    8.2.45.33 octave.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/octave_002edataset_002elh.html000066400000000000000000000101741515050116100326740ustar00rootroot00000000000000 octave.dataset.lh (Octave Tablicious v0.3.6)

    8.2.45.36 octave.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = octave.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    octave_002edataset_002elongley.html000066400000000000000000000115431515050116100336640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.longley (Octave Tablicious v0.3.6)

    8.2.45.39 octave.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    octave_002edataset_002elynx.html000066400000000000000000000113371515050116100332060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.lynx (Octave Tablicious v0.3.6)

    8.2.45.40 octave.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = octave.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    octave_002edataset_002emorley.html000066400000000000000000000121361515050116100335210ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.morley (Octave Tablicious v0.3.6)

    8.2.45.41 octave.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = octave.dataset.morley;
    
    # TODO: Port to Octave
    
    
    octave_002edataset_002emtcars.html000066400000000000000000000124301515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.mtcars (Octave Tablicious v0.3.6)

    8.2.45.42 octave.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    octave_002edataset_002enhtemp.html000066400000000000000000000105011515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.nhtemp (Octave Tablicious v0.3.6)

    8.2.45.43 octave.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    octave_002edataset_002enottem.html000066400000000000000000000101421515050116100335130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.nottem (Octave Tablicious v0.3.6)

    8.2.45.45 octave.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002enpk.html000066400000000000000000000113061515050116100330000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.npk (Octave Tablicious v0.3.6)

    8.2.45.46 octave.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = octave.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    octave_002edataset_002eoccupationalStatus.html000066400000000000000000000103641515050116100361000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.occupationalStatus (Octave Tablicious v0.3.6)

    8.2.45.47 octave.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002eprecip.html000066400000000000000000000103671515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.precip (Octave Tablicious v0.3.6)

    8.2.45.51 octave.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    octave_002edataset_002epresidents.html000066400000000000000000000111731515050116100343720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.presidents (Octave Tablicious v0.3.6)

    8.2.45.52 octave.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    octave_002edataset_002epressure.html000066400000000000000000000112321515050116100340560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.pressure (Octave Tablicious v0.3.6)

    8.2.45.53 octave.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    octave_002edataset_002equakes.html000066400000000000000000000120521515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.quakes (Octave Tablicious v0.3.6)

    8.2.45.55 octave.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002erandu.html000066400000000000000000000111331515050116100333170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.randu (Octave Tablicious v0.3.6)

    8.2.45.56 octave.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = octave.dataset.randu;
    
    
    
    octave_002edataset_002erivers.html000066400000000000000000000102651515050116100335250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.rivers (Octave Tablicious v0.3.6)

    8.2.45.57 octave.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    octave_002edataset_002erock.html000066400000000000000000000110461515050116100331470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.rock (Octave Tablicious v0.3.6)

    8.2.45.58 octave.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = octave.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    octave_002edataset_002esleep.html000066400000000000000000000113071515050116100333210ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.sleep (Octave Tablicious v0.3.6)

    8.2.45.59 octave.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = octave.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    octave_002edataset_002estackloss.html000066400000000000000000000141761515050116100342260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.stackloss (Octave Tablicious v0.3.6)

    8.2.45.60 octave.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = octave.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    octave_002edataset_002estate.html000066400000000000000000000130021515050116100333230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.state (Octave Tablicious v0.3.6)

    8.2.45.61 octave.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.state;
    
    octave_002edataset_002esunspot_005fmonth.html000066400000000000000000000104541515050116100355260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.sunspot_month (Octave Tablicious v0.3.6)

    8.2.45.62 octave.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = octave.dataset.sunspot_month;
    
    
    
    octave_002edataset_002esunspot_005fyear.html000066400000000000000000000102131515050116100353320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.sunspot_year (Octave Tablicious v0.3.6)

    8.2.45.63 octave.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = octave.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    octave_002edataset_002esunspots.html000066400000000000000000000105131515050116100341050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.sunspots (Octave Tablicious v0.3.6)

    8.2.45.64 octave.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = octave.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    octave_002edataset_002eswiss.html000066400000000000000000000140731515050116100333640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.swiss (Octave Tablicious v0.3.6)

    8.2.45.65 octave.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    octave_002edataset_002etreering.html000066400000000000000000000111751515050116100340330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.treering (Octave Tablicious v0.3.6)

    8.2.45.69 octave.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = octave.dataset.treering;
    
    
    octave_002edataset_002etrees.html000066400000000000000000000113451515050116100333350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.trees (Octave Tablicious v0.3.6)

    8.2.45.70 octave.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = octave.dataset.trees;
    
    figure
    octave.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    octave_002edataset_002euspop.html000066400000000000000000000102461515050116100333600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.uspop (Octave Tablicious v0.3.6)

    8.2.45.79 octave.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    octave_002edataset_002evolcano.html000066400000000000000000000112151515050116100336500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.volcano (Octave Tablicious v0.3.6)

    8.2.45.81 octave.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    octave.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    octave_002edataset_002ewarpbreaks.html000066400000000000000000000111771515050116100343570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.warpbreaks (Octave Tablicious v0.3.6)

    8.2.45.82 octave.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    octave_002edataset_002ewomen.html000066400000000000000000000113471515050116100333420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.women (Octave Tablicious v0.3.6)

    8.2.45.83 octave.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    octave_002edataset_002ezCO2.html000066400000000000000000000104531515050116100327670ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.dataset.zCO2 (Octave Tablicious v0.3.6)

    8.2.45.86 octave.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/octave_002edatasets.html000066400000000000000000000064451515050116100320130ustar00rootroot00000000000000 octave.datasets (Octave Tablicious v0.3.6)

    8.2.46 octave.datasets

    Class: datasets

    Example dataset collection.

    datasets is a collection of example datasets to go with the Tablicious package.

    The datasets class provides methods for listing and loading the example datasets.

    octave_002edatasets_002edescription.html000066400000000000000000000066261515050116100347270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.datasets.description (Octave Tablicious v0.3.6)

    8.2.46.3 octave.datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    octave_002edatasets_002elist.html000066400000000000000000000063431515050116100333530ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.datasets.list (Octave Tablicious v0.3.6)

    8.2.46.1 octave.datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    octave_002edatasets_002eload.html000066400000000000000000000067061515050116100333220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.datasets.load (Octave Tablicious v0.3.6)

    8.2.46.2 octave.datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    octave_002eexamples_002ecoplot.html000066400000000000000000000144341515050116100337060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.examples.coplot (Octave Tablicious v0.3.6)

    8.2.47 octave.examples.coplot

    Function: [fig, hax] = coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    octave_002eexamples_002eplot_005fpairs.html000066400000000000000000000113271515050116100351530ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html octave.examples.plot_pairs (Octave Tablicious v0.3.6)

    8.2.48 octave.examples.plot_pairs

    Function: out = plot_pairs (data)
    Function: out = plot_pairs (data, plot_type)
    Function: out = plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/pp.html000066400000000000000000000100571515050116100266640ustar00rootroot00000000000000 pp (Octave Tablicious v0.3.6)

    8.2.49 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/rmmissing.html000066400000000000000000000106451515050116100302600ustar00rootroot00000000000000 rmmissing (Octave Tablicious v0.3.6)

    8.2.50 rmmissing

    Function: [out, tf] = rmmissing (X)
    Function: [out, tf] = rmmissing (X, dim)
    Function: [out, tf] = rmmissing (…, 'MinNumMissing', MinNumMissing)

    Remove missing values.

    If x is a vector, removes elements with missing values. If x is a matrix, removes rows or columns with missing data elements.

    dim is the dimension to operate along. Specifying a dimension forces rmmissing to operate in matrix instead of vector mode.

    MinNumMissing indicates how many missing element values there must be in a row or column for it to be considered missing and this removed. This option is only used in matrix mode; it is silently ignored in vector mode.

    Returns: out - the input, with missing elements or rows or columns removed tf - a logical index vector indicating which elements, rows, or columns were removed

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/scalarexpand.html000066400000000000000000000072661515050116100307220ustar00rootroot00000000000000 scalarexpand (Octave Tablicious v0.3.6)

    8.2.51 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/seconds.html000066400000000000000000000062771515050116100277140ustar00rootroot00000000000000 seconds (Octave Tablicious v0.3.6)

    8.2.52 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/size2str.html000066400000000000000000000064751515050116100300430ustar00rootroot00000000000000 size2str (Octave Tablicious v0.3.6)

    8.2.53 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/splitapply.html000066400000000000000000000114261515050116100304470ustar00rootroot00000000000000 splitapply (Octave Tablicious v0.3.6)

    8.2.54 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/standardizeMissing.html000066400000000000000000000071131515050116100321060ustar00rootroot00000000000000 standardizeMissing (Octave Tablicious v0.3.6)

    8.2.55 standardizeMissing

    Function: out = standardizeMissing (X, indicator)

    Insert standard missing values.

    Standardizes missing values in X by replacing the values listed in indicator with the standard missing values for the type of X.

    Standard missing values depend on the data type: * NaN for double, single, duration, and calendarDuration * NaT for datetime * ' ' for char * {''} for cellstrs * Integer numeric types have no standard missing value; they are never considered missing. * Structs are never considered missing. * Logicals are never considered missing.

    See also: table.standardizeMissing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/startsWith.html000066400000000000000000000074561515050116100304320ustar00rootroot00000000000000 startsWith (Octave Tablicious v0.3.6)

    8.2.56 startsWith

    Function: out = startsWith (str, pattern)
    Function: out = startsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings start with a pattern.

    Tests whether the given strings start with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string.html000066400000000000000000000154511515050116100275560ustar00rootroot00000000000000 string (Octave Tablicious v0.3.6)

    8.2.57 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where: - Each element of a string array is a single string - A single string is a 1-dimensional row vector of Unicode characters - Those characters are encoded in UTF-8 - This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles. - It is a type-safe object wrapper around Octave’s base primitive character types. - It adds ismissing() semantics. - And it introduces Unicode support. Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002ecell.html000066400000000000000000000061331515050116100311410ustar00rootroot00000000000000 string.cell (Octave Tablicious v0.3.6)

    8.2.57.8 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002ecellstr.html000066400000000000000000000057511515050116100316770ustar00rootroot00000000000000 string.cellstr (Octave Tablicious v0.3.6)

    8.2.57.7 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002echar.html000066400000000000000000000062001515050116100311320ustar00rootroot00000000000000 string.char (Octave Tablicious v0.3.6)

    8.2.57.9 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002ecmp.html000066400000000000000000000075171515050116100310100ustar00rootroot00000000000000 string.cmp (Octave Tablicious v0.3.6)

    8.2.57.23 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002edecode.html000066400000000000000000000057451515050116100314550ustar00rootroot00000000000000 string.decode (Octave Tablicious v0.3.6)

    8.2.57.25 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002edispstrs.html000066400000000000000000000064521515050116100321010ustar00rootroot00000000000000 string.dispstrs (Octave Tablicious v0.3.6)

    8.2.57.3 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eencode.html000066400000000000000000000063531515050116100314630ustar00rootroot00000000000000 string.encode (Octave Tablicious v0.3.6)

    8.2.57.10 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eerase.html000066400000000000000000000057571515050116100313340ustar00rootroot00000000000000 string.erase (Octave Tablicious v0.3.6)

    8.2.57.18 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eismissing.html000066400000000000000000000061331515050116100322270ustar00rootroot00000000000000 string.ismissing (Octave Tablicious v0.3.6)

    8.2.57.5 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eisnanny.html000066400000000000000000000057511515050116100317060ustar00rootroot00000000000000 string.isnanny (Octave Tablicious v0.3.6)

    8.2.57.6 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eisstring.html000066400000000000000000000057101515050116100320640ustar00rootroot00000000000000 string.isstring (Octave Tablicious v0.3.6)

    8.2.57.2 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002elower.html000066400000000000000000000061551515050116100313560ustar00rootroot00000000000000 string.lower (Octave Tablicious v0.3.6)

    8.2.57.16 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002emissing.html000066400000000000000000000060551515050116100316760ustar00rootroot00000000000000 string.missing (Octave Tablicious v0.3.6)

    8.2.57.24 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eregexprep.html000066400000000000000000000067571515050116100322370ustar00rootroot00000000000000 string.regexprep (Octave Tablicious v0.3.6)

    8.2.57.21 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002ereverse.html000066400000000000000000000061471515050116100317020ustar00rootroot00000000000000 string.reverse (Octave Tablicious v0.3.6)

    8.2.57.14 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    string_002ereverse_005fbytes.html000066400000000000000000000067131515050116100334230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html string.reverse_bytes (Octave Tablicious v0.3.6)

    8.2.57.13 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002esizeof.html000066400000000000000000000054641515050116100315270ustar00rootroot00000000000000 string.sizeof (Octave Tablicious v0.3.6)

    8.2.57.4 string.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002estrcat.html000066400000000000000000000061711515050116100315240ustar00rootroot00000000000000 string.strcat (Octave Tablicious v0.3.6)

    8.2.57.15 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002estrcmp.html000066400000000000000000000065171515050116100315400ustar00rootroot00000000000000 string.strcmp (Octave Tablicious v0.3.6)

    8.2.57.22 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002estrfind.html000066400000000000000000000067521515050116100317020ustar00rootroot00000000000000 string.strfind (Octave Tablicious v0.3.6)

    8.2.57.20 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002estring.html000066400000000000000000000064571515050116100315410ustar00rootroot00000000000000 string.string (Octave Tablicious v0.3.6)

    8.2.57.1 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs. - chars and cellstrs are converted via cellstr() - numerics are converted via num2str() - datetimes are converted via datestr()

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002estrlength.html000066400000000000000000000072511515050116100322360ustar00rootroot00000000000000 string.strlength (Octave Tablicious v0.3.6)

    8.2.57.12 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    string_002estrlength_005fbytes.html000066400000000000000000000066421515050116100337630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html string.strlength_bytes (Octave Tablicious v0.3.6)

    8.2.57.11 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002estrrep.html000066400000000000000000000071431515050116100315430ustar00rootroot00000000000000 string.strrep (Octave Tablicious v0.3.6)

    8.2.57.19 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/string_002eupper.html000066400000000000000000000061511515050116100313550ustar00rootroot00000000000000 string.upper (Octave Tablicious v0.3.6)

    8.2.57.17 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/struct2table.html000066400000000000000000000067221515050116100306670ustar00rootroot00000000000000 struct2table (Octave Tablicious v0.3.6)

    8.2.58 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table.html000066400000000000000000000246061515050116100273410ustar00rootroot00000000000000 table (Octave Tablicious v0.3.6)

    8.2.59 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/tableOuterFillValue.html000066400000000000000000000074701515050116100321640ustar00rootroot00000000000000 tableOuterFillValue (Octave Tablicious v0.3.6)

    8.2.60 tableOuterFillValue

    Function: out = tableOuterFillValue (x)

    Outer fill value for variable within a table.

    Determines the fill value to usse for a given variable value x when that value is used as a variable in a table that is involved in an outer join.

    The default implementation for tableOuterFillValue has support for all Octave primitive types, plus cellstrs, datetime & friends, strings, and table-valued variables.

    This function may become private to table before version 1.0. It is currently global to make debugging more convenient. It (or an equivalent) will remain global if we want to allow user-defined classes to customize their fill value. It also has default logic that will determine the fill value for an arbitrary type by detecting the value used to fill elements during array expansion operations. This will be appropriate for most data types.

    Returns a 1-by-ncols value of the same type as x, which may be any type, where ncols is the number of columns in the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eaddvars.html000066400000000000000000000101431515050116100314230ustar00rootroot00000000000000 table.addvars (Octave Tablicious v0.3.6)

    8.2.59.38 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eantijoin.html000066400000000000000000000066701515050116100316240ustar00rootroot00000000000000 table.antijoin (Octave Tablicious v0.3.6)

    8.2.59.50 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ecartesian.html000066400000000000000000000074741515050116100317650ustar00rootroot00000000000000 table.cartesian (Octave Tablicious v0.3.6)

    8.2.59.51 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ecolumns.html000066400000000000000000000056071515050116100314700ustar00rootroot00000000000000 table.columns (Octave Tablicious v0.3.6)

    8.2.59.17 table.columns

    Method: out = columns (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002econgruentize.html000066400000000000000000000067151515050116100325250ustar00rootroot00000000000000 table.congruentize (Octave Tablicious v0.3.6)

    8.2.59.56 table.congruentize

    Method: [outA, outB] = congruentize (A, B)

    Make tables congruent.

    Makes tables congruent by ensuring they have the same variables of the same types in the same order. Congruent tables may be safely unioned, intersected, vertcatted, or have other set operations done to them.

    Variable names present in one input but not in the other produces an error. Variables with the same name but different types in the inputs produces an error. Inputs must either both have row names or both not have row names; it is an error if one has row names and the other doesn’t. Variables in different orders are reordered to be in the same order as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002econvertvars.html000066400000000000000000000072751515050116100323670ustar00rootroot00000000000000 table.convertvars (Octave Tablicious v0.3.6)

    8.2.59.39 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eevalWithVars.html000066400000000000000000000071561515050116100324300ustar00rootroot00000000000000 table.evalWithVars (Octave Tablicious v0.3.6)

    8.2.59.68 table.evalWithVars

    Method: out = evalWithVars (obj, expr)

    Evaluate an expression against table’s variables.

    Evaluates the M-code expression expr in a workspace where all of obj’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = table_examples.SpDb
    tmp = join (sp, p);
    shipment_weight = evalWithVars (tmp, "Qty .* Weight")
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002efindgroups.html000066400000000000000000000063671515050116100321740ustar00rootroot00000000000000 table.findgroups (Octave Tablicious v0.3.6)

    8.2.59.67 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002egetvar.html000066400000000000000000000062341515050116100312750ustar00rootroot00000000000000 table.getvar (Octave Tablicious v0.3.6)

    8.2.59.35 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002egetvars.html000066400000000000000000000061331515050116100314560ustar00rootroot00000000000000 table.getvars (Octave Tablicious v0.3.6)

    8.2.59.36 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002egroupby.html000066400000000000000000000073451515050116100315000ustar00rootroot00000000000000 table.groupby (Octave Tablicious v0.3.6)

    8.2.59.52 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002egrpstats.html000066400000000000000000000064751515050116100316630ustar00rootroot00000000000000 table.grpstats (Octave Tablicious v0.3.6)

    8.2.59.53 table.grpstats

    Method: [out] = grpstats (obj, groupvar)
    Method: [out] = grpstats (…, 'DataVars', DataVars)

    Statistics by group.

    See also: table.groupby.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ehasrownames.html000066400000000000000000000055261515050116100323370ustar00rootroot00000000000000 table.hasrownames (Octave Tablicious v0.3.6)

    8.2.59.25 table.hasrownames

    Method: out = hasrownames (obj)

    True if this table has row names defined.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ehead.html000066400000000000000000000065421515050116100307100ustar00rootroot00000000000000 table.head (Octave Tablicious v0.3.6)

    8.2.59.43 table.head

    Method: out = head (obj)
    Method: out = head (obj, k)

    Get first K rows of table.

    Returns the first k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eheight.html000066400000000000000000000054041515050116100312530ustar00rootroot00000000000000 table.height (Octave Tablicious v0.3.6)

    8.2.59.14 table.height

    Method: out = height (obj)

    Number of rows in table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ehorzcat.html000066400000000000000000000062571515050116100314640ustar00rootroot00000000000000 table.horzcat (Octave Tablicious v0.3.6)

    8.2.59.27 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002einnerjoin.html000066400000000000000000000072601515050116100320000ustar00rootroot00000000000000 table.innerjoin (Octave Tablicious v0.3.6)

    8.2.59.46 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eintersect.html000066400000000000000000000064401515050116100320040ustar00rootroot00000000000000 table.intersect (Octave Tablicious v0.3.6)

    8.2.59.58 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eiscol.html000066400000000000000000000056611515050116100311210ustar00rootroot00000000000000 table.iscol (Octave Tablicious v0.3.6)

    8.2.59.22 table.iscol

    Method: out = iscol (obj)

    Test whether array is a column vector.

    For tables, iscol is true if the input has a single variable. The number of columns within that variable does not matter.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eisempty.html000066400000000000000000000056271515050116100315040ustar00rootroot00000000000000 table.isempty (Octave Tablicious v0.3.6)

    8.2.59.19 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eismatrix.html000066400000000000000000000055731515050116100316520ustar00rootroot00000000000000 table.ismatrix (Octave Tablicious v0.3.6)

    8.2.59.20 table.ismatrix

    Method: out = ismatrix (obj)

    Test whether array is a matrix.

    For tables, ismatrix is always true, by definition.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eismember.html000066400000000000000000000061011515050116100316010ustar00rootroot00000000000000 table.ismember (Octave Tablicious v0.3.6)

    8.2.59.61 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eismissing.html000066400000000000000000000072341515050116100320130ustar00rootroot00000000000000 table.ismissing (Octave Tablicious v0.3.6)

    8.2.59.62 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eisrow.html000066400000000000000000000054221515050116100311460ustar00rootroot00000000000000 table.isrow (Octave Tablicious v0.3.6)

    8.2.59.21 table.isrow

    Method: out = isrow (obj)

    Test whether array is a row vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eisscalar.html000066400000000000000000000054771515050116100316160ustar00rootroot00000000000000 table.isscalar (Octave Tablicious v0.3.6)

    8.2.59.24 table.isscalar

    Method: out = isscalar (obj)

    Test whether array is scalar.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eistable.html000066400000000000000000000054241515050116100314300ustar00rootroot00000000000000 table.istable (Octave Tablicious v0.3.6)

    8.2.59.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eisvector.html000066400000000000000000000054511515050116100316430ustar00rootroot00000000000000 table.isvector (Octave Tablicious v0.3.6)

    8.2.59.23 table.isvector

    Method: out = isvector (obj)

    Test whether array is a vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ejoin.html000066400000000000000000000074041515050116100307440ustar00rootroot00000000000000 table.join (Octave Tablicious v0.3.6)

    8.2.59.45 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002elength.html000066400000000000000000000056311515050116100312660ustar00rootroot00000000000000 table.length (Octave Tablicious v0.3.6)

    8.2.59.10 table.length

    Method: out = length (obj)

    Length along longest dimension

    Use of length is not recommended. Use numel or size instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002emergevars.html000066400000000000000000000073111515050116100317750ustar00rootroot00000000000000 table.mergevars (Octave Tablicious v0.3.6)

    8.2.59.40 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002emovevars.html000066400000000000000000000070221515050116100316430ustar00rootroot00000000000000 table.movevars (Octave Tablicious v0.3.6)

    8.2.59.34 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002endims.html000066400000000000000000000055111515050116100311140ustar00rootroot00000000000000 table.ndims (Octave Tablicious v0.3.6)

    8.2.59.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002enumel.html000066400000000000000000000060441515050116100311240ustar00rootroot00000000000000 table.numel (Octave Tablicious v0.3.6)

    8.2.59.18 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060251515050116100326760ustar00rootroot00000000000000 table.outerfillvals (Octave Tablicious v0.3.6)

    8.2.59.48 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eouterjoin.html000066400000000000000000000075241515050116100320260ustar00rootroot00000000000000 table.outerjoin (Octave Tablicious v0.3.6)

    8.2.59.47 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eprettyprint.html000066400000000000000000000060101515050116100324010ustar00rootroot00000000000000 table.prettyprint (Octave Tablicious v0.3.6)

    8.2.59.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eremovevars.html000066400000000000000000000061001515050116100321660ustar00rootroot00000000000000 table.removevars (Octave Tablicious v0.3.6)

    8.2.59.33 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erenamevars.html000066400000000000000000000067001515050116100321460ustar00rootroot00000000000000 table.renamevars (Octave Tablicious v0.3.6)

    8.2.59.70 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erepelem.html000066400000000000000000000066561515050116100314460ustar00rootroot00000000000000 table.repelem (Octave Tablicious v0.3.6)

    8.2.59.29 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables.

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erepmat.html000066400000000000000000000061401515050116100312710ustar00rootroot00000000000000 table.repmat (Octave Tablicious v0.3.6)

    8.2.59.28 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eresolveVarRef.html000066400000000000000000000103021515050116100325610ustar00rootroot00000000000000 table.resolveVarRef (Octave Tablicious v0.3.6)

    8.2.59.71 table.resolveVarRef

    Method: [ixVar, varNames] = resolveVarRef (obj, varRef)
    Method: [ixVar, varNames] = resolveVarRef (obj, varRef, strictness)

    Resolve a variable reference against this table.

    A varRef is a numeric or char/cellstr indicator of which variables within obj are being referenced.

    strictness controls what to do when the given variable references could not be resolved. It may be ’strict’ (the default) or ’lenient’.

    Returns: ixVar - the indexes of the variables in obj varNames - a cellstr of the names of the variables in obj

    Raises an error if any of the specified variables could not be resolved, unless strictness is ’lenient’, in which case it will return 0 for the index and ” for the name for each variable which could not be resolved.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erestrict.html000066400000000000000000000103501515050116100316360ustar00rootroot00000000000000 table.restrict (Octave Tablicious v0.3.6)

    8.2.59.69 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with evalWithVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, evalWithVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = table_examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ermmissing.html000066400000000000000000000111271515050116100320120ustar00rootroot00000000000000 table.rmmissing (Octave Tablicious v0.3.6)

    8.2.59.63 table.rmmissing

    Method: [out, tf] = rmmissing (obj)
    Method: [out, tf] = rmmissing (obj, indicator)
    Method: [out, tf] = rmmissing (…, 'DataVariables', vars)
    Method: [out, tf] = rmmissing (…, 'MinNumMissing', minNumMissing)

    Remove rows with missing values.

    Removes the rows from obj that have missing values.

    If the ’DataVariables’ option is given, only the data in the specified variables is considered.

    Returns: out - A table the same as obj, but with rows with missing values removed. tf - A logical index vector indicating which rows were removed.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erowfun.html000066400000000000000000000156361515050116100313330ustar00rootroot00000000000000 table.rowfun (Octave Tablicious v0.3.6)

    8.2.59.66 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erows.html000066400000000000000000000053661515050116100310040ustar00rootroot00000000000000 table.rows (Octave Tablicious v0.3.6)

    8.2.59.15 table.rows

    Method: out = rows (obj)

    Number of rows in table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002erows2vars.html000066400000000000000000000107151515050116100317540ustar00rootroot00000000000000 table.rows2vars (Octave Tablicious v0.3.6)

    8.2.59.55 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esemijoin.html000066400000000000000000000070661515050116100316260ustar00rootroot00000000000000 table.semijoin (Octave Tablicious v0.3.6)

    8.2.59.49 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    table_002esetDimensionNames.html000066400000000000000000000100171515050116100333450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html table.setDimensionNames (Octave Tablicious v0.3.6)

    8.2.59.31 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esetRowNames.html000066400000000000000000000061441515050116100322540ustar00rootroot00000000000000 table.setRowNames (Octave Tablicious v0.3.6)

    8.2.59.32 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    table_002esetVariableNames.html000066400000000000000000000076511515050116100331570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html table.setVariableNames (Octave Tablicious v0.3.6)

    8.2.59.30 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esetdiff.html000066400000000000000000000062551515050116100314340ustar00rootroot00000000000000 table.setdiff (Octave Tablicious v0.3.6)

    8.2.59.60 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esetvar.html000066400000000000000000000070611515050116100313100ustar00rootroot00000000000000 table.setvar (Octave Tablicious v0.3.6)

    8.2.59.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esetxor.html000066400000000000000000000064731515050116100313360ustar00rootroot00000000000000 table.setxor (Octave Tablicious v0.3.6)

    8.2.59.59 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esize.html000066400000000000000000000071761515050116100307650ustar00rootroot00000000000000 table.size (Octave Tablicious v0.3.6)

    8.2.59.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esizeof.html000066400000000000000000000060221515050116100312770ustar00rootroot00000000000000 table.sizeof (Octave Tablicious v0.3.6)

    8.2.59.13 table.sizeof

    Method: out = sizeof (obj)

    Approximate size of array in bytes. For tables, this returns the sume of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esplitapply.html000066400000000000000000000072111515050116100322020ustar00rootroot00000000000000 table.splitapply (Octave Tablicious v0.3.6)

    8.2.59.54 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esplitvars.html000066400000000000000000000075211515050116100320340ustar00rootroot00000000000000 table.splitvars (Octave Tablicious v0.3.6)

    8.2.59.41 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esqueeze.html000066400000000000000000000056241515050116100314700ustar00rootroot00000000000000 table.squeeze (Octave Tablicious v0.3.6)

    8.2.59.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002estack.html000066400000000000000000000072141515050116100311110ustar00rootroot00000000000000 table.stack (Octave Tablicious v0.3.6)

    8.2.59.42 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    table_002estandardizeMissing.html000066400000000000000000000100471515050116100335650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html table.standardizeMissing (Octave Tablicious v0.3.6)

    8.2.59.64 table.standardizeMissing

    Method: out = standardizeMissing (obj, indicator)
    Method: out = standardizeMissing (…, 'DataVariables', vars)

    Insert standard missing values.

    Standardizes missing values in variable data.

    If the DataVariables option is supplied, only the indicated variables are standardized.

    indicator is passed along to standardizeMissing when it is called on each of the data variables in turn. The same indicator is used for all variables. You can mix and match indicator types by just passing in mixed indicator types in a cell array; indicators that don’t match the type of the column they are operating on are just ignored.

    Returns a table with same variable names and types as obj, but with variable values standardized.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esubsetrows.html000066400000000000000000000060211515050116100322170ustar00rootroot00000000000000 table.subsetrows (Octave Tablicious v0.3.6)

    8.2.59.72 table.subsetrows

    Method: out = subsetrows (obj, ixRows)

    Subset table by rows.

    Subsets this table by rows.

    ixRows may be a numeric or logical index into the rows of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esubsetvars.html000066400000000000000000000057701515050116100322120ustar00rootroot00000000000000 table.subsetvars (Octave Tablicious v0.3.6)

    8.2.59.73 table.subsetvars

    Method: out = subsetvars (obj, ixVars)

    Subset table by variables.

    Subsets table obj by subsetting it along its variables.

    ixVars may be: - a numeric index vector - a logical index vector - ":" - a cellstr vector of variable names

    The resulting table will have its variables reordered to match ixVars.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002esummary.html000066400000000000000000000055611515050116100315040ustar00rootroot00000000000000 table.summary (Octave Tablicious v0.3.6)

    8.2.59.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002etable.html000066400000000000000000000115751515050116100311000ustar00rootroot00000000000000 table.table (Octave Tablicious v0.3.6)

    8.2.59.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002etable2array.html000066400000000000000000000056001515050116100322110ustar00rootroot00000000000000 table.table2array (Octave Tablicious v0.3.6)

    8.2.59.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002etable2cell.html000066400000000000000000000062171515050116100320170ustar00rootroot00000000000000 table.table2cell (Octave Tablicious v0.3.6)

    8.2.59.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002etable2struct.html000066400000000000000000000071751515050116100324300ustar00rootroot00000000000000 table.table2struct (Octave Tablicious v0.3.6)

    8.2.59.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002etail.html000066400000000000000000000065341515050116100307410ustar00rootroot00000000000000 table.tail (Octave Tablicious v0.3.6)

    8.2.59.44 table.tail

    Method: out = tail (obj)
    Method: out = tail (obj, k)

    Get last K rows of table.

    Returns the last k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002eunion.html000066400000000000000000000064131515050116100311340ustar00rootroot00000000000000 table.union (Octave Tablicious v0.3.6)

    8.2.59.57 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002evarfun.html000066400000000000000000000103341515050116100313020ustar00rootroot00000000000000 table.varfun (Octave Tablicious v0.3.6)

    8.2.59.65 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002evarnames.html000066400000000000000000000064431515050116100316230ustar00rootroot00000000000000 table.varnames (Octave Tablicious v0.3.6)

    8.2.59.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002evertcat.html000066400000000000000000000061261515050116100314550ustar00rootroot00000000000000 table.vertcat (Octave Tablicious v0.3.6)

    8.2.59.26 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/table_002ewidth.html000066400000000000000000000055711515050116100311270ustar00rootroot00000000000000 table.width (Octave Tablicious v0.3.6)

    8.2.59.16 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/timezones.html000066400000000000000000000077261515050116100302730ustar00rootroot00000000000000 timezones (Octave Tablicious v0.3.6)

    8.2.61 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/vartype.html000066400000000000000000000064651515050116100277470ustar00rootroot00000000000000 vartype (Octave Tablicious v0.3.6)

    8.2.62 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/vecfun.html000066400000000000000000000066301515050116100275350ustar00rootroot00000000000000 vecfun (Octave Tablicious v0.3.6)

    8.2.63 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/html/years.html000066400000000000000000000064311515050116100273710ustar00rootroot00000000000000 years (Octave Tablicious v0.3.6)

    8.2.64 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/tablicious.html000066400000000000000000023552141515050116100274500ustar00rootroot00000000000000 Octave Tablicious v0.3.6

    Octave Tablicious v0.3.6

    Next:   [Contents]

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.3.6.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.3.6 for GNU Octave.

    Tablicious provides Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <floss@apjanke.net>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.3.6/tablicious-0.3.6.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    Up: Time Zones   [Contents]

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    Previous: , Up: Durations   [Contents]

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the octave.datasets and octave.dataset classes.

    To see a list of the available data sets, run octave.datasets.list(). Then to load one of the example data sets, run octave.datasets.load('examplename'). For example:

    octave.datasets.list
    t = octave.datasets.load('cupcake')
    

    You can also load it by calling octave.dataset.<name>. This does the same thing. For example:

    t = octave.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on octave.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc octave.dataset.cupcake
    

    (The command help octave.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports most of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that all these will be implemented some day.

    These areas of missing functionality are all tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/1.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    array2table

    Convert an array to a table.

    cell2table

    Convert a cell array to a table.

    struct2table

    Convert struct to a table.

    tableOuterFillValue

    Outer fill value for variable within a table.

    vartype

    Filter by variable type for use in suscripting.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    startsWith

    Test if strings start with a pattern.

    endsWith

    Test if strings end with a pattern.

    contains

    Test if strings contain a pattern.

    categorical

    Categorical variable array.

    discretize

    Group data into discrete bins or categories.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    localdate

    Represents a complete day using the Gregorian calendar.

    isdatetime

    True if input is a ’datetime’ array, false otherwise.

    NaT

    “Not-a-Time”.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    calmonths

    Create a ’calendarDuration’ that is a given number of calendar months long.

    calyears

    Construct a ’calendarDuration’ a given number of years long.

    days

    Duration in days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    hours

    Create a ’duration’ X hours long, or get the hours in a ’duration’ X.

    isduration

    True if input is a ’duration’ array, false otherwise.

    milliseconds

    Create a ’duration’ X milliseconds long, or get the milliseconds in a ’duration’ X.

    minutes

    Create a ’duration’ X hours long, or get the hours in a ’duration’ X.

    seconds

    Create a ’duration’ X seconds long, or get the seconds in a ’duration’ X.

    timezones

    List all the time zones defined on this system.

    years

    Create a ’duration’ X years long, or get the years in a ’duration’ X.

    8.1.4 Missing Data

    fillmissing

    Fill missing values.

    ismissing

    Find missing values.

    rmmissing

    Remove missing values.

    standardizeMissing

    Insert standard missing values.

    missing

    Generic auto-converting missing value.

    isnanny

    Test if elements are NaN or NaN-like

    eqn

    Determine element-wise equality, treating NaNs as equal

    8.1.5 Validation Functions

    mustBeA

    Requires that input is of a given type.

    mustBeCellstr

    Requires that input is a cellstr.

    mustBeCharvec

    Requires that input is a char row vector.

    mustBeFinite
    mustBeInteger
    mustBeMember
    mustBeNonempty
    mustBeNumeric
    mustBeReal
    mustBeSameSize

    Requires that the inputs are the same size.

    mustBeScalar

    Requires that input is scalar.

    mustBeScalarLogical

    Requires that input is a scalar logical.

    mustBeVector

    Requires that input is a vector or empty.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    dispstrs

    Display strings for array.

    isfile
    isfolder
    pp

    Alias for prettyprint, for interactive use.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    size2str

    Format an array size for display.

    splitapply

    Split data into groups and apply function.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    8.1.7 Example Datasets

    octave.datasets

    Example dataset collection.

    octave.dataset

    The ’dataset’ class provides convenient access to the various datasets included with Tablicious.

    8.1.8 Example Code

    octave.examples.plot_pairs

    Plot pairs of variables against each other.

    8.1.9 Uncategorized

    iscategorical

    True if input is a ’categorical’ array, false otherwise.

    octave.chrono.dummy_function

    A dummy function just for testing the doco tools.

    octave.chrono.DummyClass

    A do-nothing class just for testing the doco tools.

    octave.examples.coplot

    Conditioning plot.


    Previous: , Up: API Reference   [Contents]

    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.2.2 calendarDuration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.2.3 calendarDuration.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.2.4 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.


    8.2.2.5 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.


    8.2.2.6 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.


    8.2.2.7 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.2.8 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.2.9 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is just an alias for isnat, provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff: - gt, ge, lt, le - Ordinal support in general - countcats - summary

    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical.


    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.5.3 categorical.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.9.7 datetime.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.8 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.9 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.10 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.11 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.12 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.9.13 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.14 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.9.15 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.9.16 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.9.17 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.9.18 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.9.19 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.


    8.2.9.20 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.21 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.22 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.23 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.25 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.26 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.27 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.28 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.29 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.31 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.32 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    Next: , Previous: , Up: datetime   [Contents]

    8.2.9.33 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.9.34 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    Previous: , Up: datetime   [Contents]

    8.2.9.35 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    Up: duration   [Contents]

    8.2.13.1 duration.ofDays

    8.2.13.2 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    Next: , Up: duration   [Contents]

    8.2.13.3 duration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    Previous: , Up: duration   [Contents]

    8.2.13.4 duration.years

    8.2.13.5 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    Up: duration   [Contents]

    8.2.13.6 duration.hours

    8.2.13.7 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    Up: duration   [Contents]

    8.2.13.8 duration.minutes

    8.2.13.9 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    Up: duration   [Contents]

    8.2.13.10 duration.seconds

    8.2.13.11 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    Up: duration   [Contents]

    8.2.13.12 duration.milliseconds

    8.2.13.13 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    Up: duration   [Contents]

    8.2.13.14 duration.dispstrs

    8.2.13.15 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    Up: duration   [Contents]

    8.2.13.16 duration.char

    8.2.13.17 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    Up: duration   [Contents]

    8.2.13.18 duration.linspace

    8.2.13.19 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.14 endsWith

    Function: out = endsWith (str, pattern)
    Function: out = endsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings end with a pattern.

    Tests whether the given strings end with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.16 fillmissing

    Function: [out, tfFilled] = fillmissing (X, method)
    Function: [out, tfFilled] = fillmissing (X, 'constant', fill_val)
    Function: [out, tfFilled] = fillmissing (X, movmethod, window)

    Fill missing values.

    Fills missing values in X according to the method specified by method.

    This method is only partially implemented.

    method may be: 'constant' 'previous' 'next' 'nearest' 'linear' 'spline' 'pchip' movmethod may be: 'movmean' 'movmedian'

    Returns out, which is X but with missing values filled in, and tfFilled, a logical array the same size as X which indicates which elements were filled.


    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Returns a scalar logical.


    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Returns a scalar logical.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Returns a scalar logical.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.21 isfile

    Not documented


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.22 isfolder

    Not documented


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.23 ismissing

    Function: out = ismissing (X)
    Function: out = ismissing (X, indicator)

    Find missing values.

    Determines which elements of X contain missing values. If an indicator input is not provided, standard missing values depending on the input type of X are used.

    Standard missing values depend on the data type:

    • NaN for double, single, duration, and calendarDuration
    • NaT for datetime
    • ' ' for char
    • {''} for cellstrs
    • Integer numeric types have no standard missing value; they are never considered missing.
    • Structs are never considered missing.
    • Logicals are never considered missing.
    • Other types have no standard missing value; it is currently an error to call ismissing on them without providing an indicator.
      • - This includes cells which are not cellstrs; calling ismissing on them results in an error.
      • - TODO: Determine whether this should really be an error, or if it should default to never considering those types as missing.
      • - TODO: Decide whether, for classdef objects, ismissing should polymorphically detect isnan()/isnat()/isnanny() methods and use those, or whether we should require classes to override ismissing() itself.

    If indicator is supplied, it is an array containing multiple values, all of which are considered to be missing values. Only indicator values that are type-compatible with the input are considered; other indicator value types are silently ignored. This is by design, so you can pass an indicator that holds sentinel values for disparate types in to ismissing() used for any type, or for compound types like table.

    Indicators are currently not supported for struct or logical inputs. This is probably a bug.

    Table defines its own ismissing() method which respects individual variables’ data types; see table.ismissing.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: isnan, isnat, ismissing, eqn, isequaln


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.25 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    Next: , Up: localdate   [Contents]

    8.2.25.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.25.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    Next: , Previous: , Up: localdate   [Contents]

    8.2.25.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    Next: , Previous: , Up: localdate   [Contents]

    8.2.25.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.25.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.25.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.25.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.25.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.25.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.25.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    Previous: , Up: localdate   [Contents]

    8.2.25.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.26 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.27 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.28 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.28.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    Next: , Previous: , Up: missing   [Contents]

    8.2.28.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    Next: , Previous: , Up: missing   [Contents]

    8.2.28.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    Next: , Previous: , Up: missing   [Contents]

    8.2.28.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    Previous: , Up: missing   [Contents]

    8.2.28.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.29 mustBeA

    Function File: x = mustBeA (x, type)
    Function File: x = mustBeA (x, type, label)

    Requires that input is of a given type.

    Raises an error if the input x is not of type type, as determined by isa (x, type).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.30 mustBeCellstr

    Function File: x = mustBeCellstr (x, label)

    Requires that input is a cellstr.

    Raises an error if the input x is not a cellstr (a cell array of char arrays).

    TODO: Decide whether to require the contained char arrays be rowvec/empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.31 mustBeCharvec

    Function File: x = mustBeCharvec (x, label)

    Requires that input is a char row vector.

    Raises an error if the input x is not a row vector of chars. char row vectors are Octave’s normal representation of single strings. (They are what are produced by '...' string literals.) As a special case, 0-by-0 empty chars (what is produced by the string literal '') are also considered charvecs.

    This does not differentiate between single-quoted and double-quoted strings.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.32 mustBeFinite

    Not documented


    8.2.33 mustBeInteger

    Not documented


    8.2.34 mustBeMember

    Not documented


    8.2.35 mustBeNonempty

    Not documented


    8.2.36 mustBeNumeric

    Not documented


    8.2.37 mustBeReal

    Not documented


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.38 mustBeSameSize

    Function File: [a, b] = mustBeSameSize (a, b, labelA, labelB)

    Requires that the inputs are the same size.

    Raises an error if the inputs a and b are not the same size, as determined by isequal (size (a), size (b)).

    labelA and labelB are optional inputs that determine how the input will be described in error messages. If not supplied, inputname (...) is used, and if that is empty, it falls back to "input 1" and "input 2".


    8.2.39 mustBeScalar

    Function File: x = mustBeScalar (x, label)

    Requires that input is scalar.

    Raises an error if the input x is not scalar, as determined by isscalar (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.40 mustBeScalarLogical

    Function File: x = mustBeScalarLogical (x, label)

    Requires that input is a scalar logical.

    Raises an error if the input x is not scalar, as determined by isscalar (x) && islogical (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.41 mustBeVector

    Function File: x = mustBeVector (x, label)

    Requires that input is a vector or empty.

    Raises an error if the input x is not a row vector and is not 0-by-0 empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.42 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.43 octave.chrono.dummy_function

    Function: out = dummy_function (x)

    A dummy function just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.


    8.2.44 octave.chrono.DummyClass

    Class: DummyClass

    A do-nothing class just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    Instance Variable of DummyClass: double x

    An x. Has no semantics.

    Instance Variable of DummyClass: double y

    A y. Has no semantics.


    8.2.44.1 octave.chrono.DummyClass.DummyClass

    Constructor: obj = octave.chrono.DummyClass ()

    Constructs a new scalar DummyClass with default values.

    Constructor: obj = octave.chrono.DummyClass (x, y)

    Constructs a new DummyClass with the specified values.


    8.2.44.2 octave.chrono.DummyClass.foo

    Method: out = foo (obj)

    Computes a foo value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.


    8.2.44.3 octave.chrono.DummyClass.bar

    Method: out = bar (obj)

    Computes a bar value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.


    8.2.45 octave.dataset

    Class: dataset

    The dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It’s provided so you can use tab completion on the dataset list.


    8.2.45.1 octave.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = octave.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    

    8.2.45.2 octave.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    

    8.2.45.3 octave.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = octave.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if i == j
          continue
        endif
        ix_subplot = (n_vars*(j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.45.4 octave.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = octave.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim(haxs(1), x_limits);
    ylim(haxs(1), y_limits);
    

    8.2.45.5 octave.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.45.6 octave.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = octave.dataset.attitude
    
    octave.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.45.7 octave.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = octave.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    

    8.2.45.8 octave.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.45.9 octave.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.10 octave.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    

    8.2.45.11 octave.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = octave.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.45.12 octave.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.ChickWeight
    
    octave.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.45.13 octave.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = octave.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.45.14 octave.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = octave.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.45.15 octave.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    

    8.2.45.16 octave.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = octave.dataset.cupcake
    plot(datenum(t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric")
    
    

    8.2.45.17 octave.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.45.18 octave.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.DNase;
    
    # TODO: Port this from R
    
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.45.19 octave.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.45.20 octave.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.45.21 octave.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.45.22 octave.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = octave.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price,1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.45.23 octave.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = octave.dataset.faithful;
    
    % Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    % Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    % Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    

    8.2.45.24 octave.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    % TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    % TODO: Add linear model summary output
    % TOD: Add linear model summary plot
    

    8.2.45.25 octave.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.freeny;
    
    summary(t)
    
    octave.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.45.26 octave.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    octave.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.45.27 octave.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    octave.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.45.28 octave.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    octave.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.45.29 octave.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.45.30 octave.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = octave.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.45.31 octave.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.45.32 octave.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    

    8.2.45.33 octave.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.45.34 octave.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = octave.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.45.35 octave.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = octave.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.45.36 octave.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = octave.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    

    8.2.45.37 octave.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = octave.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.45.38 octave.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.45.39 octave.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.45.40 octave.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = octave.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.45.41 octave.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = octave.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.45.42 octave.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.45.43 octave.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.45.44 octave.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = octave.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    

    8.2.45.45 octave.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.46 octave.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = octave.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.45.47 octave.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.48 octave.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.45.49 octave.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.OrchardSprays;
    
    octave.examples.plot_pairs (t);
    
    

    8.2.45.50 octave.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = octave.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.45.51 octave.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.45.52 octave.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.45.53 octave.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.45.54 octave.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = octave.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.45.55 octave.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.56 octave.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = octave.dataset.randu;
    
    
    

    8.2.45.57 octave.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.45.58 octave.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = octave.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.45.59 octave.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = octave.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.45.60 octave.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = octave.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.45.61 octave.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.state;
    

    8.2.45.62 octave.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = octave.dataset.sunspot_month;
    
    
    

    8.2.45.63 octave.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = octave.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    

    8.2.45.64 octave.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = octave.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.45.65 octave.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.45.66 octave.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = octave.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.45.67 octave.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    octave.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.45.68 octave.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = octave.dataset.ToothGrowth;
    
    octave.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.45.69 octave.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = octave.dataset.treering;
    
    

    8.2.45.70 octave.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = octave.dataset.trees;
    
    figure
    octave.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.45.71 octave.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    octave.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.45.72 octave.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    octave.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.45.73 octave.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = octave.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.45.74 octave.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = octave.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.45.75 octave.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = octave.dataset.USAccDeaths;
    

    8.2.45.76 octave.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.USArrests;
    
    summary (t);
    
    octave.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.45.77 octave.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = octave.dataset.USJudgeRatings;
    
    figure
    octave.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    

    8.2.45.78 octave.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.45.79 octave.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.45.80 octave.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.45.81 octave.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    octave.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.45.82 octave.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.45.83 octave.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.45.84 octave.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.45.85 octave.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.86 octave.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.46 octave.datasets

    Class: datasets

    Example dataset collection.

    datasets is a collection of example datasets to go with the Tablicious package.

    The datasets class provides methods for listing and loading the example datasets.


    8.2.46.1 octave.datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.46.2 octave.datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.46.3 octave.datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.47 octave.examples.coplot

    Function: [fig, hax] = coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.48 octave.examples.plot_pairs

    Function: out = plot_pairs (data)
    Function: out = plot_pairs (data, plot_type)
    Function: out = plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.49 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.50 rmmissing

    Function: [out, tf] = rmmissing (X)
    Function: [out, tf] = rmmissing (X, dim)
    Function: [out, tf] = rmmissing (…, 'MinNumMissing', MinNumMissing)

    Remove missing values.

    If x is a vector, removes elements with missing values. If x is a matrix, removes rows or columns with missing data elements.

    dim is the dimension to operate along. Specifying a dimension forces rmmissing to operate in matrix instead of vector mode.

    MinNumMissing indicates how many missing element values there must be in a row or column for it to be considered missing and this removed. This option is only used in matrix mode; it is silently ignored in vector mode.

    Returns: out - the input, with missing elements or rows or columns removed tf - a logical index vector indicating which elements, rows, or columns were removed


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.51 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.52 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.53 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.54 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.55 standardizeMissing

    Function: out = standardizeMissing (X, indicator)

    Insert standard missing values.

    Standardizes missing values in X by replacing the values listed in indicator with the standard missing values for the type of X.

    Standard missing values depend on the data type: * NaN for double, single, duration, and calendarDuration * NaT for datetime * ' ' for char * {''} for cellstrs * Integer numeric types have no standard missing value; they are never considered missing. * Structs are never considered missing. * Logicals are never considered missing.

    See also: table.standardizeMissing


    8.2.56 startsWith

    Function: out = startsWith (str, pattern)
    Function: out = startsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings start with a pattern.

    Tests whether the given strings start with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.57 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where: - Each element of a string array is a single string - A single string is a 1-dimensional row vector of Unicode characters - Those characters are encoded in UTF-8 - This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles. - It is a type-safe object wrapper around Octave’s base primitive character types. - It adds ismissing() semantics. - And it introduces Unicode support. Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    Next: , Up: string   [Contents]

    8.2.57.1 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs. - chars and cellstrs are converted via cellstr() - numerics are converted via num2str() - datetimes are converted via datestr()


    Next: , Previous: , Up: string   [Contents]

    8.2.57.2 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.3 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.4 string.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.5 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.6 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.7 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.8 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.9 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.10 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.11 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.57.12 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    Next: , Previous: , Up: string   [Contents]

    8.2.57.13 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    Next: , Previous: , Up: string   [Contents]

    8.2.57.14 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.15 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.16 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.17 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.18 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.19 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.20 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.21 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.22 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.23 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    Next: , Previous: , Up: string   [Contents]

    8.2.57.24 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz.


    Previous: , Up: string   [Contents]

    8.2.57.25 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.58 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.59 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    Next: , Up: table   [Contents]

    8.2.59.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    Next: , Previous: , Up: table   [Contents]

    8.2.59.10 table.length

    Method: out = length (obj)

    Length along longest dimension

    Use of length is not recommended. Use numel or size instead.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.13 table.sizeof

    Method: out = sizeof (obj)

    Approximate size of array in bytes. For tables, this returns the sume of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently unimplemented.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.14 table.height

    Method: out = height (obj)

    Number of rows in table.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.15 table.rows

    Method: out = rows (obj)

    Number of rows in table.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.16 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.17 table.columns

    Method: out = columns (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.18 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.19 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.20 table.ismatrix

    Method: out = ismatrix (obj)

    Test whether array is a matrix.

    For tables, ismatrix is always true, by definition.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.21 table.isrow

    Method: out = isrow (obj)

    Test whether array is a row vector.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.22 table.iscol

    Method: out = iscol (obj)

    Test whether array is a column vector.

    For tables, iscol is true if the input has a single variable. The number of columns within that variable does not matter.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.23 table.isvector

    Method: out = isvector (obj)

    Test whether array is a vector.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.24 table.isscalar

    Method: out = isscalar (obj)

    Test whether array is scalar.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.25 table.hasrownames

    Method: out = hasrownames (obj)

    True if this table has row names defined.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.26 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.27 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.28 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.29 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables.

    Only two dimensions are supported for repelem on tables.


    8.2.59.30 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.59.31 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.59.32 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.33 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.34 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.35 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    Next: , Previous: , Up: table   [Contents]

    8.2.59.36 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.38 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table

    Adds the specified variables to a table.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.39 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.40 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.41 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.42 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.43 table.head

    Method: out = head (obj)
    Method: out = head (obj, k)

    Get first K rows of table.

    Returns the first k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.44 table.tail

    Method: out = tail (obj)
    Method: out = tail (obj, k)

    Get last K rows of table.

    Returns the last k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.45 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    Next: , Previous: , Up: table   [Contents]

    8.2.59.46 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    Next: , Previous: , Up: table   [Contents]

    8.2.59.47 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    Next: , Previous: , Up: table   [Contents]

    8.2.59.48 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.49 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB


    Next: , Previous: , Up: table   [Contents]

    8.2.59.50 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB


    Next: , Previous: , Up: table   [Contents]

    8.2.59.51 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.52 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.53 table.grpstats

    Method: [out] = grpstats (obj, groupvar)
    Method: [out] = grpstats (…, 'DataVars', DataVars)

    Statistics by group.

    See also: table.groupby.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.54 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby


    Next: , Previous: , Up: table   [Contents]

    8.2.59.55 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.56 table.congruentize

    Method: [outA, outB] = congruentize (A, B)

    Make tables congruent.

    Makes tables congruent by ensuring they have the same variables of the same types in the same order. Congruent tables may be safely unioned, intersected, vertcatted, or have other set operations done to them.

    Variable names present in one input but not in the other produces an error. Variables with the same name but different types in the inputs produces an error. Inputs must either both have row names or both not have row names; it is an error if one has row names and the other doesn’t. Variables in different orders are reordered to be in the same order as A.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.57 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.58 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.59 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.60 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.61 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.62 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.59.63 table.rmmissing

    Method: [out, tf] = rmmissing (obj)
    Method: [out, tf] = rmmissing (obj, indicator)
    Method: [out, tf] = rmmissing (…, 'DataVariables', vars)
    Method: [out, tf] = rmmissing (…, 'MinNumMissing', minNumMissing)

    Remove rows with missing values.

    Removes the rows from obj that have missing values.

    If the ’DataVariables’ option is given, only the data in the specified variables is considered.

    Returns: out - A table the same as obj, but with rows with missing values removed. tf - A logical index vector indicating which rows were removed.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.64 table.standardizeMissing

    Method: out = standardizeMissing (obj, indicator)
    Method: out = standardizeMissing (…, 'DataVariables', vars)

    Insert standard missing values.

    Standardizes missing values in variable data.

    If the DataVariables option is supplied, only the indicated variables are standardized.

    indicator is passed along to standardizeMissing when it is called on each of the data variables in turn. The same indicator is used for all variables. You can mix and match indicator types by just passing in mixed indicator types in a cell array; indicators that don’t match the type of the column they are operating on are just ignored.

    Returns a table with same variable names and types as obj, but with variable values standardized.


    8.2.59.65 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.66 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    Next: , Previous: , Up: table   [Contents]

    8.2.59.67 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.68 table.evalWithVars

    Method: out = evalWithVars (obj, expr)

    Evaluate an expression against table’s variables.

    Evaluates the M-code expression expr in a workspace where all of obj’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = table_examples.SpDb
    tmp = join (sp, p);
    shipment_weight = evalWithVars (tmp, "Qty .* Weight")
    

    Next: , Previous: , Up: table   [Contents]

    8.2.59.69 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with evalWithVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, evalWithVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = table_examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    Next: , Previous: , Up: table   [Contents]

    8.2.59.70 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    Next: , Previous: , Up: table   [Contents]

    8.2.59.71 table.resolveVarRef

    Method: [ixVar, varNames] = resolveVarRef (obj, varRef)
    Method: [ixVar, varNames] = resolveVarRef (obj, varRef, strictness)

    Resolve a variable reference against this table.

    A varRef is a numeric or char/cellstr indicator of which variables within obj are being referenced.

    strictness controls what to do when the given variable references could not be resolved. It may be ’strict’ (the default) or ’lenient’.

    Returns: ixVar - the indexes of the variables in obj varNames - a cellstr of the names of the variables in obj

    Raises an error if any of the specified variables could not be resolved, unless strictness is ’lenient’, in which case it will return 0 for the index and ” for the name for each variable which could not be resolved.


    Next: , Previous: , Up: table   [Contents]

    8.2.59.72 table.subsetrows

    Method: out = subsetrows (obj, ixRows)

    Subset table by rows.

    Subsets this table by rows.

    ixRows may be a numeric or logical index into the rows of obj.


    Previous: , Up: table   [Contents]

    8.2.59.73 table.subsetvars

    Method: out = subsetvars (obj, ixVars)

    Subset table by variables.

    Subsets table obj by subsetting it along its variables.

    ixVars may be: - a numeric index vector - a logical index vector - ":" - a cellstr vector of variable names

    The resulting table will have its variables reordered to match ixVars.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.60 tableOuterFillValue

    Function: out = tableOuterFillValue (x)

    Outer fill value for variable within a table.

    Determines the fill value to usse for a given variable value x when that value is used as a variable in a table that is involved in an outer join.

    The default implementation for tableOuterFillValue has support for all Octave primitive types, plus cellstrs, datetime & friends, strings, and table-valued variables.

    This function may become private to table before version 1.0. It is currently global to make debugging more convenient. It (or an equivalent) will remain global if we want to allow user-defined classes to customize their fill value. It also has default logic that will determine the fill value for an arbitrary type by detecting the value used to fill elements during array expansion operations. This will be appropriate for most data types.

    Returns a 1-by-ncols value of the same type as x, which may be any type, where ncols is the number of columns in the input.


    8.2.61 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.62 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    Next: , Previous: , Up: API Alphabetically   [Contents]

    8.2.63 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    Previous: , Up: API Alphabetically   [Contents]

    8.2.64 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.6/user-guide/tablicious.pdf000066400000000000000000016701361515050116100272570ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 260 /Filter /FlateDecode >> stream xڍAO  4aQ5hnk6v5{ƋƐ UZȃ5yz<"o~sD0)Uzk8-Cf- F؍a_I楈1o}v)+Y' Sk9**`F0*@Ѡm]8_> stream x}TKo0JؼmTʩ=8@v,xeLx̆}$B+0D4gcNkN;r BH\6EzFI^\*DOH Ѕ-!A!Wd}&Η)4m&A6G"5" ]ȁG ~`nIDq2c\oiT^n [0'}EcgAN~ 5)@b߇zPnV>0Kxh@6!PBuy@m~4  endstream endobj 35 0 obj << /Length 565 /Filter /FlateDecode >> stream xMo@{^<ܠUPjqAL-'r{^۴DFBU"ήg>b`9]\ΌIY=mY_Ϡ0{dRS YqXnhv*sR_btr--20AvK:qo&0*ԩ$x0 ^ ՐfAY/EG@{ &#8LM \S˫jtJ-&uv"8>0҆+Ҹi^>)և=ڃZsWU;&;>T`G?%Fhɏ=9=&+:hN㿚W]ZN>Ux;z'UvJJp0)8$Hqv&-s9Z0_Ճǟ. Q endstream endobj 124 0 obj << /Length 1477 /Filter /FlateDecode >> stream x[n6+M3-&,X(p@VN$[2m $$B9!I;ܞiv37OwJO7F0>\2p`|=P W7f?|3);.Gni pTүIJ[ (dXng{xhH\261S8HF i7H)-W?thmx-XZ[mdx&IcHBY|&in+,4rIr{LisdZT5saaikroȴV^[lV1p tϝڤ i \V)*晲q;-ݛwINj6#n_tW]:a[TT*rF)f(݇Xܢfd-z/xMOrNr7 ^lBkkkpD }Vq0+D(mTYp^O˝ufkȢ`{^A'<]Lȝna 8fsL $UdNdsQϦUSqb▶`ԣ+^ 0XNlI?UCJL,5ژA'z#J"7j]g2ɺFxL7}6'VXT- yZs*(*c*}cTo#%iFKl0޻_>U4K4n, DmDԏo1l%I>W%hY7,^a>>yU`ZV)94bYm4"i{Orb+B<#SB#hcg EՍo*V{Җ!,]/֥eQ[y_ ʤii (0©c]TS%X[K>.eROl%21XPFהyHQddt/cRWu)l>4Rg:6g)e_4p]6\QƷ(iI o7N O_vԬ jJT+C 0ɲ(K8j:pZռQ\xu;p>Xl;Vgɘ?ښ>hř!_L )֋֕56wi&̱"߾VE QqP6-F3 endstream endobj 226 0 obj << /Length 1359 /Filter /FlateDecode >> stream xMoF<mv{{,h XvKJm_ߥdQ+i q$3CCBK9$ ^o?}3w̻͛R&@C"YmQwy7%p΁A b8K5)JoE^eiv]bYUGyѳv܍}w3PzK/ /~m HjA7%3Na&3Wˢcvݠ%ڰb; >OP#cVC@xU(s"}!t,#s~څE G ;&7+fUj [i{*X9{*.a-9: Д嗯bĆERЛ`Mk<ŵE2A}G *чCXTv]˺pE!7NF(}f@L% ,, 5 ؟! Hwmt1+' & ٦/P$@!6pEc2P"2&,.x>ۄ_]B6 V(eU@!2:ذZ+ϫ ʅzU#֚ LtrtX8!^??Wn-BL\s ruq%#`ݗb ,sAx 6ql`;su^.ے?ۺٽ6D^_&dDX62?\cti`_9^̉ u&d 9 8.J\Gj1dGrףgrJsE3TnB1l0e4[8V"9סT`0WiݥL}zso`,D$9# bV_ɥD 6uWoz3nRp!br->-1/%@b-OiQ 3Nx*f0609u-_mK0jMKm5VP33>5 I, b5i SySˇp]l@Xܤ֯xA:q>S فĔpT} 11x/RM(A36&TJeVS( Rb}̧ٔ_ЊC ]"ߴwj:s|(q_9HsH"w#dDL;'v&h߄n,gSGG6u'ݖxç15ERx endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2395 /Filter /FlateDecode >> stream xڵZM\ϯ1pM6?asI!GF`jv@Ada*$|%!F ā\BK E UP*~Co(F=Uȁ=dS2JL8 *;Z <O9j M fDY UJoPN#HBAgt>zA$RC!8 = PdCP*( TBt:h*)A^aTi(4AGDЕ2J 4ǂVaojƿ@QIU #AQr~ꨒ R^Bc|1YqURkƏ0=c x Fg : D.B7cS&=D @M)% jSY+Fe`IѧF,t"T0\DZ]БїjWmCk|QC9lgD>1rzt~]~||x<<ˇǏO/0>%|P6Ov̟}DZx*t,D?:9C^߅˯~eO{I0qY>m\οqoNW,mU+K NVlEddCɆ Ux?Oo~ ޯw8HSNqT3i䊑4B6/^rgISICSor-XpqΩ^wr_#x/WR"9|R7\˒7.,qRKc4F,KĄ%Cbɐ*11j(PTCR J5j(P4Ci J3f(P4C J7n(PtC e0a(P C2 e0=XI^⥧k59999e/? =L{5'&lTƁsTkPW7vmuIm9vQRۋ^tZqӷ$-Ü+ #m")箱my0JlXm4˨i@ܒEtH 6X^#/MmAC)]GaBNe|.H5ȝW*Cȶ%M,#EoA ZpT 1, ؒݎr=)tʩp>%++2[S;H3N,8 ҫ޾TSNz_k:TnWȘH *tʩp6<8_]<^1n{:FY\ 8HSnRnLI' Y4Y̫nئ*]HCH)&}Z3nMp4u 4d0> 9!@FOv;SYtf7MJ-NLHM>6t]SWk95PWmd f4,8sj\ȷkD R䭷r*\H+D6@QH,hSB] gcH؍.=ItΩq!ߦFG'UD7.17Ωq!߮r֡6ıR%%"iu78Asj\ȷkAm肃iK'itΩq!߮)cƢV(jtΩq!ߖkjqLzsvwчitΩq!>yW|jrz"095.5b閹7ԐoRIS::v)\r1T3l>z جRklm>gT} vrSܪ@U 7+ ~rc%u<7-m rsܺ@] 7/P̩r@a 71m >@e 73 ~rC@cnY7кnj`75M vSi3:M /_j׬P'-Tۍb<Tlˍo=HSNvHB[C yk2]# endstream endobj 334 0 obj << /Length 1211 /Filter /FlateDecode >> stream xKo8: {\t[Džq:J"RKKٱ"Ѥ%%]ّ΋/(DbN+{ws~xϛ3] D(1԰dvכ$\g_&>]2$z޲: 9Ԝ=5b㓩f^eJMV<妨w$0&}wWi2eR֫o>sv`ʂDuR2E L[pO#+|ͺ}4zi3ι^!}(Q#8wظ`a2}$ ׺"pii'v R3Vu'`@A~xgt?R 6H]\b {A74Ճ=+s>~R!:G_>fW?X n-``E{KS# P9UE=XeP|T4nKclEFWPi8:t'i)2BǞ Y4nM}Z4y\4/F7Ҹ]!ҼDaDߟ[?,>+D =>)R-WپMXCNNdx"Ѯ۟YN]Gzs\jeH:>~J_y3ҝA⨈|7lɧwsw+E _vv)71v5=Eyh9 a#auR捉RFA2!@DݪG·,(+k߽vD g̥uQױ`28 QG$V~m72˽y rA,BM+9V3U/XCO߾?Ywcߢ>#HHȣKE~Bǭ"(NҀ|4M:2u} i`1>a so A{hWG!]1@hH!M~hR|}H=P1vAP]mdݶ^#r*[.S#] Q'ETɱE(4dt/~ =<$pT-pv89U/Ss-gD0gd"W xLoR% $\.YQ#t?&KgPq8 WR_ endstream endobj 229 0 obj << /Type /ObjStm /N 100 /First 900 /Length 2055 /Filter /FlateDecode >> stream xڵA+xL.Vb;|!"/#ƮZο+NM'Lqg^"&V!FIyߺ!,2w-su VY!۸hp W8uxo8,36?AcY+$z"KS `($?$q=f^~- dަs c'XBe\eC 6ׄ>:myUbet me 痡\?PT$bb3bL 0#P7VD8!Z "j~QfEn5m|VC,+SG -h&&T4 Ry3cL&Ep 3_TZh*5o44j(^bCRh,tlZD1ؖN,ʼn4as F3XiI1A~1l" ld2ϼ- H43q<;Db ܓ֩Œ#K%Z:aAq{LS8}1`b4  /Oo1`VM.xTiOF ˍwnkmt2fL;1l/h`7ܩ1fL;1n+žb2r&] vdO&W͘w0z-oRoWUk23f{2cxnDQ0Am`ku\,ƍs3&Q]R372fL; u1`=}b|cuc2fL;& 38{簨{fOr#] !h7axyfW:5Ű+cUK Cn/;f *ʭ:+d}+E _?>||s)/_ۻ_fzwvw>tė> stream xKs6<mx&;ʹi%Ah36)/HJxƖd ]w$&`Xb'm2m|3\*G>{sT s\$ 5p7]O_.>_?z3#[NZh+\= h4flr[|7ZTGoo,3<{uZ\HpZ-xqP"g"Tf._Lg; 9 v/Rxt3^KlП4Gg'Aq} q l6lnmͳqJU62{qYLp Ŵ?I`aN >.qM7* Zzv3P5ek7hN)І::fWZ0tbʹ!-1$XA؁o5I2+I,#RBUKid!Δx>wn#&{d}G8|j#|_/s&zͅfп&myɬMh5p4aF9sR6sa4a6& ^ uDAP!NS6{"`TY/jtiwXfn;I{<5KXyiܶKYϲB%q/tRP{z{.Ř'/[<#^q%U7lZvKat%)C+n3K$/Mߨ{p-Y^j ,&dq W_4b`vߍ3z]-X T㎹Α̽zjϥUoѧx-_6}99|i^x5gwLW endstream endobj 337 0 obj << /Type /ObjStm /N 100 /First 900 /Length 2011 /Filter /FlateDecode >> stream xڵO]S2TRf`&$`^$1^8& C oSzngѻt~*]]JnQօi ]??ĭH/kQ#`F@a@ ܊? A/M⹳5gWPoXܦ_j%*uFuR7o.:z%a$RL:$óN?Q+9pN5޼VC?z(:*O7ͳҨ/yg7MҢ!>i h%a쨑:k6tbMX v걐ZI= E,NBz,PG4=RM?WjR樮X3M$(X By,` I6vv#X/١nACmQ\4C$ĤuZҠ8XXP5KՃKsdG44gVg+Jijvf6t2wF%7ߜЮhWL9c\֘*`>JE{WnŪ~So18V+{eT'ձV1R 3i@[-3L˨ɈFo&S1`ә:s-J.cxnD`4UK@ oRW<s3&Mȥ"]2fL;Q}32}22fL25QΈy,Zs1`z賁z#1,1 Zydcn\0E ύw0ʧqlWR36kԻ0fG]s.0юcRj.#IY_m1`D_b[dtLQ1^DU/SQ1`:#zߐJ.cxnDk#׿t=g/{JcxnDs3(˖1`D߽#玜1`8r-sr#] 1B-A0JxtDvհ!)R%1<7bR|`1`L}qW7c)ɌF?31e ͘w06_Xcvs1fL;qCd+͒/0JXf_'W͘w0e=1<1`TݛɌFp2:J.cxnD=s61*rs3&蹭3#!1`dE=m[{%1+1<7cX1r4yfdZ-1,7b;jBk}oh ?3M QĘ߷7\pt%}O?/*VO?i˼r+-p7w( _|Ew??_2wPk)>=|~xS.xÏ{{(?<"oܷ\}ŷTj|IT#FFoH%i7Bo z3fЛ7Co zzzzzzzzzzz+V[Bo z+E)G"H{#RtFj^ z-ZkLoGn{.iRkD)ѓS{"gwzߋ{: % Mgwb<}6jCSn1`Y}?';CaF[>1w}3}]a}Ϟ endstream endobj 550 0 obj << /Length 1455 /Filter /FlateDecode >> stream xKsF:J[Ƶ٤bWKȢ}h3i9) UF04=nLF~#2\f ܌O_ iˇwBF2zXa?|S2a&A)kƑft$5GQ9bxOTgU4OͲȳ]W UU%zJvp#Ws&S"v#~mk~mNFSF vƈ@~dʸrܞμWmL%5m5gavF=y}P$K !C׃%RC#֓S\Qk c'K`B=@x,u&U=q“f=SXfCY9˛ƱBX-0[a[UqVݞ"Iix{0I{l#d0Ő{hC +uY@B}e~lŝ]@H4mR>m/ZF lH Tk':bJйY QI,8 NlW[R+ZAAh2iDϿM4Ӳɝ)&H˽Qm# _&VU*-KQo۫8Nlpy9Ȑs*HQ"Y5!z6ޞSSu_ض0^lF G)"/ #',ߍ+KO0q'μZ.ch7y-#Di CeUAp)"I"HQEfm ^.tH,CNIWO+6'mNQԻYW)*a[PW:*n˜IjX?2:(0@֙XE&d٢E9w#V .([s HQRl< _>̰RT{) 샞Q6HayDpj(9ŇDBljkZFc2>JE\T>5: )ud^112U/EsS32,ϰ`o±A<@E%eeҗ!B0CqEO]&i`k7ݩ*@-m5i_} > stream xڽA+xL.VE;|!"/#ƮZο+NM LЂi"î\Z l(>Q",czUlj %jL>B ,~I =_tu YKdVqZ͍ Ӏz>cYm^Y .uYxAO7k7h?MtQtN-7H[^yaՊtFEE۩/F;he':: }DžF\}LfQv1FE$1 n~Z]thF$`K>Qx\VG0 0hNnFFQ BVl,+#2]R 6eA͹/Ik74;]g9xiJ̉\k7:{b@:+]~$KqZ.Ǩ#"v6ȥz?6E|,񿅠L e_ ($]yw yLO>{O4m/N鮜x:|y:cawww` 1΢.5xQo뇷?/8Ct։M+ƐC<ȸ6R,ċ&L\՗ Z.DHxtL1ZsTg#1,7bAHj Ly1`l'rU{WB7B ˍgw/li2L)ez*_:^ٕΐ.+jjR~K4׿q+~ݵΫ-JKWPÛ;L9~T';Eu:LJOW}~iG{z>ՏaKiQ^n؏]ʨQO^K9Z%G٣ z#Fgggggggggg7Co z3fЛ7Co z+V[Bo u֢(9DQ(-eQQQQQQQQQQqqqqqqEaKzz=zC/T#N5T#N^LJГлDO߳@bebHRW>(gw,̌DHu&̳;P %()4EFatoSPg2bXnDc,OK1`cн! GV`WfgEGm T endstream endobj 680 0 obj << /Length 1600 /Filter /FlateDecode >> stream xMo8:~so 8Cу&Blɕ_Jv, q:R eB  "K#9Dmۗg7q'{#L2J,M{7GGtatw*Ȏp)#{!IO|y"u7$F[Zԃ 0i pn^Ug⼊u @@}T;=! vH!!Mug8"yĉ+ Phbk1|gf"}GrOuz,>R,1ӣK0b > 孓n# rU$twr >@>̒Q sΓ\>!=;pr]'r#gڐ`*u]f5TaT];1ATv#~w!Gi5@F}H\:_{! w%vfPE9Pe߯`4dj_ dl Rl削Gr$<٭‚^a(15wm *z E^CEBH (U˴q-;Br-O՝AGB;$4/_E4#'LDKќJmyzof7MԺ+Ip ~oTyrnhs_ Q=)m1[;q Y]5l=дMZ~EPޚA2BN|pKM`يQB!J^ dig,)cC{]mc0ӱyulژr>yﮗvj;"DhU$IfH2b -¢)pBcПO5M|8CUUf/mK@GKEhc\.:`uK(`ȑeRol;$\At2 -`]Su,7Wy(yr[]+[na]n]Ɓ@ }`O'J{8B|},=GS0݈T00f&Y# +ҝdGP @m. ?p0xB@(CݝNʣ`syRΊtU?GO(ν&Юe;Q}us\-"B=%M rMrgҏu{gbtܶSLa%=n_ endstream endobj 555 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2134 /Filter /FlateDecode >> stream xڵA+xt.U$A؀``GAc7X'HV6dE6BQ DTCΊ."_)hBi=(eZ ĖlEbZQnY=P-jYȦθCN:C&Ki$dv1nVtZ YtZȕ-ܬxO!wA pmS_8pRzlrb52ȵz 5{&I`( pCa,,/_uA"2>(nɲPBboAP#".BUTXbu4eS LJ4[cA:|J,ZSJ%hgXCM:JjPs*SVگj9Zٲ8Vt, -nV @i V{h#%&VК¡*B744U'CwBڧ4G&z%]g,ͮSfՌ[ov](u\^d'v|B'_5VD j PknۀAӡˋ_} ׯ/7<ÿ.ׯ~=w kz~wtrYF{T\Ux"\߄>E/fYP,Mb\WxYD 9$9 I+s0.IpX-B[eCLЍFLXǞ'`\7yݰ1DS[qNh667'7֙tXGcf1n/;)r߅?=jN?߯y۫eE]i[nG- z6n9MBϕĒZD &#g\+U wB vo22ٺ 0!v}н59MFc%;fإE,BI0Asq2VwFv vok~ ,)z@OYQ?;7M endstream endobj 811 0 obj << /Length 1433 /Filter /FlateDecode >> stream xKoFB%bqzSE(r s!p=c\l\~ f@6ͧQ!U3E=cUo!݀"Tn1E-!+ӥ8wI=%NuHOR6q&$t0>n?狺:l*IGY_D!*n>9/@ (Tlu9GBFչzMݍk|ATlA '0+Hc!Q>DKprrvwBN &T79Lpx[b=L ˼g J:I~bv 8DzX_[8fVL @{fI}޹CW쏋BSw͵> C5æJ=GI2y` տv,gPoߡ9EU9f0$x) AiQLOCb aЅ *a} & \z$( N,ߤ>r X4ya"TTL%BCaD-m]D?ԁڴji/i<+Hn1\c*;Dp*ʘg45z4P ?E^l>*Lcu4SpR^_ʘOVAqx2s٪  ))C*/c8 <jƵIϺ`ëwXF0<$p=Ϋ* x|<*nH 7&J_:_•Ja%VlYtt~Q)%)YH۽g VA(_C.u뗧:+Ɲ`-̂9x2${;bUGW8IѪ 6' 5p\ endstream endobj 688 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2136 /Filter /FlateDecode >> stream xڵ]7W2{t$0df&E^Y†e<{ԧ 6)j}HjɰTjm(Gj'-%5(J\S?OI;dKxNZPlF֒*w\5UQjo TIVf3=5~ @[Iͯ+$5\j-N~R^ƉBIj~&joH ʄv0%?N-0D@7o<䏓&IQxOFb3 ڈ{$6heJTpʒo$vRC`=ycdxRe6q~\ggw{٪T`Ϡ=#ߘ:քf3-{i Fl:dUPMcC znG}$x6BL^PnxWxxw2tTnto4FL- 8UUx-B~xU-dlxk C ݅m[x{0 ^w?h^kJ71Z1q#R|zt~.?ߧO?]һ?||NFQ(ۄ/]3 Mz"ߤ>U/I_}WQ>TSLK|ʿ[ɽAY9KyX6ZqH1z 1gW|Nȕ;%"wk 1Q\iSsJa|`1eNʕeE#\y"1mPnrN@wL 0uʥ;4,gjX1j0+ wJ鹖9WjzAa:)WVdSE #V" `FvT IpK^u;2Ր9!W YR`)tR4) ) ӥz!sB.^QЎwrE*2Zptn!mFVzqR Kr面~%}?_oz|x:뽯eǏo.M:~*^~}N]NB)u$x1>=~~x|o/[^x³_zlOpM=^s-5J繖vGym5%EQ^۹BBBBBBBBBBBCCCCCCCCCCOBOBOBOBOBOBOBOBOBOBOCOCOCOCOCOCOCOCOCOCBBBB/ݢ-ݶ~ЋAn=zC^z=z7Boz#FW^J5%Ey{CF%KL/&*kfQjNH1ZvoUoA\3dClU,\Z rN 2)&}1eNʕ;%rjl4;o)tR4)+hDR3f; ȫd\3" nZZ rF)oOs rkD9w٭ct 8w{a647MŔۥ endstream endobj 921 0 obj << /Length 1321 /Filter /FlateDecode >> stream x\Ms6Wh`Ӧ3=ȌVTJZq$-1>Ф=}! gFK+pYgp-ݍޝ\yTy/N_a0]`m5e`0]s,R }e#9O /0@ }Bj}@{I1 4̃7x'"̆:*>|\H_Iże 9gb(/˧궽` hX6z{gr͌)N)ב>Nuvɦ1r'LyP#o0&xlxcB9 *&SmNNǧHy"a}Ep  )6Ek& Rr5=%n/(򱋓rPPxqDHJaUl&ԋBaR6#$Pپ+ƶK.⌘>jq4w2)1s@@ݮRLJ;^><beŠ뢩?s4$(諸6frhb9 ^Ta\ ?͐GƸZ[?{*?.rY<]s6== W9tgޏ` ]0.+QYa07$ !Txq0M\$гע1Elhq{;#3s'DN/lϙi $[r%u٬@=rt`U)j&uFIx1iSNj]Rp|\DЍm`EkzyREs[T= T=#s#WfX~f.…XwKMwR<ɴq]me":_;wSh{;# =/oA9a/plN&ߐqfP^紕TWa&f +➋E;@uH-$G_C*rƵG~+`8ZT(C){2߅C=}1Y7  絕[٧GMq["m?j-GX6w|Uߨ&.ӿ endstream endobj 816 0 obj << /Type /ObjStm /N 100 /First 907 /Length 2045 /Filter /FlateDecode >> stream xڵO]ShlT*f`&$`l//O3 3t oSɢCHXWzϹ?{5;VfB4Rx^ Ϗy+zah鶼di$EQOs"s"22'Q͓Q <{#ϔ"f-ں:(/ݼdskE4Bp^tH ܃ O!fehUF^2z1z6 w/V/^^uț@_2hnWlc )QFI߃R%˼YӲ(#{C1/ÃjZs45b/Cj쾨8tWq4Bmj^ۼ Áb+j Z~F ƕ*x wyBG7 o7>./^\rr};\xa뛻O=uĪ*j*UWEˋ\\__^ a*'eՇØ0&UfmM2dZ$jL2$BUbQi*)tSf(eMT6t&JnLÓҤXxKYRE!!3NIu`.x嵞0g ixR&ASvU,cɔa)3 OJڱa{TbSײd0ݔ'eh2bZ!*6Wɐf;i+/]lul@nL< 9'LtSf(bT聘4̥nLÓr.TSnu3ٔaꔩ'#)qGmK)tSf+z+ڒ޵t'ÂLa)3 OJ:&LOE2QnK9ї42<7d Iِܫ,J ixBV#T!sC&&*kejГAY:bI8I6bxnLrAu nd0ݔ'%| Xg=2L7e!ѪfF$}c"}&0ݔ'%fpThN,]Yɔa)3 )|Ҟ{=Mφ<<ԕwc;b'͗{ԟZ@L7eIi?0v_]&ɔaꔩ'm)C>:l0ݔ'Z/8_J:'S4<)^vN MixRbOc}jL3Q4<)1?hvaK MixRb"W3_Ifɐ!nG֪&: K^~p71$n믿~q(W`v};;?]㗲Iq/_?Cw?A^>[Dq߮/ps,,>x`?r;|}ioRiT" z=zГГГГГГГГГГ7Boz#F7Bo z3fЛ7Co = = = = = = = = = = z+V[Bo z[EJr=RT#H-Ћ(((OQFX+l?HQ7O2N> stream xZKo@W#"!U*pp7ȣr&nk:Z(XoG DG9i_-zpy MLj3 ^+g;̈́w GѻFJ-O3;̢#-L9zlj|Pg-?ձ\qڬ/mO]v na(2e2P "4 bm\Xk;&P'#_Li,,N3 ;7$xN톿?_,8;XKdZොu;I//4]05s[lhFi1oGߑ! @Ug -.p4d^QZ'.2\z}m#0cuA)wg:Qh\̗Wƕ:T>rZt[`ngk9|ϱER0>C +W*Ө[lQyN}o{0tJA o0K8Ev,ϒkP6l|׬R"+T`Aeє7BFX-bZc5ؗ@Ic7PsU Hhi8~\YqO&$&e&S{O, E^K)ף$*LT"U .A1ȄU=1S;p꼥iivIw j^mI%4=_ Mwj*QӀ3nz*F\́b Hgt=-&Wk Nj&z*0=?b8D\1F7||ChK \Ykӈ#.CKhcUs> stream xڽ_Se{F3L qnZ0/_8RB9ogjU ,ͣ3Z 4DWTIw#xLFw&+Rɵ PXbڨ9 *-{QHQ xc<M:rX2DxmV]=LjmLlCPfޙ*ϩT+XJUЇ HrA$2 `5*t> 4u(I^Nbcf1=V@giƤeq&> 5%aH 5rAY W<jZ=ቜNi}vXԙ=gPa.1+ͫC͎'NόzL2o.WEPe fX  } dCIؗ/"X6Wv9xq:Ϗ:|:|>z|D2k~:sLԀ%Ƣ̗Ƿt~I*L_|q&9REb'*V4S)FtS.I))KM3;ɢSLD'e9e=&_ܚ{j9rNH+|gє$B^52Ro39sIl D'dԁtʞ |i#yQw\2RpSNd;vXQIS.I));dYS'U$KtRF nJ.R"ݞ5`%:)#7%&V֒C. wedl⭀]Xƫ3FmF痒\o;A. ))`=1F0ҜRF< h%:)#7rʾ6n`Cs2FmF>>]kIRor'ƥ9!#7$vY'>e`<4'cޕ#Jٚ՝Xȫ褌ܔc};klH0uPMKbsQGS.I))86 Az+0;Q.I))ҏ T+S.I))Jmv-RєKtRF nJl{S<Omw\2RpSfxl3?)f\1PhWգ;.E TuK17-nKKzgOL̫LJi_U9ʾBDSί?5t~^~zÿ._`w??}xY|:X0Z^xB]/OPq}GƑJWU^ۑJ^iY)tٓeO=YdٓeO=]teO=]teO=]tk^[ڲזe-{mk^[חe%҆]y!lco>k)bXfٝՃn`ƥ96v!g!`%:!#7%:meFEӐY\2RpS¡#ɼgn;Q.I)) uČ1"dیYFndWe?p'g nz,⒜"6bG8b4Ҽe9!#7$6.ɪNN2RpS1_Dew؃)褌ܔn" '>qy.{kO$4ڳ endstream endobj 984 0 obj << /Type /ObjStm /N 100 /First 960 /Length 1452 /Filter /FlateDecode >> stream xڵVnF}Wc0vHv6ihNʤ@REܯ%&ipg朹rLh6qxǿO\x*SH~0)ZDgd,V`gR{Z L(!D&Lz L c&BL r)"bB ! @WƓ/+xՈ<ZL9 B!$漧5ǔIUGHkpS(@ Q$ CGE(4@4$$*PRLLK$ C2|Z:;4FbChZQMp$p@h*IaaRP+m"ba5ajگ&6B;Ohv.We6KklU{;e''ly͖o-+h{Oj0 EAѻN̝eOPdtZ=v;o{NJrNC^sSR B Nr9SsĘPpfGϜcOr0Ӊg 3gٓ,$m.M8ۆWZu/A1ߋ.?}yYWq[[#?mzjL #-m[6_wVFvU&/KSPgUٴq&qI׿;xgmuL̐e5l5M9\ wuC0y_yxiȜe(#IgW*U,0 mbWb6e1svF} mubl ZzUja &>Ѿ1 Whw5Ovywc;.-5dİz7̫ݘYuz:p(U|rW߱A߫Jy'BVكj³[}|?_ĿA ^> stream xڍU˲8+B*խbI~ 58_7uOZ\eJkUnToN_9 /;a8-#ĆV,ad*16Na))PڲT^pf)qaZ6\ːYe˜ #12^ qy梾P:6r3$V>`xO\ZUfL%R1-T̰+X(ye-yB't3p5?xuQp4%0i$ 3y2 !8=Z…)5,oxg0!AQ C,3b+JԀX`% r/,%[!%(eiИ2Y D,|]AfXLΤYhWLVG),H!hM2>A2Ib,0Kw47NdI), 4nB d!7`Mdy@ͱrh~rC{631e 5b9,c 5<_E6 6w'ܫWחj^C55}mƮVo|mM_+|EC5́S$n o :îBݸRO16B[&8OuBzk|:.s臺b{]-LCӽEp[="+8;!('m.$k#/${m'%sax[I1tUjW߃&aXK2;Z)xp߄[,m3<ddz'Gz!Ẑֹׅ}82r?1MU]q5ڜ\zZ 'fwh3]>V'юwfz?{0<}W|{l;#_*$/)gpŏ~WW;⌯sMr=-׿7ƉOT\3ܿ =wf'xom\g{|K#_7~='lU^ endstream endobj 1336 0 obj << /Type /ObjStm /N 100 /First 953 /Length 928 /Filter /FlateDecode >> stream xڍVnF+~=[.1 7Ed2קiR|0]SկizRK[:ʉ#LtxM:6|=c60+GL`yPd fypdEAHeÐѓ %A2yadɋu{9E ^&kUP\a]D(&L1㔢?a(DJܻSRFdeДy]70b.׺|9v_us$yB"еe+mOu7jg7BZ6mi:u?#c}s71o{=6zm{Y3U_$NݴBުݹin›ΟY{7kWey]{,3<*C S\X|;aڝ @/Ӧ[3o'XVܟu4&o1;=뮫^mW _c{ -(oH%OVb/qcuX4bf%ﻇR3}* endstream endobj 1528 0 obj << /Type /ObjStm /N 100 /First 957 /Length 1031 /Filter /FlateDecode >> stream xڝUMoFW챽(Y @bE6-=4J+Ri_7#6-(b;fvV֖ʔF+')+gBNi-Ny@$02A\BBH@Xn`2ǔSP(Lq`0\,qw畵l\IL;r  Fy\ AA9dB N^ѰВ*T-\J`T 8e@XNf i=o8@X[[np|xd ER4=x1h.i&hp4|'rcOsY"r1Yd9 cexC°vh /`oC:CnqXX`_:˔2="ѤӤNgb"n`6y22&#w 0|K=՞#9q6"pt,_yV I9ys 칇)҈ì<.9VsmŪm6f'L}san:RU"k-u g43Cᐨ;B)} cK€$hx'3PsN 6q?dqpmm=T}lł5W_mˮzXbmdrq"Da87?vsz+ Դ₩:z|RU-~UuJ5 )crQOx2k-iF.%?veK35~_VeXb_՟~Lp}b1] endstream endobj 1729 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1072 /Filter /FlateDecode >> stream xڍM6 <6%3\Nvfs(2wYYt%y[H/2xG)/*!VBբ&  -K25F(C> ^h70Єp\T0̲NV\Ka5a=VҐEm=u$tpqKNxW;"{)@hT"p J=PY H|Ӗ#yڐ2,4{hɖa 9 =rړaU 9,Z%Brp7£YEGe,69R懧9#p,#> M=b*G90`UR%*IǣpxRx`X$,kȡ)502\Ld!U^ar-^I^cʕbyx\`!`!Gl ^I+"\W4ˀʱ V G5YZhP̵2̵r9`ZKKrhaf!qu->oI\vnm37S_Ionrر|C]z+~E))vE)ǔ'hv>K`DpS{{39ҟ\Jěw7>zKi76N9kcNDtS|4f94?(ݞ=ꗱy%֯6?b 7q̟U*1v>i:Sb=cPf؞Z[ S֟,' .xGSw}7?"5}S41 X"an1U*,aJ]}Y(O3/RpˇcZ|S4seƭDcl|_VLhw͸}{Qkh4\O0ƶ˟U0u8x"_BcmR/|< 詏14?7] 8s<ǘ'b:!pyq)E;lav1 endstream endobj 1930 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1081 /Filter /FlateDecode >> stream xڍVn8+x\K" /lcȞ(P?EG2sI].Ό[)R_*+90K0NU (4JL2`2iɤS,8ZWWm-"s*?>%^DvqӵXkVd?ֱ&\9NXSwzЅ}^rY d}\e#Dk8|JdN `Ǔ̱vnpaiC} y|RmƫoBn<Ҏ+zoNS7 )Vմ@pU=WB]7"^׻Q[}=y쵚{!ZY!ɏ/j,W9. endstream endobj 2131 0 obj << /Type /ObjStm /N 100 /First 955 /Length 977 /Filter /FlateDecode >> stream xڅUn:+l7HEW{/-TuX+Nݯ %7lb gk(GI]B(0RTO' )+F YiUD*!#X~Ʈ U%RhIy6셮#*7++LBBf+E)#bD9ee(=[^T0 N**QEZV;dRXùR'G^8,BB Z"2— +}B ,d "#1rpq׬ni-mİn&Gd)Pja4RpZyLZ9x2b(^zW.x!8pxñ"1R]-@GtUsxCðQ F@{ a]} ϟ;I;}>c2{_Y zH$S'OÌ?"9~ #0A -(7\na^ ]o{bN_g¿b9&M z85vo7C\b> stream xڍWo4_#7/@‰$Xuwc8W3qmCxO #Px?DYQ?B~sv2lOH;|Pc-0_7 _ 1\/.9!Gڽwe6r%wA#]m@Ʀ{:ԍ'G  m{}q@gլ BB6q:cuH(/q/'3;q{\3ݺj"KCjN-/`ϕ{g 7Q=eNӴŢSd7Ĺgȓ;w{Ж=@KZH{ƴygXsJi&sɶԩ2NIFۭͅ&*ex'Nu;Z3fkCk%bzV(_-` \o $r u1 8)]`cٌ$0 qS Esy>@-KT-{A 跺{ ]/ LIXʔǙ 0e}4xupx衲?Ⱦ`[Ol>_ endstream endobj 2526 0 obj << /Length 852 /Filter /FlateDecode >> stream xڕUQ8~ϯT 6>U]oBήc!-])PϡXߠs赧vaG-%o7)Օ\oN֎4=t9z8zP$vs O}7&}hNUzI9Ez-L\.*&>o  HH 췓 }Lg,Xiv Ey?%8F#[oSz?4ʌP Ӭqs` ssg~:i(,(W;twچɍj/g}id a=+0lw~\lY73 8}X{4=Rib#{.SmB4uaX\VC4]$'+ዩ-&02BnZSklClLV@*)SmN^ouҟ涔VU}Gwxtޠ Vʁ3on2O0{?A> stream xڵWn6}߯cЕ"E16 \hvӋyVqgJ=<33jI$$b!DDTh?"K_f?H6 #(K(fCJ`1(Z iT*"#OOJ}R#ꁑ sXD6R(e-S(4V茧X1GR %OZF&ȈjRcbvFd^h8+DLF"lPJɆk kP"xiXRXcVIdD s%vǰ$[JNuuy$ @xc;~%%&%*ЈW 9ʷ2Nگ ]%5rWJ #%S Wh+z K&r %Rdh0eft[aY,&e(t,7U2&>X{W8CNz5+BiaB-,A2Csq#e C]iWXѼ/1lA|P@"/R BUlۣ$&y^ѕ~kϺtN|9AFO ;$/ {(XՃk&u5k7Њe1vC._|8sV'.w!dz'y#eޯ}^{41e>a8DqL⠢=yt u}<xL\qW9_sS'UYtuB͢5WUE+cr]}pp[,W'qHq7V2nFUU#p4\C޸c!2^5CXtoyj}d*p1>"mo?mp竲n퇼חBx )Esܥ,d۶ϣhO@ߣM+&]g=o, o<wx4OucM.өڥjv"7{#9_Vr endstream endobj 2531 0 obj << /Length 2845 /Filter /FlateDecode >> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2536 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2548 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2553 0 obj << /Length 1902 /Filter /FlateDecode >> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.QڇiUj 80K*0; a \e*"t_ޯd n&?n_bJ" 3WFh3Vo/nGFFo)\LF Tj!#M덉Uv TMg,A סTU*Œymiػ˦ o\!Ek+zU|{Kt(cV`A__ & BOU2CP:i*uʦJ2HR;0  e?EUhhCwF2 l]:;¸CsOQN"4 V!Dya-s]b+uE'H@C@e @d)!Q7͞0hOk Cuna}`Dh chBKJeD(B$*T;,#ab3bK#ChP ((&4DIwX* 6j/u-Ŝ^/ E=r B(|OSn9 L?"=F] mU't Z J,4V; - @ 7ɇJ씬ftI4j48gny)O-m۪"MYw`._CҖ\UU IJ% k(Uk%CQ{f}Bh*g7~t'FLL!F#k߆YzrPԻ|Z9d6R)@zk ݍСN3;@+-0C)rfs݁r:k˜,'BLsQɘ}ӣlȯǸ$*X*vMX\L]+geR7>I+ xb2` =P-JOV;Զ6wE[v ʡh*>wYp.6,JJ=\QFzw-8'0tqht3F O&.=QyK_8 endstream endobj 2563 0 obj << /Length 1282 /Filter /FlateDecode >> stream xڭWYs6~[ș "HGޜ7Z=f>@d1!@.2 _-ŷv,?:+Y$`l]Dfů?P'7DdqF :[ngRAj({ɏ3U=y<)gnЄYuY8i\s**pd<8 $蛵.FT8qL2̓@r] J(˶BWb h8(R4Nr#\6Ip\H~UVVnvz'.km|MNI9<cP$ ,X ,|eP]ڡ.wҞK2{aRtN`wѲ@WwoCR6uHS ~.,/|1Ia'Rge%'*NS0;I1O_4I#@nL!^Gۮ=g`4w=ìU_עэtWmWEWg!0)ZYV \ބKqQЛDɠ.Iļl6[A,^f?]Ld ߶qrc۝-hSLkUn1S XA UnƠwi%|#V/FKNNlD7 jW˗zenzg'|HmndϺƯ> Yϣ$ w6⽤lkeW^>?\|j+!4oCGmh{; ^ՊԷR6D#r="EC]կ|YLi6J\ 4;8l(x~L಍=Yk!ə+=p6i&IK쿰bvksk.6^~ '۲^{]cߖ?mJz94|EU xf0YM`_]]zzD4α:CmcNIGsՎU;E9G܂ xB GZUTr*ɂj뱯L7Kh6?ffqRpn;cơ6;q8Dh` V:UN0yF>cfHڙ@#ޫUwz!_Es-Z9#V̚r`Y? CЇ(`N˽9\k4ɠ+~LAN( endstream endobj 2584 0 obj << /Length 937 /Filter /FlateDecode >> stream xڭWMs0W=Cc)ЁK=R4YWJftQ{+ HyPm.aV?8 .nQūwB$ rBb;QU-$$[~x! JOFӀd1%=U0B4$>ZLr-l*i OU$d­#F_vU_{04΋bQ;̜])'j؏1(옇 @D$K ؖG,N"!.nץUiJZyE_Tj0dcgڨm-}To3)A_&m -:,; jkv4Rۀ}K> ;e:h*絺l\ę_b&Qk] 5~~nT'ruΨt aO;uhβsc /R-L- 9rGX6n˜O+7n!UH˹lgv\gE{U WJAK~O_sEu~{lඇؤp=F'6 ,~fj󼧔IF[ղ(&ܤЌn2?>zHw^[åtu; +ngQSϟj@9ħ$5gi!xT7@ص}f?T,s-ԏa^ endstream endobj 2604 0 obj << /Length 1110 /Filter /FlateDecode >> stream xWK6z T%vMPl}́h[:>CZZ)=3frH~NĘᱳoZGqjdcna+wMZO}N՜ߋ_q$gߝٻUjbLrcXpi CWTI=4GâP_=UZIR nVmt4jlrFns:#E>$jfڍg.3~ k8cRQ닚JISḞ3}/Aq[I^$#] hp#CcPim\85JOǫc,׻{"QMyd-$cSf6@vl2]qǥu lG'm^:H7/!Ό hͳ{ =S%kb@,+GA58Yf# 3e5̺xxj}bY !X՗at. '00ɶllJg o6=a}`S2F&\f3.oW1sֈ{ԎΘCTca/]B/i@6.i,Jc )'3 #<>X*9C*a iMM~.x5X gxD_ԁL.{.I@<[ ^:d;학eio"9\HNY$y}/oo]uaMNu1ubO016b~'\S tЉ, ;4~K)@$n.{)2u1h](z:])fttVZ٠]Ysާga|ı@lӓ H̼oB 9CCO~՝̻N Oj&^fA> stream xڵWMs0W(ƒVچd@QR 2P~=WJڦI)C}}ow`/"o,ɼcwļ*,u;О<┳.3֌"kmiM0;4r%鶅9<oj 6Ʈ΅>RXmJraXE.h$Gez '![uU`$oF1n+>uAnz(8உ$SԒsynjf9 msDLO4_5A7h:";[݅8?oIt-6Kt$E%}r&rh23Md%Kjޅzzbt_\Q? X0- ^Xod֮hQWuLZ! endstream endobj 2528 0 obj << /Type /ObjStm /N 100 /First 967 /Length 2369 /Filter /FlateDecode >> stream xZmܶ~:$#@Mkn6yOS{v_g_pڻݕZ#-937F(a Bc $R2_xU,h!R"t‰OI"< V)ʱD6ŪC:]dv^`<~uy=?F(,(F߁S )Fk " y*X<5(1E81噉ǯ2o"HQ,/(^.QGCrPVtW|m嶻yvsNq&dFIJdF%,bF7 vZ@.JF3 W`@W{}Wioc O-t@VJ h(u_:҉lBݑUC>Uv[uU=S']zM7^cA^mvDؑ}i} NvCFKaEgMV C [|Z%+MZ>lJ^M0) ! Nd\qBS d4?TPX#HЅ(X,Bt P89!?xaddF3 P**>0ܾ l7HA=Z")U Z'%]W4 5QƦ:LJ]5BBDB[cU.enRl?tհ``t>γ*J穨@6׿l-|0$viIYi8ig6ăn7EBL~ z< z?!MM%(V'xմu2BM x3JQ"9n7|eLʚ{tzZCsU/WkI肤cpcdR4)W]3wajՂR_+M6m_/@W6F%OxuYl1* ENR5h@! ")?JHG%|%s6*h4bAXD,h"TSR)T89ΩpN{|4P\{.rE%#/~J!Q@ht[ww]=|OL+©n']SNv\HCFIQF5wUSԣ* T ؓl&0 ]Ӂs4 OnkPEB€d|% V2&E1m.\WR[`Gfېd"s@xwhLA2Rz*/x.mMEџAqƱ{&=$ pBݶ}P,Sed.F:5IeߏAILwT ?xv(N J^] ŒLg#6{6;>#6f|!NiU2]BBBκpօ.ul gS8Φp6%j>ԛ( Ab>_#j} i?pd )7 nw~C7[A:N? fndeͅ;#A^MݽoV <$N0U%TP/Mo endstream endobj 2645 0 obj << /Length 1633 /Filter /FlateDecode >> stream xXKs6 Wf팗_zdI:顓&n;Yzu}Ԯlmlv| A<Ȣ e* Idm@8o /O^:ˢCU*޴2L_/J{"|4kӚ0HBח?B<8|ں8UKE}2E_6 KV՗HCSw/.ZK5;{}Cj־i;(k6='WM}>ۛo-Xz?Jhjz̉]vI $# SYXXoQ|ЭDo@S;6\,#S ]=88)~LH? &ގơߤdx(c{|Պ1r* O).yXTyήmPre: !ZƮzˋxI. cȄ'muQ +FSC~C\.RH,PK2&=1h'W%ʅ:c=$9ֺdhYjlBJ;˹ $*t$8f*K2vlƔop T*lD7n+˺s"&/qwS \| ~7M[M;Nk*qYHy,0kr9Zziyzp̩f"Uq3+;җ_4{ [ -L%MKqMחƠN oYlqz^@_ Z^K~ze y|P#ι ؆.CsJdEP63LM*P,(&U,`AT+aA(vJ-&mz,~j+bȹfHP=ưw >7yxMrӚq4CLJ\3}V mXG ԨsJzbNO s3}?Gj;#ݟ#u|k:$9eʢ{Y8ә|**aٴ8=(&Ҟ1S1\ ~$m|ׇx|W68l9aY\Z1.B|ځn٬vDK0ۺ}u _~5{c5,( x8"5MMelԐAJa(a$D4-] Z&SH?Hɉ˹ a;6yG eփ\= smBG!wd5CA'AQ3xϋ l}aI9fFinSXR*qHTVEC][na!xpF)Q-/ox32a|DG= T<%1lf6sriT>pIAҼ^,LFj84u!n HuďHrl*^t6է#>R0޴]W?n endstream endobj 2650 0 obj << /Length 1411 /Filter /FlateDecode >> stream xYKo6W(+Rzh)(iK Y2DiP|XR䍝.9p`LJ?줾JYnn83<z?Ͼ>J;u_|s/2kx= pg^R߯-_K>Hb:{?ݓrqRu qp|0O[%!AKAdшKVr˶fM^Ҏsϱ(. &{-9R"=-+cv J,T-2MjyQg4rYE=kdjV ؉V3vrFb7SL(+6 Qw {Vt U`䬖$ ,_ʡL[X[^*m;@+ӧ VTzŶ띙Gx2aNMFsnn_6N# $QDץhXr -l>ϧ,( "m=f2TP.Gy&:^ݓGz [&˅zZi':5ʗZ>MsՓLHn%&׈n7L`-v@qE"+'@=T]´[.:22+d􀀭j2/u$KeN{ӊFI/TݲKaoxW|ḩJ }4ϣqAaNM~*uqCZNfSѐE$&fEn0hkhwHNwuc.!J0r1EL3n#qd]s1 Bc"d+(k$Ts|T DwGxY0_jM,ӱD(¾%IVE|XrE0Qa[4tL;=;OԮ`;W{{u$H%j"B#?eEHh=~;e@1OQjw9$~ZrʣC4qE/1X4Z拸s=e(sCwϦW8"%DEf$~~A'fnU{Qg6}z8M΢A::D^fx%7g[mN%C0)ѓ(u0 2w1E>;0om . >4%NkP墜n5R=C S$Ig |ţKlkGy QݧEj76G{kM[Z6R](mu),wiӡ!c"I~<) d;7(׮ endstream endobj 2654 0 obj << /Length 1647 /Filter /FlateDecode >> stream xXK6QbV|J,CMY{Jsڴ@\J,yv[,|Mf3|!32JdlHU\ Hלpd*lZg;u$y`'6Zd O.~]69!?蜓]Nf މ!L.G>l$+Uj̫([jE58iNi#LH;mw5l&O֟KHrNKVb,E8©~O7'"{9??C42c-GNz1l,C`E$9"eS<_ X뀔9ɒI`㼷xuxC&Mp%f2,,pu?z.^w([ɻL}pLhc tQᝐ+tNז% [6PUy&.*I0UY|AX4`BӒbnL@cV N}vı8^DTŌ3`4!c43z#vbcGp;8)?3c -0-IPȑ^=S.Mn&ySbyז8J_ԷS~o簓+W׽]Fu7jek(@&$@-Ǡ΀Iu G͇xPstN( ٿ4UUu] bL v'h5wB7;u/##ӄQm}B8&#kaxj]wlKgt Ql75AX2 J%}6j?L{uQƧ=$7eK<ݢT(w7QK4-9MLradq>ato:nq/\%K]78%AsXZY Q)ΎcAll/@f%఩_ntW"H𓃣*Ž;jG 7~mcmxԚNݳ4B'VY5r!.ȏߵ;M3~P{kr.~TP&gkZgET_P M 'cI~%Ljb995^`leܿ/;e~v:/y]8%.ߎvmC%4/lzƼu!1$7n 0kۦI@Wbs=wuxᕜnE7NGeIm{2dT$_ͮ6G-ji *}ݲs[EVB<cuÖ7%`X@myjUP=qLpEWo}טB>`8vZG:vO%ӻ)itdE Rv>`~ȯ<چWA_O?~ endstream endobj 2658 0 obj << /Length 1949 /Filter /FlateDecode >> stream xYݏ6 _jϲ,uk1uvz#Eɶ|N0>()[VE84_mb3Wx#fB '^=w!V,`ݔvu<=Su9aiV8`՟] {$ypHyGHU%YEx.ss9(KI1_:8.9FHr 2J&5a\Vۥ6r9.zo/iw꺷KqZeNMzBoT"PmUVIն c,|(@dbqG.Z}ju0qU0Aà Tu֝?3GP"x6_C癵&{2ʲ|AMfA7-SMGMZ IIZa_aM TegWu +VYoA%MY02%|oCũvBq'N48[:(D,#vs&cqX1IRF["$.S6=R%-BZ Ai6G_F[mowb>GrR%~ ,%ʲ`,0]}zW^f1Ӛs0w8.E@ipRxb\.Q,gy@]CoH %(Z'}n1 Z@N){9 uܤb $$R/<p?z_7ػ9LXs7 Gd™ziQ1s&|I8`& 1k[؝+({ixQQeיxé??p,Y46*7I,_ d%.-h$38DtQaP)Us(a~ ?^_3l?4yBET-6"d4<o[22j^E1Ľ:.X Qt[7Z!r!^ [Wʊ[[CZ1=?Uu~V>>S5{J!4EC' 3;Gսs(J6V1Ս+i+άqlpCAflM`g~ݐ.&/_/xltU=,<ju:+y Xl! Ҏ.FypN0o)Df9a;Lx+~E{1[4`wV p?N+.n];{!;DDDwٻ sUt/gA ALqK\NMh {DݧENX{_>waVE26> stream xY[6~_##TCQ*UMD<; lU{|lvf4j*Js b,RJQD=\i{Wϯ]Y7?qeq띻u ^Ro7c< V[HybywՏ㙜 ' 0E1̠ & y/or4H)j7OowN(㜨|м`7OeÞɰ;Gxx(]@"E1KoXFb%Q`c1sGǏL b&[i)r9Qx.9!;%[TQ){,h }a3h9d_b*rYK>~.{Ibґo0ƌ_1sᨔ ( 3Ea<-e!uK5,3)}N9i4 A)&~Ex%c[BoeUAMju<=k8T n *;B>D9C^ [3lY >` rFP='ɷ޸Bzu 3l꥗xJƺnr}YgP ]Ǫ9<\ݸdH&zQĈOA]Oqv>&G;7EHe) C2T?=e j!9tG<~|oGq)UAePl{"ƣY^F_e'U304˷C<6VmdoF endstream endobj 2664 0 obj << /Length 1524 /Filter /FlateDecode >> stream xYێ6}߯[% by" ނ(P,A]l$9;CҔޅ["]s 6j: Գf>\bޮbb_1JjZ|5u5_d?6wBBJ77pmV3ۅ ^1E3V_2k*Z~3&|t ӄEP%`nv]h֤v{oPhMjVpA*7v{TºJqTYw]N"W4N#Q:K~!iy=R;/*E(* Lms'eOUfΝ~nA\{X`%Z&]>z Ul \!,lCr0"Xָ?}^lY'!BroԾ `߻ ڽ}oޛ9Mil :jy]יzmMLQ'-L~ʕʚ `PVdT<@rȓPWB/Sj"JyۥyKܚqcL@6þ7%J=Ճx֫=%jołǚ$|Ş"R3QG@ʑFxiakS(XIJ*c4?Bă#\JHx 8@t./E#E,4<ʃۀT|vӂˉ0N^XRڵQq:SU23jTpʉS+"ƟO%>/6\Ut ED~`;S aLÎDB3}̀%5~>T`#+c{N~I($}#@n\ JuM"tv9vi_{(&7Ɲԅt|D}; !K {0v ޽U8Aڢ,Rj=,` v!0s@pގ$Fy]c?g ;GO)',v3ѥ` ٺ+w>Xoo: Buŝ̮wnF[*.$7|>4t# R[l\%ĒTjK$*gʿ6+GmR|>PA3QMWK/#:"ǁ Xӱ[zhȣ5Ry%I.n/fc;0'V2k>uUIXBG<实'a Kɂg*oxaitEpr^OzQ TI$;Ay*Ǩ>S\ӔT[ߠ2J uk\$rN,%> stream xYKDq#4D)ZSwwd NUwў=ꪯ*lY"d:[nyZg+ H~s{ŷJ%~v5{=FW"J/T?<nn 0E#Nozzۭ88pvWK1XHط:JJF@ *ӡ1#T+hhuI/߄Ƽ݉_0r5eCXȑf$e. y.HkڠHHsg0lnn⺣w (1TA9"?aqj<wz~G/];] @peVsM1d6W}Y]O ig !!:-JKn4ĺ3$ǘ|gcYڗqCd_HdIaZ;(Uv,fϻp6һ}c]v,+V6!SFI{~2ʠhq +kBZx =%JwGh)3$BA!D kys`> [ׇP.a@ -ZLBg(!=OzTy.1F&EA` n!s (.䴉@u({l1c]c&߭(77hܖcT1Ιk%\GM`]}:32g3d~$b'P##^ZRlnr+"O0T ۯgoi,;+{mH6#lX6z)Bե`?OXk}<ʮ\յa_5~ Bisn v\W(S qk\LJ/$zT%#)Q0}ߏ;ru:E&-7?cpPV(Jf4ekF}GL1ǪrCu2w'hB01*iHؖg(7sQ,0ңQ&,I0zSbk}љ$-Ntrahy/9xd|'8'm*uK(M:w,޹oFrx0A>bA:r(<piwA]YpxA^O'!穓)a)T\&45~G}`ڑ,X?$sPwx)>g"̲>)gں9l!3)ًԙ~U=a-jEqO aiHv՘>7j+quzЎ`]#^gyxE-2i?F IZ endstream endobj 2674 0 obj << /Length 1881 /Filter /FlateDecode >> stream xYKoFW-I2E)p^hj%1Hb'3KT>A|.BCI8'"4z׿\P7nW?\R I&tqY/n]zhu\q΃r% F׺r"*À廛_/^tkJƞh<.f I9T,ZF$r% ۪γ yϛ&/ht|ٹV ܡ3ڼ#Y1YH<?.8j#hk oяιzIPf %wioɐ,Dc"U ,H$ Y@Ƽ ͸FW'>.o4̎`^cԱ>C0O rEZD]1Oji2k 9 sgSg!"P͖F131¿O?:Go 7(򘄱03k)Ny]?HH*<#a;vQ鿪>a֭+.bT"W >&wZE g[sD 47 >m>3ɀX% Li"x7n*v(0J\BeQy3&Tt3uAgY\q"` W3jܐL>\SNKƠ+`Eƾb['ᡁ.&;sUWjC}<>uFmVC hlͥ/tPٸe0"?} `NiX!0H`z^@7vPZy5 ӪcϮW[] X\~c=ώ(2 Bwp6dѳ]㮓T D d69jjo;!U]"gxpHNNtI&N!La~jnN[ئۥiѠuY˺[&.I>I\RNpX~-M 4?_?mrnq'>_` #ù^'zMQ8uo:YX8iO#泶zr*rW}S#> stream xˎ>_a%2Z Icg dL23EȒ!beɭqnY ЦȪb\*cQ|=n_O$ÅN y$YHQ!WݔԦ\} 4nq?Ch6[U&(Pje7㝉R72/J"4Bƚ˅:LRlf`0U#ׂ9V?}XqpnC2B))E$ Cƌ=L>BD(@T<_vwnn4e(B%Z(yl/>6- ,a:saGAG+I yEkў(R#bvg-*blga.(xw\T'߼kСsK@"NR7y[ yݯsSdcPXKkҀK2Dir90 @젷h` ~P1*h9& O/Jz,KIW"ԺIQtł&9oTI]I+Jku{B @N'Xt֩s~:u7ѝxo^q@3bqr7@Ar#;n]Б,8z4^b Z>Z 09k5j k u*`%FԛF}a L#vvv;"c{@+c\Ƒz" a {U )7E$zTFpMsjB^ 9 6&8%`d|`1V?w;fQ8Yt &fcĤQArwSmo8z߇.u>WKG?@2g^%o"!H,THəgD} Цn4{L^Z8{C3 g/>6Z$J,;r4=[tkIMM,laj`Za܃ \" Q%s9|rc΃}_1 endstream endobj 2632 0 obj << /Type /ObjStm /N 100 /First 979 /Length 1946 /Filter /FlateDecode >> stream xZm_C$`s@R>hkZq괂}:>gO* C3ee/3^ y>8LQ B4 b_%>ɦ$Vr%μx!H uEfHQ VpP{/[dJGR3$le=$GV2ciF!\QV)J}Vp=*ݒ3)HL,pT&LV{K,;ESfŹS TStp30{b6iӚu7/m5o޻wvћŁ+Ɇ&[<*?/ڽ~׿l;3=9գp6'09GKs%C|a\D;nmOӡ9ق+qV#kt6Մ+8smj)p kok'Æ,}OrdǠͪ-o둚Ct8x;}X..n:- Ucvi{[vz:*; E rtLWb- :e<2\Mg3 9ԻA._SYx/չْ f3.zž=:'j8Yi?nt`/kʈ+v6TCn`d\{z[9pj8j7Q2o }m׿ &tA[5׽h"mi'3uumoڏyhl#l~mjz]w]}[.u@sBݴW6?|AY9 ;tAدz7)h(ubmy U[˧XGj"vM~zCn*IlB0X~Uy=<`1N!ͪͪ4 $zFFQ54s剜hwۋp:M'c_gۭ;{{wn/ ⢆ H|&t?4ugѿDET̨=,пt)jԪ\p(PP?Jx/q\^h6y <lkRR@QE*;OAG_7L2G7P3S]fXtgp.ѺW!/:.Ol<zNI([RWf1oAF} [Ni Q :I> endstream endobj 2682 0 obj << /Length 1935 /Filter /FlateDecode >> stream xZYo6~ϯXI Xx(Їic$iyΪؕ:wȡ5s1PȒ93bBg$EDijA`Vw3<|vx3$Hlq9$X^{tWrsνǹ/suJ/g,:[ wNȘ5\fY[ᓐ(%Lyr5@I*? d3eD#&nvIYlEd&awNqyDB0_r1 ^.5jtDN_)"a"NO&a DU(\ꛁԉIXAI.Xɻ*1!p(i={Dgf`}H''0iN'IH 2ݨIf$v72LĝgWEJ-5wq!q<¯ g-  vNnLJk):+S#\oӈC0zN]Ue:g\Z!"ǥLWs)tӨ IBIXHBX6d``%s5[\FF\M2dyNlBz]@{`I|A`qk9[qV5-g)1; Jm+1E5 ǖ:b7枱=SI¶|[H?c\xMa9k+i«OV,I ' E$N\7!=0C10 j)əWF1p0l}އma+`k H?s#zUO3Q,ؕK̠fܘGzn^leV4tnϬS G^Cώ4ojDp쨻@g{<»?-O3sQ+P"_$g̺L^ԣPp6-g:M*; m຃Nj=? J7,]2ᄳC1J2&SaeէE|#X8.)gE~OǥQUZ4mMrzŨ䣑q:P';) \EJ"NU0{v!CͿ]vq3AQFwY +LI=V7igmK - q YUe;\+J\l`/[bIY9x\M8#1-\ybKK@uui v7aׁ3UUG9V5f ` frӬP-;bڭYJqMDVu=LۊEr8[^WyW {-E ݵjכqѽ !Ѱ{5ERevd0M5Ay~&N"Nw`bnn:?{qL2>@ʕi8G}QG{U-`Z烬:'_+ijKRT~_`]⇖Ie8@4S7&-?խG> stream xYIFϯ[@*ƒ(/G#Yv_tSc4aqj`=X#5PWSUtu<Ȓ}+jף:Ow=]-<WV 1'gMN{:'%oxwALy!b&hB&++2:E(W!(qy!ڬ"'} (F1D>|%_uVLGF_%'?s|4CQcxʦ G("DE˃lbdw#uB"zqINym (_iyEyuR}UQK[:DBSk~ϦbD!4-vnS N5ݿ] 4F!+ztpxH66gfY;/_bߵdݡ|ozuy-/xIv({UꤕRSF0q;OFQZ?Vua`gqѝ"ՇΡQW``DuPi&)˵~EKڼ*,7RBD!Jim}jDtkUK~sR,iuˋwZVi]ͫa|jJ׈eƆ35҇||FKe*J!R-URv}M{s]W Z ڞgr$.G\ʓ` S$-Ȅ۪f׻>W L @R̬rWȓ|}:: d mZ4AaUyEkORw6K'v)x8$V%sǴňwbaX ) A$dJ.)Su0fuj]ByKO]!7cXk+njqI7"r=>r#j8-82)d>NXfEؼsFgJ0&y㋀:;moJ؋ OFKI$@5`tqOOuҪb[_LIcKbE >;'s"\_p<̾i3&mVu 5n8'<j$wqj8F1aw @y}oj}-M6$Jܦe./Ph?c?'(fDw]+bx]:]6ny7w)#( .o} K.%ooжmȾr+Mz[ utd:6~]oDzD -UiX7R,3M>k13wSԱ_v/g(K{;B\ l9?>_oaQ> stream xYێ6}߯0X&QҦ@ qi27Ԗ\3Hm%A"@LQ!yP }?fD><]İ|XH76v`Wο=k("icAԜygUHjdh )wmM ?{i7s]3,%gzN<+ϕcg!gȯN0*qƊoX05`p̸1csJΤ6e}OFFM-9ˌB߈9K&t[$ rѫŅ;ɴlѾ j)Q^MK?{oaH|/WDLQdמ7#aYWy$E:"~KD|^m[T~Zu@Hx )οQw#X۬&2tn]#Ebod52(D.T&d- X4iԺ(6hĠ!i8 qPCks4[6,KCa^]d4d9L1/+ZhP 60jaXèj3eWZ%5ˠ$SRڕҩM6&aYoI< M'XKf` SMδYu@ )J^-g2s6;u ܇ƇW#[dRLp )8[\a7_Cμ@6p7>*cB9-N7UY5;rRPX0 =3veBb2Ӡ)ց3TUn֝zPlтDDpXz$ Ϗ1 )Ñ'56dxdpkB0sqdTuA4A);;-"f="簉f'tr|kAqMQW]u}̺߀}#$> stream xXێF}߯G  J@2=!קlO2%hu]>]}Typ8`]]fvpvvF3Gw?r%qt;wn}vvQJCu1Ç??6oz""1C"VogWOqMNȅ-t9tB1)"(A$^E\py_T9U+C=hNHB ""I7 nڗQ9/E7޹s+`"pB%8'^ <|Ĉ/>D ʥqkL5WS?T*}#0aqpp(:dq$b'L3}hI ngDؖ#Ļ--yiֶ+ p oVH'4 ӽ{ݱaog:3{z7.n}0ĀyA9`~6LGaV>:ܳ'^ iu*,dq+.HsCnm3{'" &ESpE\8 ޥFXZZx:Ot4Yy/e@K.Sr7bjܑrXлSND!PW%Y\WRL%1 D+RYDavH:!5S4Q*v* 䳷cQӮJc{ol k'GN%z:awy"̮#JEEӻ9fs}7w8knq.k7e9)mfSVծ1*:4wG1 M.#I#Epm & (L՗\C6\ڕ@/\-P|zJO̪Cߟl$t Mok+!Cm{ +lDGKɗ恇}홃p[]6.,5},J49)EWgׯ3ZtUUXP@g5= 8˼2])n> stream xMo6MFW,EM[E*l+_ߡH}9t9D3g(DHq24Wl}r_ψK0X^NϾE`&zj:?-mmIs_ \kSbf& M1M';8"H#*&4gA+c؟S 4J(E2^n {?IH%Wovw-VT ektPYH<#Y~rD9m.B%i՛B&\FN *Q£ց⌧rg kC=@Jg1 *[rVjx\/m]77+4ߛ8lR%y<]>|gS/Mp@ζљ)5\|KdV֡\@; YlJaL@|WlwQqVڕ#:U>!l8Wpy6{Ҥ\>JH6T~kbrunBl d4\`/qV􌍵Z/u]/pWޕE"Z2nzM4U6΢cYԥ2+l8tlL SЌ485UD,}"'@DvQ''b:ϕxd}sZcmW{cĨ'[Գ= ϧ@6gEG`C<ΟwH gywayvt1oqǼ1a[&/[ L40 ( zXX ׃ߗAaarc.F#&ЎQYӎipvծ:y)a_!O*t,<qAoA`t۠ ` MH0pFBi2߁Q nj)Y D36lڔ,g$}Y*OuSS`@NaCCՠy[BDѽ:v* Ϙhs6~>=k=䕨ob?/ l>~eX@~>-P>j>yG+O#Upmf7A*jVo1 ;C"ܜxלXל?xvOo ӫ endstream endobj 2698 0 obj << /Length 2059 /Filter /FlateDecode >> stream xYK6W(7=lHѦE=(+%Cz4E||3C?J1r6vWvĭKaaXobE0qNVۥr>y+CխSX}N9j[uU)UDfySPz#8 ]FW! :qD2DQYBҤ,j:͚k0Y\R ev-l"KʿKX!~)uoa= N\,E**3x ,Wir:.i 71"!ظ-D.R%l‘A?O uۀw`؉ƹP'VҘ2hꊡ4$N%'VG"PMV)O De$/M!O)USݫ+2s0ɦtiUWoK%!/8XQƹ;r۵QS0xCMX䂇l+5~>==>6 KrMpM*6Z΁vU\Pq.Xʤnk` ]#֖$l#db&QyԣBћ=z Q#I~׆yjb:bp*+?wQfƻ 0iGo.G Y/N4>R0ḇ)|h?'ք絡*u`"n9/N}|e(Wc4eMYVékFK4v_E5UɣY0苃V_qsE;gOog dW=B0`Y齬„=۳>vM=+>$ e421Kx+c%[W̬<ա2?֏/( Oʅlu~M(1l6vSVѻ0b~spLjL] ˜V)"z g c618CB8 DÙ\Q3+w3d0#SAq_7TZ$Fϐt:GI|Iyd)_gwv.=\ܶQZ~ !ҋh\& iESF) :<`lDB}7{#,~ SyÕ+o$76E5nų^orj;Uګs( c.bۏ5Hg1ePYpցG!gDw[<Ŗ|i b!L,l~1Zi؟Rv[`+k; Ot܋`vsæm:Upۯ6nZ-DfPtn6s$}G@)l 5:QOGmLl,g>_ |]LPAd\WĝiX.L"fMv)vnܻE RWj2I(\0>c*C,HlFO=q9WO=ݹOYm~5k+,|2qQMDw)77龽p'n #9s DESfDS,.Q7 p+=<~6(7 UmNN\3#lNH^y(AӘ/iK@Yy)/t]xYO%c+?RwnIӅ)~10\baXi3(Ng X3nNGng'W9{Rd\gPԍMtFѽ5+<|g su=}_M7[R;}q!J-NE=( O}!kqdh"r4L9Fٶ>02n*uAFXO_4Q|fCOA#^% endstream endobj 2701 0 obj << /Length 2128 /Filter /FlateDecode >> stream xYKoϯ۪ç &@as%[ZH;>Ei3%n,b; l]*e+Oowp st1 ?߾OJ%9}~8QXec)U}нnKyxt7n3dP>.;&wI& 'c*Ea`+`tsAOLDݳ.L@FrYtm,.OG+%/RƄ'*:X=IO6,$x,s C/}a6/菧?b}c 7/w~%. c"'8+ͣvϳr}]FQ#2N(O:Sx=M e*OYyE4,0>1[`SB_w _ ӈh够ޤ1U=jpZN!.֒Mg3и*͠_oXP2{;`åq&(CMfwtA344`2`@{s|eE:& b^*}_\ƝJ?] ߇Zt |w9!.)G7zX4t):Z;}w 9'ɜ0~62:$IDM=KN(4MD oEɧ~<@;]\|7\Bhk B;t>7*5^yHQq`^poxX\;7|>iX88鿹UJ-r/AGx?vBb$Ǯ57 c]n[Qh3 ƚ0wP[C s*}nÁ1nm&'\epʡ6/iTna o}x*2Nf$A,Z<(K}*|qoF"K:> |pDV8y,/Q]J@},h {z"FG+ .u3`n` 2 K4HwyFs/kJ[0nPS(:Aqe*kঐzqѦu1KLBt#dá`͍@v㱳4.pOO)A#NSL7kW*wmu҆R^/x _~@'p4H0Xn^(Px^>w9 V$W,[?͇?I¤D{ ~iV.:WTȘw=AR 0OH]EsG(͌ϥQ8fjۆSwuU5 ܆v1& q ɃMHCM;Y4k_#4`Bl(kۍĺ L/х[6eizSm҄#hܗyƆD@L,m"V!;w-/4_ܯ1G}2o^L+S;Tv2+zb77blP6HX/˘e:W,@PI"oQ`Qf> stream xXɎFWHf C2^ѐHS  GR1UյW"1$bj/won A0I 4JbZvZ]/Cy| wzk]2d1Q7V+C &B%P.o˦͌o˄Y]d;Rm)ƶhD6Vڢ*X!IB/ad( 4U9^2ٱ "PiV[qteݱ(w\$ $A] kGnDk5Zoʇռg($ QXc܀dHFl9YuySgk4@tZ=66 DոBdy _lzoUWO_=Zv̳ $*BeJp}vYF.1=6(g(C埫$q"͝ƒ&۟gk5+[(7朑1Q^!YiAYuЁ*׭2@`HS=I|\oˆfoirV48bsqH!+%B]Q̈ණkm {5Mwf֭Ή%"$E1^ ,!`XM{D4x\pN kt62Jbyk_t sWV&e&\sxHyaI('WD֛Ba}AKcƶ,$.wޭe"diW p1 ۙ:gQڧtt2SujO7s~2.Jz1W@K\K\? ~XkaW 'dAO:2>ݐuPד(1غgSGѝn af\e㔭7<٩Kv^n(];%r1~xBSH 1[p~ɘΫcO(%;7'Ki9jw})|NFH3|oLIH:$&:ΗqpdZ OgzBӪ+>-ᮄWTwWC)ӋGCF,w8 H-^f>O#YJb2}j6~7 wFnuK-3"a@"ΏyHv \#!{?&%R',nLsg 8 5ۀFw #TRQ/f&])tӀxB5OoE *00d Sz^K&pgpe\>SW9Bh: ~v>&M0I'`5뭛Ѥh9\ʹ+h k9x endstream endobj 2707 0 obj << /Length 1331 /Filter /FlateDecode >> stream xXKo6WQ D,> E d-@+mEJ+iy`Spf}3CdUʸ\+<6+~E\ LO"e8#nnj]}~N51ɷsݸV;ըP똦D͟W6ә 3tE.ƭwQ@ch7y mk|13yN(K C2sf>} ah*%*A(N [d.B?OTD+ *?XѓP}%dH$i6DBǒ FUlR&~wkDy5d3hѰ͐7 x/$A.}0^u"{,d9ռ+Z |] \[nתjRu4у>x\ ww! 6/ !eqȊ$)͐@g?=ڤy쏏!FK1=KB(J1}! g1Mc|H0a>X4}ADO Bh=]+ڴo.، "/{f"%>9270|p]:\jzS{UD EGdH,{8€".p U>(cًt|Śh7.6̌N^p|,^H[EKY:[ʒ0;hc3[Π[kjݍbY=tr\x9=ẁeN)ݦ)CK $Oc y8}]≯Lܙ_#h ]y[ոrA4QGo`:p]PՅ"\]ټY=pe %[yݍtԇ'Ϟ&dS!&CP?f| ̄DIH+uJM9stf O=Nӊ% PI)a,˖3700h?!jwͪQFV_cfm [k[Ν˛ 6&"CKdcO*'ʥ19Ӕ8,#pc7r$9CقGY2l 5X) UNgy1Ӑ7=ñԅJ70cNMxB~XÙ=3zjAͫi\g)94b3p}p/;gvy_No_%0-jYhv(H2Y?HB!<SC A6=Y?e7g8 endstream endobj 2712 0 obj << /Length 2367 /Filter /FlateDecode >> stream xZYܸ~he54WH2΃xHXh9ڨsO]ÞcAQSd#e]eJ& ɸZmb3V__Q7o ד/^QIgtuq5u]}>cu$zs\D|WF"vor1){r8vhBbPi*Nh­v0BZ,hTm3ҸDpZ(g׏g*juKu)lKI&uk0ks,&S?-hDAQ4Tb6Oj&5UDO:19x iDL!(UZw^0bg`Bέo1vUyWC&_?*ĈLS8(@n;dŕ /]?8BaGo7Z3SEp_cMS1[N^w{dE튛3`)%vֹ`Cq@dS ~j3$,S/oP}ޜ۽6h.KXFf۟e싉`[ׇc8|]^Tm2eH(J!a+B1PbL E{*wv;G{ݺpС,X.@JDi>rugw)JO*Wѡ6[ÄnWlam<ޚbfԿ3FyٻuMLl`dK0'H8Ѯv4yXS)?'Tm~3I喷"15a!\_Uv\ 0O$чn^Qcw2 $SD&TW 2d*ug!.D%鋸О)a2}1xleS!';4<' iu(*; }PlX>kt 9u;YDx:յC;'Č>t"P#'ѯ=H,ye/9C;8V_ &p+f#(f/Gֿ j@%d8۷OPAM b8r UnN.LAdjnЏBgAB#@32Vt{?T}A%MmmA=!`;hB3>Ƃ#5\J\Z@lѧ0*5tmW}PlHs1xh]Cc`=Yg< )0’sӤp6NL;J6$9c @ cW.f"oњ78sI,twzW7bT(~Նv("W[~ҖCd~ST1K U:jV`] C0v}ȣ#){˝JrDmmx3]Zq*$7En.dMo^&it v*\Y5|k^SE:9\=Qlf+'rn1R`U܍Si1.YC)P:z7/I<7B.%qJg')(5?`HE\WoMW9;RٳB|,@ Ӟ|lk^z|:"Kv>Zn9v1X8<k8jq,I+̾}qṒ1#'pbNC&0Nl*d @^Y%n8*|2:VƱ )XxIOeHb|i }it0RxBS-4 o)NUJ"8=6I-4om: w(ot@U(,,ϨuS-:K3'h/)p./-}ӆ+ #I<2} wߎ3E_8Cftq7o}8KvmC}(9.7Zc9دus2Nw/'/ةOkM"I g&[J endstream endobj 2715 0 obj << /Length 1301 /Filter /FlateDecode >> stream xXo6~_#HO0W5U*rPŻ \c MV*U71$C )c(2X.pW;8 OﮄFHXMZM~*ŌPbEƭZ)bCƢ.~Y'3'" a^Y*eu׵nؘ<"*ntOj;]ǹ )K`^t:o˺r!.`k/䭅lwXˁY:XnN7δ)d d2ANWQPRì}w5^8'DL%לsb#! &V6Cc˜!z( %]Z |;$JON*,ev~/&MP&ݛ_ "roE"{#`dh|x#ϒӐ9c85 Z/Lt疰|f@iX6 XƒY1Ajsٌ-Q:=z俭׆̼)9nLuy=r*)yI5'$S$o+ocl+9.(& &fV91S1&&ѫ Ts3r>`·Cvȩ?lP]KzSp u$HjsxNpWz[@q;fl+֯{|ݧqϟgoC" y3-S}d˹9EBQYUmH h<& A-i9'}$0vدoweL2)KUشq?Ac,3LG$xϚgAQt䚡#ZЖAKGN,TJhUmD6cΜC,@c ĽgH:=mǑ~3pp] WpJ'14-ŝ ds|NZ7NPƅ>]"ƴo֯;i.]vlC/C4;t=yV}߬S0$8wGq (ct|L8 YJTgvH!6nd ׶u{ߎ O+aĽVꀧOJpML/MNJݛ\5Py*ƚ> stream xڵY[ܶ~XZ`FER}H&pڅ ~Ў8;L4XdF4nX<w8&Lnr7㋄ 7Bɼ-Lf?[{LJusouW|~ =ǁ,c1UP$&^EUZQLB\ӚR}Q0zN өF3qb&'oW$xP|K#RqLR@F'n_V>U͒8/mFӡ2 )n`'.u,1-pТDF r¡1I[y䶻;F`R[3%07`< .4bcIԉO}` o of h;8ER.{z,`h@fӟTS5  [h BSnx`6NU_Nv}& i 'Cu?:&Tڀ|cFWfVRkT]$9Ç7jKyPwKAnB_KhTEVKCX 1%98bleCb90QoC=L:^Tpd20ҙ O_2Ukc@>9eC ëX٘jvtu Y DF@%L#E&D2G:Y"S^8נp DlkLG,Lf2S,WTy4lh~{. -ĶB:d/eqaۇWD*|5au/פbiB(k4+ V[ĥN[6.9.bٌLYFZ)އJADsr~ڈ@U+r:]8 p]ŕ ,-=Ma ǠG|2_xk/l͘w~w~ĻmE.u:a(~AA6}x=PK| $Hsm%@gS(?/+n8Gb+?=ŭ>pjF F IF^-FJ^0P ݞ0)@tB~Ȥӹ5$Fo&Vd]6|,,)(榸ճL k5pŷ:r.> stream xYKoGϯcrzC ȹ$!cVȊx>_ddL=Xk ))RQP) #6R\AI! :O(h-CM ¡ Cؖ S8Pf!"{ĕJpq`LGUԩ£#,.Sb]A1}C]mV57D9M|Z x`CR8*TDA% 8SDd-{<\Ւ1me q/U%UW\-AhG%`#IEOj\ABi7ѐ߫$EjjG`x)(k% P{4D%F4@ @5GmH4ECM89 Stǟ"CORh_?yo?aBݫۋWpV/zX֛ar~Xu1uS8)Xky@y\cjӨE@itޱ0o7lP} &L&]@KrJ}pVfhX6 u׉31e.eN&)bmK4] * &>cln-|9-} jBR(r-bT>ʨIƉ~4iK@, >P\f1Rm_HDnhmN^,8D?u8`6C# #$-я]5>P28ܯ;?.gG^l}fE 6~%bwk>ЩleNc웼T *m%ՇT9T.Y)8RmN>PLq0ŰcHz[kDf0N?fGzal{~}מ޺ţ~G] ec^ۀpۜo60ܥf3P[I(R9M6*IE:-SLSCRjLRi)wɜk/O{>.xq#g1 V`ylO!p#ŰbE:NdS9w?/w͇eASS@_c}pFS.{;* endstream endobj 2727 0 obj << /Length 1873 /Filter /FlateDecode >> stream xYYoF~D{:M1T($yIb *ίAˮ;}pQFx g{Fx?H%,^dH?mݛ+lB '?G(XOYŇzY a2ƃ~1ESTY < (_~Zzz < 8 3)3?Tmj ˘iSw[WV [sYӮ\g| t`,8'$d$Fh9A^!sz( */cY==Z8w˒ EkMfx՚o-ZB҃P}5Q<@pZ2ʇtopQʂ5OMa^nB4OKKgA MGE R΅2 (*ã3d 8i̺"$=,Qi`EQ6J]|]ȣ¬Eg]W_Vۘ*wa}pfQ,ܼ?"Zz;M#N#A3C21 1&Mi#@5b))\<Ͼ9s^cX̬d^ʶ58WyXjJ<ҫdA)8$# )[ݝ0Uq#FAywr3:aXnj9=4Wi5p3 * ^-NyaZ;ھYmvX;0α|2iezZ5ك ݨ`B-ORpBmu*:VX`4C44^4v^bEa[ߥ$MD; $~XU֕[R3[|u#\*rʗo$A4aFA iw˽}]WSn[hв_Y|m31=~84~o fY&Lf[QmnŔ54VԬU@#燒X:7|~H}kW;Րglyuzv;ZRDS7ph, '䤘wE7;Ƞ!N튝ҠMwâz,K_yɴ;[r$?7^OyVͧ'2|XfK8!]4y|?8ϳm-܎osQr [m*Z2vܗp_6w_R1~}m-~ۺ@LV7_3U endstream endobj 2730 0 obj << /Length 1728 /Filter /FlateDecode >> stream xYY6~_a2%QhS` qI2VbKͯ $["֐Rs~3Y|XJ(3vgD{0../~z, >[G-WMol5_H)|xF/V|!b@F?.,B)rHgČKx^(ƥ" Lh `[T"*m,ßPc-1,g !XJ:m6p0-m%Z ܴB/ @F/ H(V%:7ޭʫwS'qÌH')E l fU}fT]v<ŌJΤwYi9ftndPVS?D^R )H!K!| DA &h1-0Xt0{A#Nc <[PkF(1ĊDނ0BC0nl: JwK)3eofG`Jjdې͚oҌSDŽ,Ղ!*䣲c^b}4(`@_٫]U{X@ qme)@C pDAcMrO9_ځZbKymM e\m7l" 5t kt* `!WviMerbX+b}6xnRi\դ9ΡF@pp2 dGLvu4ԫG ̰љ8WC3`:",-rJ'%P~k]iIq4e0Rie#ړS1A*B*/ ^L`:1RN7KB*F}75iC$pB .}oIOO Ê~2/&zpUB ,{7*ߛ~,̸B}_d&#G[_<;\9._@@LdgdǺhו(r\:U>2 ^@nih; ikvv5[|%ԤaAaYv=8aBmwKJCC(rwQ6ٶ]m*͚,--]tU֨Eڧ;i8|Y&Mϥ o"Ɵ8JIS/?HrMKKvUD_Of8KMF6FjwZ(cv:TtzF/PY!F sC { WNk^ݗb#u 8TxrЌ[%6_Ukb[C >9<;Lȴ-s!SxL}t18#έЋ>)f endstream endobj 2733 0 obj << /Length 1726 /Filter /FlateDecode >> stream xXo6_@͉_U`]֢<`@FVl5dHTI}9}(u,Λ4^w'K&xFNߙV/_{۲cƵLv%^޼mƖw@B+jL}&V3W]g`!amqJCo+D-$P+GRmqNƭwwSޛ?[7V(=&3Te9K f}H.-KlQ+<4E'M7CaD} XkkQ\C x|@SIX)lCqxnܣ\z\~əД+0@T;|$QGG t[ʊ:K= O~qJezr xB(;լ:k:[N ={KA y\rvbJ'ؗ`}m endstream endobj 2737 0 obj << /Length 1489 /Filter /FlateDecode >> stream xY[o6~ϯ0$+^Eۀ^֢ߺ>(6eOf~)B'mQ);Ƴ LeR-7'}\ r)#'9 L|jM]yJ)MyOҽ8RSc%T-^N(x a:"orAMٶe}Vek5PQ)g)H)崼]w- ;7I 91R?+s}Ug0XD6"9?3g0:,}> K$i1S#,bdW.|"#ڻZ'4p YJotm cAx3$O,p^aNI#Nw&kx=s+I[eȌgTΘObEuid`:Qjb0a8=?N7+UH}Wd\˶pL~z:<P̬U3eV.U &|nwݶI('ٰ.{1=^W顙z9pٔ54U?}7vP6m sbґ%/M6p{ qRDG`O&Ȑo=?'|08\Bw0r@,5@;FnJfҔW?2EUygC3ŐTa)Q#8 "ܷܭ(s27.dh6OUqz}Xo'|?B]ǜ~}V$&:2f~ɷ2{Jedl[M\ ,庈+3~so7쑙 +ͳ7gzY~6.~ܺCQqݳUzL,m֗hm5n|ԫh[dߏ~᯷ endstream endobj 2740 0 obj << /Length 1674 /Filter /FlateDecode >> stream xXo6_ae2Pq$C2,CҼ}m&jK$(YT$E DQݏߙ/Į|ޝ%n]3Ű0>ROI _\ߌE]oo_}ge,򟖱R::M\jmȸN"i?zЩx"8\y].\ytiL0ɗNE[J5Q)XHIz{et]YWtrkߓPpf( %$o%/i=,0 zli߰.ɜzńzXwD6y9'#D-Vv;Gr&G@|Π1˓ kNCؖTTV%8 z"VO Ziz&7Xr&>(`_R{}W />.1Qͦ,reYZ?}dCjӫ:o3eRTy:.3b>=f ʪr wCM5~rEzhi( ~'=:xAlW$z.Ѹ=n^V3(9n,*v}u+s@T{x#ˆ6QYJnU7GXn&cWϞR28Ni4DaNАp|l+ KpDɤr),+^M> xà׵7p:l5zbBg#rU!_Ma2Yg}% X8D+m3C?8/9̠4ûc#4G ,$8&$N7 -9B@u> %Ld:A}G*S_z_VTTjS'wzh_t0i$ExqBcJԭP{:? sVr6Cvw8ng8Gz!nحg92[> stream xYmo6_B X,%mz)RA/q% YKe鯿]m\0`Qpp8̐+6&D)tSvjB#/.>{nFpLlnU]6ogw~p6VJEXk} xn\mc#ͷoNmoKhMd+JoǦ@7}|^V-)E4=3=D9/M0 CLE6rM&0[ES<&`Rk2ٗ&ަG_`<"cyD[ْ$:g}lbӋ8r%kx0)ì1SI|Dt%Mx3I!y, x~)i}0Hm $?M "; 3 ")͠p,r.}pmX\ꧤ hڰf9OS<}z#Ǧ:z0|$gn7{Q#h1 9D>B+f&}>zt._W*=O":42jvڞel}KtK GsL!gBQ"^Jl8}&Yap Gqjɻ.үfgmX B$w)` 9 hf\'iÎ̫g-)4ߗ9ʈgHA)=ߓ :zvn;SAKO5E|EbaPBªujcɁ4pƸ@cp4' puƑ!+y#?f n=ciHlFˁ1# (,wdz(_!4Z j"^Y R=&)z̛`bZX 6Dj<B* g(c߮#&Q7mF}q!O&]sgLU 􅁿ZiH] ffۅ'zJ*+Pe`~3)K%m ,%}CyL6\[/$6Ugr> stream xXKo6W"E=@GM/N\e [ZC -[7E 0%73Il2&Yө'E} o`^.pO$ɄEtMdW5+'j)WVA1B!r.U ժPA3DDg=$O|b<.e@t9T LRN @⤰2u3h~i }׵_U㣋$N)np=H1:MC/n|IXP-X1v!p,;A|KTuTuk1aZUH^ua-d 7SUB+xJ[ D9[9[ɾd]vB_]UEgnpTDP0p( J~r}K‰L[A>&/M \]`PUF[*U&ST5$Ww)t;o).<9p3ʦ~WMgnN͟Aj9Y옺#<&>@|`3 ;7xvh ]t_A0A.w=CIıIIczyL&}a~exȐ ȏ3&5Vy͛?'EFG4k. ۤbQ?;HRU';d ;Dz5/ќ,uí쭶KBMAꕏ2zy _6Ɛ{۸z1qF^~ ́)08`s)0<^\{W?DLr'e)MxAr shݽ)T|/TsL\3p.>}!HI$@,&WpAcxۍ?q%rd= 95֑50b\諌oAu6y8JieoQ|̠hQrFWwb3q8u9p?1 nY5ZE0Dm^vͿ[+E i&˃l8iFN> stream xڽWmo6_a G]![[ Mŕ4ޯeGxCI8QG4HFYq@X=ݞga8<]d:U}In{\;U2Sc׋Eȝ|88|'8|.Fg!:!$`jZ[]z;X,}Ҟj RVc/qT9bg1=eӨ#FB窡. |/IpK:UEL˜s]vG=v?USZߴ0}&BA K.mMꪠH4ڪDQV6=%fZPCJ_:>3vdqƌwB#$NEH^G y?H1'WNi,X'z t3v :OQleZ3Em󼲇l exCc GOj}UDS.oU;|5۳qWؙ]'vhO|8^|V0f!_y,"H~>*GBI[3$>gӊuۅjgӯd!a gբ]Z Qd[!n{luew; 7 am`|IQhzpoMNqQfEc$ϠG~:j8 {5 w~!U>!\E;Xxl ڪ=d#6, \ QшamPG۲1HY[l6xCA̝S+73a$tIV UeتaӉ4{) ibى.Q6 F̣۝¯jI{Jc[Ϻ^ty=KSTxYT%7Ye㷖e:|JD҅y.&4y BO˓CiˊCʱ YۭyUwR5{)BEr7φ3Ϯ-H6,^4njF~T)V\K}8΃,XeUmG߼bE ;pn < ߅ Qqۇi> M*sƣ/AY5)YtiXN]cͅsY_lWe =/}ydO ×YESg/f.=W~6W(:% vAX8+9]NNMM0C}yo,o endstream endobj 2754 0 obj << /Length 1386 /Filter /FlateDecode >> stream xڕWYo8~ϯ0+wkVD)&MJ ʒ#q$Y s|3ȆE(p]yh>kn~;2#NrSH>=bm͖fGl%R哩Vxm =C]x3baDjQ|vzl䢸4/W6&LV)Q7rmN]@.~b#R)eTIdPEfμSR"Re mbY\=cFPr2<]脮YҬk%*WpCˢ3ߺNy̅"8atE!Hj~}LX,ڏZgc_Ijwvi]c/޳TkKfodΏ$y9coN/N-{vID% P:\MWv'XGHS4h$ G➱ ѹ-z<]t_zKFs9!wXX{niAR.t̫=9ҺRTS78xqc#VdMm伌)$Nr9ܾ uhUa*trK K׵|f\;b#g l&pD!{Ɲ+Ҡ%K6XiD gx;0B\**U+9XكjGwrfMjzuD`ta[n扙zޘ9y`w,(oױAr7q0'<ȃ wFl; \g\L8hL9 ^6*h#F)pt<]|1L} F}#*pV8*ÿ q6e;,omsUsϧF ,2}9'[`{UYɉXf6JrP4 P&ӌ&R+|! 95srd'8`sUPȚ/F endstream endobj 2758 0 obj << /Length 1297 /Filter /FlateDecode >> stream xڝW[OF~WXTznPUՊ"4س۰n|z1 ̹~2g?襡c Rx 4޳w0ء|3?R Sw]u,, '_pˌCngN+ӔϬK1y:xQBx>K_k}w0Ɩx5LU+^CQڕIf(;{\-Jm6k#{YII4K{w /r~QEcgvovH₰r*د?|VgJڋf)њ tFHj;[_VNx].g EUP"YAf2Wa_F*(4ir!=[VXa^}~Ks;:P7axDNraUTC##+VF!1 p@8E륐Ed◒$mQׯUiTPnjh2!defMj>!f2WTW¨nDdEWz2^(UD{騘NV\* ,=EZL (>@w>۰պ;>8MfEK5}^0;S!&'q) Mm@ͺ+Ȝkm6" n ZsD&<HVGE݋&pZU{]m(ݪޏ^5Fce>b/<\A[VI$l3F#h7TD{9mr' q@=ۀrGzDsBBLoLGlݔ.O]ATrRVVlJ:%,SǴrjcAWy? }!eEHE!Ş೛F. E/9' LNDmB1(Á\q$]]ObPZ(pp9?|fs+u:cMf8έp LEuuTE.(oxwV\6&TZm |!bC0{}' ;>ԌH3&)U"" WL-3 RGKl @;Ogov+!BǥTᦅm~ Cp;l79p4oS̔ʄjQ.2xcϘl_[T=ќIW F\WEXQ endstream endobj 2761 0 obj << /Length 1513 /Filter /FlateDecode >> stream xڭWK60ЋY,)@HXvmIDLdѡhp(JY EO"œ2IʴTbO7WY6#VFeR9v @=. VLfE$%eWJ(G{8g$!ꗻlߢ iP +Țv򄎤0v׭<WQpU6<Fo]b{U%i*1R{h(9ˊ~iZXoGKV8˝l)_d ~n]'ל6ulЫEX>'FJQv[ˑR:+OFT!ժ#LW"ee܄+CE`5 #urIRw!A*(|y:L:/8Tgvnh9w5aQpIFһhkZܳkO, iqYĨ6Qvd&Q5\4M 3L'uzA,>5:kt592JsVͶv $hϮ$me^֛FfpL8F>ES}Ѓz5,NMχt|qʖ^_FRfSXi2<٢0_|˻K,q2s7)z1:x)/=s'M`D#]nyʨ ol1UxhqE{KYQGBl?9W o RukeLG EI %Bk(%s|r8i{—pЮxF&zoo_\BSztWT*?QϬ8cZsPiJU+OgZ60FZWNwG9_8',I,yuR \51r8C4gx/X2ЮD[֫w[Y;p!+wĶfۭ> stream xV[o6~ϯ 9Rn,i3X1@[tE\rsHʶ\2`(S/"̛gԜ;nƿ1'7с8%9͙7]'XkQE~v8۷`,R\0e1y|;{3ٌPtY豈PH%',Ǯ,%I}턂XmB55kKC.u@S'օ 0jO$N 䄄Jإx65ƣ^'7VMC9`)#y<Q ɻct:0(҇WWC|uiϡTLῬ*aAZVC{S-vwN­2 >]oV9NBU`5~QpOle^h.`qx&ۜXghYàRsqr1~ ƞoV0+ :$c96^xH`=TbyuӬhN{ϳFp;#ŜX 3:w@x>vEy8`ygRLB\/ubj^;nsLf5O9;Ovֿc#zTXQFd`(&c endstream endobj 2768 0 obj << /Length 1557 /Filter /FlateDecode >> stream xڽWmo6_a` #z ut Ҧ CB-ɓ$FXJ^ <s#(F, QVx,FDܾ;VA'9^{,R>U'|)Z5cW$gc7B_qUL]?b|gGX#.u',EIq8uSJ7ssཾl, C֩nq'懌{'zD Nc)m1jSbK]+vyoTYSM7?\++kxiTV7-@= s$ vmˏ`_W@=-M RIedcYKE]'5D?r/\hwG4:;7wZ' tgu-h}{uqȦcA,Av{SaЗJ!KgZ5m -AjVGd*09kRVtoEKxEZD>1pO84H<*sannAڴ ֽ-S{;{ڬ#pœQ[3%hG +[m3c4B|n^t~-z&}-UVYm0~ Y`ڮiqr /&V+a|7XS;A7>0P k&×8$!1&mRwi& >8p|#@@Ѡs`.3"_5+`@ePt^v٬i͘չ;qfzx5} 5 #.c溢> stream xڵWn8}W]`!1+J%5؇$NMR.E\ȒWsjFr..9䜹axχ?K^,^8zC'(4O&? >K&&yw:K C/DµZ ߋ烳ڦWs?K:Ix!2YVW3plhg. |en}:ۉʭ<}ā숑Fg d9-,4Z-wߺ5κ K MT'{$I lb n0 OPժsDuwy3`(N`N==L~5`F8TWsč.# q$T~@c"Y)1Wipw›la]6 [a?Àq` nj+ Q[YNV:)KWKA\,H#ێ7=^-n@vzQv\q02RR̎m2HO̵iك\, e?HX }F@ z5ת(ٹg')?\Q™نEq*Ʊ ^I r!FYA5u dqBB3s0dB JYbZ85nP mTVU.P,N U-ƶZ.5:JffNטgӄ: 4Miͱy -smhJ䂒>+T64R`Ths.m+R ҽlUz[Ts]SXea͛Y0*f2E3;SlLN2uVZkTѷ+ۼ"B٥mFk Og&(3S,.BfOhG &o7p.NhV0vmgǖ"7/=P6Bh A8h-ʚR<8ŝ.5lpH3ׁz{'/K=% endstream endobj 2724 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1474 /Filter /FlateDecode >> stream xYMo7W%9$ #@RE0lh؋&#$Y%mdWR0q8|of4SNcVcrQrƒ ԑ&`c lvBI(DNcET;3\meW#cU6W9a"xl(eK)&(P C;vRbud\5 Gf,X_l)xY̒1>̻Rţ4X Xsx &`3Q`xIƢ$Q#ƣFl&1 VIQRͤ%f&S$#0 WdTzJ6K %bs (@^qԨP(@9O`v#+FB*FB*XՎA<l!c* p4 p22v08(b _!iF,0UˎعjYS h1k$X) cw|lf#FXa+]g6uRr*/f/ULC!UL`v>+evt4k.޽n]hXgu7ryjoӀTfY{vOq*D.#GW(Bz@SPʾ endstream endobj 2774 0 obj << /Length 1377 /Filter /FlateDecode >> stream xWKs6Wh 5!4nvI&L 󡒔mbALK;bw)"ድ$iy-h Vix6 'bَ]mō&WN7˕^j {w|[*˕\{Aqf3P{t,LELA|,W],>_^NrC\Ϗ$>ZRT;ZL)OoF`] 6LW/SմΕLFfwhǢeZI:䲞%SVsh9-@1]^m ~r@W^vnTZ54.'b_?xXǪ.r5mM]8Bd'p.oc5iNcޞ/oI:?nj ;]dk" `}vb\mJ> (|l{ nn8gM+t0=ʓjUd˷\挽yRo^L HzpL}q6VwM=$wIiqVKʇ,2S.de!$ ۻd\<3t6Avҹ0VПy=({=8<ӴPo.C@uk)gK/\`#fvPgFw\Nx Xlo13uSYpPSy148U9Dc"Oڽ̽mjf= Dc^vk81 -_wG"׮ČWJ$,"`cQ|=D`x(h,ʑRic<)\;4km8j.'݇\W-Z.RW#,ʕU2$5a'Inbh2xpy[Eƒ PZh"hiEs@D:?Y$^ـ(yCPIDĊDu$2#e][6J 8,& Tpsoc+Zr G:$(yICQkލ'gl+;iZn);hqT Ś*Ma]ힹ6 "]u|tX/[{ۮߔ?VN}m IxF P~(]qt\8/auQ@ L WM1\1Q?m'"(GCm,Q6a0=f(it ع?^Ig"MS {-WDj$|ܨ]K&k(ckZJu^+lrl,R ]88kz*>x{(, z;Upd}XcXQP!:ŏJ endstream endobj 2779 0 obj << /Length 1450 /Filter /FlateDecode >> stream xڥWo6P@̉0`y4k E#ӶJ/Hv+rX/,Uɠ);Ҕ$ˬJՂ+Wl )ZE.I=?/e#e%^ H@$IXzjtǨ/<@Ǭ@ȸL\>LU Eb<]5qpӵcuL-}]2PEsSK)?1~x`J.!D`"{`[$I0?yijnkYuU" T M3کz]k'Y7i<(NK*ֆ_͊|Qәi<ٻ[;Q/kV o} Ghtp(]R d<czd:8{`iZxlmu^kS>;X!6L6RY1>lqj:B1MIRzSi:8dEZ5T3 l=#EN~9ыb-@sƦެko@Ъ!>a[3sE;ԇWlsU>h| R2tki *Ml442(J:7=ج-Ԧ=hU}6!GQ>S M<]$ʀ$'mA,p*Z:x[llEyi#[{R xb)ۂ+*1\uρ/*82-:v R 5 FG̽نQLЧNL3]">VPd\qO~b1Ŋ?/7U5-*KO Y,i,ʥ6U1Zc;0:B;%OZ?ï.N@0ILS.vDyQGQnj?ÔgYtppi},zp4/f`ݹ1gST}P}a򹚺\/;o:d}ۋrwѤGf r`p#5'(bg.y4|'?tI-DA/)b)n-A" n~*GnW endstream endobj 2783 0 obj << /Length 1418 /Filter /FlateDecode >> stream xWKs6WhCə&Hwzp43 8k@ȱ.I[n[3&X,>|B<ͣq6+J=N/`Ux0flj}η3JAE^vqxg.I^mVM@yz ,_\g&B<j>FxΒكJ eѠCbꊷrH;nnjW Zshy@hIҔNP}^{ c}t>>_ܱk7N@ "nZrзYٌ*i'gՖRkW 6jЅl ;.H|N jZ{;o+{eabPd8GXd.lChU􍟤@)ۚ|$ii gx@C-G>q:,Cd_b=P K>/hYVBD,! O1!WGbţbOկ9gxgjdS=7AbO/< D9] [Ҳ:]V4Dj4&oME{[Qi048h+88+ YȘqmVh+I1^[xz}K]$frNp{ē j6,Sv?z`!Y^5;7NMAh1d1!ϣ0.ܗtе X~V.ޔf>| UZnP0Z_CSސ߃.K38-9U ؔ{nܳ*r*YADg0P@.>l8X6„ytibjcӓb]ʂ~bŮۛn:Z@q&OaD W;>WTA8?2"u ThT!Q;pџ.",gI_zݦ7v{uwJ+]]CXlä4V]5P2/26>p̋vuU-t7`wUhv2Ķhi+]zrok^#%> stream xڕk۸{~"_-Zz=4fqADB$'s{?,o&k8ř!E?uiy]ͳ悁ϔЭp5v&/TA.sVſf7r\EQwvm;rS^/}Ӟ(R~&]/T JTgI*XW/j7Tŭ OP`@t{n0S[aSRg#!eɑ 뒁}[nvak+Y h5YVʮQ#R!UX]WEy/njӖ< >\f>[ܞZ'~\ ϔbmB(J #qW8VTP ZtflOY~K)J\<#L8k ^VdvZ:OZisa2!@n;-1s*% ";lH*5n>lF1 gFEDJ3#-@K)2G걢"WONƕ{OZZxSIej/ >mi-[얌}?_$fcBnXi5 q V >@ݺ\8 8`!JY]sׅ|QJbWglLd,5 UBRGSéۖ'McS Yoj\[;\W-G헜+^QBƘ8asKV3 A%/+Q-KFk4g%S߹rYBT'L|˔ql Z-09`&*H>2#ӥKz3]]/mT#E~\%pV;>>5s FEpx TB>nH8s,LAxD~AOPhT⋘y+ڲW Ƈz ^o__97H_p@އ57=>ie8qTdpH g >/ulL9)j\e}ޚ2 Ʀz2~3K)67>tO FG}8 l7iϸrFM|J2 E3GyMvmD]z$:uZYH@cȠɔc;RQ-姓Ĝ?eq7^LQ&k/pհ71 ( C*ְ ,> stream xWmo6_ad #Du(ti%Ebb!RtR~GXf0ė#E,,bU}=t![//^ 1ɢ.Y]|e@>q,w'pVM!K.N^] w ƞR>@'ٌr{/W;ƀ$I'OdR=zZmpdU+.qt6 $6I&j)d?_xzfQ "li HJwHuOV.KoZZ殶8k;Hl E@n]'AtڀMdj= enXgDfZ7G8iB5hnppUjnzA*  aC9ujJ(cFa!C.aTs]77Mk > stream xڵWo6AbVE=: X$]&bE#1Y$9mPF} ؐ|x='>IOb!X&lsz=#@8Q>Y=:r}),W}V|{zgs!_[kGvqUմiYAS>m]ڔcI(X@ֆZtza,jQX1@b"'z7 #DPn>+x0S^WT13/)s lкx_J6&z΁_XcܝUe-s~++d$$s<hcd BSm[Cl(׏6E ;lL{-m/jv>iqZġ)%CgU E;;r(F|л+SH$C&3Smp/6,MK0r[Վh&n~Nf|x51qv(ʼ*]Wr~WU>э'e` ]p܁e[m͌ {jWIqD[Q/F`2п0u>|.4NĬu&?e?3!=LzG,zC.Qbt~e|tr藯N_=0nt5nY9zęi2˪27MMWq3nϳKn8~Ĝ\4.|3'diI'ݯ> stream xڽVo6_!t/2P1"%R=:tMx}銁i[$zHJR'v^ E~wG,QD8$4zo'  $?NN8hH0l1T5{XRO($c|r!s9 ؔ|}嬷;J.eH$ b.%Ĝl P1?oID}Illz{)舽E$Um[/ Tԟ@EI9C A"M %C1@ä 3`%V(:C?@H2(ʝwz({Y*틨xK-RdR[㸇&:lr]B0$_hUY"9hжwV@-W|9|w -jT2m(EQKI?!dt%9BLVVb3~R})t}&)I3(|>hqvslzt.(۪glu/\ L݄o @iл{S] 9Qn}DtdS D?\mlJ,I/К/g&~ƾZQD1A4K'ڦ[&V'~?hVcηxLO56 3cVX[)jQo&j4p{YK3Nx;BiYtvZϭϦ >@Mk klOn%?V͑k1LR{p#z3M6 MW|uc}8PUle. endstream endobj 2804 0 obj << /Length 1614 /Filter /FlateDecode >> stream xڭWmo6 _ܾ8EkC˚aPm5ؙ_)ʉ&)G$\A"ckf倄 nF8i~Z\: wY&|xZd/JnU G9ps5*Uj8\'\L=!~9|]Ń0|rPUw&GD,x@ڋ" |ݠNYuӡ5+U[I;NU }?Uպ[^1͝,5w1tq{D ž|Tp;DL~cZ5$ Z$hQLӭyk3=9=&;!ܚŸ PZۉLS.;f'<p[4. zQ[ ~uvjҝN2rV:a',ij{bFT-J}7ZU塷콬^@8G3B+4gw>h*zcU.A@Mfh0UiuNYYd$0dIlN<6!wf :g4ZPx4qI|LMԤhH6Q&c3LOJ?IEÓ$}#&2(&<#aSdV@kLYcVgsPyEj`hپ0 %sTflAm7 ]7uBL'Dei!/mM\WskQS^W[(G1(lujBUQd%,{ ,e1IJR狿P'c1{3'ۡl0a*us < ~62o2M)[U*M eBq03myWS)G|Y= !Lw Ʈ|*Q@?pu(˕>AuBg&ʤ <0uMk|[i[j?VƪN+ilQO:D爀Kv,mAR$\2#)ÀCDѐ+_O#;V#Yt…e7DdEz}bj$o|-֖ +ٲ#H Y|cZs:b9'7T!-J\I2UT7B?9}P`ŗ3t$i5&>lΠ \-)Ϟ1}AS ={wRFI.J"#B{@\"wd.9q;` zYOSr8$2YӗX@h;BDqGEK0f@3$FaNesdq 9lS|P̴:;TEV7 /& endstream endobj 2807 0 obj << /Length 1304 /Filter /FlateDecode >> stream xWmo7 _at_[=SCA6tc-;W';MHQ緸m>AERGA 8feR I݀7W'@qz|Mxʨlո|ri Gqi8J48{wM5SF5SD(HTgC' 11G qB &X2!QT"ZŸu@JZ).Wy0ō; !߿{%#xM"xuE\,kUnH8Yuzt x:jH|L!IR!殩.ażu%]:%ȰVUGMX&A ٶ?og~V5uŖFKNMvϹXB.KɩwiүLjkTc pX5w:\w"s{v9r4VMʪPݞG+;3 :t_z~ gOj[G|ÒxnxMp"4ӧvU~z\ȝh@6!wJçB;|Qa£n&kup;}jC&_k9Qk4H? 퍪MNևje{9{y&a`jDȋg"OV\Ǯ 1o" endstream endobj 2810 0 obj << /Length 1112 /Filter /FlateDecode >> stream xڽWMo6W) HE̥DIm&X0Ʀm!Jtr8-9rCQ |z=^B{HĽy~ArCk~8 {% Mt 5]~w~Xg9_R :a9b4 }MuvUI ߈V}Uj7R;j&R-rsُeuFfp&o%9/I&I3G}qK3DR c ؊9m]muM`@]h}7ieރ!¤ ?=|;4< P~`fݔHQz|jvʳHa,}:"/`04D΋#\kZ( tfaz%WQ>;347c -jѾMtEndX&@ytE3XbfQ=:=sf?&$iKU=>\'AJ(Xo/[8P0 \X+X(B%R V;ƛq<]7 ۠ߠ{YZ^y۹3pvvq(P݇3+MM_p n.ETӒ.ui]Hs^'-e*ynl(hXm):XZN?Y+sDvPljAS^o]D*k0Q[56clF#9W{LvS3do{`R5CGҦO_DiֈG[ML{,w7B=Q endstream endobj 2814 0 obj << /Length 1352 /Filter /FlateDecode >> stream xWYo6~X("VucDž) -^JQwCRmܠEHs|s}o~57~gRV2A мz5~{%YDGӲ;p?# 8Z=pSJm>ڐ%T(k9hFm;n/o@bo_)l ""U_WvC%Gtv?N&ϳc^2M6D9ۼ8GʑG8ꍒ0ՑI9 Ϙ?¼Q$ÏÂLh{Ҍ/6Rȉ&SlKPVYq Ūװ*A2K,n_{m?0_HV\XmbRPeY3&ޠL: "#ݕ5-fz:B;%11ɍKI,6B|_&rJ+{߬|Y)S-Lxdt{o endstream endobj 2817 0 obj << /Length 1320 /Filter /FlateDecode >> stream xڵWmo6_at +] ]dmӶx$~GH !sw.t$ CGd^T&tD^Otz2''tW5]L9gkQ\^N(vNn?_r9w $}bHpZgtI&IFp6_:$F^1U4Ki'ydrO8q 88Ŝ? 2t!.ySb[3w||r>`нB 4 H#WFZ $iGߴb~j UK7ʀ+Y$rN#K 4h-ay$IU'xVL_ .y (rƱV ?R Y VC>YF|_u >0  z#jDm*nJ+ mEefc)䈌r5 :w: QYК*-Aj9iϿӵkQ>vB'VӊͲWs@I .~S?*W/,pjٖUg-k _ȯS`凳c2rUrd«$H;im9v$Wdo }l+( ;`bq l+DkU[?SqNwZO,_Ppzc^ nf.kY@5K\[;l\֫{:aB D H !S;/7 ,ؙ3`<$^"Å(*HkHwԐJJ8 N%rӪg=1X >퐄Ak~oe9psnvdN/ 84d-n]`'Pr#:r.GԵs$Yk{0BgmGΌ;G0$tm\~yi/J S%.FeQ15¿KkF" u9[iR5N0L8lk=Yũzⵄ ;meE]+<|l;NI}`fplk2kYUd0b#6R 0 9TfǑ@﷋5 endstream endobj 2823 0 obj << /Length 1900 /Filter /FlateDecode >> stream xڍXo6~_a`[&]]:6`d#$^(Yv&"?(EEE{YY+|P'o_~NX|q};5u]-.boZQyljwM|RɶK?xx)_uwI9|]:4brp+j{$X v/c.SػܤJ궒ҽM.QUdk=O>8A>ݻ2=I^ϼ _Ꝗy6g< F,mq+iD9_[tmx4qNqHz]v=- QEC.<͛-1-0YִT,;3q%P<;{ȡ딑Jw׭$$/B? | 8pcgw䇦 ^摧jVaq ܙ, P %nb@˓3rgRQ!ay>ĴFг֌z˽^۾9r&QB[B ޭ3l^9>hhEsЃ'C-;X;̅bMsE_Gl|d@FPH=M IrFwr D0ٷt`Z):{lpL`Ӎm];9sl8MN YnrU-`[8ƽ2!D 1%@]Jy^lEʢ<} ?Q~ :TٿYd_6uPn١S[_iWwe*+,\P?wY >!84$$ Dn Χ2 ӁA~t?zIIKH/Wy?νtM Cq,9P$QES 70,IPxA$k)M ζU0M'(qiiOjƤN]tG-K` -X] rөa Rx~qbM jlWOчwWN: nwٵǎƟ9\JYAgaӌe9mXϬy9iB 'nB} qR= 3zEFr:o㙿{133q(m~jfRP}ZcOXgCp Oj@Lr֟&Ej XGSa ]ڲ:Sޅcn~O!|~KG !ϠkP3:3y-fq IaWB"|VC~WAlq6S>NP !׺MurB8qM\(# * pهBhz#{osd'y&~#}/=ݾKIœeEqZ҈;ɐYga /xBhgHK@OoHvwȸ(gl%}+ڥ,5eO7v)Pՙo!m 3XFXk[<1m/"|;6]Q, $SUכcpj!`':#`\H'9ƒdNpGCȢ۴+KU"Ƴ>킘}H OYo~K5c Z{%wp3 = Z5ݍ <6R:mAͯk?]=r̍d?Np+I endstream endobj 2829 0 obj << /Length 1089 /Filter /FlateDecode >> stream xWO6~XH7@JW=ݝTݨx=_߱Y6rBŽ=3y>~Hg\~[pr v &;??rFSRov]ͫ^yƉ2:x t-M4R,LC!۷aʔi/v9vH)l4@+ӵ4Ev}澯RW4_]O>.ͦM@Uԥ^CʄqI(8dC[oL׃8 rO} g-B:-ɝ^-'de9ɊbZ[zcHݛ`Y0)w1<^v~|~ 8kH4~9j_}I/ #BoQ*0t &2?ƚ  K/1Ͱ ࣤy| {x=>1꯰t[Tl)/$K>z(B$96} jZu{K~==ʺW8^ Yj7E6<ER'tX 5K$Ů \;uYCíAH|r osAs.x۽ VM5Khi9iӛmcpwڵ endstream endobj 2832 0 obj << /Length 1477 /Filter /FlateDecode >> stream xڕWn8+2$RN(D;á)ua>"ǜg(6 fy8[q'٬OB;k3|z{œg, 0gVwNDZI½WW4II#Bhx;< -.f,Bc, Y% gπq_jy5X8[eD4)Z5n\Gϼ͜yG 6VL`HL!/7!7-nCi]UE{pMwTMkmD Vu5 k!B/d'T t|kQ qmv4S]&; hх[\'a[YQKSS9 +vxD>|^eQR( Xp&y|A诶F5]|R#j!> stream xڥWYo8~ϯ0/PsERԑ>$-иh],>(2ECs~G+gYF F1Q2!hjyw~ 8ޑ'gi>,,DSNIחrߣ!lc|XUU[zLD<[W:譮N[f_PC N2ZH;'{fڊqIYiPwii Ѽ@㼀 Я@d4t&yiJ/Zs̨.LHeֈE;7TnnYtknazIW^khhT!kU|/z>bfG>́hѕ){f]E.K74^zak=4hMw`Ơ(9#jvB:dyܩ!Cž߬v,#u}ʺ 4 G'2S/;R[y oeޚ%Rfijs+\9XbgA箲⇵vRVdJrU'6?/`)y"H-~͝qmx_(]tofw NNs2-YSVz89h ;F=p5KٳlD&iۈq܋wiU' MDb~݉nݱN'Yq[W[QM4am J!'rKU5`D> stream xڭWm8I\*v ݇]Em+!eo#/%vXMK+Uxyf̄M($8H&>isr>#NjS!&l(&'le7 GS? w~}nd˩c&FDpFt Pg1d%!aA/ʻr˶1YL @ŪT+*SqT+:"ә]h$`NizmWgڡPqJle^Ju ;j N<|blp=e޽,5d,q]L,!lU鳔9|rU/dԫ}'k!!SyqNLc4KޔũPt htc kOtqo1dzpY[@?w[w2qI2oc100!Q@Q+㋝ڕGY$eHDf.3}Á!4"qhV)NfccdCOZeFn93+kǻGcG0KFDܑe?c&bFꝻ=A#Ga;b^20Z.וq܃FᎽL0k۴bXrX`!oS;i2FX:-{s~WNO+i'^S^vOϦL } endstream endobj 2843 0 obj << /Length 1135 /Filter /FlateDecode >> stream xڽWnF}W(+/)v SKE`$yXPk0E$ewvgI6cEP^4;3gVlFf%BL|}@ns5E HZ|ԌQь෕t #!D #)Up nKӘ*7ahۃ`SqsVw)1A(gc,%,N%aBzۀ} d@,!(XtSn%.ʵtn2UȂ%_U(W_xjk|,MHg`<#,K!*+1A^GN? >'BєT!BJB.nܠci`˻3b H-*S (͝ݚF J#dNM9)Ĩ T+uCKk:R/VE`%N?֍׶$_~q#llӔw͉njqqqջţ=!qIXm2CǦ͛bӐq=Ќ</MF~Lݖc_L:=[JAukM+LTPCΡl[7'̮'޿ 2e4rH0>#Ώwxm8zSy,1n6j;sLfi*G  >+uMw8>Oj?;ܑs@س}8g,(we7WT# endstream endobj 2846 0 obj << /Length 1260 /Filter /FlateDecode >> stream xWKo8W9Q@EQ 46E[ľdR n;á,ّ"3<8$F.(vG cWW@JJ@ԁ<"ى$0WhƐ%ł& [=\F->c YѤaLGngeӤnbEfM"R\ak}ׅUB 0h Y~i FL}6}}N<&+M3+{ 'c~Mզ,44W9!%?U͵>lO@}JyRC`6x\mv 5M`a g-{E1XcF2ihQ4n2@e=`Kr.UB6*6Ia&ɵm~D2ū]cS$P_Aa( a;(}-֖e >Ll6x7qln'46(;ׇ Ώ& aq%Q'uZa¹%D$!Ї×tW( m]ee.Mr23̣sWU؟O˲ZЙdz08RG*AtNs߼a~nٸ/-|nr^mGvݹSKI!R4$NP]\OWH—o,o<"۶Ǧ^gh}l̓S5@5_+:e}+TIHāCq endstream endobj 2850 0 obj << /Length 1428 /Filter /FlateDecode >> stream xڵWo6_a`/Pi$JT>MZtm"P mhɢ!IQLwtb~lR%2*zy8i? z(F;'|’J*6^6o\ ,2_ޓR]^u d< ~r>iLpyH',"Ya_=C8n8oʵYwC5e\S$4 B,9(M1h|罚YAFEzk:ْ0-nS22+Ɵ%tjEɹ)Y[9hӑp5#+pA:I%nm~ ӥ0%J! ,Èj Am޻ {&m=;5qVkr[{ \(YFx"h껺[A%|~CFQ)[ݐ|-^^B8F[-;L ;<rqd1`8m'rZJot ݸqjOiC\Rwdg G\\aVSVr"t9ҩ{1Tku Zy.1RA;6g ( @nљAai\-tM5R*_g<n`h^M0di5@y;M;iZ8+-ž~SC>8{̃h Gz樖rǫ_~Cj(HfUxC*=j d|(m->'=څF|O_%mk~K2k(c+ B "*l{(Z*7Ӫ >嘁_Cj̱.*`*iHiX݁#eL){ -5*P"eIIa6g" NN#6F<-ZZm<^_ԽօVAAV %v Wb(j[iR̷D#>((t^5vE+sUb _P.ֹ7_}k4@m'xYz9r>Z7ʃOꖼK=bʽU <疝U!޴}+3 oTax=JᷱDig//ttKZ3ziK:۩[8O꣹u viQ5[UDs 8[e, _jNͬ5m{c%9]W}~бݻ.Um>8/ endstream endobj 2853 0 obj << /Length 1325 /Filter /FlateDecode >> stream xڭn6=_adE}H]צA> mQ(m ECRڭ ~yxwl0q6('Al_bbrU 89`2f5y #)%·Q'OʨTHxHNޞld&Bb]&\Rvg4YLW<&, tW0gp֝ˢz\y{`dǺnWȘѨ{t\,)]7eY ,1GƒnB,[Hڔ؉R}R?(ex|wۮ\$彍UE R ̼+@&ݧ>WL4߄0hw(≣tk1/ NUBxWb٨n_7;u/ y?ŝUaNYN6iJ;78xx8"?=;(|t,dPjp\KJA 'So6H's;PW6 I{&MȣjUc}jX?Y[wrr +/p@Uo. vXЅYەŲTZ.P}(пMT| endstream endobj 2775 0 obj << /Type /ObjStm /N 100 /First 964 /Length 1775 /Filter /FlateDecode >> stream xYn7}WE.oKh(m Hw%;6jz33)JW"EB[&g! -l !/A!D#(qOT"4"oD`KY'9h/]< mtb *hY" / Ї)P BZ5U^Hy-IvbL[.3 2 JqZ09<%XVE̫^>e< n߆:DИWG w7L:jws&b^2a,St XJ"@ A0 )φɲD./ǏGūE%E5*e5_}:*N^5]GvLgq^H4@O^sNE+1_femOxX'D"'$ : GݔtY8)0wgR'xU}XO~AS8؇MMM'm0M҄`ދlZ6FųTz:C]V\fTlvgc:2yg-ڎeNdg.U|4ͧDgfa-R 2\!3t@$aiSn2v:춞k)NI=WU[vo\~XHfI`u:ɥVI$ %ɉpYVia%ԛbV!zbV7կ=\៲ ݸ'zRf-C_> Nz$]K١K@G] P {?8bz+ʼn^W@H4wDw`m(MQb?CSC*~\nW/ڭ0K>H6z+n)['G:hh}hT^\rӪx{!_?tGH ! cqx)IwĚ> t0*ru<)hvԏ&SM.NPxsq7HOUFnswVt"R.E[xR%*Ͳ,Mu[IY s!ձ>eyUonnU]]L-EՐGOk9u }$ :JR! MQ|/Y(2/-j4dݙXcLmN1'ԑ~h؇MKJ(T/|> do9f&{MM lP"]B:[(m^OXW40hp^ГQnf|9tx*ɪ\%ղ-~ow)'-BHo:7zEf~`je\y7o z$6qխ%chQ:=<]v D(vGN|'.I}dzj:2'@:'qSG}!_ endstream endobj 2857 0 obj << /Length 1490 /Filter /FlateDecode >> stream xXo6_al@!5+RDu؃~`AbhZL"Dϲh1ˤG6W3z8s=ˣgeQgˡe>_Mgpqs)Uxml\\EA'G{JG?Z \3=KdӉxJZ4Z(s#R®Xn\U7R<8Iy`9P58Fʉ(ozgRhM2I&>K 7 u.TW[ލt/ie1:vCe`+nMwMyxByyԄ07㺴yy@k1Ye@]+iW,7imJjJEqJ'^{NE`E:A^_ԄIyh1dW!usŦ3D}[@ {S?fva2MJE VT܃3ǝQȀ?5ƷQmspmwh$|towT?΁3C{Gt fadR?  ?pѯ:r_Cqe&4>-zO>R(~~$[pk4RA/?\4~ÅHdLPK+Z endstream endobj 2860 0 obj << /Length 1593 /Filter /FlateDecode >> stream xڍXmo6_at&+J^: Ŋ j-1Y(:M?;eˉ"{x2gE8I>+7g3Zu]ٳBxȊXԲ}X˭Q8~$›_IՕҪ-Dqً^CGь,:snW)\nC+NW ^kaZd!4(0ȵk)|s"j~`䡁Uq]g{ŏoa3nZ QTW Zvgbkw(mmUC%|C{pa²:4dI`llO) y~\<w~Ɋc06#rOJ$Am 'Jw')5^CÓ[ZԵ4n8,Iu;v̦46u 3mVAYgGvՍk0Pdn&8-kS eDlhms05DT&eUwёVZm  [:}܍yam*>1h? x(!AiOW2pW"g1tqҖ~Z55eüj0b!`-<\"ka[Ā u+nSvFtMR}hq]dL{4iV {DRx@p.w[KC[dnH5 6OCsIG1^Zkbjf>/G.< endstream endobj 2863 0 obj << /Length 1480 /Filter /FlateDecode >> stream xڥn6=_alHR>M/ Rh$z$ʑ3gvWs,xVEyUV,j5#Y@ &g^,*b9%hfk1\A^,6.+yG<,~;{̓D_ҕ,NseiFҕafy%~'Aī sÆ ;\)W;@(IÌI7ܬ~RzPhqXyDD`ba#;ɽn"WM(sG ȁ.F:-2W -jb9Kɚ >ƉHZ?$`svN[1\Ct'siZ[XmxC˥BgƋ$s# iY;ޣx!r$dl>Zk4&D2c`٨\D7G9a+XwK)ϣ(e{Oc11uĨ?G 0e]|8ݞcNs8!; eswXudz m;(uz'N&[*X0~$߱Ʈ(퐨>ѹЫ~DP9)9%1ڷzk\i۩Rr4=^Q]B咚4=bO#)v8X8/ƉtF~E?I% X{ 9+F#~5^j캖6Duq+70}mx]IԖ`Tw3M'#njTA# F:kq YRxck5GiaU6zNa!ZN> ߺ 89xnJ_\Fm.z\ռ(-K/ɢs:X3dy ;W'\ A:(]S^#LJaJ@ W"khfMiQZAS1'kW?0|h}iEӣ^4͠E=DK1^ 4 (R,*h!6[@Y#-2w#^^ݗbτQ>ܬwg|sjZ߲ {&}q˺Vؤ Uoٟexw125qJ z( tP1͑ʹ}@< }An2dNd_RL)rɟ~y,-vݍfHr~+l1 endstream endobj 2867 0 obj << /Length 1565 /Filter /FlateDecode >> stream xWmo8 _4$˶>u köGi%E8Pd)1'&1Db'iqj};G@p6<\DpXL櫡r;_'ә~9)x~fejSf:ӯG@gYDyhI"/L٦ͪ~zX$=_*$%&9[Sl:3unk'9饹ihr5վCkAȽ7}Ï_x{+X6?)(!o^%sVg ډ^;34ލhpDSps!z#Vaq<"zpHXƇ<rw3?^2-fJ[%4J"iRyZ&CBw E%ؘ)w>ey@OA/5 dF?U& [eӲra#ymmE[y{L -]Jqfmn;_~},L>JوSFxP3&.dNŒ7p{>+e4d,IDҏ"I<҅kph^(t-K)ޛv]٢JBL8S"Hw/&&x{B>JDԀ1S">tU^al:Ҩ?),¡0 )kMq}tCviC SRTBS2n #OH"Y|JBqIB Ѡv VS".[|r$"ќ66l cֆjCc4Y'[Ҿ7>6Y ^yP.Ӫ.l n B,5iKgNpg;9%yv70 Tν!]">s]o4m' #,3,Y[S[[>iKE&4M1-Uc >ڱlC6:E,*sUXuvgg\3 RE0 ) endstream endobj 2871 0 obj << /Length 1329 /Filter /FlateDecode >> stream xڽWKo8W؋ĊC^]i1Xt{`%FwCVIH3 gċl4 X %B e螺}rPtY0c ] sd!l80>ΝZ{O%{W{Ix=xScpŞ޻W(D|-Jt^ Q8ɅY#Ӣ,Ol!| R/ T`vur橯{ےĦ$&Fn΢$h֤ []$/P9 0 6O-ekl#K=Uou Ne`s4h}eBvW ucIeB29^)f5009_Qâ`\G {R1E_Z/a =@x D;FIw8418Q> stream xWKo6W,C(bEQ#E 8-$FjVBpf׻,=9yq,,ZI>+KM.^) A1|1?Ԙdj6=j^>]BȟaqW\+׻tAgD"3WMC'xS*,tB/u]U&SIf(s. I\k#}ڪkG"e)pw/J,%N(>N0'Rg)4| '_ µ Fwc&1HpQ>q$^K(FHMk<?> stream xڍko6{~ Č:Ct[ b-1PIH*/Q~$N0Ox~|R~> ~ü3,M/k:pUG5X4R7|zyBNӒ%q6„85G|ĔBll-Qhr0RbN[=u'PlbA'p·Mܗԙk(hL40ʭ<$`5v۲ؒrMEɢ$8]FzW4'CUGcIe ʼ J|w.Qf1)V]KVr(XK]5FRE ssbʢeCqku`"t켈[ag~_Qr,cf|4Ss/XVxfųG`:|vyO#O~ǧ|Z76[lݫ`9(( ~EUVJ-H.Q2^t`qqvK=J[ahp88C7N)Z,|,bIʒgQ(SXn;UXU?%)$}۾̭MEM+'߈CuFY< jlɢpS>"^%ۜge DkHYo߫k*Rl6`F%'Ù4n]ԕT{ly uChsu#Gz,v(+]!Z`w"@}y41h*B QÖ`O39yf$[M4j=Zm݅~Crkg@6r[~߁ inz>-P@cJ>2Zݭyv6Yw;Ҋ(c r!U}w~?a 6-qm;4ܡ.Dvbn endstream endobj 2881 0 obj << /Length 1391 /Filter /FlateDecode >> stream xWKo8W؋ YQ^-6Mh qQ,bȴ-,j)9 Rx=,|j4|/w]oj:m3!DΤKmu],Jyi:1xv>Č8X6I2ɸqsC!'|R]߷Ny&ۅn˕};@bUoVFhߵ4V42VKSU-oۗT=1i+myDrmGJ߸=%TFVSZzzwӃ[܏n3r -F#p 2"!PHM5:/T0s*t',"a jLޓ'ڐ*47x{AY4!vE,4 8RF@\=0^PI9}w=/V& 2 I~ˎ!wx18v[m; ea|.H&N  - endstream endobj 2884 0 obj << /Length 1025 /Filter /FlateDecode >> stream xVM6P%)Q)zInwEVB*n;áRtKOƣyog,<eKeQZGWq5isKD-LU\ 38d60,a q0?X2$ySUU9Ʉ9+,JO]5s;>2z)X*1ko_ E~t鷪G4-S#CBΩy)131ʔ%Y6gp#}fІ~XĐO{ s:^ Vɴ}e|I &LH1%8!H(|?p:Tnj!C"$꼠ֽr@W!˔1_ G7৛kQ"WP%$a> stream xVmF~EұvTpTJtrDUm0wv "+Ke}f晗y~K A(:ipz!(WW/%)MLVkﳿem !UFoߢ`7\!~_V^^mJ/tj>NMcQLdz*Ό6E-M%}f] $>W]N4oceڧoY/j3S_,γ`0`5ޛFv>. <x1"UN"Ird,@0_ iCjĞ\v$#/ aL 1:ODP#y7@P<\LoHMո$A7 {SDȒemgC""y4 ~kW?Xsq՛!6?'T:fY>7EZ7j1kۢqxODb&&j(nOH"}gVӸiu^Wti(ߠG_zjݡB]qM_HD&Hd2Iy⫑Vު(ˢ0SzmZJ6*4lRn3&9'IWa9Pj$]2 ?PXρ>t}1qzG\SY;:jU~}ބŜuNz/ , `ASai,aYm'9Cy5ZcG¼8u,tUtƖ}tg7;[̧ȻgqB8yz>(.-ŠVp Ɖf wl_Rwkw{]ט[[1b<&gm< $ 97f3&7;$'+z̸DP1CV5噘Y#^l);o2:>~ W`)}8w6EkȤQ>B_L5}X1 m%F@K+~;vnt0_}3KA?iB endstream endobj 2892 0 obj << /Length 1731 /Filter /FlateDecode >> stream xڽWYoF~Pr-`׎ [mP$}ņ#ޙYT})a|s\8YD'?^d呣wM/$@h(OWG/`!8\W֋/t۩fi{g/ɻWqTL-m7c՞gB 10|B WU*ʺt '-%i.qk< "_خ+" >tig$6tCHlsCcF tBC@wKZ ? ̉N_ aGP&(M\4")~[ƞ $˻% ;T[)W_v xjp,VFog͚|;POaDh8`8@4>Ejھu߶]vY X!=n/yLyT#`-._JDxPs^ݣ7*`J5#AZ\T˺1_ 59wJ~L~ep]GȈ4c ٽ3߀hE S1s[jKPϥ83'О#`-1˽y*PK+Uk'#Bj+M-ȴ=*]k|;L !אԋfQ{h';8IgteQǬ[[-~|iCD>Æh6jIzZnk1o'T%kO)ou^(>pﳎv0AR(4+Y*m0#I Fp2FsY+(kmhak$4|(SBTk@ת<6m`ӂ fK5猬/t1 'cõc,-ȬAlXioGdMӇ;KhְuY(EG`h_27=؋}mm ֞Q ݧǂM7zF!št{95bz4V'm)n\r.׺2 `?Ygg7`:ra Mp)CoB ۾^b{by\QlnBRWi!nVe(anZ"uVǫ7dzEDyPmM+}]g=_3(ĥ#LӮH.Lw8'D < ~oTrX'9 DvK |}mEnk d\*i^ nƷުߗ1Syj[-gjyHQv["LLD p9qHi~R?BL5?0Nr "- j5#O.s^R 3!Ϊyr/Mڋ >ӖcE)OcZn=Ild:굸媡Q| ~4 љ S]M㕾0@h^(dxzOt'~ 6\6B$AKۡ 0m*THNwa3^ֳg҇|HϤ&:C9?(8Jqh֪-dx2k_ G ι']9p7/8vy1"[Nq0y 2Y4͹QJoO`,gmo$yz endstream endobj 2895 0 obj << /Length 1396 /Filter /FlateDecode >> stream xڭWYo8~ϯ0/抺,uiӤ pnFbl5hPR;V]`a998~rI"bzr o 糃?d$ͮ6EB:mqE^q{MS}n ÉL/ك$ 49X#CD6JX(&<]5;;o(E7d"R`u,oTWu}As7~yNl4vBP[ºL3ߩ xhZ.ᙤw ߗؤ}S 2]r>DB&|0 $ D +ǚG6_VY+p4CZLjMXT1‚UUYl&EVv5nXO%?1&A0eQlM`+3a@V!h ^)$,*i+k(̺hq |n8@I|հ2e.+^N#DީY4.0}'(+BlT 4I}& v.YY J/8A)s8Oj +SoDA1ˉd{֠Fq9. u]ә)3 n3ڹ)2OEgCMX?R}r=S~8 F}pO_5w f7ܢf]>Lч 9ߥ]:?N= endstream endobj 2898 0 obj << /Length 1356 /Filter /FlateDecode >> stream xWmo6 _q',ˊ~HȰEr]1ۺʺ4L^2_}4ES#OB)K@VkUۮ2E4ʂ5'j[owj#[gU;UsCp}q11V !ςyه$yP[8,ҕG_<(W[%l'&wƢM/[Ӑ/N.O?ԭ6 KeRwރ=F*ֵ[a!.l΁jZ$Ƣ1!~/O2ȊJ.-9I q,%Kt7=3sdrC%y]cl؃q,CPzq;c$;v]5vu ]TMߡmRfy_<( %}_"vc u/Mw-} y !ܧ/((fڬ- 5P\OH;éi z?2$tdpArӎYjflיLd2E,L,УPi_ @@$@|9nlY7X0"1mjD3k!> stream xڭWo6~_a2~Y갇vNt($SFmtM<`QOg>Oh2KVŤj."7~]śY6+OcWsFtVi$IPiniVJNxƳ((Nj,?+ OX+&y2p.MUgUţ˓?IavZ6r; # ` '-[*F&F4]- tHj궖4R?ViF8e8Fh% э>Iqf<&c8ny6e:j6%(Neeg$Arq=&)ȡ%gS'z FzޥO{t_,“xWsIV!Fյ BWJGf.Pp_PP;Jb‰pGo\! 9G 64OwMRtkLh$z!0Qp%fCr1$gMf{;Wzij5 |}g 6+q8plgh++$[BFZ/9ٕZNPTºBo(_҄e ŽH=;i:{}v;;R_㓼ȓzދD%1+E+b@忩֎K=<:m endstream endobj 2904 0 obj << /Length 1801 /Filter /FlateDecode >> stream xڍXn8}W+Q޶I[>02 %!(I pP| 6ˤ$g˙|'./OVgq >;:]ξGVz;_H)|$*:O|1ƚ4ȸbQ;nO%/Ō˘yhynS<ݬKVxr.8$,"y 9( AKɌτfzLDޮimv ږ/&NR)ܝ>}tCgf/U Ҫě^i[VpG}`fǿ>#߉ &E"M *f^ /x2\ :$mBW: U4?> :4Иi7FřB(/Ylh'q?V*ߪ endstream endobj 2907 0 obj << /Length 1443 /Filter /FlateDecode >> stream xڝW[O8~WnF"{(ݪ$&cI_>NfM;̊1~;Qcb'i̲ꀚ]UpqY9 㛃a8c4eMS7jPs}'y9w t.pJ %L]/f!upgy NK]͘O(c,!,JChӁ|YL"GcͽĹ{#!d3| ȹbUrg*:ǍO`R& 2bCL7CҀx)Dj"Y/5煘ʒѐ$`xŐOX袩ubPP4O>hTЕ ߱Ǫ1 4WM)жF5heBǜϐR{ab~>K(.;35n1dOIFcVmd]=O|H=1>kf6v$pYB$P9NO Dߥvx/B/tŸ& 9i;ݗM "SUC'^.5&%. Bgo}UqL2IccBCm Hz9fa3g+nr``8^D/Va/WAhaM߭A_y!a4,aEt)sГc*W#یx@u-r* u;:ݦԉh3%_]0PfJE~7m⁁=3BւiK0p*d38*M$,TP#ľVA QtYJz+ -tl.eH [%ͱY;zW ,p}B =jE3\(\4' M]7:kv 8_Jx>0җ0,a)v 8;~8=]oL #et6s \މO]؝Ypē.z: W&QlUe+>(vvkQےblh1(=nitر̭AxKh4^Q<&iKm͗}4%B^~}ڸ>q9/5͐/A<0~BJh9D5ԂG5ݚQ6#J)!2J< K}NX/-q\c|U1~I3 FP endstream endobj 2912 0 obj << /Length 1442 /Filter /FlateDecode >> stream xWmo6_! CJ^:CC-vQ m1( LGٖ&:ǻ; G8 w `:F:DX=R,p7K;[:o&^nrIܳ$o&_g#˓Wݙj~];"`CY성d"8N= UD, R V{ߧď]M~guU`<ʝvMvCʭnn_""֙?Bp֩.Z]diI]I7`䜉fv֔IǧI \ܨ" L6}Y]iÄ;]:]c%0'j+W3>l HjsZ,_F`1v,Xe.X0nޛZD׎W#X_K3ljH&ƾt'1eQ<4 2GC)!^{0}6K ۽>5<1fU)2MdÛH("J״·RO@yfMq ix,ae E -h JiK{t%6"A*^\Q",DnJz#Ū^5O L F`zE҈KpĜzjگҞA\e,E[ii z6&QjLwfۃph,;L;U>aez]x9$@*cʂ-UNM@n2ۼy09Cs=cX 8tbC= !zz|/c&ƺLс$r/_PeI`e-iMH(j$k&@ u%Ԏ2ۢЖܳ, ɺ2-wdq 8zc2ͺTcTxada$FVZ߿<=l6-OLp@[m} ();~| :a?@7T!`MU! HG[oX,峺 cB0?сg~{89~xC.~;p>MFj-^^,n s@*z endstream endobj 2916 0 obj << /Length 1089 /Filter /FlateDecode >> stream xڵV[o6~ϯDGJm^W,mPdȢAI_Ë)QIw΍#P/'^E8g^*מur_?Lأ$|5gt)vK?e?c1f>Yr?S7^gg%_Y0uf8a1kr[(I! hNlud'?3} jr *T%|Lk`fG7Nk~!>2YM5$yLP9y| P|&@4k7 ԁC4Q&jz6Gݧ`Dzs뺀*EcI޶WJI,I7OvWf817ʇ%x,Tr]lF4iО^UGZ8dM.m|OuOp_>Gu.Ś!q1q) G):(`13 4 >0P~ Hqǡ1p#.,%8Ȅ -KMu4]$ !s} Y 6M}~\fH[:OMP6)gѱq(nxNw3{dS_@v٫WqojJ/% xRt-//NpgU뀦\0hBk%$ ش$Umi~MzAAIhĶZd2T27hkSx}Pbq(9z;cjҔ?aZn\zMݻhJ;Nxnζ,>5}܀BdԺ?4;)5߶Tw׵i벵˜>}m.X㯽eIqyꚢW}- ݻl'fe.c!]zrcSx >æ&uR=5L|}z=Om+~ܾ&>bX@[> *UR_fI7>) endstream endobj 2920 0 obj << /Length 1654 /Filter /FlateDecode >> stream xڕXn8}W F֌؇޲)&@e$&"KE'M~g8*;nEњ"G33g.,p1+bVmvWf3 Hzvz32,j9UuU>֢7Rq"IŇs(R˶E4 b~}ٛi %+YHBW%)"͢TQP1yja 0 }4l%3R*B5& L5,^}(E) 4)dqQz/a_~ȀzLg pO9piZg"6QfF<жhk\$%ږ"eյ݆lOV0v/‚;k7V@5gZVQ]{9|`m-tKDYr Fa%>dX djj .;M )*˚%'9=[!ɭ[g=yNܪvE^uw c WZp1ߥn\ X5H~fO6ϟKЮ7bBFEzp( l״՟km6;kʰ8^>& ;jABG1}Jj Q~_`#XZ|k2j' %bOra|Պ{~{H-+Fj-Gз7Ao&3xm eA|9eR"ww8#rs8T?J@in 9A˟簚 Ǚ,ӹ>HdnKՇ\y^Gq:ve|F _ǂc~t L;]iN{{'?>adƦg+,> stream xڝXo߿@ QJчd!k{-:fcI%Iw3%GE EN<̛$A 0 m Fyp%&b(&96UfAगS7 #Dʨjsl;#'8|.'2CtR"i(dy۪e2~*,2q;"oԫ6RۼQhi"|:_.i{_Օ ˺P[ڶ5w7TǍ! QO/H1}"^1Ub+BŢw/WiFpIaorS 4I5n^1{"϶feu5PBSF [BP3CQٍe8! _X#'v_K1G}[P!r8stj%NSzC_bt:VXa=l^6@oB9F aۼ(uhF| r,fˇw[*XT愀 "7]<Qչmcpr|8 Za||$1zˏ'526_n5+蒑a2>j^jAD>O*ݔs=a'1MwK(zpRpI> stream xڍXoo6Oq> v-;;Ma=0lغP}tI3Ï\"LIIԏE bѤU'MQ/ݫϚ~|%/xn\4iF,֛u=ʽSfy˸(?'QF ZJiԤ?^]:,NuuyyhuR/HD^Wn+z00YfUR9%(*glUI'%PgUmXxNŸGxJQ>br݉^J2;FG3tҹcrxԼLj,)ʤZ*@HE b e.nىAtQ,+g',Y-$T`H̼qADJǃ{[V&"hfXN `k?2qq `n"9hyZ5(ci<Q@OUYslkiq°sjPYTH QS[)ff4;"S?29s[H$f ξEK9ltɃ%O"hhS pn'Ku.v4nHV8;z0k! V0·ipvlQb:tH-#  y9 >1}WM$SĝީBl}8pI.Cw?8ܘqGTkFkc' ue*'4a>Pw\=:zhy xP)X;q47\ͣK31!p=1HM}Q"̊_lĩ*FXǩ iM.JN)K~b}5d&^O{ި_lu߱wo\2߼6y(U[sԽ.,H+?-)`҅U"%0k_I ,xY 0 [F=;E5~*M`\EvK{ >RJ \µ;oa_J|No }nToFO&\lX0"yôWruUE_i#\sq괌۟wQ%0z~rՎbѧ_ i}H1)th */э_`^[k$ԭlïjWlb,3mkC+kn*I1(` oh.GM/Jpm Q # }CPImmJŵ,q})(|07 rg)2U\$ C^+1NM*1J> stream xZKo7W1A))6A7G$Nzo7DZaWgH g<8Jp_H/bgRS1TB4^LM*`,ŰADdRȔ*%zS  LFrP)DX 'H:s)eؚTjJ rrTjH0rE#Wˠ; sDN5@uۂ.H@OIX TY/YAA\p Pra\* U.rAĨr+.M^qǖ:'&$#.H5QD kj+6gF (FCPս2%8 43qΰ-u*%@H% v7Е /E.VLJJW^4vh Uc\  Yݫq5EJͪ+(uQ.1TU%Gv!)#-8XCV UD99F9SQ¼Ey$kǟF}\_={V泵y4gP_6g$ߑ@Ki$$10d7y6oMři޴7_-~hGO0WUӨyݮ7IT:k{9?6o>1Fhj0; x 'n)h@QڂF+UcׁXbmTEe(}PľJCȋtdn÷`ّ7G.4vsƫ=;j+èy>_^ˍ8NN :pdu ur:is͟Ms{{kW䣝?5/~?ګ-_&;L'\t3u8Tsd$Ζppqg6SF4},VqxndOtY:' dmX u|dyhl|m/nVdn?a4\}]~Ϛ7/^6{U(>لFȦ1Q=PSvb6|GЫpҔ"TQJ".)})}SaXG}ӷ% w%8p?j !LT-v7K0>QX5Y?Q7o^'0ԝ@@U?_=>롧:~~=&}HN|/] *q8]$[Jb=z > stream xڭW[o6~ϯ0@̊K=4NZ%HC[`ZedeP< C\>((I>*WG?#".7kF"ETf_l>¦KvO,1$b.ܘ4OLbmlTqDy>J ']*Ä`'HƬ8sCۯDQD @Jy&20ɋ4k-gmH@ꖆk n$<YtS?t_+Hr˭j>Y;/&28@%$*O.m~)t9 . צiO.e]YwU3OA7u)8&~}A^յn8bs]UE/Nydz ``<+ p5㩔ߖN>N[x@D(&֟O>~|AUkuUpZZ?z%2C2KS~'XV tխiizk9dt3JB8QW,x sD4S}cXnR=EZ|ӵsC)AW@A"Hח+‡޸ed$`Rv+"tqޱ|[_-F>O1ʫIyA̖<8 iʐ B}ZU!YR i ^o6Uc4\T 85쪵@߀3QHdؐ֍ G`iBEu !k{!G C* g׷=8ȶԧ6.gEMel A5R"ggMcg+L.r4-1s:iCl*xL8RKe3vGN Z&LU!Tlx>ר>8g=d%7:af:8օwVhDI7 MUnvj[ݵZܕ՜(H>Vc\ _p_L.|i:Pj^MH;}}V \<ݬC@Mڬ %R>hEceo&NF%!S3T¨8zNzUJ59'5'0؝PX^pHm BEjlaKhjoU ҊirvX ime<`|0w$w!{?W#Nsh,#\mi81#}F`J>&IetlBq8 t<ܩ`Xp6C .Y?H(}md0a 6JMϠ ^mHe ґ-dYn@`xB0O"fR" ?~KΛ% Ap(^ށlw;厉~Ev%?C_>m}.k s]y7~ .> endstream endobj 2940 0 obj << /Length 1386 /Filter /FlateDecode >> stream xVݏ6 "osZd˱;>kv(zA+0%QF;]|!M?G#bT4IX{z1(WkFb4[-GRo8I(9TEޒYkr* 92lSIy&8].G"atY2.ge8VZ@%cy'"2lcc^:QS0bX۟vՂ.޸P˜!b!r)NNTшeۙZ~p2tڦڅ9'>8#DdaIĕUs7U"`2+yW{@^Qtnr2y||7vH)C-[æ+YnN< ]P获3s k=UR,Ip!*d>`#葉kM6T[C;I :G[7<ٴ(AQ AKrS~?gnhH @S5pK}SiHcC1ս/G{,iWZ #U=q} Opi=^|>Uwr$ji:6Z㈟j_w2XVR,g <#C} fJE2u{qj.'4(m9E[+Cvk3·dXWM0!YGtv_E<;n+OQ} 4޺ơcB+d^?ɀ3͉{n# 3;7)] zW}= C6ϥ1Gӡm~"vg=slnq%!|%09pܹ>Q-< #:H4gb;_ו1?&> endstream endobj 2946 0 obj << /Length 1426 /Filter /FlateDecode >> stream xڕko6{~a DGӭh"q-ڢmTNv9kx%9Oh4IQh><,Gܾ>LarzMd$ʨ1i5\i3$ 0M mt;0, det'3g*ҮG2IYbIJ u UND$Dx0@:S$xX` dB ?7:e,'9Rzc4i{+M y5jfs}[0C/)e,^QFpL"$Gv֛zF[˜o._v说fyp+Ȟ3Lvt2HZZk-2豐^aprWE!=kШ2xv|^!'&2Qzc[ߣ!>átV7ΛAbR.`,nԽrj'E)H-eop Y Q$?M#um0N5Z#߃mf~/xᘜ{"~!X֝ v!TLb̼C=OۺՊ >!a6>|R C݀܆y5 x1,*. >^]^T4M@@>Ӝ|sCs[Q RY{;]'ܕQ>qОP/Q)vw=w<6#,3`8`#Y>3?^z1TUgkm޸'jq\BZ*EA%6(PMSUJ8K8@YUss4ߦkM[dJAj`Po (ֱb:<eܚi[uK^f(pH" -ƢַQo9f\j7aAV5hBUC(e[}vIۅMgm=o<✠nfc b[L O*5*Tʽ?Gyk4fd/-N3婦3x%'r:ƿ_$ 8(Ih_Ze;‘eS,ga 悋k\B9Ht˘bnjQ/ u [fbXx㣂QsZf )F!wq^J0ڗavsW__Eip4ُ?iFWv+IFBr*G8,XI7lBD"e> stream xXo6_a`&-찇&iRh[> JNZ ߾;e[ yu<~w9|$A2ɪ3HzBg깠i/fp=z),VG-Gb#SW$ϧn΋oHpVJ:SS׏y9i0:{ }Pt',DI`'[@]вY;%.c"zM*FvdS8ܢ7YVMk:ܹ/~~PS?vTͪYK+Uu*g p|xSC\}d=GZSnc=mI =iׅ>w WYmK4ߩ1;NFWevˢVR[[֐*K(zz bE־:r nɶc3TFQؕpUjZZtSZ^| JM(fLKU6f. 2 Kc+u$5)N&{Qt8vW)w0(ĥldYrcת.1 M24=Eh _@6 (3H٫ğ(."C )a7; (/,>6줍uqgPѣyJ/JշDqDxe'} CY]͕.^"+ZjuI1g&a3/z:hPN5@6]}>߻[ۦ%[GUnwLfly%b~n61`2'&O /r~^d[[8n bYϲ/~JHhݸ2²!lMeaj&Lm(>r50uV@>:rN}#(* QR{m%`a#tf%&` BCO(Ⱦ]Y׆`@g){|wN.K5HÄx'CR%5~4:yVu׋اߏ,Y\_^?Fw@z[6VUԨ#aBD&"KN|h8q'Lq7P^dRn3zaԁ.a y7 0N|"@Y>]{{IQ>!ޞ?q/W Y W3xrχċimɲ MVf.>OM'Kfؚ8¯7 xPH"\"whC%3\O|Si:Yqgf9XUm56FZp[{ۢ,M/QP]kF&(ɲ&)Df@ɥ-0KmL]9۹i>isy L[~I P#!Kcu$!\gxjCXFW0vOS`+ jDZccL;,,?1etĴΪ)/*MC Z@tw*,N6c{_וǵY F4Ӯ9p`;04Uh2R!O5%-0 i1jܓ@{rtN 'a}r 烌>?YvC/wQ=+iM;~ӫz}@O&Ae;O<5-9UM< tp\ endstream endobj 2957 0 obj << /Length 1388 /Filter /FlateDecode >> stream xVYo6~ϯ0u(lGɮ}Zfl!: N6?!rdW9Pc 986F%aH(uz9ͧM@pғ|3;8z'ĈQьf7}SKpkxa'Q$?QZչOx 216;?x;28+~t$iDXaUk]!Y'rVF m ]܍yOci L8' 4snk]5H>KqF ^"ݜb(y<{QuqtXC8,20oh`oj]nlXyB!/T Hj*)Sps >}R}H9Bc^7n*[G~YLSX "L.%D$!h!qȂ>HK9xC0Ce/$9ֳBBc$:4ͤG?w8J`kgGgF#/h 0x ?X endstream endobj 2960 0 obj << /Length 939 /Filter /FlateDecode >> stream xڵVKHϯ@>5R襛ѻC^am!9`6(`,hfj{^J"K(]U;qP)'^nb;BJ~CT9Tvn"kպ^$QEmTvr='2rWog Yt wX@}DXB'Je>dR /Kx,Q ^($uv:Y4quS#ƞ}ݡژP ,\h`u/|e~fǧwYoy^nyGO˜@0PNEHcf"N NTn1bI`_qkFg@R7< $aSϞc*n,1LƬ5+ #snޠq ;.Ş9 YΪ\oy>=1W͠z"[v46Wvk|6R-V<`R3a<0 f 6UԽ*LfSXYKRcs g䯇MӮ)z٪Y rBm+fmi.]sr{hչ ױmK+Y2n 7>!}aVӡ-K tWG:uMʌu?96Ҽds g endstream endobj 2964 0 obj << /Length 1440 /Filter /FlateDecode >> stream xڽXmo6_aK) HI7iH΀-0FfbdPȣd9c( 1y:=w0ᓌM0YNT8g8~(Ą3OCQ3XuaHҟ'5ިI9$ !O-眹,"^Ar| M ;:w !"[OĐ*)[ *.PXi,^'qZ hp<5RnT{2UYY@n4~2}jKiEo}YMtʆ,iolƉ0%   -c'=E"Z=f@$i/lYll䕦'tڇj]f$&YƁN @ȟe[|w-j7wh>&2q&Ez,5:r{mt!1ddL 0ERHcjLH7 rBS,F8c1W1 {l)['y偌^(}nGvaD˵-e )*<*id7B9Lf`TH36!͆Sd9$Z?,yR<1p(Vk== $oKc=7/}@߽11e18~;*wCL܁;? G* endstream endobj 2968 0 obj << /Length 1278 /Filter /FlateDecode >> stream xڥWO6Ҥ-ш|ecS_ o ZP)BOoOۚ#MԢ?vwig8Ei'NCIh)WUmB8A1!FMS|f\KZЩ®~*Ij:Y>sQؑYYY[ę-"ӏKft *Y k97%|Js-NwRKA5U>3 lfj3y@PX^\FN_c VL\ q2DNY|?B(r($)x1#lL5k0 H'& xsioCp;J+Bʪ>>:Ce9.w>;7Ͼw7v/~'o # B|-_@f3CJ Zt]EuކƖА FU ɻ~4l Y1SU3_a۪߯O|b053՝K x2-=,Pg>@̔:ۋs^ff5*tޤUE*_Jb^% hxt v6wa1oe#ajiɅoFA bEQ`j|.Ww/bA7B'MZ޺ۥ4I}mH> stream xWo6~_at/s(G=I6@ qQ ]10mECwǣd;uc{DD~O""dB"'$rv1'Mqjv)'t78gYQh|}|7zزWUW٧۫M77͢{kR&"NbapqgZbi; i| #ߗM_w/~+i*3&1]rD,8@y.vQ5kSlvLXe _žPWZ!̜RD۴n|DgnL]<)X9p?)ORySC\(,G;~Wg"KݕY6ϝE_e$.4lѠM;9=?51{C hOHih|g>٣u 9XK&`,lktQf" |qjp w,-v$-6i\{;DL̓LR_z}"vaRw0>2PhRWmM.sҘGW< [E1PFCCg&, AJG9Y0#a T("E[pr$á+Gn%-zAEHPTmMT*64?Ny.:14K2>ʽxx<FL}jTI93~WѢWe*#ҥnC$Q}Bډ&ݚn +J)&Ǎ endstream endobj 2974 0 obj << /Length 1325 /Filter /FlateDecode >> stream xWo6~_abIذinK$i+302$9~w<ʖNǻg9\RxY:^,g$\;nGόIsb5\)Ų_ֆ\'ťq[.IbBD߮8z{j ,ICxRf<%RiBxv %OӜw6lml(S zv n- 6n0֒mͶ]Y ;I/8c5\SUYUI6K01$< h">#*=Wa}>t&Eufz߯q+P;;dm][S$ɬƱ4 $ OȿP5IWBiy`WʵS3. 57zEg_fZm ]K \Lnqk:gܑ?XǤvP-Waw?ZW^/eEw{Sf)s2smx&YGR&E xIwrlw;Y hS8r؂u l<$QܘC]RNq0R@D %C"c{'>ʆwڨ }]QWS,uigO ƕ}ڢ)7uNHsFSF_c_^4x >״|ǚE `}S>L`)zJ/N}vHX6va=xIo{Pd'ú[nn\LΥP Nġc8~ eվk5(&}QkG-7aU7~D` PESlۖ_inpe*(9(Qģht;Wt_y(jևx!דmP2^H2fF<}3qmKc,Yb<ȩxL5$9!tTTOZ/s[r3?鬼z]U6=a5߯ }-o(wo.vnnr]a>P{4![";-A.B[=v 8 ;,* Qn,2OS*[>shnwZ4迠C<þK'' ]㠡dsC{㕆5xnh ƵW798d嚲^ѭ]f ԗ1oj&0WЬ}CBp-0%h/5fѨ endstream endobj 2977 0 obj << /Length 1494 /Filter /FlateDecode >> stream xڽWmo6_a`F3']m0H%DVoϗQ4ϼLLwCSb*Wz: /0ZVwJ&WәǑDŽ'_WgC#?;ʽԟ{'DI\!yx WZux.DSdd&y/}O?L-ޟAV$-=:},JxO"A&S0⩀ݱH301a; ۻfm˦R0 ^UNySV|! 18(xEqЙ,4~^͏b+:{CbNy/0H P4 X.\O4w^A|mCqɧ}-ǎTf)iG sx?@L.ڜxϖ-E82wzQƀafUGc(+(o)y4n1JrnҚBq+=G蕟eH# SV7YJYj%?Le%R~ފ[<`q+if!3N945?cc]$xr~B!OU}IӄFbDf&?(ĂƼ7 fQ`'Zu꺨%}> ˕YW uD+S5i]OZ«U#X uLGő@-Enڍ 9> stream xڕWo8 _ܽ@,p]7[(\GM:v +͊NkG,12J=#Ia Q+BXx5=bazό{vU@dI:NEѹi3 8MNIWmy e<} Vڝ`>F ($H7[2 עYPo 1'XE52Y:-2ά AYq.8hBEBŮaI- Nî_ X* ULzvB+_%7;my:ꖰɑJc/e=nJ?%Oa㵞rB$Wf_歉fj=hvZ5Lngw[p n&ҋ@.k:l4M g%Mж(t~Mi~7{+{wRwesq_#ޅa15aYgw"Д endstream endobj 2983 0 obj << /Length 1097 /Filter /FlateDecode >> stream xWo6_!tF1GDu؃פ[4 RAi[,':ZNdC ?tw43/R{uz!qwr3$K~~Y̽d56,&ݵgB3)|@ƭYڔgA*F8ϳˤwY'2φǹ \HOyDC!PcvevL1G:cgJ-hgC:i6h"mS49/ɟ jQ$WF$U|Ѳ\dS\f`T0DHyˇt+z`±@(:և3PW\M ]B2iښkʂ n Pm9@T\FmW<֜E79his(;S oF^Z7_<_wOuy[f=~[@"9ߚ:R1If`3^ bDiP`! H8 {_p2m˛MU>J‘M<"h 8]~A !iTy4*ڷCE b`(hq\2u,R4fZP􀓍?5H,f7r=Mʅi:ߵyUG~;0"+PV(Aty IZmf `ZZ2`#-ͨo{,mھ"ӹ>M@,CnRW6C_ ųo˦oCn`h/0[R_hK{UU?s]+LpR!w0]Z)~c \-&iڍF##=b=%cWUm k1crI.u뮪qy"b"יI^ls>w[nզ'☿CsÍNJ#f@y ԃ@sC6q̫Ec2~|ԅ&/0bL@M+;Iu;>vw9yތF8ϒk7o"jWTm?qSz_/Ͽ60rmX@pȦ?Dzxq򇒪@N']wy_a;V endstream endobj 2988 0 obj << /Length 1651 /Filter /FlateDecode >> stream xڭWo6@ňz>IȚ%]CLۂeI8N~iad  _x4D2 (HOd^&鮨d9 I_0wDUǑH/~_\7FL;R ~Hq 6y[4]QWxA`LD}&KM#3tBS3C5g5wHt4njf7M+[UNOľt,sXfs+VPȊA=)h512dⲰW} ?bfTݏna'AY!RWnNĨ^+pjz"qU:uTē:#AK=/|ϓY(H b8&QvVVݏթNӨQ9ݜtcV2aZnΓ Vnu;i*c}~jcaN/4D'B?I^;]Bk^ka<y<,zqz q4(VEa(4׺\ffsP0xXMK/_$,}K0z}%ΕjQ -6e #z4e+"a% ?/._柊R?"h,n/jٔP@$x2=r77/ix^cZhw]#Mi!G5ea$ƾx~/&SFw̏ JElg"HdWfV^Ǣ^u[mHH/~#kZޮV!@B=3"wL(ۻ>U{GWdE&\5&C1|4Z `72 t[*]733w1B:9> stream xYo6_G8"%j-: 1lht,D IN~}Plg(V`(@ґxcNNtEn02瞃5((Av҇EHq3r R}| C8 }F$l>08gz?+&ҳUg~O݆(6U)58.>Uves(Heaμ }}a6vT5.Tr?DDx( ښ9hPA8)^۾اyMc21?ݯ DS,w"QySTJ|1 Ѻm&7^E7q\ܐ]Vt^YUO2Q< *o@H_(! =|)"Kp9^fc҈8Aޗ?@ŇSuRN_!d+9(|3s42f ФjImbJup,R8P&ҠFRG-Acq6uybU|8!MOˉ8mdr>gq1bYy:|~bi7y Dw>,AI8w:SbSZcUbNsuoLA-M-L[Cd"c=*3d3آCn:J4bJA%Aͽz7|vt-hP*èN>tO{,lMZQE+;aOw0kDZWm/ͪ^WE,,PUxXoo͸Ek2mR>+OYʖ-CYo<~r~,s̥ i,lP C J OfY6M°yc,~?+etPX.'y5>Y|O1Jf`E1hHtBg9W;daWte#B 2(XD5'bOQґVpz{UFO9˺ SV%{PE4iՓ%1$H:BXQ1Mg@- 4M3kpF[x'HCPe5NMAwCkޯ8Tt1N7Twgh _735#&0RrpZSrVle+׶ޞLi=eO;;ntg So1n;)^I~Q"'҃5awEދop8m8N7KQ!;> stream xYmܸ _1ȗ;:˲dݤ"P䶋\PxǞYM$Y WVH kOj1iK_my`헓 L`fjHl)`bh}b)9i @1=n]feeiq4dHKPl 5%x8Dl`04t5Ff$"sR#sz&:)^"%2i^4~2M]ټ(~U3qa5_Entƌi<6L &Ejq RuPq Z[ƟPęLP?Ƙ$&[EG.܅c`]PŸʜ"ct[Ci!Ģ%PeY ǰ8RVd!?'ob&$bMp &fp[/6HA`!~W7 "\@w)a*F\8ˤD Ӟ9<ͫ|.=̂*# ]Ґ% X>x<{H-?eSaD P1l WT"wNj䃛/\?S Z`f/ ^nl/SeMa:>\?޶_ZR3 0jW%>DZTOGn. K$Od<"#,H=j{1 Ml:4c,D,Z^u"ӧEo(ڏ|q)6~څOKqW0^f_Kn?Ws2J1ֹ:NT-tR DTRŹ;:2bϽʸ/8 ԧT.3qF)d)-ZK:+ K!\x*^ X HV.݃fAaKS=Еah9C exII+lgܙ^!2bRIc%ϗo\oo_)}=Z93,>qtls;i@-=TjJ BuvW >nGMY3s(cg.H݉3cRrݖBKS0}Alޙޙ t/ ȽsQ [ŀwؠɇZ2;o5(TEI+j/a! 0L^E'GGAzRxlqT)oI&R(%`Ijac9(3K,;.|xizc~ޮd|6NWYuۧ:{ o(49H礒`P##vy# aܢ2+MrW!T NekN#g?N=,8jWHA}^jOlyx~[2/~̾$;Ex\VT=f}_Mk/N'Vhu'Dt- 3zINWn;iE`J3n{2q-8fäe|6l*l8Kg2iEy(4_ž% endstream endobj 2997 0 obj << /Length 2017 /Filter /FlateDecode >> stream xYK6W(+V|R )R A]TKjK$'!2Ib͐KW {g+CBۺywܿ5'DX$)(%2&RڷkE [D?ݱ rSbX|,{є48I>,ʣe3NB*`]_4z3\&-"uZĂgf4S* -F;=צYM;޸ĪӞsb( ZYTs~0Hp*O=D]ejzLt3ߚ<%,vms RDM"n-M6U?լm(j)=1b3޺3afx'Ǧ(AOGN'||(1n0³\7c8h%b(oLo~zWi? ;6e])^,]?EHIJy\TnLcI)u8[Y')Zђ+ 1͛i3c:ؔ!exY/-)\`y0[țs@YYoNf\]A,1L9g)EE ͮ00b`QPs#& MүJHNt'{P s9cq?3KN$ɼ]>ރ>B'6_aӻ^|pbK2v3@- &n n0t_ڴM<1 -Q5ú@d-{rp1â=NgP<5)_f->;'pm"1҈ ?`h+K=khwmڮ]-C!a<7Be&~WLAQ$szAP_SEb/H,FB k-BK~?̃M^+wG4Ym!5)r:3·>'鬷%eRo,CLD}'tٗPuVlK#auWu.oͅM\  34bo,( ۶ap:^m|qBLUA^SnI̖HShJgi_[\ѨwG\B@q~A yYM^D>F.P뽽XUΞ/iT+ [$,fNשn8xo^{*oZEڤpyX 9y<1`9ɀgYC}%zѯWO0Is[RF Mw W8ܚܻ[ev6(2a܅DBd endstream endobj 3003 0 obj << /Length 2285 /Filter /FlateDecode >> stream xێ}ȓ"EQ}hd1A3vyز- IvRsuLۛ X(yW/",Zq2ëȬ6 ޽}6{|od#E_:y<5 %$ ]8C޵@Tݮy)tPT4͛& MiBF,o\:bsn!wMYmiWaSyo\qoF2L,r3xIY!Q' ,Ϙh!A7#'֚M!cl=|u7I&8~ .EՖuЦ86E ikZ$DƢ2Z[JKprŸ7tk݃+-yE"Z,z\.4֊FiFPݩfb0F)u",!prRst!q'O/##hSYZtZ3*%ˏOIM Dg cV_ɲA f:i[qHK{F鈥`\(nzɄSۺ4$kAQL[W$0Ž0#cepw1) PT!}xP|rY/`ș?t?Zx?~TZVNsre P$,DvK1Ǯ#6{]>$K jmtMej &^T,-zbW`o)Ҫaƭxiy%FBK/ 9 +e3?nIeae N1@\@>|+o@T+H?/M^brr8ْUI-i|Mk*$p;R~څHe<#ҽ4j]gLCq‘@űɯLMQj"QC a z5m !$mpmH}&~2v0[ 3ݰN=cg07Ko ]v{!.(dZ&Yy=4dĭMF,t<5~Ŕ]JR5j0sz/ێ0b[4-X=Qz[n^ݧ]i#wlß틃G H>/uT_w(Jδ0gKu+](P<v3Rr^o$ڇEb.6'LffSnqkJIy_]Q!pkE8$.ڔчId! yXlZ'f!&Ow'ۊG@Wx⴮C=-F')Td `R7a4o+ Bu']&@wmK*%,ZeZRoDо&)0 s.o :A_Xҧ4 y!Mő˝w`AymG_n.P6xcZ[Ƕe`*QLwVpIYľZ&^[zg? ߏҳv4hI2Qwϓp}P7fzܱɂ}L@G"AɗDOes*H3͚QəX92:֤\CɓɫӂF(,I_X#8uan;4,3KSfWkzyFX}tuf DU<Pw^Cme+@gѕ_{Kus8iyB:1#FPWP 2`A+`9~R@#aGXXZR ;6[ѧ8ZZۙq*Mi91y&~ seʉzCB)fCI1g>D$yZ{5U .8.6SXcd ~BBj~MQoKƺUC°nr4Y-#ֲ h~SVt0e(קץ^9\yM\ɛfe+û OMGu8 t HK_](,g7jmSn?ZO6Ҡ1۫@^m+ 5dAON.Mߟ-1JS( endstream endobj 2931 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1786 /Filter /FlateDecode >> stream xZKoG W̩Hə)N-R HRmlom7V&顿GVbrc@A8C#d/ML&L?Fc&9q$CbV $eu+Ay}Q!@L XJ J1e)8DЦ'R#lUS "Lr@Qۡp$W%9(%(Ƀ\UOH\lJpF*XU W5 U %GPI 'PcgROVJ&v66]=-"AlŰZ6J5` ;) +!0yo 2%zTpsX#!o#Ppόh \+RTG;d8(`h(E#!Ը5xԅAb)Pxkȩ((AY#xJ RIqQC& ϲɎ~=od\Çyi~7r|1,z'w.u g7ϧvn^yվb_}bxB;4-4/Yw1=jgDT wkH%+U'LkLLŖ>(]xvFv(5q^/Si$,kCnzN"U&.Vl3OJ἞l'Ux_?,>瓯ݻw_MGbu٩m/|8n^|R%mhSP}"&KXo=Λ㷇]v۰_*&K}r]~fu#}l)du_S=lh9^O^cb8ѣgQ6̈wF0Iq&Nsa7`)ay5߾%_Akdƺުt1']w2jb7ʟ_LNy~ܵ"W($C.mh~_R:p;[=?iCIw?OjYc"*-S2%L}x}qhi.oR}5(a9rS=at z-p; \=!vx^28ND˃5D;ן|]/ i8fF"[ }]U}3pʃ>՞L߼OjJMFgd2pͱA7םub̶ԗ ߁ endstream endobj 3008 0 obj << /Length 2551 /Filter /FlateDecode >> stream xYK6WtMHVx-o9l8[Z'~=r6ǭ>A@#[B]8ʤUg!QoL g?;eXR]8h?cO{Lxk`Qݿ|7-F9W.S]V$Ў.yQ`bauA{u+ϴ-J/Ja~cxmcG<2qE~<Խn:ƊiGw8 T9`K'E| 2D7Lb6QDSrG^.JF$PL-SO-;e}*US,Zӊy>fՋ{&wim`Vߙжa=NmcjZ+iƭ5`ᕦܤ۳ć8e˚L~e7A\:$=CIbxK-ݖxmo*gj= z[裏IgI湭tl i`k#gι*{vGn«!L ֲKVYŬ36H7>3<@2}P#+jm62$#OH n<6w8J|~jBfA6)R/=l~O%^ݟ7`t1YP%Vo@^1^$.#$eY$HR86($JXD|Ώ{? T,'R&4`Sqa>xQ)@W*5W\t#>)p全 S,AYkj[8àv f)8͵o:4G}{ =xKzzd"Wؤ:.Ko=fӄkf #c{oVa&M6Q9'Q9uPZ1:$b0:Ę`L\^Ȥk>9${hN%(ī?ޕjPPTl[~tw^mu6F* vόRLPv2 (ϔjKI6lzdeuB$\LzRi|m,wƻAwe]7o %]&sGk}AIx,H F)0$]󸋃(=mUA$*ǼƲS,!Rl#\JP\5oN2eb& .d~ wv-uψ&w|Gk T ޽_ā׸)l?kf'_W|_ g !)YpG,ym͢k&ϭG( T9 IWOY%M,KKG"`(vDI옚nKB}Cvz |1/b)<Ը endstream endobj 3012 0 obj << /Length 1576 /Filter /FlateDecode >> stream xXn6}W,$ûހ6MPAޥJ+ic_ߡR^icR993C?"2['tm88uܺ&ʟ'ϔZ0Jr\/F/6uo8BD7q"~875 Zш1_zr9)Ui]ye$[L&$Z܀vδMRWcE=NݪoV)zjsnUT[ʭk ǛM\1V**p$ k(FAC گȴV-YYr{i83bQ߂4<`ʴ"m:k{gIs9e};'ZQ{SXcQݼ*pfnnVcY̶?Ij іG4rݖX$5`/Y>_&h~~z [' ܡf'JsTRv9qD<h*Pצ4,ZM3+nͮw+¨}&qmԷE,7XC%RL/>$lsO d)Qsgc4KkqpX) ęTJ|_ldN删j@9%d̪bq&u K-斟~֣Q.oY檄G8 \8&' u]ܖ^w?Ք'l:^6i2cyE魘Oa$՞xJR[*Cq:hUεwӜ(>N,(DcM9hJWJS[,xJQ?G I0@>;1QP_Q' fzUAƅӹH%)y{J9  #Sd߀hŋ翝9ӭPx4us]Dlyj5 XS;CwЗv4XC'!ʬi 3]"1_;۠vϐ(~| !xZ>A=0+SSuDnu 50!l-g]],UDh1c]jϮ`&g9,a2a7So<*Vc"xP5S10gC~/n!w,0Be7 馒8/\,t7Ȭ1fU*&N!-1AuM|R+0QZÆeUYT8c33g<9Yɷ$yrꋖkXRݸ#{g璸ˆ .v&.?P*vm'#}FW@We&$㔰=! -Hu)뢮c0_֜`o [%RT֌>aMRW ^[ wN`[muj"M=w: @Yq`Y=.*ewvpoNg<čcLy:p_\S> stream xXYo6~G-"EHч9xPF]^VG\wCr1fF|?ȣE,b?j{g҅@([}JX|Zwvqdϗ*7V_V E(/V?\K)?/ %d<$^S)˖JDmU߰PӷYt w?~ۀYP^ѡn,WJОz:S x8o@I4CƌhbɄ9NQc}A fnˆdS1RQl,ZSZ<72@R.[@׌SH2EcH?Db^Lr= n I}ذ1JցD$NmaP4(;~RdS%[$'Hdi+ݜ!@ab<'|<,ѝHbHܸj~ DGnĴ DKE|꽖g}T¦%Rip=i@8 ރLiMk9@C[6Dl"3JMAc7 ;,I&dF%Xtȋ'AFDʳ>PYDUDR"jϣ*$R jN/96T<N g$KraCG0gFG)ظ=bMo*cQl|ˡ=74'7O{ڔ8(FWbaS0g -ɥΓ' =$K"l(xEƒ "!UITk-q:åRDŋD6^ Ĭ/5\jJS/ɫrƈأ_c٤AIuVkĹ &|>DcZoZ8`'ƿ.)vȗpj[[,Jʕmō}+!{g{ے{m˖ CB*Z ƀ~B,n GrTnqy\O.TxE6kjziY@ 4r5(Ia UyXY5.9SI]<ok"{440L`lSB 43ٻZnnEC,z-m6UDA9\ۍի08t+Tc*IfP.^S18?٪-Jktq4j5/v{;i'm՝mQu'E!ΎDsX? @x!EIik&ucVcbĉIfi! ngV z4yU`Wnr2bO^_] e3wK$s?KC 5}T ȱ28/έ8? z4j\|^b%>D)\}#y̲TLP1)Ǡ>r!tybu:}$Q' 1d㓙(fܭju2x pjd2z-qr7gZ%y-#`ZۏDa^GA2_ ,?F("ok endstream endobj 3022 0 obj << /Length 2025 /Filter /FlateDecode >> stream xXKo6WVX"E .ڢ#3 YrHpMv]>"yCU?UE"٪_n]w6@P~}yq\.o.w˝9]o( /૟ƶ.z$)o.Cc)R>!VI4IHۺ,$ n& 6]Y⫡˪oSϕ vDlZfCk;[a-ޗ^~ m2hnMoFFB$mf- :/FE3БW58)pNGp/r꘮q,첣ٽwl7gQM60, u٣Z:LzkGs{)}5%خF-þlM(%d4L_ki/!&za<#q0-D+[ߺoY&f C\ꁽKTh\xQ2Hd Q(@`'(HCB~ێw'q7RZKZ{mYm3\Wi[².-ڙNg"S/M%A2 3PTDh~1"!R ]pG]!%fVqV/#1]nPl0ڻu$(4zJKU"v1Bl\&x5b-aL[zZgU$XeRD}@o9ū(9^a0eMG¯1s}T$^5QDjr:jn{/SĵU3+WPW,+ H!<؎ KG!ܤ[k]gΫ:||Пt-tZ*].ӆO/SI"Iq J[U'R>=Wx"fA^[Ă;ˑwx-I"1wHq| jw݅jttSeN\6:Mz饣ߙDz=#-vƠ6zp ? 9ˢ)5θ{k]8N? wM9O3'iX[/ok8r0G.'S"X*LeLݍ49БFx$ZCR5^y\DYwLHr)<Ss2gf>+Ke?02FʥDa}¬\#M囊}FXdy*Rip7F*3}~vB%<7~$~ѹ endstream endobj 3025 0 obj << /Length 1562 /Filter /FlateDecode >> stream xYKo8W2sI{GEom*ː_C "-($5-($z^v. V@Q F-7cV].=4Z8Jk\7.W\)I#_/3s|bBA>/҂Xxp"’J*Mx8|<A$Dj7ٕ6p1RriwQ/gT\FUG et(:DkQΝ,?'G؜+I@q'޽~ :rl8)ѻ%3b`urMZY`ɓhVi!UZǿN-Yd9PVf.H>"ޔDUo˝@ cn/ݦ fMtG 俖n?H+ σroϚ܇BlJ޺ ACR#!2ҹHkΝ~S#q!of֗]qZ~ec/UUMK>{ֳD9QDw$'I# IW`BZ: QKXB\;YcHì.0In&͉3D?{٪ƅc |k_R`]7(j"<+jnci(E)fN1#(tX( K~4Ӵ*{xX0 $Ёef)38nE[otTPq*љ4D哐iBȬBS~b[m;hJ g4 4 tښ+.'Bc!m.o<(9=q&BsA7 Ǭm WgöTMPOKhDGMz68v@ٵ=s"6qk`!++euLA )%HS7Թ홓f7BVΫ޲Z 6[0ox`F\<.rBt H(.qKNg {~zL&D=O?ߡt6rIBf>3+/?8"DWN-(n/twPf[dU붹0 ѬҡHN3`\8fN2ga8L&@ƚ(餇Pn+8[Wha`lkD?YZsXݕbϕEue vEtKXd(z 3n `j|h=>r63>bmʚL5B%5bGĈW*CC2Bre-dh:<&# Ӕ)$|@3Hً~99_hA*|Uƈ!QzdĸNuۣiw]Uhlư a2zJhkC )/l"PM8;P3\L+I"˅zRcnmv])# endstream endobj 3029 0 obj << /Length 2154 /Filter /FlateDecode >> stream xYYo8~ϯh1c``g2,"6vAVnjGR'bQgnmaERTXW&?ɢM"%T)/">lh ac8y}կZoxIJ(9Sf{nC)e տGsoZSf8Q~׋Zgr;c/.Y9T1.2t„؆:A׷eQz2MYlBY:ޛ~ `>P2~"ߜzG:?ъ_E ܑ|/*7Z{g򦪀-Z. X?jʂEMsw'w߆vV :y۷c.i>rgO`},_T.\D}6,~}> ~gH9qYB}晠2&Lq1f&? 1339@ 6  m¤(!@C~c uW;9U;yD/]$ v_eHӴ_CVQY<|RAKܟ*ٮ9e ‹}W t:Z]6'gNiN-GLBdn(iy!Q359Y#ny2Oa2E=d`LE{TEƃcwXM@3Hi!3}?߿VoQX$[?Ipr!vFnHk:gCKn`[7oP f $WA~Աp:k&CX%9I4ܡbKc7lir&\"\Jֱ^ Kg5%KL@s8wIJέ cPs`CC%\%IV=P؏Xg cV`{@ҲAH)Ȅ.7A %ւefA|?[RZ|ThuQ4ocg9$Y_l72t<'Gk.;99+CN endstream endobj 3032 0 obj << /Length 2195 /Filter /FlateDecode >> stream xYo ߿b:Ī%[(]qEqئQv|۳iח)L4OwX`G)IEnb'7eɓDib$E@-(Xq)7KVͧ9EIl?4?}m+Tx+}ۻCRo)_WLD xY $^!.ҙcF5Ƣ%p7JDQH]lm5]ϴ1C(V11#ϖTJ gO xeD$*~u *UhɄ2Z Wn57X3oB8Jf&~͊?uڊv~l?bt:EѯOqDf40=#s' ˥.(.fE!p^|].U,._$nTtu4hg M41l4_Y}͓m۵3v @ NT`Cz-DFɕ ;[c㩱Gb{Z|ޡ# Ble;;vƍXT7Hƹ(L#AՁr ~oSBdN7f>0 b7]<'/ٛ\޼}E7/Drĕs3pR"3vl?} ( ]H%SDO^<%/c8V F24LPE=4<ۆ([st^ÀQ ٥'A77iV";֐ägA\eH C< SNDdz$TBh=hU 9Cr`P{$/;6ΐ DKmmwDQ(n8 QwaG~X鷷n rtscV_K/xPK܄%3B&.Ҵ{c.*IڔqFa5(ЎFo!rﺧ#z0ŏ׹} &>}[Eޞ/Gn'DP~;wkS\J{FD6bPC Yn1 Ojx~ K|r! X+{(]W_y6zW_^rAp5Jɓd^qkhnq-9@>{j&(3%f?_M// c{6O!5,z S W)s"fWawGJ|"DȹʀM{ƒY)]\t&T&n_9pr,֒7'4QV"ٚ2vלhƺ2Mµ!aܕh\, s , endstream endobj 3036 0 obj << /Length 1846 /Filter /FlateDecode >> stream xYKF+4 ) 1cק/;) RDz,_xedJVAՊ&y7Οzc)_m/ջ!;vYoQxQJG?ݥk\s0Ff~ۃP-ę!=)VMt|ڮw]ݼ0b9Kk# miC}ش xlkPHG]vQ 42d*&eMpIQ3GӒD.C%͚]{L5^>!\`ܨՆKu Uɪ~Z_ZwZ$-QVvw v]ZG`5`Ɩ7֚h{kx0Z(XEEA겼"Wy2닎$et$!F#,ʼR,o~gg-XeO<,ߩ _X/6̤MzmHD;&t&s4"Q H^ƦF_di ǜb}nA cG/)-4Mz]wyG9h WYSAeS2^QR~mY,$!y2 hW'a!E7i̚%$a wP{/jv u&xR S}6"F0 %Є#ą!}elteF=OXq$G|!%Nl((+PEIp) B[R=@Y=@B[n@YkgYǼ:Qf]^2.ۭSj2+X&mQ7=6pcWB >uGcdS6kpB}>8j -q-}WWJ $y r` ~ys[XO8+~ V 1CBā TӔ;Wx],vw>.R 3eWI̬D<#BϨk/QZO) 5 2DhڀjcM(Ӛ(]X:ULI"/v)h>ա00ih,&PvuїU;`Gr_Sܽ Zv[`Tt;0 B&N)!kgI#_h |I;`feB&h;Ku_㱝l=MU Uɫ[ޣsp7x:(H.hN<3Z&gbLjcwt g5]¹oMĽl^dE5),ib/0Qz\?7LJHuD!f|RM| Ɵg!jHᡉSyZ$vE.p4@ T0Ӷ@=2-ѱPUTްf}#|C?ѕ8SCu賢yG/\zx í4H!6'Q˂w /`:|/$!StPp$ #^M\ hڱNCWAcBrwpKM)9!քMz# 3Lf]|E-?MP<W^:e}*W] endstream endobj 3039 0 obj << /Length 1380 /Filter /FlateDecode >> stream xXo6~_@ĉ?E C7ņo/iU'QiG-K\X(P3wGY,f1$z,.nv!_?rF#D -CW:un!,k0BXD-4١)_..<$թ : *>}$1$vF+OA~O,%QJC32J &Ǹcd+LLN%2z FSFö77| D_퟈W7r**'4O?J[ Ogb$VVQfYbeVsNG>*1H{rI_]6?SD>YX 䲘NE\ĥmHɗJxwގ30CB b]4}\NAm[סAbᡤѩؑ=ݱdžjikq;}ȍsR3y{B\Si2͕)yyy[l*qk]az[jlRv{We㖽0+?˴mYP&=|L6$#B2 WMpC$^~b1+R]\|5>T4@{t+P1Vn᝽bvK~ɩ2/)c% //@!ɡJss&ĨzܞXƒmznn9Wr_Ǎwk < xFGXalJm:u[9$J* Dub%Re(t~Yum:anˬ- endstream endobj 3042 0 obj << /Length 1120 /Filter /FlateDecode >> stream xXM6-bER=ESlt$ڦW di+Qq_!%m>C"7ސ"?E9Xb-+"0F.~z%Ă$sXnǮŻB݆'قr>/ > stream xXKo6W(+V|Q[F/{Pl:V!KD'MP(ݤ 57qhH2ǫ6+Z\Ž\Ho^eQWXfz|{O4PJ_CthMcY"up?n~nB;|^*V\ũb\*r/e u,ߔ.эyp2MYB'c5t(eZ <SgUc)N+pG`HQiItdT{&T8eI C&&:i-y,t0MEVuv,ђlE5jM<6!y'=`s 6gCb2HFu:[Zr/O[T!!6 q>b7H/uihI {(|!]LΎjdWts (fyjBNANn-9tmq7eZP/ g[ Y!7f y@ۼ// (ׂg 45}M{ X9L ًT2%^DۈɾcGBG!mAn\CiB$4"*{- Ons{ Xލ]f wy7p-t<\$S0sZmu5 *kQ @ ^KɜBbuS<֮*u C a}qݪY:=^ҵ[ xqsU 94! x"Ӄ^XdGA XוEp%smtݯO!\j]B~_D闳u_\"IB;1ыHp'o> y8\*Y 0t+ q;ڎL .(`:R:o bƴcϤE_ND"9ȌMkqI`;%dlZGpZKglט2nɌ4Wejx:ܾYR u_p<9b\eӺ6 nĞŦv ~ڡ[1 jN8ha(|:nw-:>jǟd g(q endstream endobj 3005 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1462 /Filter /FlateDecode >> stream xXn[7 }Wq{E( (Ю^V h(4`Cu[Į:)Hy=s(rN)$PS rJxӪ5iP.iAKa9$3@J(ZC`QhЌhD)r)wN%p`aJ*bbQ "LQ=b S00g1Sbgq-0|V'x▯ISs sPwcwqpgсpnZUuRكyBdг$a>b%2:nB2:[Al 0r !0jrONLC5HBz 5XaTª- !,AXS,dϱ@e6R(T ß0lx10?{z/9Vgo'3,6kc4.znu1ݳVjchtvhQ *8,.j!||'ġsTby*#Bw1.GV1Q!8l$>ٕȻirmoM3nLͮ\t[  5^fK׈c g6of/<)NI wR] ǡMr)nRWk-EB 2=bW\,z(9GX E¿R`&GG] Ӻc;̬r82L w.wW.0g>7(+Q;b=qT[d;??,Oح$6%ei.Q 19y/ɕ\(wS1 UU@j?l>u,L,*\S"} . MLU^!}̇3m\LHUbr*SJ1k,@ťX@1d>07ܲ@FeGN8$ Mɠs@.93>TRő`}J&p5>IךT?"c endstream endobj 3048 0 obj << /Length 1783 /Filter /FlateDecode >> stream xYK6QbF| C_)RMY殕ʒ!n}Rl9E ,p8GNbIOI*d:]k}=_ϨlGNj/ИqJ'W.wOlݚz:Gt&~x͕M97SJeog\tJNJa҂P.SͣZ. <3j^emؙ7?ŧf^ƷfmYQ|e&Jd:SFˬŖQ4i*ؘ0וoF9Mn~˘=3(r5eIiZ|ˊ.}_M6o\XsjIܴEDf=ۥo\&['\E%eFRXݟ17iK\!)fgjque_(16|fCh-3 O9΢ #2%,CP"SFךS>nel^|A &$+pVRL bnowMQ0T ohlnAX/T]~fKГ15|%y9$1Č??1=n5W6Psl'fTk1s.yٌ$n@ !*kxvShTL)>|N_}IP! guqX=uPma#E7 KlU CkFW 0"X5|]jIhvD.p;3I4(Q凰xc]kLv??vڴOϥ2ҩ\3S5+ ibMO'.>f webEp|c<#Đ='-nQA,~ANt0]bUU?d  Cǩi^^DFHd:4%J+ĆZPgCGs ˬ7蜛hZɊy[%V2C oЀ6rq=3) fMn 4Hq՝OyC-{]Ũ˒!me"/&ynB` +ov{D]e][&,{@K^*o>kI3X6'&aqc^d!ֻ$L@g 0@NNll9T*PenKeɊv(!"DZ{ 8=CʟSw6om9>^ېI8^nyNe;cb+cFW&H}h}ωl$hlQLӕݻ+H/U>͉+[#dbIr2AU?d*PZ;h mCnc4=Y2Nb_@<Д!M"$o"[?R@Q7nK^l7'ī'0xmܾnqD`/SS#2E - Efcڿ[Kӥ`lc1-!P\,G TiQ-+3Z(բNZy54ڞF7!(% j]n0Z) W|[) ㊟trJ hS1ň>$vXNRvri_du'b\z_b*㱯>{f[gUX뛮xi}g/3~Yk endstream endobj 3052 0 obj << /Length 2096 /Filter /FlateDecode >> stream xY[o~_*)؇vb-yEmmɐ {){Q$Ew.LWyRz&5Ê~y5l\{;{))+ӒQw/ajueIZJϷ46CZh҄ ~o~/UB\I|F^!VGhTJGkUJd.O'T=5O35:)R}{ )] VdnmrSs&GIqͳim~J>EXiPEZij;{%bG5}%T'Mrlh=R_s͙gS"2&tv#X;yTtY0L<. r81n`$C/jٺƉ޲ښ&n|rGS6-v'dг?XuC{:K^\-Wv ׾b钥_>ov]pX(/Ep}> v?vg h:šSgL_ҎL:'hnٱ6!վ:!Zތ-U%=g . U?5~hp;R@{ȌeZg )@s%ľĸ1 ԣ(Ņ4vM-8ډj/)jxh&41pM;y``D]-XX+h*O>&cvUOAtvuߍ {#>Rݱ3w4:1~Eο?aPP!HR~K(2cDA͡Uy6Ĵ1fhMri P:c!/f 2fN,gA KcP\Wo@nYfۉ>X~tOՁb8ĵ],8{b>},#ԯieAteŠ i9g΄&Ec B"}j$F)#^j ҷK9RG撩" >/;qgrx/-c,yъ j#V7Ƽye+8˥y6 PW| /9 Lty0,-Gx0f>ۢt1RYv 3SS}9\70qZ2:GŬ.F{y~u3zGLNZC-Rĉ$< q4f[c(Yu? =A5Qj5rϦLJ1շj,UGaXT %spzיkơvKB'ьHQC.ΛfP]U7a#}R>gC3N qk)S%VQ;t]$˰A?{WV'_gr뢅` i]Ϫ+&_ sYvǘ3ں ̼G]u:O1ǚHv 7zPKbD}4"հDyԝm)]߯GTrO'X{;XX ƅ#T#pB҇GYb]Q aol3ۗ.opQ~1d8v6 &Zs؛F\wqӲ5fmF5s"!viP,qhp^Bz0a]2ծhge\i )HGC(+aYS3.9KͧH77̫Nv9vDYjl1O&i0~psY-?`?6 endstream endobj 3056 0 obj << /Length 1702 /Filter /FlateDecode >> stream xZo6_@ʼn!>+6KEceXr#)[ 4P }wwt$tI9"Ĭno'@(_^_h:Y]&W|Ӗi92.)\4fJ$M?\q^dLHM(' S ^FlKŢ6Y$-6DeD 2il5XEvh)nݮ׻ֱV}*& MTG3(dUQI_['2 ꛏ!4#ы #i^X!Abe됕YICa)#n*鳌Ջq>e9%>!^K҃DI}sJ,s߶.6~R0hH^teDȷB{fԃT*id-M?ΘS }^fRM%xjR[O\C ")a7wDl 6iTX(ʙ]*\DyOzBM2S tW )p{Q4SnTc@;Ti$$PSRiΩ3c 6~qR&5'O|E218 ;.< 6~`0Ҭ{Yg]L?DDμTЩv۸5.gK@t>λnܠȥ8^&cDQq2 e]@Ykj`E{Jc%R{Պ(C|Fa~AIm^-gQf@O(A}'ٓ?1I*`(Y0f~j`d:.{7b(0G DYBרCH@_/ endstream endobj 3061 0 obj << /Length 1575 /Filter /FlateDecode >> stream xYo6_ae2Pq(CvE6: ihڒ'mȣNk"Ew $G'y2Q\d$q 6^=?~^ ϿJ9 ɓNfCQ7 넊z^D;~%b`Z09"GaL˝2!%ՁecLdg DB$M{]eK"íp}h Ir8uB}4sG=|Z{jlhmvuJF>p梼̓3u_/}-8༿| $R =/fQ h4aMz@kE8Ӊ k~IaB$ 001'y@::}OBR uC^̃\atrꪳy Rk1Umi ,KBpBH7BzeC?/JlS (S_r~Wop7n Ĥ r|mvM],˪ތ'٪(gY|I)\8uN I낭6zCՐrrB 6kU׈śYm1'Xp58mUQOid,ZA{av%띡jBٽp-@޻) 2EfD {xx*qA1,Ul_vv[%fV,ylS}3KmKt?vL,`5F]P-*mBpZl_ ;BWڧǍnZɳf c ms}k|zhߘ>A"ܺ4Jɣ][D&LpK46i{=vrY"tE<]CK\| -|@AD*q\> stream xYQo6~ϯ0$GJ(u؃n6l }Pl%RfK%7ߑGJ,I֡:#yxH?6L1x:[.of3B:=b(hfkWj3{Tw]qyȹ7u/u1$4`_vTD#ѩGhbB#DDdy((mA ,hZ),b"T+0# 6͘dɄԘ ?I"OB"bJKI>SZoK1Ћz0"蘒S8x`15fS``aSk l$ U'ZY͝ XV՟I%ofKe I<.!޾(aN!L,:b+t45:u#.݆:4Pw:.^SDR>()T!\ %"NSgAt4f VboޯfnJYkF6|K1D *.ܺ2]bRx$46( r++ULtemDկHF!nFen^Drn\j[mnϻ,jl4}QE\}2i`_;&S;Fo6M[/|hXL`)?lG@ɦ'@?(}lΊF?sH `ZϑT)l%A+k>PS-aj@j ϕէTcaSNS)!TAU3[Zb=3<؈k%H{*5U@> ,uU./UjJ5xқUPqʳU@1t]5v_X2y&C8gw+aֺR:aΑc>u$cKĜ $x01.qIջQX%les̻Àc!@QBRYArY-ǽ>(ڳXDp7pXCNqW$pZg%K;KeV]8 tWQ\AOq ic#0;ݣ>uw&I*9f!.51@H{!\hc1WaSe;5x?G8.T|tqYl؉'`n u]=[`1\y׌åRSDdž$_-lL ceDNTpo~s=m0s0ʰFNW fЀq|i\`/AP7Y;(v R9m2EO^"$;uDYPT}> *FEZCmRPC~yN=un*7St٨=*?_qWKa6}'>~zO|(8/>'~:Wڨ@\j8tj&+3B*zHARΝ2\Hu(l {۩W:{f+u]H endstream endobj 3071 0 obj << /Length 2296 /Filter /FlateDecode >> stream xnFh+sx XYfĥ!dDðY]k|W dViyfEoϸvo^q~W)lu'4뭔ҋ^JiG3Rފ оDž^_]HT !qhDqW=P1ٚ{/>W.+:Kn]ӧ]$u[I^Eu-;:.G2B?5Aա+qo;OgǠ@-kIZ{I#5کҴQѲ+Q޻tT4M팗f#1>'..P0%|et;4 E;H [SduI5;EWS܆~ ~l<m viRyuC=Pq^nFш8i f5H'ex+`:;Cr`@ݟhpW_݃5dG'U :$ FlbdOP;&i8_H"N$,%Ş6 :XNnֿGR@r>:r@vl"`I2ص"b[%40CaJd2 { crРzZ4]:"OIIM .޿z^+C*wcD;k+86մnvg .dŽ/)Z^c޵ms;ȝ=Rl&1WbY,|Mtrb!0vIQq̹uhՎl@V\6ц|5 JMc`h?aqCpZm͠} &'{W2nsY \hvuS&&l@HU0HE*>CI"&Ivz k"@`˟)] Xkai['@La&`@9`!+Zh!ˁ?e9TLzmbBYBAzr9i%l:`*w. }&8ɗB™ɩ|JbcLt \qtZƢPt Q{t漚R(1KxvM)#=ǣ-hѽ;t1FW~|ç%=r1u4L 2>t!+^+`+9UYF7'Ua4u@ RE:m궤#AW*r(xp5V6.?yepwdi.ݯmS7/3-*s7+CI#ˠ >J|~Rj҄@kFPјE|Bx8X<0P8\p*xTS-X  q&Ię0ƃE\d(i_epYYr%!٢6TXǻs\6G3yLZDYX>f$W R,A Z)u.r@mL![,ȋ,l̋%` KvğAp5ᗬOa8KQ0I28 >N34I\CicH/A=4M-j3Gmu|5z24دaQn$R[Lq,[twWn{#KNt (,/[i_ZT*Tna  upa\s <wYP(^WkҴ7iOvvv,#t}SY[f9oV C\ |xqȄ*||p(+B ~!\qf/Gy+rۜvyz!ʬe{s3E[s3>^阊?/gs*R ơNVӈnEQ1==@7?)uNъi_1>לvIY=—??E1g2pdb9N.~z<| bT'_rr"\o { ;_>&eC=KapzH3"Zԋc}/l`AZF{([o1=\m^guh34Uk endstream endobj 3075 0 obj << /Length 2128 /Filter /FlateDecode >> stream xYobj[FH}~$)#/w rJw%WҞ{;JV}i@ᇥp>3*?*U$j{z;j_H^`ݛlJƢ ۇv͡|m$I߬7Zpk֮7*MMI?}OwáFWJ+/J&"X4B&˅Ƭ7&UQ_hu"N}Zl;ihVҦ0F i}suRF8) 4ơ00~LJKkξyE\R%T6`Ziӳڿ?Tv?6vkvQLS,0X4,2Eò"6qON/Dz/g*\Ĺ,&%v)7"ےڦlST~d' Ǫ~ (SGe#1!uӻdjNL FBɻC uN֩?Xvh&z>4%x6@1%Z13/&yVm$=)PAшe^ "306-r;3ḆBcy;"3nJ#`3ޱ7ѐO6'%v^BVU]ZIWϋe<*,--*jڷ͉FmS02:BfgH՞zeAG]$LZ8nSy. *$WP/ |8ipg:ܡTfa,M{@@xŁ[۶gĐ<#2PHb$XG ,'oݕ'h Bסg70؂5zk uu"j +%8;x]5ѶN88`r<#fl*&·áK ¸Ou:ڢx옃 ygCFHZf uӞ f9E[J05vΠC{[CW/6ɳ˴y.hI4hn^n $g MGjf[fM0bgX9 eA&ًm}tGߕ6#l|X2@~;n0-'CA4Lc~-|H( j9b`ހ`hytjÛ`sl+0(RPSn,{{s }!OuzmT=#.ܴF"JŽ޷A\[X;fN~;rvQ_ǟgqtXMHb͐rJ^n۶iR"1X@apwi% m=$GsrvL~$~?ɢwq%ۊ} GtaM$]>BHeL3''3%D?śr^uhčx3b@;hN]h 9 7\x618l:|L퀫 M 9qw/YpWo+f\|5K?&Y.fk*ewIHȟ~Ӝu|,/-T\2ǝK ik fSokgcwOj 2IY™Pr?{s\kk rt凅[۟ۺf骥<W,%xxAA|0xYqЭ;*oNoNQuKJ&qpkS5HA%$Щ&2@iU?Q۔S88_J=\1qgOz$ Tx޹$fQ5}A3`fL+%=C=|LJcg^ b5lddE\tTt/vp䝉X_?q4HWY\p^Qq/}v8LBprm')jR k*PR ,L%8 ri^0P:ׅ4/^4CrU2/WzٰOoB' endstream endobj 3078 0 obj << /Length 1842 /Filter /FlateDecode >> stream xYK62fŗrMEdx$'i}T-"A,# tsNJQ6wWgxqz P\7_J9))ӒVj;{Wj yRY$Mm:n\])g M]E=Y1ɭ-b OjbwKhvxzkKgds8mG鋨'PI$`H[ot;g VR"xnCG$z5xƅ 7(4Tȭ|, ̧-Ђ ˆ,|!3H/M/ R¶$EaSWS@wvQfR.%3olޠ2˳5 H'Y1:)f֓f;s a28U6i0w En {|C}R"9JS_ǺӜ剭nM̦?Eܡб2^wV0X,E-#z1v+|`0#@HV/P̲zh'VM8Җ#aΣ 2Ӱ9/+eZ;7ZkҪ .-&9:/iVV ~guodiĹcc3"LDrhv/PS|#`ZC|Voo|ZzC!\•X)pZ27&~4%+J6Z& Yy(e,p30wK}Νդ]cIKg#4=rNhrX3qN,A=Bq[nI\PO,ռȰ5)nk@ ?w䂈R>heF3p3hb: FfE2WpzpOW@}KATNbCpm2#(._HI@,&YF2`+XA{nC,~ik;ߚf<%4+ǘj>gtoO:'3Uk gF*6Ei{d F;ccxW)CaD`|F f6&~b g\ڬ<4R.> stream xZݏ6_@̊ZCm$E(PyPlzԖfHZM\QA 3?.RGy8'ЋIjgV@PW/\ДiN)_3r9O˕2yÅxc1,WL)&|w9l*;S:'f I yrӄŗ+X4CٶeuZ<[#J嗗ՠN6o"R2\ROh(2S.ƇjyO,ƅ>0$6i6oAu&LwNuI~ᯩLc" A}S01S33bbMQ $e)EW71"BgGHɼwB9οT~[tOESb.jq"$մgqS4mL& M)AJd(c^/0]UeA|cvdYb\mmo"- c_nR&hZ+*#|[ۅ;,W4M}BAzTO}4DdwEX*DI~EW!Oڣ"Sʺruϫe0iRW ٧ڞ,.!bٸY[ {ۭj58erLrj:M~s$kLmz;\#αj5?dGcV!^ F(t]QmfS׼dDYx4g󇤚!L1<B izXnrA2:3E՚W^ywDJh^}Aw_TDw"&H+C5$b "krk Z`u{C) ,XZuIXY=cV2M"RUAfG+LdDg)uѶX`q\k z ITgHӌdl8Q;S-?$P$1E :)|`"p`_*-_(Pr% IS J荥n&3[}t. *r(? b>E7<_;rw22!# B` 'H:iF W5CXu_IWpk*@ X7KJ(f" @X(v]!hPтgCؽH( 'Jt: kbBepzp|`O4E8 A6Di?97 y FiƃS0o4uߠ,Ft=-RJQ̃L=:k0 u?A5J|G OA);PQ}Xt`CKYO֢z` 70z>ss!&OW)hNh8'TN)"ō`˘6>#BZd:vINi8#{쳃?6# ;{o^ *&8x̠Fyগk 7x{Kج]6> stream xڭYK8WsY!Qf3l0E=drPi[d1[Ţ(ɡѐDz|U*WZJl;h{Xۀf&7dc9_mOcqMH)F$w4MkYoD&qEO[h" Cg@ô(drW=wgp$hW SpRtL5סvrLޥMWK 0Pƙ_ܗM1 Sh\oÙoZBP +XB,8!_oR9,]:܊8hk-)F;) ^&:aZ46eЎtNOnRY q~ 0)N WPU0Fz UEw j#ɠ8XGH$ɣ[TL!H/ i`NeȮ֩7!2@F#bp֙ bsүnΣt騁nΌi"vZH~ ~3o F&,W X*28h_ʨsZl%ipTZ-(/\,5R- Mb 5!.mV=0\[8ߕr,8wDgHQ)ԶMЭ2ˡjؐ9#,}CF>{C8> stream xYݏ6߿E>y")E5mA.! Z͵ʒOw7}g8$j]C3!,\$R,JEhnA.[j߾WjC_oǢ}~t\I)*Topou^D02\~ZxݺT L 8OYӈqնEu`ԧݾhOߔoH{[8˓yu7M K7`we(xh=Z'E?+.Wd,nA>ǩ;OiM;3` ~ _S4=/ԥ>hc\8bƅ+ݝ `D1i+ ?; 6C㱘DziSCEt2x ́ y8?b4:n0H2dԪA8E*rlNZʒ8u7Ĉs7W2MXe6(8t$'/M`$qe\,ue)}3n,JT $BVdi)Le,N [8/?@nkE휇d,1ŠgR(aWI:SŤ /7-і@>m:Ē@Oche{4(ǡU,з/A.K_Yp[xU 0&󲭉6`=ۛt{`!Yl}hlIZ1//wU c >~ [X, a!${OBb*P9`d&GJO#LD$CG5 ڵ81\ԅ˂}1؉/daΨy68@N~xe &DhxRiq|1{  D >mZƲ_Ůof ew8z>'akq\rݾy} [Z/w_hJCÚ AAl % t7s|tA> ;x9| <]y}@9ھgZMl|Aqof+ e0GLXHh%jtY 7\WD3[8]~< l]f3D! %6GT8iy BfwrH(KN!r`zWl51I :F^t'LWVmUYfrO1ZugJ]C*s&ҏ'vBď/ǔxq9 >L_KYfΫ0x(y~=0ƅn{*EE8Qvw0k4234%z\M!=,EzQڤEϩ#3HP$gN`8 #Uh ;<=JdZ PSN?~F(* ;dtƣCn4r$m4K1 QZg7Sԟx e\8ZgCffY{^U֛8R)^`>V$V-Pss9]gC(pl2DjyyY"2E|KT+uޖ=]mBͼ~Mwg]U7z>Pv<߿,֥0{_ Bh|>NBxVN#owV3/w#O#)6?b1O3/t5ynw5\%T`l5nH2F }rso!TY/f7u: ^T*#ЀC~<lG$wP 3TDNp2}!#?˹ endstream endobj 3091 0 obj << /Length 2170 /Filter /FlateDecode >> stream xYKܸW47W$ y8 :_>h32@bx}U$l$A69sh"ŪW_q&?M)%29_8:m+`n17*us|Lx_?=lwRD,O~{tw۝(lFPSɤnJ~ ϒn n0u 70V1kjN/|·?Ovp-.I33U<{ 2f"2d! R9+EesL vO {_(\(B 萂 +NWցLf+RƅHV?l+`=SM*Ū^ǟ'aU TƭrHs S0Q|D$I$M{fA37:(L >YD~.{Ci>94OcdLdbg3]QJuJ!V9cN9qe/0$`:=3;E\L Ip^{B kir &Fe3,œ GF?D4KK*.Yh` 2GsDic]~hp'xO6;7EKjڗ]n…P\э8erڮXY|qX$UBNG, MTƝ2Aj)! 22NmIE~L,r~|.3ċ,\YoӜZ}vQOCE\Ϩw~RbGHv@a?y[l6lYYSC044N(\:u3p`Eߚ{ggɱ64g'ws> stream x˒6m*CIaYoy+rHr(HC Aڞ|v9C'h &bSFMC؃o8q]3uB'AJia!`2zH[}$QhC^5jڎ]wͤs0bG}RSMw+GY*fc q[M[N\{Ah{ ;qPӰڣ_9:G\G"=1+<#8 +@A{>VUKގ9( 6( -^!:9mxJFkgFBj{EDVǍ![bGVܵU= QMqaԕFk2 g)'ri/6}f־t44+eKsFMuQm?֖w/x"Hed]RļPB$xW&] _f餀[".J`,2b˘oFtF&/XqH:eV@2 aZffDVD$\W&4!A5RK2NDQ(r|6Fmnp(H"%,[W3y022 `KeK%ז55! |:/1%B\r, 5|AQ资E2xSVm]J+i #mU{TTgKqUYZϷxF @PJqCo| En2Ýxݞ5$-Zu{{A1 96fi[%[0hNdEE^̮mth&~O-g꿯0'918?*h'Ű.$K\oc ]|fhnJ.X A+.lJT7 c bNvFZ#gcŚmmim)BȉquY&m[(6wT{i~pУ΅`XVWc7o\/ F]fy}% *@9'LvJ7 ,\c"$"uwTlk;RJ_ȸݵP7M ϫa6E' Wu[5Ѿ~ڿxo=2"&=\|9G~Qϥko7 E˩ AS[_[Sl]|Qc!Qøm^IA^uzj4>E3"R.e ~ǣY?G$)9orۘL5=Q˔e gӠ?NW##JE8lƉ7N9&I;WbnQՎfM4Q4(qk3]%.K-ֵf: Է6HnLpQˎ'(x4K-5p>gO9pG0KF0̬) 5O$r"AjBG(AᲕVUp?YᜥLf$2̸\ qqqs~{w&be}E㸈,O|S\I$q {"J >]`'#CY|ݻ]oۏU` nr Dj|6R zeGZ YϛK{ak<1;pB ?#֞)ah,}a״;zU:AX+0qZ1]A(|5eo&ͲTAH)Ꝫv1Iq鐞1.q(רHxDFӣ>X+E~{ݾ[\)wC.,ww_degg=RFj[]%Ek~NK*K2N{#HU}zڮv* v^^<kJS*O7i=Xp/}<;|o沓% endstream endobj 3098 0 obj << /Length 1109 /Filter /FlateDecode >> stream xڥVMo6W(ߢ]4PY߲902%Cq}JAx8q,cIA\RHs/ܰ藁c6m{NQRЂ%@ h>M; {Uj"BhcG@< BGq3g5&0-76Tٮ_.4'5)=b )1B,ź!qE$@UztJeSER/ZMx°5 $™\З!n4)@JA1;@N@zjBKC}1J`f2)9o7< ,%؂.pMySџ[:FnURS4Ds6o>OM5|mD2vYm3*ݨ~f4aָCo 9([}K0|+\!+P[ 3]{+R\)a4#d_o#m8@ )W̷ڭW;k% Jt1u]cA5j{  W2q8ryz܌85&6~!L^46HRy߈90Iؒ1M:f&uF-R+/W3[ ~1['[ۇxlz}~pٵݽ }F 'X~sQi0S%|h~~ endstream endobj 3049 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1476 /Filter /FlateDecode >> stream xYn7+xl/9r#@@I! $7TMv-.hq3|KR0`-PIr7ZUad %- ap o R08%҂ 5T7$JpWq9%-1&gpRaiu6%&$@޲[EC)!>ekZ``!oM ԝXT1|R`<Ǔyz-ﳆ p`e^OYsvHJՓJ %bsj ;mCϙM܂;aԌ`}0\}Ÿ825 05,K!OGOeBm_ K$]a.Z{I['Eg=W- \A4M ssKMřڋԋ Ϩ/6b=k,DtqvXt VOnfm/˗v_W.m>^jf'[\:ɓy({xG@*ͷ@PE4 (XJ"9֘fhQpv.={9s>w(+߬+P/X /wVp"]+ =dHL!CPiaF+< 6:WEWI !fSfQGX#X9Z#< a `$0!WLq4.x7!>ރ }8>d|uvrk|پ_m;%7U‘2!V*1UXy UZW?7WBOD,_& D3ov#xWc?}jltJi Q-νeW{Μ[@b6)O/riNcjfܲ[:6}HHN (g֢mkn 'ңJ}Uvȴ9"ӆ< y?\g}t̔n#pnsz2i`1pZ9榑NYۍdtAeAeY -4f?F*كbF!2~Cywyiu}p999)e׳B! endstream endobj 3102 0 obj << /Length 893 /Filter /FlateDecode >> stream xڕVKo6W(K4iI&ZׄwDȿ 6H f(?U<*d*týv8DtF ӕk *^hiY.%޾Tɷ͟%β_̉Y$ 0)AW%γmNK1 Yc9I* nBeE'ֶF#e|tv&)Ɋ% Fu'n!b<>O8>=IEaRPJRd<H!IDme|1y@a)P]M)ca?yoLJv ac[+ҽOvw`V'3bs]"x2ty\ mBHII_ Cj}upEZxTSչZWJ%l+ZdqQQaofh[=52gUYnGiGcy#x!QaphQz28K ׍`&.gOmCtDM驙qL0fCUEӭ8ǰw&Z )#Zak6lڱG}djw3%+łK/w}㎇5(zVcav#F .?%`\}B0S]c Ex$xa/ƭ2%(L0]\QG|J̀ma $j%@H> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 3123 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 3125 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 3129 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 3133 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 3135 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 3137 0 obj << /Length1 1474 /Length2 6583 /Length3 0 /Length 7589 /Filter /FlateDecode >> stream xڍxT6E:WIB$ދ&M#һRH EtT/9s[Y+y<̞NVt @p{2(hy !H(o;1$ClvHQ {B~ ~Q >>D@ h00YqtBdrvȹ= @;@vE @lH7 ^^ooo;WQ A:U2@Wi?vBB@?c75oP G@~0(/>PCtA"4C` s_%5l";;_n{c Q!ɜ6Z]3HibB2 W/EFKHe-MQD\qOu1FAm6:R(Ҵ|#o6z,:R (؆<Ȳ!GƣSshlzT͋QNćYo&vfl6~<&Vd(V5% )| 58ouh:oq))fӨ}]^@J:).Q"cHUn1L`ƃЄ X(ڷ`zGR]G~K0e^˟xMuDLiôZc̄V΢ZH̒fFLu5o6lZUVU3)}vwxR .h(d&M`IȂ+RXk;Sη?)䌆(\YJKzp#z99i^Be9Vb_nYUFmEhT M%2݋=$?m&ݣ'Yl*edl|h'Yu&x j"WS.Yϰh2@m~1W[Ttz:ei.KƪoM9X^ %yzNxTӲ6\#yD. m9+]klRڐ R0G2]Pa#]zHf5_&[kd)V J#}˚bd)+ekɨLK~_f-͍c6BԋpRjIB&[*l},k^̡- @Wު@Otzk0n ~T}dgg$N73FfXG8* ~%kKQSmшrёԙh~s7 wk;4^~Ib`B7M2%Hd5u_&Y8˸\MՒmgMY_q9疀fK rhrcаM\T ʇ@2L1#.]M(?ޑu_Y?`[g&Cю?F p OR!D:Y@ZҢ=gPrq]_R#0T9 Z}|$Ƶ*8'jAWaKpQE$ !NAU#et΀ZV㙓8P0 ~+6R?TY+FLlz3ꢎx4{#Zc q}[S:pk67r&77|fzN$nL01UD H*u(BvY~@w.[aL= c⣝Pk,&%;.:$6n=]r/uTJ9K9ӖsGaJ0o2-?+ NqT<~c|FI!ܹ@ǹ.+N{'jPE#=s &]n㴓Y*6 ?a|hh<𣧠bxbB4O ~ 1/mhXq/y_ ?KsoMF3lg_86+}/<6!7\' Rх}yLÓ0N~ȰįQPRU51GYv=9i߮Do/bybA/__ Gii)}KusQ*Zu3 La8s|1ڵ-=ؑ#~E}yx*]$'?y;_]ETZ PS%&VQ9EË{3$KcG֊c g-= 'We>&l0ixy= u=#ۋ?)K ƁG&UV*J@Da(L4 ~QfM<44C#|EH8tƇ`|'jnBݐYWChxlmzfT`ٺnBڔkdXv JAhr8esL L c߫]Z&a"7^vF]00Y אcZ +`dʞ|vԍWbۨe^!.cУcA;lWqxrzd\tx;kԟd@@vb+JL½3hZ{wK%@/ֲ<:j;(Pw#Ȍu67vj y69$Eu3lsKii5Gx4 _*~Fk4G{zP :ktpr?(4zNѕ.cXTgUǔYXL-lttKfƝ}Pv|{KnWU53UZ{vAA}k*B.L2UNeNq|']aVjƾX(TјunhTً Q=6[r}tfzu[!Է:kG&@Da8!$.EvgpOuQg{ ^k{K&yZ+2sI ZV$L$x'GgaKbEӧލ-3%K]S)`0,kFP|0|*5iMpÛ-TMFFW5A'FΣt_q}vr`f(~xn(I~'(x6@'θ[/} #ǫsBPLzx;o2O-669粆ttդ~ bw n6W0}-'I~r$Xx}%II7״qFW۟p U<׍GƳ&5ve|TܜGPXy͙Y 8/ZY롏<ԙOq%X}|Wߢr" Oְjy7DǑZπl:Ȩ 2l!:h̊➊m"2<×V F[=OE6N=b XBnynfڷ䁜Jݜ2C¥1,PsV] ]5m d|2pY@բStwNׇyD=^i/iAK9BAhiG4'HV 8hݱ&6n6(^̿4޵o4սD3(l̋p7ll>g2}κDՌoŏ/&K[%T ~搿'X k`j^U ܻ-Gf6,[\V=8$_fTm:/NVqwovlO^$|SYk1WC^BGY+E-leY85cIk1{eL>'|;YD\!3@*Ibp( ǨԈ9a ;73# K4ĘVžsN<醈knE :lV#={Av鬉^\y$p gÖ#| ?Ƚc;:Ä 2#/Ŗ?R?Y D8fS{JͶVmw)J3ۋV@X|ڎd+?er 1:=7,zޣo1f_z3H/ kHxa=*L6NRkwb"w;1z)77s\ ?ֺ,5K9#{n.ZͲز=`73ñH˭>f^77=W} 2SVjue_>m车>?58_pЈWBփy4,El_o\R(pmH(dCՁƟ%&[cޥ1u뙴=׹:"ġr L2c^]'K'/Jn 0lXmU9.7Oz4.{ӠSaI|"}j@-%n(gOUet!)XՖ2By;CoX%4l݀dI K6Y4Wq R~gS,Tv5G?%Wu6w-CuGĥ@3@ cUֽc2':u=/\yVjg3lܩQgǑ s|is[ #j8b=۳܁@ptrm}LCJ(%S(Uň翋WͯO |M0EsR\DVpÙ``\gjM #3=PT.qrnr%=)|xo^8}o<R>E+zBΦK8V-7㼳cq7Ȋ.q†X{2R3e< bݱ9 X;OofN >~ݝq НTvK""G\loal0|N4Lƒgf|jtA'B# ?{2 x[W神ݼ 3֕x)z[[bDoB %w v:F47P}u\C {+W y  -'> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 3141 0 obj << /Length1 2881 /Length2 20706 /Length3 0 /Length 22335 /Filter /FlateDecode >> stream xڌP- ~pwwww$n5C  I*`ݽGE$fhvtpcbcfH(ijXY9YYّ4m@#Qi\\mp2IP n`qYYczX W$* G'o+k7p 50ؘJ@7k=89hnrnnN,,@{WfG+a:F5@ rY~ Pڃ) imBv6 WАS86VۀOsllW N@o+":X2ڹ:@;/@\]l\]m~+ R 7W_$m\@{sA6ʰpwbrqvIc!Y\3en+/%/1_'G'% %}T7BbcXؘ@V6H ˿1]lc?#Y8:y6Yt$e)_pq;*x9X:& {3c);=憬\_lߌe$ngohocxn;5J wʹ `eo#m\m@6nb_{fgRutuXYG^.s[ ɿT wF)sG_K Xeo!0;8].H "K7F<߈"_ `,2;E7FE7sQ\~#0E_ F`.ohF`.ڿo\#_;wׅ _9;? 7; пrN_bڸ>_A~g2f@s[W;0s@na[l r/{>  a>@x2GZw4yu['Fɴ3!4CN~6;xZ~-)+%'&dGDNoSCŇbĈDL~O~om!{yT _z~j>6[˭X)V+m,UYkr87&bz3/٫RD$X_u9jMv^|J|WXԾx 1kB tkヤ~c=drXxv.|2,ouPw4L^3XzzJ~2 GpaPWX;R8?ӧ{k6!~A,j李9r>PU;k=7&OKc+CgZgpw>a -2켪Npe#`tRorL] fs,}ݵ2r^ʰ/Ikٓ'*✦¥ ra%<Cї4W#tc,SZS?oRܤ&N5H2Ϲ/u 7&{gc-d)k49f#Aʼqv6Z+Xc+BmT䝃҇rK#AsRZߊ14Ϫg] P 4f#D?ɍtM\LlG+cw}i'ypȇ/4j U|#Y:#on'VUfGF}VFqI_rk!z QmT'ݨgUJHr=Q;`?[;Mj/աexDgrI,{?g"h]G8Q%E~޹~_az*9mlJDf>Y]asF83[j]U_i7JC]M0o]lW7&U4.uaŃ]0s|Qӗ2ӚJ|p&V_<6Pƻ\?Q# m_Ǚ(f3e>ftES3^A6dR%"f kz~mz )b VJ}*2_gHVʔ7 ?đ/AWR^&\$;QYlqј83^3Ty7n?\;!iWJǬ 43qT= l۱f$G #S_1)W-bS&Jn?>E6Vץ2ڇ%<%Hoboȴa.r  Qgِ,z^ᕿ 󐨍VlIԯ0~)B[3T06mNL![AaiޗOMi7x=.~Hc<"AgͷVisFƾ2ǻ MG NV:N>->ʼY|K릎o@L˶#]=gv1zdxpdE+WUhDzdWEE5h:ǃbEGG*V(p6e ̽Rաgetew8%tNhot5Q5>h*&)~D>ŻD[HW>ޭ@^;f" {8!_>dE,oy˧$} _+Bedԏ;4a/7D6*gW : r.bMK="İ|wL|Ѫ$8 ͶFMVGp͎&Gzd]S#`Bqc@]m߱BܟYivKct +srOm*n;Q9/AFxXݟq!{?fL!I~{e&791]f2wuPCahΜ=b֋Tw;Lg=u׍d`W}UHF'3"0fMv/y>!ӑJǕ{q;AD&SX.{DhrGpXK&˜oQ44,`Bѣ< 5+z6 =:єM[7Vf̴H}UD1SPiTN=?qx1.'}17rv~U0Z&,4x"0ֈۻU µ7KRǼ3!K&K\=x֢ 2jՇgg#T! }MHD&Y6\oסԤc=[{\G)np .̨}`35u_y1 $m.I/"1p!8LY9z")_ƶʛnkK M: ) 9h˾uJs=,ަ^'8 yE6\WJM#"ЈN?[N4u" ZĞ%r*L 97:@(2皓u]~Z:`&ZqߵLy*?{?#zWc"΃5` d%aA8=mLMFNM/~YsɌB[oH_|fjBP5ߵEWR0CmJk~TBԺ>L1{ݦ4\tH!Rb1}kN@ar[])Ѱ40d\.8I{zx%Ӌ0IN# Z1Uipיxh|- CLK ~fŒYP<}<4.ra%q _O^ n0̍X8)&NrqiۄJDPx/!&||X֔4'gųݦzԥ;2܎0-KB(ʴ=Z.Fl.'IKuVs!UתﺉϙSAjj>eh$Շ(Fz{nLjvz;+Ю2#7!hwQg⓾2 q=M+t%z\M`DDpD^$%N֬U^in [ [;\߯Rb`&jt+ C!?D =koDe?^ z0UDp=ڇjDsuv>qBBZD+tgU$?p]ñpQrJ4# 8O˃o&6/DQwV{ʔtr)*FJ˸Ai6ިy2ej φ2hwge(+I9$ /]JƹRP)@qzk"uA{vXo+V>&rdž5j Wr1sXRDN[;J#Vgn$5/i-{ wgsxqPMzH6M- ~ .pdg@Ҏ)W_]2 ]&4$>B Ey0}5$c*eRLYUĔc~ƝK;` ƒ;ΐLZŭwcB2,K8X)OgBxdX)r;~r\&*k|2? :oX_x[<-+FPRZE#YL&6@߻!Ҳ|(]0po^1BuIDGA@^GEꙖʛ׮X:xŋB&brSM^YOJ~Q!KnaZ+ısΊ#o./Q3Y}.ܼ'F6V#ѱ&k&Goˆ>=pז(z+EP3H{ E@TVn$Kp&PLQn'@f6ŒFʳ8vc@S%VCJqBGw/yy4Лo*9J-ّ9$$T0F=qGDzfÁI3G|:ZwsJ_p~6_g`.4 5;(tJ`;`nX]%(qtܶ;33\ yT ߸ fn-?* F: lBb^'K|ʊR=xx#h<1R5ɟ'2avw/MNC/H{XT`6|DZdt,-RB>-53L'RO~TTF7@x4z+MYzdQ3΅{1%clz :B׫Zufaq-XZ? ^xfڨ`OヷG`7imik(GX9hs9z8g4. YnO=l|8S n|`[Zmgb[ M\P;!\@Ҙkj"'d!}7aΊ 7%+NhH;rBbd,g8QZg>p4ZM4M:T@JEHW_;4Vb=tD˗rj zWoc1K'EҸܪHJV .^X0k ?@fUQw5lxAP3Tp(i)x⟢6=ҧf&5(N֜~1=i2˥T(I[­FWZfURxQ$ 4ϭ+"HAcr|.qvRO| g mW[$]@[5;5arb5ҨH$ٺIDzr=!5nZ*(8_[#4&w&Q7AQ?p4B׼řcr2.6H(+&j(' h vUcLߪ|޴%£GфƍhW -'\նR|ͻص\Ɵ˼){EV2VFvgZ6ԨY$a5tҽJt?v' _u4pbWq] Nyv},Z*VObwS 7!kJ9tV%p0+tOl~\]+Ir=ԡ{aA65Jը .x)5,CN_@Ta 3mڇ.vۏc#WhY Mx&||4zlI6Sߓ q +=\&/sѣ/2!KLL4P { ֥SJ4auئŋ|MEL,[ZEW}bF@I cbh׍IqD\^v%L!~DąfNi ުl;q EYl3RhaFBqd5,zH됺(U{Ȼ36ive}C rd=l.dFk9mr@] ,z6k#oo0(6[_T3_Ue8ؘ.(>abS!~Nx!D ײkB񴑯X^R=w ͨT M$*A\xv,֮2q AwxcGCOz"KU~KqxW!Z̬=*=~~YIrv~_ʟĊX"lq#K?_ua[ Q@_ cD69:Qi-8x_i۳2*jDm.cܡ!UsN|\`EьiTaՔyhr# .쀡ON{,(7̔; 7h(:-~A) WpqM04kl8iǣ/f4]o>b׌>Kd=ewo DBiq/K?1L/$N1wFeG>_;倢D.{d|:@p2Gf G:. 0adؙ),yL*0uޑlo_#,Z dOyq~vb&@ _H}J<5,'(ZW2c'4=MsTtݩ~J|+z 3mc&rX{Ǫ 2jsFJPvwޜ;jάa= } g 8N|ўnRB9&\? r }BfGxQ h~ rǤW<'Yɛ~Kp.WB>GXK{7m"%GKj])1ߔj?ILK-݊ZV.S+izTh= ./]}&,wFFͽbWoV{_^zzJdu;X>D c037]]4OӑqtvbԢ>Xi솱.mq |6.5& |P *h 61Æ%8we~tiljnSOFhZL䶅8\>.--/lp*'/fF"zDZu"1m&ErW0zG"n= TiI(t|a yW)b_!ٍϗ2Ů[c`ƋAB,z4NTdiXX`Xzq;njGZ!ZfV b#\:ϔvWLԿ- BMz\,yrBa5Sh C_e~R377%rlލ7#0 %{+H[Si!*/\وHhXRw@_NoةVߔol-pM-Ye<ǖ{ Q"Pz8A>GͽYj+.w:W[4AK e:0`! +hh?Ia&%b$CؘjMBΧ!/e9ɠG3d4l+c8+u t)e]"q ϣg9c_R2Pu{kS Z]RX'Ӟ$Me^`I"[&o/T iLaiF^ρR{$Fm[G͹ga^aIz&WEx7e4B(c:2>rE-j-9xzdzr_~o#4w NLBrm3նKA ]K1K1{_%3<:0X7#.>ft`Po!Npc7 O GûeKhjd">6CcStőh5wMKd 몹>j9I (fo80.Yx9>*@&Mu9zX͇rskP'ܮTIǟa Ld_?D5:zgu h9^_5DEñf  u}[beJ0TI*rw}Hnۓ]"m7g{rݧ%לOh! q4u Vݳɴ~a79q!c3ZaOeW:WzgkmA6- GB~zgO p\^`,A#(!ҩGTtUG_]xXJFvgJa6AFʿ:kq+-[{d-h^)Զհ-IۡwU_[B.)4fN)\I=0mk\2l%;oo1D+D wL` %{~z4J!H2 Fa͕ CF=j8d^wI6)e;Kq ߍȜ pwXƯ^06K1tO[@'Nb!uR*b4Kw.2_<^FIlE@懡ۇ _``~e3jw4 - P<q&- 8T=oB&_/e1 {Q-NK0-c`Ay}.zn(gW@獪[bJmLF*TMqSB7嬍dE |Q(xfGo};" [^kQn'ƕ- aJ3;#Z =rw{'NY_XhM㺡*NO(R!RZatG?*1nIb$"Z|y͏dyXĩn9=.vWF]Nņ_%qP2/B'28pc|i%ކXf!_n1DTl6>Zch'c'?A}Ι|k>LIr%x5%ˢvI:?:(!0M!֗4NdHoOW'j8ܜB&ajap/!sh†PlO˪6&۽3C$c%}LO#6ogBnUylR"dqvyl\Rf'~Ն B'Mc LȆvڮ~빁|uK%^(r VZK?ُ[ L-yd XT46U#­p\V; G˾Hoڟ)'~p@WB`RCe"`_J;1N2F^- MCqnlq$Yh}"]&58JK[OMr*|RݤFPeJuD8_0t n}m^A-p0:EI1ves]֐NdCfZϐQ`B2wXTߙgjWpУ4&-uji#JΐyHÎEw}j񁲾 7J6)׎ DNzuǟWs;v&=l>wuSpdNO9cTȱvPʦCj׭5nTRGan.]mAnM` @w: Z)"&]#8K9rF6`b9H74] iɲKk]Z샇`}ٰ<(MC vV8I'(U\Qw]g2HوȲQ_[^~|OK, \\-za# N$ rdaB㥟p 0WYUwÌV# =~|Q`y[`fb^nΑ'-"p˝2UDURt)Qːu5P.-R}?OSXkKS86B?~,~k){Tg^iuj_(' RO6UFYɜLZBhE|,'RAg"O(puSz6zu38CA f ۤwxfgGQi=G<%B|O|ruY BJ1m1Sm[1e5!NXa.J$|Q]nIJ]"mXSSyEVmwGdt[ 'ƈ\+2?bR׀Ͽh'mXsmbC`8>s 7}hBD+13AMBKߥ$'犴CʇZ·)PB~vi|tKhe)B@BVl!נG {9Tѭ5e(^}2hfgj_U᪽-$ D_wD^Oq Do<:g(-ȊC'aOIJ".xo% ȯ<ڍb.A7,gwdL[~rMqG.c$:$|!?w ($Ky=sǠJM цOG}99s'屎i A-~<5}:f)Lּw+lCwxB.9'h[uh9z+ozG;5ZIl=2`- 8٪ߗI;08GQfKv7-y^ [n=zL0g)l* pfX72vXgM&bYxY۫K?"9d}Al+{薈OκRr8JrfYI+:j H1tˉ1Nd?>Eto䐑 둘U{% qBHNcvVbeN`zK`kzʵS'-@et(XjN Fy搡PA۵Ye95fO`-pkb猿wK&vA.n؞b #0٧e,㇗.}[E{  uUT4#'`MpE"PCM!K)^>br͓o$_]PJP~7^bsG";ph0'`3+B/0f rQڮT;)1R8FM|02UK.D&d{ }(b6;tM\Ï za讣G0-sP1f.Ks^'Y8<O5~فq{Z{CߛARëJYJu;(vHHG \% $\(yqzGS0sKn_4ا 0k3- <|ra Dd^0O($js9PQA:A F!۟uZ*C\4 xwzz/JC «cdNv%/=H8gSYX)a4 idϪ56\ ͏\4eM3jGG淎 w&Jn߯?QyV&nyFYŶ0^c}FT^Id>GU2m(iSN 3p W]U>,Λ8ʤ_ly4~9۟vW醴+~&d X=,r+ok1V2MtT)jOďV3 @IoH{^w7K*e+5 t|.M9vWf5{llU54ؼrY2-$SɧE:h0{l`-a2|&Xӻ!IgDueZ96V3±{;3uB~`;9YQ@4EeMgFvk J!^13jCVqI&kzx\Z^oTV73 OvN [FWU-r Ds>Wa 䑓k+ρ:!iW]:'P#{q"-`י n׮U]mUF]˄@c*ى䲠$`PoZWfIuv=Vg& Y@baOec $AW0Zx.ydPWM}jDxs /Sqa|n筭^]slқֺvk(8{I{hl'Xbz[Þ|gOwˮFH {ǫ=jWȎ?VIA<Yo 8lrk6J(K A|F@'% Ԙ¼tWgM-l"hJrP?ZtвJ*!?f$ pXli= (:X.8?.\,:Lo;Z͍4_]]g!-0X: :$򆢵[/+ UFRҷv{&WԖ(P.+|c%g8S@^(WI˙76OtNZ 6jw֧ѹ9knN]$1ݝ@da2=n8lvNR@&/<끚#d<0fJŞژ/ B%G>Hv R./v .0!rU6yco,@i -㑹 MrLFGᏯZ:;=.V~'*>?ZrV>#0 HUVH%c&'+Ǎ9I˾~jњn-( ;sr2OL<%4\OzUx[ڎQH; ^v("lRgmWAnCz g4kȱiq!\WSqVxg"!FbՑf+A{EkOq\--diJTԔajoc#IO3Tԓ憵D݊62~//@RbjN zȩڽ %FlARr)e ˬQ <"6X81C 2}=Rn(9J Gxll&δr%rQ8n 3W ޯ !7#7Qd]z#6lTn]FiC=!l JW ݭCHub tXy{ٌxh U|RёWs4em8V d>8J$GTޖjdԔދ|q=(> ƏǰݚnçsI"X@}F(p[:"A4AU<|!hJM_M=Ɲ搌$MU`W01> Ä.lZ4ze"&(GaձOo&T-d_OhÿCR,&G(,#nZ8AO.2.3V[ȗscMfk )-.7lr_tׯ wG>nCI MqZ,iLBIH5G]Zw/嶺U+Qu VwMe";!2V${c*i %Tl }Tj!CEYa/! E?+K&JE ´s̀RٔLf 4Z{@y]Z4j[(wv.M![vq2-}HW\vULؚo@a-RK\Uȗן7a`6E4;v߾ۜ>!ޱ`7"/ ѯE{@3'N}sW6w~j39j_M/ d~":mm_[pWB~ϰYOAutRNy̢E_0`}M5?P5b "hC!퉶,d3|DuI®Ă\jZNV/4 j5 7ě*?Ă1԰E֑b\D'L~5PdT].Azپ\64=|v]sv}fMeܦ|tF"<&wh;NL)S驮k+N7eTiM(sտB^Pl9&J WgrnmT lA# C9Z)Ő몯d\,}l𼾶f]!\^Ncre/HW=ے6eyr|h嬣Z@aQsK/L*h"N+u' 9Zc$$rۯ-˙h'Sa?ZvxK590/*k'r0ONDF`^DV f<Ԉ-$L{܂]6B[Bo|˙l:"^`=bѮ9iJ8Njfߞ$㮻AB48 =wt"Nx n4xQGyaDZk A>|Ltn.ږ 7V ﻯm2^[05/4m2C3(n_@#ʊĭ QjXu|r0SJq"u'i&&셨Y ̆Gl!3t{N &:&+MSCUxGxVXq''llo!0ݭ|oexL5Ă]\?ݯ7‹7-'cTY- )13PJ&M Zød/ b+->Q wE[|2)v endstream endobj 3143 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 3145 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 3103 0 obj << /Type /ObjStm /N 100 /First 1028 /Length 3782 /Filter /FlateDecode >> stream x[YsI~ݘu_DlN6`X;dt00~3*PK/DRvy}YM\ЮB(S(y!DR{$l!mq^ B9 &% >YH4R $(\)4P#eB&eN L]@t2RI!5WFj\ SrV]XRp" R8 9Q< Q h>l2 @=!3(pa*T"X$C%LN`BoNu[5`4&15VaҠ3L@B08=u`<$=D `jH/QKA0aGz1 <:Iڠq QGu`1H h U" IpЎ'(2-F bKw+T:-'Duu$Jb8sq82X$u~$Hx"\ āe^2˼e1u;@25.@@QE.@$,3 H\1x e ٨$b :Ǐwُ۲`'/fh6PPtbW ? N*;Rp|8ѤCЯx`>=LژJHv2OY?,Y}VD^N]He}v2BrD #͌m~7zV[",WW_Ѻ{!A /ܮzy ~R\)gdO ~?Ѣ)~O^P1g"bjSb:S~+oqǼ .{c ᎑P gW\=eUH"1Gi$:ʴMi4IM'YsQvSN3tlUTX^~ DXAږD;pV5Wu(( +[pYMWTsV$ͱT[';Z'cфVX\#c4i`ݫx2 Im^sNLbm6f(*AU\)c@P*_ZyKG(gas[]8bt[tl2BEvqEmk/jVSP,Eu]%u[!n|r?񖨶Ybz׺1g̱Y@ "xluP< J{Ew>9 %u8:ԛL{`p7 ouY$Sk}izi3F&oo-'UsӸ6>T%%:u|J_Nl;O& %$i$k63lb˽0*4'xƢ*%lXifq.bVYz7iotzeIW9W3'1w77=ȩA9)i\eozQ: Y?Ļ7S5dLħQH%@{\_t6dz0(^3 YXgtlnH:zyiUSq ?L ;c8F,z}FһWX)O_݌bmSVBU(: ?wr$jmT$%AOpjݓ7DVA&n* bB 1)*65ZMi%TxR[pF[ŋ+c=o!~V:^Dplvӽg/.yz2,@j1 neFmóR 07 e}xGtlSYrUuZ8G5aXN1| _Fn3U"tFeqƢ7X^xQ (,lYm}>CpnPmn ӽ~;= f i,EfVM3W\KapuUt|-g;i_1Y|Prlz'-s8LghTa !rv=Mgw#˲Xw)\15BjhG"vzs ~ )= NVJTi m2Ri/(~Qv-^11*~6NK;TֈP[,՘ /rȕ۳VíH5=UVa|6k)ϕoiҧ2 lX&=A:m^{2)q5px߼ůpnqB:n\։d#0>#̢~Q6)M!r[si0k&Uw3P/c]#|)C`F5tKmt ]áKQp \ð (X7CF-E6Pz Cf@ACk14 PPLŬŴA1KA1 PPtEEA1KA PPTEEAKAQ PPTU_d7 endstream endobj 3154 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1689 /Filter /FlateDecode >> stream xڅj$G ~~JRUò9B^`>,NGHmyt-Ooln _PeA /msMyI-xkG_жO#6 q`CBU[+eLNjU8_B7A[oV1V{wo={h/~-=փv9|e/F#ZV^vT_Y?L}[mXݏl2)nHރB{˘=*xakyaz۹s=z9_@sv)Dsfs=l~Lha5網9yTh;Om6v.~v.~$M\WEܯ zJհth;~ZL+_$0]Š tphRvV!* nWV/arbw`Sm$`$^O6Ƽ^&te+`Q@BN ;' v' g~0h[O|{/`;O?߾<]]_{R|K @nPGc  |~6@@*!oA 4R KR )H,K)c)PI]/5,JRLR{} \fr 82cp)29K)3HR RY,hRf)EmH R"YR$HFd)RJ )H)np"R2. e4RF¥[^GF ,Oh@3O4X9)>h@r )@)Rh,IJ +f)%ZI1xBk6@J - c30H932H#K)3HRf)e)H,eR4HFf)ZJ E)h)EiH RYR$HF g)RJ )p)HY RF2)#KRRg`=?>CSʠ=堧2)=5AO9 z AOMSz*BSʠ=堧2)=6A9 z AMcz*CA%`OɎ!u|d^[Oc8xz8~3!#T ?s4auw@xwt`BC(X>Gi21>r#%>!)9 } C8)9 } )}e#?@XJ! @jV (Q3q 7@@(#)`BRJ`Rw)?{grRJR`%)'K 3JGRnJB0g-o%o_K>KHέg5iMy/|Mx k4Rm,}i>-i'> ,o" R"YR$HF g)RJ )H)np¥RF#%1 8q~g{C8=`]9aY= endstream endobj 3155 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1707 /Filter /FlateDecode >> stream xڅ͎# FɏYA` NVH [\ sy#wSՊiXlЃ1^d/1!4ǰtzj@Dx{e++[G7vXe+NX.N_q`ަڌγ-U{3/yޗm.)/t1y}软 Sѷ~xO~'ׯ_?? +8'~~#nÿ[?}_o}_}<noXv?V}pMz itgk]c5[$ } 7!f)c5Pz>* 2p@G HR)hHR)H, R"YR$HF g)RJ )H)nP¥ RBY R(HF e)TJ e7RvBFR+?.$.\1{rXJNk<>3p”HJ j鋠kg FRfEF2)#K)9QI!ENiYX%p5$"Zd`%EH pe(;)HRR𙔋PZ@9?B]=&"w}Su%Ͼ>~o-%jYJAx'#q0Ҝg&ği`;~~5DAQ̺EAQio{=*oFRv)e)6 endstream endobj 3156 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1803 /Filter /FlateDecode >> stream xڅݎ$ )xH# 0 A7?dO4nzS#R~gkv6cTb >arX\thG9i|4(GVE/Pn/qLtV75DD{}h,6[ЗLki֍BZ A[kYh2B'C%h(@ԪXK{wkia&MhPX JUnS[C`\zhY \,*}*]cf}͢b: J>]@5r6#*EJ?t6l z71l4 4S]:bSiȡ@[GX[z:zl>֖*+S% M嵥=zt[4d9hU:>4 CA+4̛C3obZ{_ڣ۶ ]mؾPʇc6mgXZ c 9.7m0~e3IM{ut1doWޡ=ՕyaQfR1Jko??;׷/?Y}8÷{?_/}tp^P/8m^| ֶ(H8A x ֧`EAR6PJRS(A)P%" E=;҃ ( W%UxR1F`7T"8 E4'X{pvGO/tڻN%xF"?ݜ~bvi#Ws=V\)( H(D\-%F0$BGǽ G R`Gy#7Q M馁 D(B D(HAI` XQ0rU&x/p]VĭsE|<ιZ_f7t0*Xo#3E8^ x|9o7LNP6*NrW (Aќ 6* ޣ` ;(}# P7Pbz :(p fwz˿(ĐZJ꽠ąI.GK-<٤,1eIS{AQ0]xR7)sLYҔ٥ƽ#t{7)* xtUUċ Gt*I1崊`i R<^*/IbHS&2F0NWpI9V)WRxR^J%t'jݜ6`W{pٜ{`=p9bl#:?J gK`cK`%p&mR[Kg/ţKR`u)>SΖjK і@jKXmAiΥRF =u*\Y\Y"JZy E -KJ"zp^x%zH8/^@UR/d#(B;z/H~AZE"+d Ջx u*s^`Zp>JWAnKwlDg8lDi g8мBp@j83hF0BI r{( J r(A!g8F0@p g8P@9ÁJ4(57PZ j(-B)栴 5E6P$Bi)qPdE"BE6P8B8(K!blx^]O~b@^vp\R'xA6I?}c endstream endobj 3157 0 obj << /Type /ObjStm /N 100 /First 985 /Length 3078 /Filter /FlateDecode >> stream xڍYM7W1:)~@7Y#{dO0&ưlMJ$_իWGHaAhnPP ˖vLf0F!@B78_pC .0 ,fơSI1p0E@K+ ++bSkH80lZ3,M4Zlz^3AJ$!%Җ}%$a101sF(rn~6*X~$"B2~"שݻqb^-/xL;}8ͷ hC HW@jaĆA"Q$CP^E(\ ؍34+]B!R hE25R! B(p_`O|hVkQHtux_,0|Ԁ=Q5\ `%Jx XVDq Q܊(NՀ]Q\![֢(ŮbkQ\W[bWD(+-D1+ZQL-b Q-Q` [9JܝΗ"⟷Ht Zq]륻zB/Հ]TW>fdAtA*)/rV뛀F PIK/0׷u0 " Bր,D+P-J xH(" բ(TBDIU*Pw~)UkA:G<\y]g oxα >7`z_`O'-wz=]^xr~ր$WH\49^PR hEpкw @kn[S .ȼ2՚΅xsMZ\\|'ŅW]xP/Px.*cqi<^xPs^P+g;;Yb;h</n4 *ōrJw j-dC CC-*f)UuǤYTOA PfA7et>V)lxܠuxŲ תp+-6WKǵ jx)/xXF{}u9Тܫp} '{ oiWuvVluM!LfH!P!=y=f3i73.}7i go?ݚLb !N`Axc16#' X33tSRD4 ,tcoDZlEs_)8BmsZn/{ +WhX02_aa|{;PfNCWD1sJ($JNfRj <~ĔLX*Xdʄ KcގcP38(JFIϞ(iUsSi]BQ1S20^ P0:[2#9utLaCh902I0Y 'XSy@n}À*tS:lJ'~țq%k\3SFDIyl{)*KE_)49:nnc)-7˓` a3gF"=DP3'cA9QMg5I2#`$|rg&Fl ^(z%PJ1Sroqv mơ+c!K.,HׂK -H"b0.Z C \bh)_8%8l `߬@)~)oຐ{,/M}CuFb@={"3 ?q'~^H,<(B̃RH!z;!(:@)$(D)2DB0@E_.DRekeF<`4?p8|O%Mؾ/ǯ:$G ї+}89?O_wO6so-6^鸏0/o<|s؝χ8hi6'*唣bh1`)csR.6q1rE"=_A*+l<hO|69b}re31R,i{ endstream endobj 3265 0 obj << /Producer (pdfTeX-1.40.25) /Creator (TeX) /CreationDate (D:20210705080620Z) /ModDate (D:20210705080620Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 3195 0 obj << /Type /ObjStm /N 70 /First 721 /Length 3831 /Filter /FlateDecode >> stream xڥ[Ys8~ϯ⥣*L>ġ4R b\Qhq[yIaJqJ`Z6["HB>RBi) 4Mbajщ '͔đA aN1#aVdeX.EA3V( DR@LA6 \86A؄M$3L6)'@&hiMRbf t{ڄF{Aųϟ]J>tdsl0EAʌKj!E( &zN)C._eޭ, 7"SCRQ´ oAErPW}Jj{]^AK>ŽΦ!vwE*&M vGd]^#C6w(WE֚i,bw3J% DT Ǻ(|gd_#!dq̋"oRCZ04.hf|p)w"RKAkpmjѮ`×;Ύ g-x68 [ab:M xkbi~ɂ͒`Sa8^77y„:!WfOç6+K1(FbM;/f %Ɣ.",fC5")PW!uVG8ݛJܩ""=jf?.ӈ(WC|T<œBy+JYI‰6[ZeӅS픔}_".a1F-b!AM U( c`[7tT]oJ΀}! af+h$VYgar5,CL=6Frfgj&5$Ӧꋫ,)F|< vڴ^(u0=-`/m]:'ҽzW; "6yjrIx7A` s{0us2TZOcsx^Z&_ ]FNuWd͝YĝM S(/lfy~U:8񰁴p`嵁7ߪ}]j,4@ OPũj s{_H7O~_= *7ބonxS^7E]C(7wM0DkR{_dUϦ~yJbރO]~ glQ'cR*AcefTǺ#TNO~zZWQrUJg#a|W3[6EPO*뗻(j[# I#C& NGy7&~~y/UNx2˗*eϗ)P |ű>+xJڲPz!YgN8!9|aR,(SݾW3pQCt*v&c= ){$PVP:rIrǮ.AMO;>b.ϤDbOB,dPՌJ6|2Jmw۾ǝn{K^ N= M),t{,o! 63-Ouu(4tឹd7^?egwKY:ձ#2PհK,+/F8[Nw v{O|j.GX:|+IҶCJ<+;ܛI(=jq2g7p@F[hmܕzvwES$7Ƣq rEWu5i܍e'EO!0NIC>t "4^䤊yYJqHYs Q"p:S9u˪9uC֜na8UHwq,:P2ߪJ, {B: w\[tA]̌\e$sF86+Kib\LB"rQPY8mymcQc2 Qp̹>lM@ȫJ7b1'ufۛ\s6yþ:Ycq{p/D(3Xߐ,(+I5h2wCo`FchGsL{ɋO` @4یcDEZ 5R#{Xc @a|sme/<\zPa|s5FkW`yt@xѽ>ynaWcΉ>A+n'ھ,yy4 FO8=izjkcFSj8KK6n <38BC735B19A9A03931839B7B0B1BB58E>] /Length 7705 /Filter /FlateDecode >> stream x%y$}~g=g޻={&Fđ3-M8Ed rK$1*dPC7D&J(!(|穪o=ST**eT9{PV*2'+U6N<TSe_Em9X`1CRXaUZXc2}$VMl r{(ح &`3llmvN^= 8LG(pN)8 g,p.% W*\pnGp 6܁px14m'sx/->1vYU{ Re'c^pȬ S+`+8%c\%sU2W\%sU2W\%sU2W\%sU2W\%s % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H % R2H %poA˛TYsC{0U|CiqgĀYf%sHP< `!,0uXKa,VjXka 6l-Ѐ  `v `?p8 8p N8 <\p . :܀܂) w.܃#x MhA9 9/Sewc,urF,G,\)z o-\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%\RpI%+xOpIy*G8\qĘn~7z X [`7+`_ ~)_ ~)R_Ũ"X P%rX+a5zaLf `;쀝 &a7쁽80p 8 4p2\p -p=! >өr;1Z MRe.iY FzqsN,Ű6w W97a^[d 8 x 5`ܮ挙3fΘ9c挙3fΘ9c挙3fΘ9c挙3fΘ9c挙3fΘ9c67g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1s3g̜1schcf p18'$p98"\p57&|` n}xYqpύ bA|feʸ+q];񓏡 -h4< x 5`FfL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL1M4dL܅{4Yx^gcnG0w)cd/Å6v8ͬ^zdJ*dJ*dJ*dJ*dXe*VʀU2` Xe*VʀU2` Xe*VKng?į&50MV0Ж1&^է̀u5 ـ H pEm` 50`J5~@Slv# u0o6aQ۬zSۢƓVDfL=8U=8S>8O-d|~5R;_yF bϩ})o8+\$ep]dfl;"|`!pJi>64?6 dtJr:FP\mj朁 \NQ3jf0 \NR a5@oԎDmNpVCا+s?XvBmY1jky^mr,T;\.ʧ."ǡø\Kծ rdRZ|$t-dl;ȩؙjp0>MjwT$v|!;՚j]0Nx:nj{at ~8ZJCjob{쩷j(SsI>8:I8ޓAsSU{Gsjޒ7E'ۯdy'/pCm &u,S{Nނ#-W{Fwwsl)ycO sl{|Y&w֫Ȁw65}mT?&Gdlw&'cco? {dԎ͍-Q%v ;3/AL;j K6YaS<I}\1?"w$A;nK@;fur{,վFaWU T sR2sJcj_$7wLZ fP<ـ^^T;GnagW@;ir7D>E8'"q.k B^9G!_EMx#d|}ؠȴ}#?q6q蜓۱q#f>2F+v:-9B|_mqvn! _E~͓I2<5Opޅȯyi}| j1-TJNC׼ێ _n{ "v8%Ds* 5o{ ۋyr#d8V~Gs;`1YWߑbdZR~GXR\F;^LIo/&KQH~{1Y$w$,t$# m/' d/^LKؠhd_;#,뤣1ߞ vl#9ߞ b(seo/&˅o/&8$3rE\7+vN q/1GNֽHr |$du/Fis/ )#'ط2=+RGN=W- H{zG ɺwZF=7t{.Z;W{ߏ|$=|{.Z23̝gkhHG3Q> }McTM (| $ T-,~\{3'c#&2XZlnlaZ(axjŮ υǽqG-j{9/[0>"A˅ua S/2@+@ѺJa1k@nQZu }'%rD?u\ 7CM[{? r%wZg] }gir7{)r/{?Lsw&i IZ }WcQ8A*2>|BMǡu thWFjM7œKb3\P3q`u'C 1(#c@5M&Cahtzm!H|[q„ wٚ$n[q=5hk'y` CݚtaN> V w j1m%ቚVX)_6R26hZL3b3شM0抶 [bcL@osU}+f&~> &s7ϸn{aZ | ~8ҹU%vpD-P!0C3|p}F< d|Oa15ߑg!o 3&"ɨ >|E^aqVk$[tQo o[Qo>'o[Qo>#o[Qo>%[Qo>![QoN!ZټlAحߨ7[d@-7d|[QoƟŏ #26<RmON 2[RovA{d [RoƮ \ؿx\2yG-[(Ro&k ֍ԛS<vH[vH͏E Vԛ7q'D.C7% ֜ԛe 얠ԛ VԛWU ԛW5 ֦ԛu 얪ԛ 얪ԛM Vԛ ԛ,9ru-Yre.rU/ir7ģ2WS^v`͓~vkbAvKdav+fcQv h͐aag1D]b7 Ø*OA؇1Am!C< *l}ٜ _c ann$߃]7ޟh.Ǐ\5=:H Ø֑9O0fx4}Jx\M.ajR6W 5j+% ØV j467}Q3>_O*4A>I+>vF؇1i Øb6]5A؇4c Cͅ6n)qH [|r0&8A؇c>tЌ>tج!zh0allVH+'}趥>8>4i5>'A؇&{40[?q}ʣ<>tOxC^ax CW#WUgF/ CW#Mɣ>4y4A؇&S.xBaiLA؇~M>a<-2 Cao4Iaoğŏmv܈],FU|?;7Cc9kg9H_"^Tڦw;x*TDcVVg74>M8'I9>޳R銢[yv{|g[asgAd|x˘\7{0Ux#rlw.Ug/dt/쵐,? =[0]''?>rajl_^“TQkܫTod&TxK?j_8sVK،hDW-h[j۶Ň ό3P.؊Tv 0+3gYjoD̠DO˺͙T;{.؞jg2ZMуL_Jv碅t$զ[L_3gS$d|T{q2jVG]jsV3KOifv? ~3{fH4>8{]ğƻsGhYO V8WbbSi/4v[!.npȸ1~ m{ 퓆܁p,xCӸnW3`vutýsrCkHc{eBV46^Ix6Tպ4/j}?hڐ_OjcjSߊWi/}|ߜNڒ,\7zAih4s҂-5w vNUp-ֹ¶X$cb,llt-֪XMh,֛XQm=ӴiwJӖFLIv_6bYY#c:1ӱ ׻s[5&Ʈ]`]#5]5]5]5]5]5]5]-GWꡫxyTW)ՅIjt1]efkW3Պ=t5MtO]ҮhWDWbjvu>Z]-BWkjfvu/2]}F@w |w |woW=w_rV endstream endobj startxref 479552 %%EOF apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/000077500000000000000000000000001515050116100223405ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/000077500000000000000000000000001515050116100244115ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/000077500000000000000000000000001515050116100253555ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/API-Alphabetically.html000066400000000000000000000131431515050116100315720ustar00rootroot00000000000000 API Alphabetically (Octave Tablicious v0.3.7) apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/API-Reference.html000066400000000000000000000047261515050116100305610ustar00rootroot00000000000000 API Reference (Octave Tablicious v0.3.7) apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/API-by-Category.html000066400000000000000000000311061515050116100310400ustar00rootroot00000000000000 API by Category (Octave Tablicious v0.3.7)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    array2table

    Convert an array to a table.

    cell2table

    Convert a cell array to a table.

    struct2table

    Convert struct to a table.

    tableOuterFillValue

    Outer fill value for variable within a table.

    vartype

    Filter by variable type for use in suscripting.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    startsWith

    Test if strings start with a pattern.

    endsWith

    Test if strings end with a pattern.

    contains

    Test if strings contain a pattern.

    categorical

    Categorical variable array.

    discretize

    Group data into discrete bins or categories.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    localdate

    Represents a complete day using the Gregorian calendar.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    NaT

    “Not-a-Time”.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    days

    Duration in days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    timezones

    List all the time zones defined on this system.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    8.1.4 Missing Data

    fillmissing

    Fill missing values.

    ismissing

    Find missing values.

    rmmissing

    Remove missing values.

    standardizeMissing

    Insert standard missing values.

    missing

    Generic auto-converting missing value.

    isnanny

    Test if elements are NaN or NaN-like

    eqn

    Determine element-wise equality, treating NaNs as equal

    8.1.5 Validation Functions

    mustBeA

    Requires that input is of a given type.

    mustBeCellstr

    Requires that input is a cellstr.

    mustBeCharvec

    Requires that input is a char row vector.

    mustBeFinite
    mustBeInteger
    mustBeMember
    mustBeNonempty
    mustBeNumeric
    mustBeReal
    mustBeSameSize

    Requires that the inputs are the same size.

    mustBeScalar

    Requires that input is scalar.

    mustBeScalarLogical

    Requires that input is a scalar logical.

    mustBeVector

    Requires that input is a vector or empty.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    dispstrs

    Display strings for array.

    isfile
    isfolder
    pp

    Alias for prettyprint, for interactive use.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    size2str

    Format an array size for display.

    splitapply

    Split data into groups and apply function.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    8.1.7 Example Datasets

    octave.datasets

    Example dataset collection.

    octave.dataset

    The ‘dataset’ class provides convenient access to the various datasets included with Tablicious.

    8.1.8 Example Code

    octave.examples.plot_pairs

    Plot pairs of variables against each other.

    8.1.9 Uncategorized

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    octave.chrono.dummy_function

    A dummy function just for testing the doco tools.

    octave.chrono.DummyClass

    A do-nothing class just for testing the doco tools.

    octave.examples.coplot

    Conditioning plot.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Copying.html000066400000000000000000000067701515050116100276650ustar00rootroot00000000000000 Copying (Octave Tablicious v0.3.7)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056651515050116100312040ustar00rootroot00000000000000 Data Sets from R (Octave Tablicious v0.3.7)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    Date-and-Time-Representation.html000066400000000000000000000060501515050116100334760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html Date and Time Representation (Octave Tablicious v0.3.7)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074561515050116100324630ustar00rootroot00000000000000 Datenum Compatibility (Octave Tablicious v0.3.7)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060051515050116100315720ustar00rootroot00000000000000 Defined Time Zones (Octave Tablicious v0.3.7)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Durations.html000066400000000000000000000046401515050116100302170ustar00rootroot00000000000000 Durations (Octave Tablicious v0.3.7) apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Example-Data-Sets.html000066400000000000000000000102141515050116100314170ustar00rootroot00000000000000 Example Data Sets (Octave Tablicious v0.3.7)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the octave.datasets and octave.dataset classes.

    To see a list of the available data sets, run octave.datasets.list(). Then to load one of the example data sets, run octave.datasets.load('examplename'). For example:

    octave.datasets.list
    t = octave.datasets.load('cupcake')
    

    You can also load it by calling octave.dataset.<name>. This does the same thing. For example:

    t = octave.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on octave.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc octave.dataset.cupcake
    

    (The command help octave.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Getting-Started.html000066400000000000000000000064101515050116100312510ustar00rootroot00000000000000 Getting Started (Octave Tablicious v0.3.7)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.3.7/tablicious-0.3.7.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Introduction.html000066400000000000000000000072241515050116100307310ustar00rootroot00000000000000 Introduction (Octave Tablicious v0.3.7)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.3.7 for GNU Octave.

    Tablicious provides Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Missing-Functionality.html000066400000000000000000000105151515050116100325040ustar00rootroot00000000000000 Missing Functionality (Octave Tablicious v0.3.7)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports most of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that all these will be implemented some day.

    These areas of missing functionality are all tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/1.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/NaT.html000066400000000000000000000077521515050116100267400ustar00rootroot00000000000000 NaT (Octave Tablicious v0.3.7)

    8.2.42 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Table-Construction.html000066400000000000000000000070321515050116100317640ustar00rootroot00000000000000 Table Construction (Octave Tablicious v0.3.7)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Table-Representation.html000066400000000000000000000100201515050116100322630ustar00rootroot00000000000000 Table Representation (Octave Tablicious v0.3.7)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113551515050116100305450ustar00rootroot00000000000000 Tables vs SQL (Octave Tablicious v0.3.7)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Time-Zones.html000066400000000000000000000141251515050116100302400ustar00rootroot00000000000000 Time Zones (Octave Tablicious v0.3.7)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/Validation-Functions.html000066400000000000000000000117411515050116100323070ustar00rootroot00000000000000 Validation Functions (Octave Tablicious v0.3.7)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/array2table.html000066400000000000000000000102711515050116100304540ustar00rootroot00000000000000 array2table (Octave Tablicious v0.3.7)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/calendarDuration-Class.html000066400000000000000000000063061515050116100325720ustar00rootroot00000000000000 calendarDuration Class (Octave Tablicious v0.3.7)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/calendarDuration.html000066400000000000000000000206471515050116100315330ustar00rootroot00000000000000 calendarDuration (Octave Tablicious v0.3.7)

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    calendarDuration_002ecalendarDuration.html000066400000000000000000000077001515050116100353750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.calendarDuration (Octave Tablicious v0.3.7)

    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    calendarDuration_002edispstrs.html000066400000000000000000000061141515050116100337670ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.dispstrs (Octave Tablicious v0.3.7)

    8.2.2.8 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    calendarDuration_002eisnan.html000066400000000000000000000057341515050116100332330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.isnan (Octave Tablicious v0.3.7)

    8.2.2.9 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is just an alias for isnat, provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    calendarDuration_002eisnat.html000066400000000000000000000060311515050116100332300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.isnat (Octave Tablicious v0.3.7)

    8.2.2.3 calendarDuration.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    calendarDuration_002eminus.html000066400000000000000000000061401515050116100332460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.minus (Octave Tablicious v0.3.7)

    8.2.2.7 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000066101515050116100331570ustar00rootroot00000000000000 calendarDuration.plus (Octave Tablicious v0.3.7)

    8.2.2.5 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.

    calendarDuration_002esizeof.html000066400000000000000000000057631515050116100334240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.sizeof (Octave Tablicious v0.3.7)

    8.2.2.2 calendarDuration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    calendarDuration_002etimes.html000066400000000000000000000061271515050116100332410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.times (Octave Tablicious v0.3.7)

    8.2.2.6 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.

    calendarDuration_002euminus.html000066400000000000000000000057501515050116100334410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html calendarDuration.uminus (Octave Tablicious v0.3.7)

    8.2.2.4 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/calmonths.html000066400000000000000000000064611515050116100302420ustar00rootroot00000000000000 calmonths (Octave Tablicious v0.3.7)

    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/calyears.html000066400000000000000000000057671515050116100300650ustar00rootroot00000000000000 calyears (Octave Tablicious v0.3.7)

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical.html000066400000000000000000000173171515050116100305310ustar00rootroot00000000000000 categorical (Octave Tablicious v0.3.7)

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff: - gt, ge, lt, le - Ordinal support in general - countcats - summary

    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002eaddcats.html000066400000000000000000000062361515050116100326010ustar00rootroot00000000000000 categorical.addcats (Octave Tablicious v0.3.7)

    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002ecategorical.html000066400000000000000000000135671515050116100334010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.categorical (Octave Tablicious v0.3.7)

    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    categorical_002ecategories.html000066400000000000000000000061371515050116100332440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.categories (Octave Tablicious v0.3.7)

    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062061515050116100326430ustar00rootroot00000000000000 categorical.cellstr (Octave Tablicious v0.3.7)

    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062411515050116100330450ustar00rootroot00000000000000 categorical.dispstrs (Octave Tablicious v0.3.7)

    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    categorical_002eiscategory.html000066400000000000000000000063061515050116100332660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.iscategory (Octave Tablicious v0.3.7)

    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002eismissing.html000066400000000000000000000061221515050116100331750ustar00rootroot00000000000000 categorical.ismissing (Octave Tablicious v0.3.7)

    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062351515050116100326540ustar00rootroot00000000000000 categorical.isnanny (Octave Tablicious v0.3.7)

    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061171515050116100331600ustar00rootroot00000000000000 categorical.isordinal (Octave Tablicious v0.3.7)

    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    categorical_002eisundefined.html000066400000000000000000000064321515050116100334120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.isundefined (Octave Tablicious v0.3.7)

    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002emergecats.html000066400000000000000000000075741515050116100331560ustar00rootroot00000000000000 categorical.mergecats (Octave Tablicious v0.3.7)

    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    categorical_002eremovecats.html000066400000000000000000000074351515050116100332710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.removecats (Octave Tablicious v0.3.7)

    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002erenamecats.html000066400000000000000000000067571515050116100332510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.renamecats (Octave Tablicious v0.3.7)

    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    categorical_002ereordercats.html000066400000000000000000000072151515050116100334320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.reordercats (Octave Tablicious v0.3.7)

    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002esetcats.html000066400000000000000000000062401515050116100326370ustar00rootroot00000000000000 categorical.setcats (Octave Tablicious v0.3.7)

    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002esizeof.html000066400000000000000000000056351515050116100324770ustar00rootroot00000000000000 categorical.sizeof (Octave Tablicious v0.3.7)

    8.2.5.3 categorical.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    categorical_002esqueezecats.html000066400000000000000000000056231515050116100334520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html categorical.squeezecats (Octave Tablicious v0.3.7)

    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002estring.html000066400000000000000000000062251515050116100325020ustar00rootroot00000000000000 categorical.string (Octave Tablicious v0.3.7)

    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002esummary.html000066400000000000000000000060301515050116100326630ustar00rootroot00000000000000 categorical.summary (Octave Tablicious v0.3.7)

    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/categorical_002eundefined.html000066400000000000000000000065721515050116100331420ustar00rootroot00000000000000 categorical.undefined (Octave Tablicious v0.3.7)

    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/cell2table.html000066400000000000000000000101571515050116100302600ustar00rootroot00000000000000 cell2table (Octave Tablicious v0.3.7)

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/colvecfun.html000066400000000000000000000065331515050116100302360ustar00rootroot00000000000000 colvecfun (Octave Tablicious v0.3.7)

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/contains.html000066400000000000000000000073461515050116100300730ustar00rootroot00000000000000 contains (Octave Tablicious v0.3.7)

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime-Class.html000066400000000000000000000063621515050116100311110ustar00rootroot00000000000000 datetime Class (Octave Tablicious v0.3.7)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime.html000066400000000000000000000177311515050116100300500ustar00rootroot00000000000000 datetime (Octave Tablicious v0.3.7)

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eNaT.html000066400000000000000000000076211515050116100311760ustar00rootroot00000000000000 datetime.NaT (Octave Tablicious v0.3.7)

    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    datetime_002econvertDatenumTimeZone.html000066400000000000000000000065221515050116100351050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html datetime.convertDatenumTimeZone (Octave Tablicious v0.3.7)

    8.2.9.35 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002edatenum.html000066400000000000000000000056541515050116100321550ustar00rootroot00000000000000 datetime.datenum (Octave Tablicious v0.3.7)

    8.2.9.19 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.

    datetime_002edatenum2posix.html000066400000000000000000000061101515050116100332270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html datetime.datenum2posix (Octave Tablicious v0.3.7)

    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002edatestr.html000066400000000000000000000065501515050116100321620ustar00rootroot00000000000000 datetime.datestr (Octave Tablicious v0.3.7)

    8.2.9.15 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002edatestrs.html000066400000000000000000000066461515050116100323530ustar00rootroot00000000000000 datetime.datestrs (Octave Tablicious v0.3.7)

    8.2.9.16 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066461515050116100327040ustar00rootroot00000000000000 datetime.datestruct (Octave Tablicious v0.3.7)

    8.2.9.17 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002edatetime.html000066400000000000000000000132301515050116100323010ustar00rootroot00000000000000 datetime.datetime (Octave Tablicious v0.3.7)

    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002ediff.html000066400000000000000000000060541515050116100314230ustar00rootroot00000000000000 datetime.diff (Octave Tablicious v0.3.7)

    8.2.9.32 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002edispstrs.html000066400000000000000000000057051515050116100323700ustar00rootroot00000000000000 datetime.dispstrs (Octave Tablicious v0.3.7)

    8.2.9.14 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eeq.html000066400000000000000000000061601515050116100311160ustar00rootroot00000000000000 datetime.eq (Octave Tablicious v0.3.7)

    8.2.9.27 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002ege.html000066400000000000000000000062031515050116100311020ustar00rootroot00000000000000 datetime.ge (Octave Tablicious v0.3.7)

    8.2.9.28 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002egmtime.html000066400000000000000000000061171515050116100317750ustar00rootroot00000000000000 datetime.gmtime (Octave Tablicious v0.3.7)

    8.2.9.20 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002egt.html000066400000000000000000000061761515050116100311320ustar00rootroot00000000000000 datetime.gt (Octave Tablicious v0.3.7)

    8.2.9.29 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002ehms.html000066400000000000000000000060761515050116100313060ustar00rootroot00000000000000 datetime.hms (Octave Tablicious v0.3.7)

    8.2.9.10 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063271515050116100325030ustar00rootroot00000000000000 datetime.isbetween (Octave Tablicious v0.3.7)

    8.2.9.33 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eisnan.html000066400000000000000000000057521515050116100316270ustar00rootroot00000000000000 datetime.isnan (Octave Tablicious v0.3.7)

    8.2.9.23 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eisnat.html000066400000000000000000000056261515050116100316350ustar00rootroot00000000000000 datetime.isnat (Octave Tablicious v0.3.7)

    8.2.9.22 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002ele.html000066400000000000000000000061771515050116100311210ustar00rootroot00000000000000 datetime.le (Octave Tablicious v0.3.7)

    8.2.9.25 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002elinspace.html000066400000000000000000000070171515050116100323110ustar00rootroot00000000000000 datetime.linspace (Octave Tablicious v0.3.7)

    8.2.9.34 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002elocaltime.html000066400000000000000000000067011515050116100324630ustar00rootroot00000000000000 datetime.localtime (Octave Tablicious v0.3.7)

    8.2.9.21 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002elt.html000066400000000000000000000061771515050116100311400ustar00rootroot00000000000000 datetime.lt (Octave Tablicious v0.3.7)

    8.2.9.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eminus.html000066400000000000000000000067771515050116100316620ustar00rootroot00000000000000 datetime.minus (Octave Tablicious v0.3.7)

    8.2.9.31 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002ene.html000066400000000000000000000061641515050116100311170ustar00rootroot00000000000000 datetime.ne (Octave Tablicious v0.3.7)

    8.2.9.26 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060371515050116100324360ustar00rootroot00000000000000 datetime.ofDatenum (Octave Tablicious v0.3.7)

    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000062401515050116100331570ustar00rootroot00000000000000 datetime.ofDatestruct (Octave Tablicious v0.3.7)

    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eplus.html000066400000000000000000000065371515050116100315040ustar00rootroot00000000000000 datetime.plus (Octave Tablicious v0.3.7)

    8.2.9.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.

    datetime_002eposix2datenum.html000066400000000000000000000061741515050116100332410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html datetime.posix2datenum (Octave Tablicious v0.3.7)

    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062141515050116100325320ustar00rootroot00000000000000 datetime.posixtime (Octave Tablicious v0.3.7)

    8.2.9.18 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000064101515050116100325240ustar00rootroot00000000000000 datetime.proxyKeys (Octave Tablicious v0.3.7)

    8.2.9.8 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002esizeof.html000066400000000000000000000055531515050116100320150ustar00rootroot00000000000000 datetime.sizeof (Octave Tablicious v0.3.7)

    8.2.9.7 datetime.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061071515050116100324730ustar00rootroot00000000000000 datetime.timeofday (Octave Tablicious v0.3.7)

    8.2.9.12 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eweek.html000066400000000000000000000055521515050116100314500ustar00rootroot00000000000000 datetime.week (Octave Tablicious v0.3.7)

    8.2.9.13 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eymd.html000066400000000000000000000061031515050116100312770ustar00rootroot00000000000000 datetime.ymd (Octave Tablicious v0.3.7)

    8.2.9.9 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/datetime_002eymdhms.html000066400000000000000000000063061515050116100320140ustar00rootroot00000000000000 datetime.ymdhms (Octave Tablicious v0.3.7)

    8.2.9.11 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/days.html000066400000000000000000000062121515050116100272040ustar00rootroot00000000000000 days (Octave Tablicious v0.3.7)

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/discretize.html000066400000000000000000000121171515050116100304120ustar00rootroot00000000000000 discretize (Octave Tablicious v0.3.7)

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/dispstrs.html000066400000000000000000000065541515050116100301300ustar00rootroot00000000000000 dispstrs (Octave Tablicious v0.3.7)

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration-Class.html000066400000000000000000000057541515050116100311460ustar00rootroot00000000000000 duration Class (Octave Tablicious v0.3.7)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration.html000066400000000000000000000117571515050116100301030ustar00rootroot00000000000000 duration (Octave Tablicious v0.3.7)

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002echar.html000066400000000000000000000061161515050116100314600ustar00rootroot00000000000000 duration.char (Octave Tablicious v0.3.7)

    8.2.13.9 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002edispstrs.html000066400000000000000000000057251515050116100324230ustar00rootroot00000000000000 duration.dispstrs (Octave Tablicious v0.3.7)

    8.2.13.8 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002ehours.html000066400000000000000000000057421515050116100317070ustar00rootroot00000000000000 duration.hours (Octave Tablicious v0.3.7)

    8.2.13.4 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002elinspace.html000066400000000000000000000064431515050116100323440ustar00rootroot00000000000000 duration.linspace (Octave Tablicious v0.3.7)

    8.2.13.10 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002emilliseconds.html000066400000000000000000000060441515050116100332300ustar00rootroot00000000000000 duration.milliseconds (Octave Tablicious v0.3.7)

    8.2.13.7 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002eminutes.html000066400000000000000000000057701515050116100322340ustar00rootroot00000000000000 duration.minutes (Octave Tablicious v0.3.7)

    8.2.13.5 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002eofDays.html000066400000000000000000000057271515050116100317770ustar00rootroot00000000000000 duration.ofDays (Octave Tablicious v0.3.7)

    8.2.13.1 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002eseconds.html000066400000000000000000000057751515050116100322130ustar00rootroot00000000000000 duration.seconds (Octave Tablicious v0.3.7)

    8.2.13.6 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002esizeof.html000066400000000000000000000055001515050116100320360ustar00rootroot00000000000000 duration.sizeof (Octave Tablicious v0.3.7)

    8.2.13.2 duration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/duration_002eyears.html000066400000000000000000000057411515050116100316710ustar00rootroot00000000000000 duration.years (Octave Tablicious v0.3.7)

    8.2.13.3 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/endsWith.html000066400000000000000000000073361515050116100300410ustar00rootroot00000000000000 endsWith (Octave Tablicious v0.3.7)

    8.2.14 endsWith

    Function: out = endsWith (str, pattern)
    Function: out = endsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings end with a pattern.

    Tests whether the given strings end with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/eqn.html000066400000000000000000000074601515050116100270350ustar00rootroot00000000000000 eqn (Octave Tablicious v0.3.7)

    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/fillmissing.html000066400000000000000000000110471515050116100305660ustar00rootroot00000000000000 fillmissing (Octave Tablicious v0.3.7)

    8.2.16 fillmissing

    Function: [out, tfFilled] = fillmissing (X, method)
    Function: [out, tfFilled] = fillmissing (X, 'constant', fill_val)
    Function: [out, tfFilled] = fillmissing (X, movmethod, window)

    Fill missing values.

    Fills missing values in X according to the method specified by method.

    This method is only partially implemented.

    method may be: 'constant' 'previous' 'next' 'nearest' 'linear' 'spline' 'pchip' movmethod may be: 'movmean' 'movmedian'

    Returns out, which is X but with missing values filled in, and tfFilled, a logical array the same size as X which indicates which elements were filled.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/hours.html000066400000000000000000000062651515050116100274140ustar00rootroot00000000000000 hours (Octave Tablicious v0.3.7)

    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/index.html000066400000000000000000001373661515050116100273720ustar00rootroot00000000000000 Top (Octave Tablicious v0.3.7)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.3.7.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/iscategorical.html000066400000000000000000000055541515050116100310650ustar00rootroot00000000000000 iscategorical (Octave Tablicious v0.3.7)

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/isdatetime.html000066400000000000000000000055561515050116100304060ustar00rootroot00000000000000 isdatetime (Octave Tablicious v0.3.7)

    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/isduration.html000066400000000000000000000055221515050116100304300ustar00rootroot00000000000000 isduration (Octave Tablicious v0.3.7)

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/isfile.html000066400000000000000000000044461515050116100275260ustar00rootroot00000000000000 isfile (Octave Tablicious v0.3.7)

    8.2.21 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/isfolder.html000066400000000000000000000044461515050116100300620ustar00rootroot00000000000000 isfolder (Octave Tablicious v0.3.7)

    8.2.22 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/ismissing.html000066400000000000000000000131331515050116100302510ustar00rootroot00000000000000 ismissing (Octave Tablicious v0.3.7)

    8.2.23 ismissing

    Function: out = ismissing (X)
    Function: out = ismissing (X, indicator)

    Find missing values.

    Determines which elements of X contain missing values. If an indicator input is not provided, standard missing values depending on the input type of X are used.

    Standard missing values depend on the data type:

    • NaN for double, single, duration, and calendarDuration
    • NaT for datetime
    • ' ' for char
    • {''} for cellstrs
    • Integer numeric types have no standard missing value; they are never considered missing.
    • Structs are never considered missing.
    • Logicals are never considered missing.
    • Other types have no standard missing value; it is currently an error to call ismissing on them without providing an indicator.
      • This includes cells which are not cellstrs; calling ismissing on them results in an error.
      • TODO: Determine whether this should really be an error, or if it should default to never considering those types as missing.
      • TODO: Decide whether, for classdef objects, ismissing should polymorphically detect isnan()/isnat()/isnanny() methods and use those, or whether we should require classes to override ismissing() itself.

    If indicator is supplied, it is an array containing multiple values, all of which are considered to be missing values. Only indicator values that are type-compatible with the input are considered; other indicator value types are silently ignored. This is by design, so you can pass an indicator that holds sentinel values for disparate types in to ismissing() used for any type, or for compound types like table.

    Indicators are currently not supported for struct or logical inputs. This is probably a bug.

    Table defines its own ismissing() method which respects individual variables’ data types; see table.ismissing.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/isnanny.html000066400000000000000000000074511515050116100277310ustar00rootroot00000000000000 isnanny (Octave Tablicious v0.3.7)

    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: isnan, isnat, ismissing, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate.html000066400000000000000000000121641515050116100301770ustar00rootroot00000000000000 localdate (Octave Tablicious v0.3.7)

    8.2.25 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002eNaT.html000066400000000000000000000100551515050116100313250ustar00rootroot00000000000000 localdate.NaT (Octave Tablicious v0.3.7)

    8.2.25.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002edatenum.html000066400000000000000000000057331515050116100323070ustar00rootroot00000000000000 localdate.datenum (Octave Tablicious v0.3.7)

    8.2.25.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002edatestr.html000066400000000000000000000065761515050116100323260ustar00rootroot00000000000000 localdate.datestr (Octave Tablicious v0.3.7)

    8.2.25.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002edatestrs.html000066400000000000000000000066741515050116100325100ustar00rootroot00000000000000 localdate.datestrs (Octave Tablicious v0.3.7)

    8.2.25.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002edatestruct.html000066400000000000000000000071031515050116100330250ustar00rootroot00000000000000 localdate.datestruct (Octave Tablicious v0.3.7)

    8.2.25.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002edispstrs.html000066400000000000000000000057231515050116100325240ustar00rootroot00000000000000 localdate.dispstrs (Octave Tablicious v0.3.7)

    8.2.25.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002eisnan.html000066400000000000000000000055501515050116100317570ustar00rootroot00000000000000 localdate.isnan (Octave Tablicious v0.3.7)

    8.2.25.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002eisnat.html000066400000000000000000000056411515050116100317660ustar00rootroot00000000000000 localdate.isnat (Octave Tablicious v0.3.7)

    8.2.25.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002elocaldate.html000066400000000000000000000105701515050116100325750ustar00rootroot00000000000000 localdate.localdate (Octave Tablicious v0.3.7)

    8.2.25.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002eposixtime.html000066400000000000000000000063521515050116100326710ustar00rootroot00000000000000 localdate.posixtime (Octave Tablicious v0.3.7)

    8.2.25.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/localdate_002eymd.html000066400000000000000000000057501515050116100314420ustar00rootroot00000000000000 localdate.ymd (Octave Tablicious v0.3.7)

    8.2.25.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/milliseconds.html000066400000000000000000000063601515050116100307350ustar00rootroot00000000000000 milliseconds (Octave Tablicious v0.3.7)

    8.2.26 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/minutes.html000066400000000000000000000055711515050116100277370ustar00rootroot00000000000000 minutes (Octave Tablicious v0.3.7)

    8.2.27 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/missing.html000066400000000000000000000075011515050116100277170ustar00rootroot00000000000000 missing (Octave Tablicious v0.3.7)

    8.2.28 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/missing_002edispstrs.html000066400000000000000000000061341515050116100322420ustar00rootroot00000000000000 missing.dispstrs (Octave Tablicious v0.3.7)

    8.2.28.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/missing_002eismissing.html000066400000000000000000000060311515050116100323700ustar00rootroot00000000000000 missing.ismissing (Octave Tablicious v0.3.7)

    8.2.28.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/missing_002eisnan.html000066400000000000000000000057621515050116100315050ustar00rootroot00000000000000 missing.isnan (Octave Tablicious v0.3.7)

    8.2.28.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/missing_002eisnanny.html000066400000000000000000000055321515050116100320470ustar00rootroot00000000000000 missing.isnanny (Octave Tablicious v0.3.7)

    8.2.28.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/missing_002emissing.html000066400000000000000000000054341515050116100320420ustar00rootroot00000000000000 missing.missing (Octave Tablicious v0.3.7)

    8.2.28.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeA.html000066400000000000000000000071321515050116100276060ustar00rootroot00000000000000 mustBeA (Octave Tablicious v0.3.7)

    8.2.29 mustBeA

    Function File: x = mustBeA (x, type)
    Function File: x = mustBeA (x, type, label)

    Requires that input is of a given type.

    Raises an error if the input x is not of type type, as determined by isa (x, type).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeCellstr.html000066400000000000000000000064471515050116100310460ustar00rootroot00000000000000 mustBeCellstr (Octave Tablicious v0.3.7)

    8.2.30 mustBeCellstr

    Function File: x = mustBeCellstr (x, label)

    Requires that input is a cellstr.

    Raises an error if the input x is not a cellstr (a cell array of char arrays).

    TODO: Decide whether to require the contained char arrays be rowvec/empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeCharvec.html000066400000000000000000000071621515050116100310040ustar00rootroot00000000000000 mustBeCharvec (Octave Tablicious v0.3.7)

    8.2.31 mustBeCharvec

    Function File: x = mustBeCharvec (x, label)

    Requires that input is a char row vector.

    Raises an error if the input x is not a row vector of chars. char row vectors are Octave’s normal representation of single strings. (They are what are produced by '...' string literals.) As a special case, 0-by-0 empty chars (what is produced by the string literal '') are also considered charvecs.

    This does not differentiate between single-quoted and double-quoted strings.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeFinite.html000066400000000000000000000045521515050116100306470ustar00rootroot00000000000000 mustBeFinite (Octave Tablicious v0.3.7)

    8.2.32 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeInteger.html000066400000000000000000000045501515050116100310240ustar00rootroot00000000000000 mustBeInteger (Octave Tablicious v0.3.7)

    8.2.33 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeMember.html000066400000000000000000000045561515050116100306440ustar00rootroot00000000000000 mustBeMember (Octave Tablicious v0.3.7)

    8.2.34 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeNonempty.html000066400000000000000000000045621515050116100312430ustar00rootroot00000000000000 mustBeNonempty (Octave Tablicious v0.3.7)

    8.2.35 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeNumeric.html000066400000000000000000000045501515050116100310310ustar00rootroot00000000000000 mustBeNumeric (Octave Tablicious v0.3.7)

    8.2.36 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeReal.html000066400000000000000000000045421515050116100303130ustar00rootroot00000000000000 mustBeReal (Octave Tablicious v0.3.7)

    8.2.37 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeSameSize.html000066400000000000000000000066631515050116100311560ustar00rootroot00000000000000 mustBeSameSize (Octave Tablicious v0.3.7)

    8.2.38 mustBeSameSize

    Function File: [a, b] = mustBeSameSize (a, b, labelA, labelB)

    Requires that the inputs are the same size.

    Raises an error if the inputs a and b are not the same size, as determined by isequal (size (a), size (b)).

    labelA and labelB are optional inputs that determine how the input will be described in error messages. If not supplied, inputname (...) is used, and if that is empty, it falls back to "input 1" and "input 2".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeScalar.html000066400000000000000000000063671515050116100306440ustar00rootroot00000000000000 mustBeScalar (Octave Tablicious v0.3.7)

    8.2.39 mustBeScalar

    Function File: x = mustBeScalar (x, label)

    Requires that input is scalar.

    Raises an error if the input x is not scalar, as determined by isscalar (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeScalarLogical.html000066400000000000000000000064651515050116100321360ustar00rootroot00000000000000 mustBeScalarLogical (Octave Tablicious v0.3.7)

    8.2.40 mustBeScalarLogical

    Function File: x = mustBeScalarLogical (x, label)

    Requires that input is a scalar logical.

    Raises an error if the input x is not scalar, as determined by isscalar (x) && islogical (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/mustBeVector.html000066400000000000000000000062731515050116100306750ustar00rootroot00000000000000 mustBeVector (Octave Tablicious v0.3.7)

    8.2.41 mustBeVector

    Function File: x = mustBeVector (x, label)

    Requires that input is a vector or empty.

    Raises an error if the input x is not a row vector and is not 0-by-0 empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".

    octave_002echrono_002eDummyClass.html000066400000000000000000000106001515050116100341310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.chrono.DummyClass (Octave Tablicious v0.3.7)

    8.2.44 octave.chrono.DummyClass

    Class: DummyClass

    A do-nothing class just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    Instance Variable of DummyClass: double x

    An x. Has no semantics.

    Instance Variable of DummyClass: double y

    A y. Has no semantics.

    octave_002echrono_002eDummyClass_002eDummyClass.html000066400000000000000000000071361515050116100366730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.chrono.DummyClass.DummyClass (Octave Tablicious v0.3.7)

    8.2.44.1 octave.chrono.DummyClass.DummyClass

    Constructor: obj = octave.chrono.DummyClass ()

    Constructs a new scalar DummyClass with default values.

    Constructor: obj = octave.chrono.DummyClass (x, y)

    Constructs a new DummyClass with the specified values.

    octave_002echrono_002eDummyClass_002ebar.html000066400000000000000000000061461515050116100353560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.chrono.DummyClass.bar (Octave Tablicious v0.3.7)

    8.2.44.3 octave.chrono.DummyClass.bar

    Method: out = bar (obj)

    Computes a bar value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    octave_002echrono_002eDummyClass_002efoo.html000066400000000000000000000065471515050116100354020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.chrono.DummyClass.foo (Octave Tablicious v0.3.7)

    8.2.44.2 octave.chrono.DummyClass.foo

    Method: out = foo (obj)

    Computes a foo value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    octave_002echrono_002edummy_005ffunction.html000066400000000000000000000063141515050116100355120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.chrono.dummy_function (Octave Tablicious v0.3.7)

    8.2.43 octave.chrono.dummy_function

    Function: out = dummy_function (x)

    A dummy function just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/octave_002edataset.html000066400000000000000000000244121515050116100316230ustar00rootroot00000000000000 octave.dataset (Octave Tablicious v0.3.7)

    8.2.45 octave.dataset

    Class: dataset

    The dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It’s provided so you can use tab completion on the dataset list.

    octave_002edataset_002eAirPassengers.html000066400000000000000000000075571515050116100347740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.AirPassengers (Octave Tablicious v0.3.7)

    8.2.45.2 octave.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    octave_002edataset_002eBJsales.html000066400000000000000000000110411515050116100335300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.BJsales (Octave Tablicious v0.3.7)

    8.2.45.9 octave.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002eBOD.html000066400000000000000000000102631515050116100326160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.BOD (Octave Tablicious v0.3.7)

    8.2.45.10 octave.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    octave_002edataset_002eChickWeight.html000066400000000000000000000113071515050116100344030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.ChickWeight (Octave Tablicious v0.3.7)

    8.2.45.12 octave.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.ChickWeight
    
    octave.examples.coplot (t, "Time", "weight", "Chick");
    
    
    octave_002edataset_002eDNase.html000066400000000000000000000111741515050116100332060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.DNase (Octave Tablicious v0.3.7)

    8.2.45.18 octave.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.DNase;
    
    # TODO: Port this from R
    
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    octave_002edataset_002eEuStockMarkets.html000066400000000000000000000111341515050116100351140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.EuStockMarkets (Octave Tablicious v0.3.7)

    8.2.45.22 octave.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = octave.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price,1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    octave_002edataset_002eFormaldehyde.html000066400000000000000000000114201515050116100346110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Formaldehyde (Octave Tablicious v0.3.7)

    8.2.45.24 octave.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    % TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    % TODO: Add linear model summary output
    % TOD: Add linear model summary plot
    
    octave_002edataset_002eHairEyeColor.html000066400000000000000000000151061515050116100345400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.HairEyeColor (Octave Tablicious v0.3.7)

    8.2.45.26 octave.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    octave.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    octave_002edataset_002eHarman23cor.html000066400000000000000000000102741515050116100342730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Harman23cor (Octave Tablicious v0.3.7)

    8.2.45.27 octave.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    octave.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    octave_002edataset_002eHarman74cor.html000066400000000000000000000103511515050116100342750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Harman74cor (Octave Tablicious v0.3.7)

    8.2.45.28 octave.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    octave.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    octave_002edataset_002eIndometh.html000066400000000000000000000110071515050116100337560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Indometh (Octave Tablicious v0.3.7)

    8.2.45.29 octave.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    octave_002edataset_002eInsectSprays.html000066400000000000000000000104461515050116100346440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.InsectSprays (Octave Tablicious v0.3.7)

    8.2.45.31 octave.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    octave_002edataset_002eJohnsonJohnson.html000066400000000000000000000102601515050116100351640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.JohnsonJohnson (Octave Tablicious v0.3.7)

    8.2.45.34 octave.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = octave.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    octave_002edataset_002eLakeHuron.html000066400000000000000000000104761515050116100341100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.LakeHuron (Octave Tablicious v0.3.7)

    8.2.45.35 octave.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = octave.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    octave_002edataset_002eLifeCycleSavings.html000066400000000000000000000126301515050116100354040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.LifeCycleSavings (Octave Tablicious v0.3.7)

    8.2.45.37 octave.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = octave.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    octave_002edataset_002eLoblolly.html000066400000000000000000000111041515050116100337750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Loblolly (Octave Tablicious v0.3.7)

    8.2.45.38 octave.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    octave_002edataset_002eNile.html000066400000000000000000000112161515050116100331000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Nile (Octave Tablicious v0.3.7)

    8.2.45.44 octave.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = octave.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    octave_002edataset_002eOrange.html000066400000000000000000000115241515050116100334260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Orange (Octave Tablicious v0.3.7)

    8.2.45.48 octave.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    octave_002edataset_002eOrchardSprays.html000066400000000000000000000124761515050116100350060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.OrchardSprays (Octave Tablicious v0.3.7)

    8.2.45.49 octave.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.OrchardSprays;
    
    octave.examples.plot_pairs (t);
    
    
    octave_002edataset_002ePlantGrowth.html000066400000000000000000000102201515050116100344540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.PlantGrowth (Octave Tablicious v0.3.7)

    8.2.45.50 octave.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = octave.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    octave_002edataset_002ePuromycin.html000066400000000000000000000124731515050116100342040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Puromycin (Octave Tablicious v0.3.7)

    8.2.45.54 octave.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = octave.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    octave_002edataset_002eTheoph.html000066400000000000000000000142621515050116100334440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Theoph (Octave Tablicious v0.3.7)

    8.2.45.66 octave.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = octave.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    octave_002edataset_002eTitanic.html000066400000000000000000000146051515050116100336110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.Titanic (Octave Tablicious v0.3.7)

    8.2.45.67 octave.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    octave.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    octave_002edataset_002eToothGrowth.html000066400000000000000000000115331515050116100345030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.ToothGrowth (Octave Tablicious v0.3.7)

    8.2.45.68 octave.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = octave.dataset.ToothGrowth;
    
    octave.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    octave_002edataset_002eUCBAdmissions.html000066400000000000000000000141011515050116100346500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.UCBAdmissions (Octave Tablicious v0.3.7)

    8.2.45.71 octave.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    octave.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    octave_002edataset_002eUKDriverDeaths.html000066400000000000000000000147451515050116100350470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.UKDriverDeaths (Octave Tablicious v0.3.7)

    8.2.45.72 octave.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    octave.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    octave_002edataset_002eUKLungDeaths.html000066400000000000000000000111001515050116100344770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.UKLungDeaths (Octave Tablicious v0.3.7)

    8.2.45.74 octave.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = octave.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    octave_002edataset_002eUKgas.html000066400000000000000000000103711515050116100332240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.UKgas (Octave Tablicious v0.3.7)

    8.2.45.73 octave.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = octave.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    octave_002edataset_002eUSAccDeaths.html000066400000000000000000000100541515050116100342770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.USAccDeaths (Octave Tablicious v0.3.7)

    8.2.45.75 octave.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = octave.dataset.USAccDeaths;
    
    octave_002edataset_002eUSArrests.html000066400000000000000000000137571515050116100341200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.USArrests (Octave Tablicious v0.3.7)

    8.2.45.76 octave.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.USArrests;
    
    summary (t);
    
    octave.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    octave_002edataset_002eUSJudgeRatings.html000066400000000000000000000116241515050116100350520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.USJudgeRatings (Octave Tablicious v0.3.7)

    8.2.45.77 octave.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = octave.dataset.USJudgeRatings;
    
    figure
    octave.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    octave_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111101515050116100364520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.USPersonalExpenditure (Octave Tablicious v0.3.7)

    8.2.45.78 octave.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    octave_002edataset_002eVADeaths.html000066400000000000000000000113271515050116100336530ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.VADeaths (Octave Tablicious v0.3.7)

    8.2.45.80 octave.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    octave_002edataset_002eWWWusage.html000066400000000000000000000103541515050116100337240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.WWWusage (Octave Tablicious v0.3.7)

    8.2.45.85 octave.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002eWorldPhones.html000066400000000000000000000105161515050116100344570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.WorldPhones (Octave Tablicious v0.3.7)

    8.2.45.84 octave.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    octave_002edataset_002eairmiles.html000066400000000000000000000072311515050116100340200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.airmiles (Octave Tablicious v0.3.7)

    8.2.45.1 octave.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = octave.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    octave_002edataset_002eairquality.html000066400000000000000000000125501515050116100343770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.airquality (Octave Tablicious v0.3.7)

    8.2.45.3 octave.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = octave.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if i == j
          continue
        endif
        ix_subplot = (n_vars*(j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    octave_002edataset_002eanscombe.html000066400000000000000000000121441515050116100340010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.anscombe (Octave Tablicious v0.3.7)

    8.2.45.4 octave.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = octave.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim(haxs(1), x_limits);
    ylim(haxs(1), y_limits);
    
    octave_002edataset_002eattenu.html000066400000000000000000000114521515050116100335130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.attenu (Octave Tablicious v0.3.7)

    8.2.45.5 octave.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    octave_002edataset_002eattitude.html000066400000000000000000000111041515050116100340300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.attitude (Octave Tablicious v0.3.7)

    8.2.45.6 octave.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = octave.dataset.attitude
    
    octave.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    octave_002edataset_002eaustres.html000066400000000000000000000102221515050116100336730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.austres (Octave Tablicious v0.3.7)

    8.2.45.7 octave.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = octave.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    octave_002edataset_002ebeavers.html000066400000000000000000000106451515050116100336450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.beavers (Octave Tablicious v0.3.7)

    8.2.45.8 octave.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    octave_002edataset_002ecars.html000066400000000000000000000116701515050116100331450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.cars (Octave Tablicious v0.3.7)

    8.2.45.11 octave.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = octave.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    octave_002edataset_002echickwts.html000066400000000000000000000114241515050116100340310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.chickwts (Octave Tablicious v0.3.7)

    8.2.45.13 octave.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = octave.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    octave_002edataset_002eco2.html000066400000000000000000000116671515050116100327060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.co2 (Octave Tablicious v0.3.7)

    8.2.45.14 octave.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = octave.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    octave_002edataset_002ecrimtab.html000066400000000000000000000164011515050116100336330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.crimtab (Octave Tablicious v0.3.7)

    8.2.45.15 octave.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    

    octave_002edataset_002ecupcake.html000066400000000000000000000104721515050116100336270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.cupcake (Octave Tablicious v0.3.7)

    8.2.45.16 octave.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = octave.dataset.cupcake
    plot(datenum(t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric")
    
    
    octave_002edataset_002ediscoveries.html000066400000000000000000000106231515050116100345310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.discoveries (Octave Tablicious v0.3.7)

    8.2.45.17 octave.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    octave_002edataset_002eesoph.html000066400000000000000000000106651515050116100333360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.esoph (Octave Tablicious v0.3.7)

    8.2.45.19 octave.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    octave_002edataset_002eeuro.html000066400000000000000000000116601515050116100331660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.euro (Octave Tablicious v0.3.7)

    8.2.45.20 octave.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    octave_002edataset_002eeurodist.html000066400000000000000000000101151515050116100340440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.eurodist (Octave Tablicious v0.3.7)

    8.2.45.21 octave.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    octave_002edataset_002efaithful.html000066400000000000000000000121131515050116100340100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.faithful (Octave Tablicious v0.3.7)

    8.2.45.23 octave.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = octave.dataset.faithful;
    
    % Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    % Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    % Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    octave_002edataset_002efreeny.html000066400000000000000000000121061515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.freeny (Octave Tablicious v0.3.7)

    8.2.45.25 octave.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.freeny;
    
    summary(t)
    
    octave.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    octave_002edataset_002einfert.html000066400000000000000000000116041515050116100335010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.infert (Octave Tablicious v0.3.7)

    8.2.45.30 octave.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = octave.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    octave_002edataset_002eiris.html000066400000000000000000000121561515050116100331630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.iris (Octave Tablicious v0.3.7)

    8.2.45.32 octave.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    octave_002edataset_002eislands.html000066400000000000000000000104021515050116100336420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.islands (Octave Tablicious v0.3.7)

    8.2.45.33 octave.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/octave_002edataset_002elh.html000066400000000000000000000101741515050116100326750ustar00rootroot00000000000000 octave.dataset.lh (Octave Tablicious v0.3.7)

    8.2.45.36 octave.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = octave.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    octave_002edataset_002elongley.html000066400000000000000000000115431515050116100336650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.longley (Octave Tablicious v0.3.7)

    8.2.45.39 octave.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    octave_002edataset_002elynx.html000066400000000000000000000113371515050116100332070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.lynx (Octave Tablicious v0.3.7)

    8.2.45.40 octave.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = octave.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    octave_002edataset_002emorley.html000066400000000000000000000121361515050116100335220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.morley (Octave Tablicious v0.3.7)

    8.2.45.41 octave.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = octave.dataset.morley;
    
    # TODO: Port to Octave
    
    
    octave_002edataset_002emtcars.html000066400000000000000000000124301515050116100335010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.mtcars (Octave Tablicious v0.3.7)

    8.2.45.42 octave.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    octave_002edataset_002enhtemp.html000066400000000000000000000105011515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.nhtemp (Octave Tablicious v0.3.7)

    8.2.45.43 octave.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    octave_002edataset_002enottem.html000066400000000000000000000101421515050116100335140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.nottem (Octave Tablicious v0.3.7)

    8.2.45.45 octave.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002enpk.html000066400000000000000000000113061515050116100330010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.npk (Octave Tablicious v0.3.7)

    8.2.45.46 octave.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = octave.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    octave_002edataset_002eoccupationalStatus.html000066400000000000000000000103641515050116100361010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.occupationalStatus (Octave Tablicious v0.3.7)

    8.2.45.47 octave.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002eprecip.html000066400000000000000000000103671515050116100335010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.precip (Octave Tablicious v0.3.7)

    8.2.45.51 octave.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    octave_002edataset_002epresidents.html000066400000000000000000000111731515050116100343730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.presidents (Octave Tablicious v0.3.7)

    8.2.45.52 octave.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    octave_002edataset_002epressure.html000066400000000000000000000112321515050116100340570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.pressure (Octave Tablicious v0.3.7)

    8.2.45.53 octave.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    octave_002edataset_002equakes.html000066400000000000000000000120521515050116100335010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.quakes (Octave Tablicious v0.3.7)

    8.2.45.55 octave.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    octave_002edataset_002erandu.html000066400000000000000000000111331515050116100333200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.randu (Octave Tablicious v0.3.7)

    8.2.45.56 octave.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = octave.dataset.randu;
    
    
    
    octave_002edataset_002erivers.html000066400000000000000000000102651515050116100335260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.rivers (Octave Tablicious v0.3.7)

    8.2.45.57 octave.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    octave_002edataset_002erock.html000066400000000000000000000110461515050116100331500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.rock (Octave Tablicious v0.3.7)

    8.2.45.58 octave.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = octave.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    octave_002edataset_002esleep.html000066400000000000000000000113071515050116100333220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.sleep (Octave Tablicious v0.3.7)

    8.2.45.59 octave.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = octave.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    octave_002edataset_002estackloss.html000066400000000000000000000141761515050116100342270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.stackloss (Octave Tablicious v0.3.7)

    8.2.45.60 octave.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = octave.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    octave_002edataset_002estate.html000066400000000000000000000130021515050116100333240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.state (Octave Tablicious v0.3.7)

    8.2.45.61 octave.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.state;
    
    octave_002edataset_002esunspot_005fmonth.html000066400000000000000000000104541515050116100355270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.sunspot_month (Octave Tablicious v0.3.7)

    8.2.45.62 octave.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = octave.dataset.sunspot_month;
    
    
    
    octave_002edataset_002esunspot_005fyear.html000066400000000000000000000102131515050116100353330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.sunspot_year (Octave Tablicious v0.3.7)

    8.2.45.63 octave.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = octave.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    octave_002edataset_002esunspots.html000066400000000000000000000105131515050116100341060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.sunspots (Octave Tablicious v0.3.7)

    8.2.45.64 octave.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = octave.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    octave_002edataset_002eswiss.html000066400000000000000000000140731515050116100333650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.swiss (Octave Tablicious v0.3.7)

    8.2.45.65 octave.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    octave_002edataset_002etreering.html000066400000000000000000000111751515050116100340340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.treering (Octave Tablicious v0.3.7)

    8.2.45.69 octave.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = octave.dataset.treering;
    
    
    octave_002edataset_002etrees.html000066400000000000000000000113451515050116100333360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.trees (Octave Tablicious v0.3.7)

    8.2.45.70 octave.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = octave.dataset.trees;
    
    figure
    octave.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    octave_002edataset_002euspop.html000066400000000000000000000102461515050116100333610ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.uspop (Octave Tablicious v0.3.7)

    8.2.45.79 octave.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    octave_002edataset_002evolcano.html000066400000000000000000000112151515050116100336510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.volcano (Octave Tablicious v0.3.7)

    8.2.45.81 octave.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    octave.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    octave_002edataset_002ewarpbreaks.html000066400000000000000000000111771515050116100343600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.warpbreaks (Octave Tablicious v0.3.7)

    8.2.45.82 octave.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    octave_002edataset_002ewomen.html000066400000000000000000000113471515050116100333430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.women (Octave Tablicious v0.3.7)

    8.2.45.83 octave.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    octave_002edataset_002ezCO2.html000066400000000000000000000104531515050116100327700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.dataset.zCO2 (Octave Tablicious v0.3.7)

    8.2.45.86 octave.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/octave_002edatasets.html000066400000000000000000000064451515050116100320140ustar00rootroot00000000000000 octave.datasets (Octave Tablicious v0.3.7)

    8.2.46 octave.datasets

    Class: datasets

    Example dataset collection.

    datasets is a collection of example datasets to go with the Tablicious package.

    The datasets class provides methods for listing and loading the example datasets.

    octave_002edatasets_002edescription.html000066400000000000000000000066261515050116100347300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.datasets.description (Octave Tablicious v0.3.7)

    8.2.46.3 octave.datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    octave_002edatasets_002elist.html000066400000000000000000000063431515050116100333540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.datasets.list (Octave Tablicious v0.3.7)

    8.2.46.1 octave.datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    octave_002edatasets_002eload.html000066400000000000000000000067061515050116100333230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.datasets.load (Octave Tablicious v0.3.7)

    8.2.46.2 octave.datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    octave_002eexamples_002ecoplot.html000066400000000000000000000144341515050116100337070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.examples.coplot (Octave Tablicious v0.3.7)

    8.2.47 octave.examples.coplot

    Function: [fig, hax] = coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    octave_002eexamples_002eplot_005fpairs.html000066400000000000000000000113271515050116100351540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html octave.examples.plot_pairs (Octave Tablicious v0.3.7)

    8.2.48 octave.examples.plot_pairs

    Function: out = plot_pairs (data)
    Function: out = plot_pairs (data, plot_type)
    Function: out = plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/pp.html000066400000000000000000000100571515050116100266650ustar00rootroot00000000000000 pp (Octave Tablicious v0.3.7)

    8.2.49 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/rmmissing.html000066400000000000000000000106451515050116100302610ustar00rootroot00000000000000 rmmissing (Octave Tablicious v0.3.7)

    8.2.50 rmmissing

    Function: [out, tf] = rmmissing (X)
    Function: [out, tf] = rmmissing (X, dim)
    Function: [out, tf] = rmmissing (…, 'MinNumMissing', MinNumMissing)

    Remove missing values.

    If x is a vector, removes elements with missing values. If x is a matrix, removes rows or columns with missing data elements.

    dim is the dimension to operate along. Specifying a dimension forces rmmissing to operate in matrix instead of vector mode.

    MinNumMissing indicates how many missing element values there must be in a row or column for it to be considered missing and this removed. This option is only used in matrix mode; it is silently ignored in vector mode.

    Returns: out - the input, with missing elements or rows or columns removed tf - a logical index vector indicating which elements, rows, or columns were removed

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/scalarexpand.html000066400000000000000000000072661515050116100307230ustar00rootroot00000000000000 scalarexpand (Octave Tablicious v0.3.7)

    8.2.51 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/seconds.html000066400000000000000000000062771515050116100277150ustar00rootroot00000000000000 seconds (Octave Tablicious v0.3.7)

    8.2.52 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/size2str.html000066400000000000000000000064751515050116100300440ustar00rootroot00000000000000 size2str (Octave Tablicious v0.3.7)

    8.2.53 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/splitapply.html000066400000000000000000000114261515050116100304500ustar00rootroot00000000000000 splitapply (Octave Tablicious v0.3.7)

    8.2.54 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/standardizeMissing.html000066400000000000000000000071131515050116100321070ustar00rootroot00000000000000 standardizeMissing (Octave Tablicious v0.3.7)

    8.2.55 standardizeMissing

    Function: out = standardizeMissing (X, indicator)

    Insert standard missing values.

    Standardizes missing values in X by replacing the values listed in indicator with the standard missing values for the type of X.

    Standard missing values depend on the data type: * NaN for double, single, duration, and calendarDuration * NaT for datetime * ' ' for char * {''} for cellstrs * Integer numeric types have no standard missing value; they are never considered missing. * Structs are never considered missing. * Logicals are never considered missing.

    See also: table.standardizeMissing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/startsWith.html000066400000000000000000000074561515050116100304330ustar00rootroot00000000000000 startsWith (Octave Tablicious v0.3.7)

    8.2.56 startsWith

    Function: out = startsWith (str, pattern)
    Function: out = startsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings start with a pattern.

    Tests whether the given strings start with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string.html000066400000000000000000000155431515050116100275610ustar00rootroot00000000000000 string (Octave Tablicious v0.3.7)

    8.2.57 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where: - Each element of a string array is a single string - A single string is a 1-dimensional row vector of Unicode characters - Those characters are encoded in UTF-8 - This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles. - It is a type-safe object wrapper around Octave’s base primitive character types. - It adds ismissing() semantics. - And it introduces Unicode support. Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002ecell.html000066400000000000000000000061331515050116100311420ustar00rootroot00000000000000 string.cell (Octave Tablicious v0.3.7)

    8.2.57.9 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002ecellstr.html000066400000000000000000000057511515050116100317000ustar00rootroot00000000000000 string.cellstr (Octave Tablicious v0.3.7)

    8.2.57.8 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002echar.html000066400000000000000000000062011515050116100311340ustar00rootroot00000000000000 string.char (Octave Tablicious v0.3.7)

    8.2.57.10 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002ecmp.html000066400000000000000000000075171515050116100310110ustar00rootroot00000000000000 string.cmp (Octave Tablicious v0.3.7)

    8.2.57.24 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002edecode.html000066400000000000000000000057451515050116100314560ustar00rootroot00000000000000 string.decode (Octave Tablicious v0.3.7)

    8.2.57.26 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002edispstrs.html000066400000000000000000000064521515050116100321020ustar00rootroot00000000000000 string.dispstrs (Octave Tablicious v0.3.7)

    8.2.57.4 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eempty.html000066400000000000000000000056561515050116100313720ustar00rootroot00000000000000 string.empty (Octave Tablicious v0.3.7)

    8.2.57.1 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eencode.html000066400000000000000000000063531515050116100314640ustar00rootroot00000000000000 string.encode (Octave Tablicious v0.3.7)

    8.2.57.11 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eerase.html000066400000000000000000000057571515050116100313350ustar00rootroot00000000000000 string.erase (Octave Tablicious v0.3.7)

    8.2.57.19 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eismissing.html000066400000000000000000000061331515050116100322300ustar00rootroot00000000000000 string.ismissing (Octave Tablicious v0.3.7)

    8.2.57.6 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eisnanny.html000066400000000000000000000057511515050116100317070ustar00rootroot00000000000000 string.isnanny (Octave Tablicious v0.3.7)

    8.2.57.7 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eisstring.html000066400000000000000000000057101515050116100320650ustar00rootroot00000000000000 string.isstring (Octave Tablicious v0.3.7)

    8.2.57.3 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002elower.html000066400000000000000000000061551515050116100313570ustar00rootroot00000000000000 string.lower (Octave Tablicious v0.3.7)

    8.2.57.17 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002emissing.html000066400000000000000000000060551515050116100316770ustar00rootroot00000000000000 string.missing (Octave Tablicious v0.3.7)

    8.2.57.25 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eregexprep.html000066400000000000000000000067571515050116100322400ustar00rootroot00000000000000 string.regexprep (Octave Tablicious v0.3.7)

    8.2.57.22 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002ereverse.html000066400000000000000000000061471515050116100317030ustar00rootroot00000000000000 string.reverse (Octave Tablicious v0.3.7)

    8.2.57.15 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    string_002ereverse_005fbytes.html000066400000000000000000000067131515050116100334240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html string.reverse_bytes (Octave Tablicious v0.3.7)

    8.2.57.14 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002esizeof.html000066400000000000000000000054641515050116100315300ustar00rootroot00000000000000 string.sizeof (Octave Tablicious v0.3.7)

    8.2.57.5 string.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002estrcat.html000066400000000000000000000061711515050116100315250ustar00rootroot00000000000000 string.strcat (Octave Tablicious v0.3.7)

    8.2.57.16 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002estrcmp.html000066400000000000000000000065171515050116100315410ustar00rootroot00000000000000 string.strcmp (Octave Tablicious v0.3.7)

    8.2.57.23 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002estrfind.html000066400000000000000000000067521515050116100317030ustar00rootroot00000000000000 string.strfind (Octave Tablicious v0.3.7)

    8.2.57.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002estring.html000066400000000000000000000067101515050116100315320ustar00rootroot00000000000000 string.string (Octave Tablicious v0.3.7)

    8.2.57.2 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs. - chars and cellstrs are converted via cellstr() - numerics are converted via num2str() - datetimes are converted via datestr()

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002estrlength.html000066400000000000000000000072511515050116100322370ustar00rootroot00000000000000 string.strlength (Octave Tablicious v0.3.7)

    8.2.57.13 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    string_002estrlength_005fbytes.html000066400000000000000000000066421515050116100337640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html string.strlength_bytes (Octave Tablicious v0.3.7)

    8.2.57.12 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002estrrep.html000066400000000000000000000071431515050116100315440ustar00rootroot00000000000000 string.strrep (Octave Tablicious v0.3.7)

    8.2.57.20 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/string_002eupper.html000066400000000000000000000061511515050116100313560ustar00rootroot00000000000000 string.upper (Octave Tablicious v0.3.7)

    8.2.57.18 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/struct2table.html000066400000000000000000000067221515050116100306700ustar00rootroot00000000000000 struct2table (Octave Tablicious v0.3.7)

    8.2.58 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table.html000066400000000000000000000247141515050116100273420ustar00rootroot00000000000000 table (Octave Tablicious v0.3.7)

    8.2.59 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/tableOuterFillValue.html000066400000000000000000000074701515050116100321650ustar00rootroot00000000000000 tableOuterFillValue (Octave Tablicious v0.3.7)

    8.2.60 tableOuterFillValue

    Function: out = tableOuterFillValue (x)

    Outer fill value for variable within a table.

    Determines the fill value to usse for a given variable value x when that value is used as a variable in a table that is involved in an outer join.

    The default implementation for tableOuterFillValue has support for all Octave primitive types, plus cellstrs, datetime & friends, strings, and table-valued variables.

    This function may become private to table before version 1.0. It is currently global to make debugging more convenient. It (or an equivalent) will remain global if we want to allow user-defined classes to customize their fill value. It also has default logic that will determine the fill value for an arbitrary type by detecting the value used to fill elements during array expansion operations. This will be appropriate for most data types.

    Returns a 1-by-ncols value of the same type as x, which may be any type, where ncols is the number of columns in the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eaddvars.html000066400000000000000000000101431515050116100314240ustar00rootroot00000000000000 table.addvars (Octave Tablicious v0.3.7)

    8.2.59.39 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eantijoin.html000066400000000000000000000066701515050116100316250ustar00rootroot00000000000000 table.antijoin (Octave Tablicious v0.3.7)

    8.2.59.51 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ecartesian.html000066400000000000000000000074741515050116100317660ustar00rootroot00000000000000 table.cartesian (Octave Tablicious v0.3.7)

    8.2.59.52 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ecolumns.html000066400000000000000000000056071515050116100314710ustar00rootroot00000000000000 table.columns (Octave Tablicious v0.3.7)

    8.2.59.18 table.columns

    Method: out = columns (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002econgruentize.html000066400000000000000000000067151515050116100325260ustar00rootroot00000000000000 table.congruentize (Octave Tablicious v0.3.7)

    8.2.59.57 table.congruentize

    Method: [outA, outB] = congruentize (A, B)

    Make tables congruent.

    Makes tables congruent by ensuring they have the same variables of the same types in the same order. Congruent tables may be safely unioned, intersected, vertcatted, or have other set operations done to them.

    Variable names present in one input but not in the other produces an error. Variables with the same name but different types in the inputs produces an error. Inputs must either both have row names or both not have row names; it is an error if one has row names and the other doesn’t. Variables in different orders are reordered to be in the same order as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002econvertvars.html000066400000000000000000000072751515050116100323700ustar00rootroot00000000000000 table.convertvars (Octave Tablicious v0.3.7)

    8.2.59.40 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eevalWithVars.html000066400000000000000000000071561515050116100324310ustar00rootroot00000000000000 table.evalWithVars (Octave Tablicious v0.3.7)

    8.2.59.69 table.evalWithVars

    Method: out = evalWithVars (obj, expr)

    Evaluate an expression against table’s variables.

    Evaluates the M-code expression expr in a workspace where all of obj’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = table_examples.SpDb
    tmp = join (sp, p);
    shipment_weight = evalWithVars (tmp, "Qty .* Weight")
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002efindgroups.html000066400000000000000000000063671515050116100321750ustar00rootroot00000000000000 table.findgroups (Octave Tablicious v0.3.7)

    8.2.59.68 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002egetvar.html000066400000000000000000000062341515050116100312760ustar00rootroot00000000000000 table.getvar (Octave Tablicious v0.3.7)

    8.2.59.36 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002egetvars.html000066400000000000000000000061331515050116100314570ustar00rootroot00000000000000 table.getvars (Octave Tablicious v0.3.7)

    8.2.59.37 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002egroupby.html000066400000000000000000000073451515050116100315010ustar00rootroot00000000000000 table.groupby (Octave Tablicious v0.3.7)

    8.2.59.53 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002egrpstats.html000066400000000000000000000064751515050116100316640ustar00rootroot00000000000000 table.grpstats (Octave Tablicious v0.3.7)

    8.2.59.54 table.grpstats

    Method: [out] = grpstats (obj, groupvar)
    Method: [out] = grpstats (…, 'DataVars', DataVars)

    Statistics by group.

    See also: table.groupby.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ehasrownames.html000066400000000000000000000055261515050116100323400ustar00rootroot00000000000000 table.hasrownames (Octave Tablicious v0.3.7)

    8.2.59.26 table.hasrownames

    Method: out = hasrownames (obj)

    True if this table has row names defined.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ehead.html000066400000000000000000000065421515050116100307110ustar00rootroot00000000000000 table.head (Octave Tablicious v0.3.7)

    8.2.59.44 table.head

    Method: out = head (obj)
    Method: out = head (obj, k)

    Get first K rows of table.

    Returns the first k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eheight.html000066400000000000000000000054041515050116100312540ustar00rootroot00000000000000 table.height (Octave Tablicious v0.3.7)

    8.2.59.15 table.height

    Method: out = height (obj)

    Number of rows in table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ehorzcat.html000066400000000000000000000062571515050116100314650ustar00rootroot00000000000000 table.horzcat (Octave Tablicious v0.3.7)

    8.2.59.28 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002einnerjoin.html000066400000000000000000000072601515050116100320010ustar00rootroot00000000000000 table.innerjoin (Octave Tablicious v0.3.7)

    8.2.59.47 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eintersect.html000066400000000000000000000064401515050116100320050ustar00rootroot00000000000000 table.intersect (Octave Tablicious v0.3.7)

    8.2.59.59 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eiscol.html000066400000000000000000000056611515050116100311220ustar00rootroot00000000000000 table.iscol (Octave Tablicious v0.3.7)

    8.2.59.23 table.iscol

    Method: out = iscol (obj)

    Test whether array is a column vector.

    For tables, iscol is true if the input has a single variable. The number of columns within that variable does not matter.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eisempty.html000066400000000000000000000056271515050116100315050ustar00rootroot00000000000000 table.isempty (Octave Tablicious v0.3.7)

    8.2.59.20 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eismatrix.html000066400000000000000000000055731515050116100316530ustar00rootroot00000000000000 table.ismatrix (Octave Tablicious v0.3.7)

    8.2.59.21 table.ismatrix

    Method: out = ismatrix (obj)

    Test whether array is a matrix.

    For tables, ismatrix is always true, by definition.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eismember.html000066400000000000000000000061011515050116100316020ustar00rootroot00000000000000 table.ismember (Octave Tablicious v0.3.7)

    8.2.59.62 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eismissing.html000066400000000000000000000072341515050116100320140ustar00rootroot00000000000000 table.ismissing (Octave Tablicious v0.3.7)

    8.2.59.63 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eisrow.html000066400000000000000000000054221515050116100311470ustar00rootroot00000000000000 table.isrow (Octave Tablicious v0.3.7)

    8.2.59.22 table.isrow

    Method: out = isrow (obj)

    Test whether array is a row vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eisscalar.html000066400000000000000000000054771515050116100316170ustar00rootroot00000000000000 table.isscalar (Octave Tablicious v0.3.7)

    8.2.59.25 table.isscalar

    Method: out = isscalar (obj)

    Test whether array is scalar.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eistable.html000066400000000000000000000054241515050116100314310ustar00rootroot00000000000000 table.istable (Octave Tablicious v0.3.7)

    8.2.59.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eisvector.html000066400000000000000000000054511515050116100316440ustar00rootroot00000000000000 table.isvector (Octave Tablicious v0.3.7)

    8.2.59.24 table.isvector

    Method: out = isvector (obj)

    Test whether array is a vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ejoin.html000066400000000000000000000074041515050116100307450ustar00rootroot00000000000000 table.join (Octave Tablicious v0.3.7)

    8.2.59.46 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002elength.html000066400000000000000000000056311515050116100312670ustar00rootroot00000000000000 table.length (Octave Tablicious v0.3.7)

    8.2.59.10 table.length

    Method: out = length (obj)

    Length along longest dimension

    Use of length is not recommended. Use numel or size instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002emergevars.html000066400000000000000000000073111515050116100317760ustar00rootroot00000000000000 table.mergevars (Octave Tablicious v0.3.7)

    8.2.59.41 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002emovevars.html000066400000000000000000000070221515050116100316440ustar00rootroot00000000000000 table.movevars (Octave Tablicious v0.3.7)

    8.2.59.35 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002endims.html000066400000000000000000000055111515050116100311150ustar00rootroot00000000000000 table.ndims (Octave Tablicious v0.3.7)

    8.2.59.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002enumel.html000066400000000000000000000060441515050116100311250ustar00rootroot00000000000000 table.numel (Octave Tablicious v0.3.7)

    8.2.59.19 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060251515050116100326770ustar00rootroot00000000000000 table.outerfillvals (Octave Tablicious v0.3.7)

    8.2.59.49 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eouterjoin.html000066400000000000000000000075241515050116100320270ustar00rootroot00000000000000 table.outerjoin (Octave Tablicious v0.3.7)

    8.2.59.48 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eprettyprint.html000066400000000000000000000060101515050116100324020ustar00rootroot00000000000000 table.prettyprint (Octave Tablicious v0.3.7)

    8.2.59.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eremovevars.html000066400000000000000000000061001515050116100321670ustar00rootroot00000000000000 table.removevars (Octave Tablicious v0.3.7)

    8.2.59.34 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erenamevars.html000066400000000000000000000067001515050116100321470ustar00rootroot00000000000000 table.renamevars (Octave Tablicious v0.3.7)

    8.2.59.71 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erepelem.html000066400000000000000000000066561515050116100314470ustar00rootroot00000000000000 table.repelem (Octave Tablicious v0.3.7)

    8.2.59.30 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables.

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erepmat.html000066400000000000000000000061401515050116100312720ustar00rootroot00000000000000 table.repmat (Octave Tablicious v0.3.7)

    8.2.59.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eresolveVarRef.html000066400000000000000000000103021515050116100325620ustar00rootroot00000000000000 table.resolveVarRef (Octave Tablicious v0.3.7)

    8.2.59.72 table.resolveVarRef

    Method: [ixVar, varNames] = resolveVarRef (obj, varRef)
    Method: [ixVar, varNames] = resolveVarRef (obj, varRef, strictness)

    Resolve a variable reference against this table.

    A varRef is a numeric or char/cellstr indicator of which variables within obj are being referenced.

    strictness controls what to do when the given variable references could not be resolved. It may be ’strict’ (the default) or ’lenient’.

    Returns: ixVar - the indexes of the variables in obj varNames - a cellstr of the names of the variables in obj

    Raises an error if any of the specified variables could not be resolved, unless strictness is ’lenient’, in which case it will return 0 for the index and ” for the name for each variable which could not be resolved.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erestrict.html000066400000000000000000000103501515050116100316370ustar00rootroot00000000000000 table.restrict (Octave Tablicious v0.3.7)

    8.2.59.70 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with evalWithVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, evalWithVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = table_examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ermmissing.html000066400000000000000000000111271515050116100320130ustar00rootroot00000000000000 table.rmmissing (Octave Tablicious v0.3.7)

    8.2.59.64 table.rmmissing

    Method: [out, tf] = rmmissing (obj)
    Method: [out, tf] = rmmissing (obj, indicator)
    Method: [out, tf] = rmmissing (…, 'DataVariables', vars)
    Method: [out, tf] = rmmissing (…, 'MinNumMissing', minNumMissing)

    Remove rows with missing values.

    Removes the rows from obj that have missing values.

    If the ’DataVariables’ option is given, only the data in the specified variables is considered.

    Returns: out - A table the same as obj, but with rows with missing values removed. tf - A logical index vector indicating which rows were removed.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erowfun.html000066400000000000000000000156361515050116100313340ustar00rootroot00000000000000 table.rowfun (Octave Tablicious v0.3.7)

    8.2.59.67 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erows.html000066400000000000000000000053661515050116100310050ustar00rootroot00000000000000 table.rows (Octave Tablicious v0.3.7)

    8.2.59.16 table.rows

    Method: out = rows (obj)

    Number of rows in table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002erows2vars.html000066400000000000000000000107151515050116100317550ustar00rootroot00000000000000 table.rows2vars (Octave Tablicious v0.3.7)

    8.2.59.56 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esemijoin.html000066400000000000000000000070661515050116100316270ustar00rootroot00000000000000 table.semijoin (Octave Tablicious v0.3.7)

    8.2.59.50 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    table_002esetDimensionNames.html000066400000000000000000000100171515050116100333460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html table.setDimensionNames (Octave Tablicious v0.3.7)

    8.2.59.32 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esetRowNames.html000066400000000000000000000061441515050116100322550ustar00rootroot00000000000000 table.setRowNames (Octave Tablicious v0.3.7)

    8.2.59.33 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    table_002esetVariableNames.html000066400000000000000000000076511515050116100331600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html table.setVariableNames (Octave Tablicious v0.3.7)

    8.2.59.31 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esetdiff.html000066400000000000000000000062551515050116100314350ustar00rootroot00000000000000 table.setdiff (Octave Tablicious v0.3.7)

    8.2.59.61 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esetvar.html000066400000000000000000000070611515050116100313110ustar00rootroot00000000000000 table.setvar (Octave Tablicious v0.3.7)

    8.2.59.38 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esetxor.html000066400000000000000000000064731515050116100313370ustar00rootroot00000000000000 table.setxor (Octave Tablicious v0.3.7)

    8.2.59.60 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esize.html000066400000000000000000000071761515050116100307660ustar00rootroot00000000000000 table.size (Octave Tablicious v0.3.7)

    8.2.59.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esize_005fequal.html000066400000000000000000000055431515050116100325440ustar00rootroot00000000000000 table.size_equal (Octave Tablicious v0.3.7)

    8.2.59.13 table.size_equal

    Method: out = size_equal (varargin)

    True if the dimensions of all arguments agree.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esizeof.html000066400000000000000000000060461515050116100313060ustar00rootroot00000000000000 table.sizeof (Octave Tablicious v0.3.7)

    8.2.59.14 table.sizeof

    Method: out = sizeof (obj)

    Approximate size of array in bytes. For tables, this returns the sume of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esplitapply.html000066400000000000000000000072111515050116100322030ustar00rootroot00000000000000 table.splitapply (Octave Tablicious v0.3.7)

    8.2.59.55 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esplitvars.html000066400000000000000000000075211515050116100320350ustar00rootroot00000000000000 table.splitvars (Octave Tablicious v0.3.7)

    8.2.59.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esqueeze.html000066400000000000000000000056541515050116100314740ustar00rootroot00000000000000 table.squeeze (Octave Tablicious v0.3.7)

    8.2.59.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002estack.html000066400000000000000000000072141515050116100311120ustar00rootroot00000000000000 table.stack (Octave Tablicious v0.3.7)

    8.2.59.43 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    table_002estandardizeMissing.html000066400000000000000000000100471515050116100335660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html table.standardizeMissing (Octave Tablicious v0.3.7)

    8.2.59.65 table.standardizeMissing

    Method: out = standardizeMissing (obj, indicator)
    Method: out = standardizeMissing (…, 'DataVariables', vars)

    Insert standard missing values.

    Standardizes missing values in variable data.

    If the DataVariables option is supplied, only the indicated variables are standardized.

    indicator is passed along to standardizeMissing when it is called on each of the data variables in turn. The same indicator is used for all variables. You can mix and match indicator types by just passing in mixed indicator types in a cell array; indicators that don’t match the type of the column they are operating on are just ignored.

    Returns a table with same variable names and types as obj, but with variable values standardized.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esubsetrows.html000066400000000000000000000060211515050116100322200ustar00rootroot00000000000000 table.subsetrows (Octave Tablicious v0.3.7)

    8.2.59.73 table.subsetrows

    Method: out = subsetrows (obj, ixRows)

    Subset table by rows.

    Subsets this table by rows.

    ixRows may be a numeric or logical index into the rows of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esubsetvars.html000066400000000000000000000057701515050116100322130ustar00rootroot00000000000000 table.subsetvars (Octave Tablicious v0.3.7)

    8.2.59.74 table.subsetvars

    Method: out = subsetvars (obj, ixVars)

    Subset table by variables.

    Subsets table obj by subsetting it along its variables.

    ixVars may be: - a numeric index vector - a logical index vector - ":" - a cellstr vector of variable names

    The resulting table will have its variables reordered to match ixVars.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002esummary.html000066400000000000000000000055611515050116100315050ustar00rootroot00000000000000 table.summary (Octave Tablicious v0.3.7)

    8.2.59.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002etable.html000066400000000000000000000115751515050116100311010ustar00rootroot00000000000000 table.table (Octave Tablicious v0.3.7)

    8.2.59.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002etable2array.html000066400000000000000000000056001515050116100322120ustar00rootroot00000000000000 table.table2array (Octave Tablicious v0.3.7)

    8.2.59.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002etable2cell.html000066400000000000000000000062171515050116100320200ustar00rootroot00000000000000 table.table2cell (Octave Tablicious v0.3.7)

    8.2.59.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002etable2struct.html000066400000000000000000000071751515050116100324310ustar00rootroot00000000000000 table.table2struct (Octave Tablicious v0.3.7)

    8.2.59.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002etail.html000066400000000000000000000065341515050116100307420ustar00rootroot00000000000000 table.tail (Octave Tablicious v0.3.7)

    8.2.59.45 table.tail

    Method: out = tail (obj)
    Method: out = tail (obj, k)

    Get last K rows of table.

    Returns the last k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002eunion.html000066400000000000000000000064131515050116100311350ustar00rootroot00000000000000 table.union (Octave Tablicious v0.3.7)

    8.2.59.58 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002evarfun.html000066400000000000000000000103341515050116100313030ustar00rootroot00000000000000 table.varfun (Octave Tablicious v0.3.7)

    8.2.59.66 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002evarnames.html000066400000000000000000000064431515050116100316240ustar00rootroot00000000000000 table.varnames (Octave Tablicious v0.3.7)

    8.2.59.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002evertcat.html000066400000000000000000000061261515050116100314560ustar00rootroot00000000000000 table.vertcat (Octave Tablicious v0.3.7)

    8.2.59.27 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/table_002ewidth.html000066400000000000000000000055711515050116100311300ustar00rootroot00000000000000 table.width (Octave Tablicious v0.3.7)

    8.2.59.17 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/timezones.html000066400000000000000000000077261515050116100302740ustar00rootroot00000000000000 timezones (Octave Tablicious v0.3.7)

    8.2.61 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/vartype.html000066400000000000000000000064651515050116100277500ustar00rootroot00000000000000 vartype (Octave Tablicious v0.3.7)

    8.2.62 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/vecfun.html000066400000000000000000000066301515050116100275360ustar00rootroot00000000000000 vecfun (Octave Tablicious v0.3.7)

    8.2.63 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/html/years.html000066400000000000000000000064311515050116100273720ustar00rootroot00000000000000 years (Octave Tablicious v0.3.7)

    8.2.64 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/tablicious.html000066400000000000000000027636071515050116100274620ustar00rootroot00000000000000 Octave Tablicious v0.3.7

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.3.7.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.3.7 for GNU Octave.

    Tablicious provides Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.3.7/tablicious-0.3.7.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the octave.datasets and octave.dataset classes.

    To see a list of the available data sets, run octave.datasets.list(). Then to load one of the example data sets, run octave.datasets.load('examplename'). For example:

    octave.datasets.list
    t = octave.datasets.load('cupcake')
    

    You can also load it by calling octave.dataset.<name>. This does the same thing. For example:

    t = octave.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on octave.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc octave.dataset.cupcake
    

    (The command help octave.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports most of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that all these will be implemented some day.

    These areas of missing functionality are all tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/1.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    array2table

    Convert an array to a table.

    cell2table

    Convert a cell array to a table.

    struct2table

    Convert struct to a table.

    tableOuterFillValue

    Outer fill value for variable within a table.

    vartype

    Filter by variable type for use in suscripting.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    startsWith

    Test if strings start with a pattern.

    endsWith

    Test if strings end with a pattern.

    contains

    Test if strings contain a pattern.

    categorical

    Categorical variable array.

    discretize

    Group data into discrete bins or categories.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    localdate

    Represents a complete day using the Gregorian calendar.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    NaT

    “Not-a-Time”.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    days

    Duration in days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    timezones

    List all the time zones defined on this system.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    8.1.4 Missing Data

    fillmissing

    Fill missing values.

    ismissing

    Find missing values.

    rmmissing

    Remove missing values.

    standardizeMissing

    Insert standard missing values.

    missing

    Generic auto-converting missing value.

    isnanny

    Test if elements are NaN or NaN-like

    eqn

    Determine element-wise equality, treating NaNs as equal

    8.1.5 Validation Functions

    mustBeA

    Requires that input is of a given type.

    mustBeCellstr

    Requires that input is a cellstr.

    mustBeCharvec

    Requires that input is a char row vector.

    mustBeFinite
    mustBeInteger
    mustBeMember
    mustBeNonempty
    mustBeNumeric
    mustBeReal
    mustBeSameSize

    Requires that the inputs are the same size.

    mustBeScalar

    Requires that input is scalar.

    mustBeScalarLogical

    Requires that input is a scalar logical.

    mustBeVector

    Requires that input is a vector or empty.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    dispstrs

    Display strings for array.

    isfile
    isfolder
    pp

    Alias for prettyprint, for interactive use.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    size2str

    Format an array size for display.

    splitapply

    Split data into groups and apply function.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    8.1.7 Example Datasets

    octave.datasets

    Example dataset collection.

    octave.dataset

    The ‘dataset’ class provides convenient access to the various datasets included with Tablicious.

    8.1.8 Example Code

    octave.examples.plot_pairs

    Plot pairs of variables against each other.

    8.1.9 Uncategorized

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    octave.chrono.dummy_function

    A dummy function just for testing the doco tools.

    octave.chrono.DummyClass

    A do-nothing class just for testing the doco tools.

    octave.examples.coplot

    Conditioning plot.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.2.2 calendarDuration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.2.3 calendarDuration.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.2.4 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.


    8.2.2.5 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.


    8.2.2.6 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.


    8.2.2.7 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.2.8 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.2.9 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is just an alias for isnat, provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff: - gt, ge, lt, le - Ordinal support in general - countcats - summary

    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical.


    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.5.3 categorical.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.


    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.9.7 datetime.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.9.8 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.9.9 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.10 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.11 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.12 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.9.13 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.9.14 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.9.15 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.9.16 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.9.17 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.9.18 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.9.19 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.


    8.2.9.20 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.9.21 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.9.22 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.9.23 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.9.24 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.25 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.26 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.27 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.28 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.29 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.30 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.


    8.2.9.31 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.9.32 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.9.33 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.9.34 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.9.35 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.13.1 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.13.2 duration.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.13.3 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.4 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.5 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.6 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.7 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.8 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.13.9 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.13.10 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.14 endsWith

    Function: out = endsWith (str, pattern)
    Function: out = endsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings end with a pattern.

    Tests whether the given strings end with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.


    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.16 fillmissing

    Function: [out, tfFilled] = fillmissing (X, method)
    Function: [out, tfFilled] = fillmissing (X, 'constant', fill_val)
    Function: [out, tfFilled] = fillmissing (X, movmethod, window)

    Fill missing values.

    Fills missing values in X according to the method specified by method.

    This method is only partially implemented.

    method may be: 'constant' 'previous' 'next' 'nearest' 'linear' 'spline' 'pchip' movmethod may be: 'movmean' 'movmedian'

    Returns out, which is X but with missing values filled in, and tfFilled, a logical array the same size as X which indicates which elements were filled.


    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Returns a scalar logical.


    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Returns a scalar logical.


    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Returns a scalar logical.


    8.2.21 isfile

    Not documented


    8.2.22 isfolder

    Not documented


    8.2.23 ismissing

    Function: out = ismissing (X)
    Function: out = ismissing (X, indicator)

    Find missing values.

    Determines which elements of X contain missing values. If an indicator input is not provided, standard missing values depending on the input type of X are used.

    Standard missing values depend on the data type:

    • NaN for double, single, duration, and calendarDuration
    • NaT for datetime
    • ' ' for char
    • {''} for cellstrs
    • Integer numeric types have no standard missing value; they are never considered missing.
    • Structs are never considered missing.
    • Logicals are never considered missing.
    • Other types have no standard missing value; it is currently an error to call ismissing on them without providing an indicator.
      • This includes cells which are not cellstrs; calling ismissing on them results in an error.
      • TODO: Determine whether this should really be an error, or if it should default to never considering those types as missing.
      • TODO: Decide whether, for classdef objects, ismissing should polymorphically detect isnan()/isnat()/isnanny() methods and use those, or whether we should require classes to override ismissing() itself.

    If indicator is supplied, it is an array containing multiple values, all of which are considered to be missing values. Only indicator values that are type-compatible with the input are considered; other indicator value types are silently ignored. This is by design, so you can pass an indicator that holds sentinel values for disparate types in to ismissing() used for any type, or for compound types like table.

    Indicators are currently not supported for struct or logical inputs. This is probably a bug.

    Table defines its own ismissing() method which respects individual variables’ data types; see table.ismissing.


    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: isnan, isnat, ismissing, eqn, isequaln


    8.2.25 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.25.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.25.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.25.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.25.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.25.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.25.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.25.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.25.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.25.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.25.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.25.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.26 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.27 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.28 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.28.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.28.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.28.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.28.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.28.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.29 mustBeA

    Function File: x = mustBeA (x, type)
    Function File: x = mustBeA (x, type, label)

    Requires that input is of a given type.

    Raises an error if the input x is not of type type, as determined by isa (x, type).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.30 mustBeCellstr

    Function File: x = mustBeCellstr (x, label)

    Requires that input is a cellstr.

    Raises an error if the input x is not a cellstr (a cell array of char arrays).

    TODO: Decide whether to require the contained char arrays be rowvec/empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.31 mustBeCharvec

    Function File: x = mustBeCharvec (x, label)

    Requires that input is a char row vector.

    Raises an error if the input x is not a row vector of chars. char row vectors are Octave’s normal representation of single strings. (They are what are produced by '...' string literals.) As a special case, 0-by-0 empty chars (what is produced by the string literal '') are also considered charvecs.

    This does not differentiate between single-quoted and double-quoted strings.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.32 mustBeFinite

    Not documented


    8.2.33 mustBeInteger

    Not documented


    8.2.34 mustBeMember

    Not documented


    8.2.35 mustBeNonempty

    Not documented


    8.2.36 mustBeNumeric

    Not documented


    8.2.37 mustBeReal

    Not documented


    8.2.38 mustBeSameSize

    Function File: [a, b] = mustBeSameSize (a, b, labelA, labelB)

    Requires that the inputs are the same size.

    Raises an error if the inputs a and b are not the same size, as determined by isequal (size (a), size (b)).

    labelA and labelB are optional inputs that determine how the input will be described in error messages. If not supplied, inputname (...) is used, and if that is empty, it falls back to "input 1" and "input 2".


    8.2.39 mustBeScalar

    Function File: x = mustBeScalar (x, label)

    Requires that input is scalar.

    Raises an error if the input x is not scalar, as determined by isscalar (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.40 mustBeScalarLogical

    Function File: x = mustBeScalarLogical (x, label)

    Requires that input is a scalar logical.

    Raises an error if the input x is not scalar, as determined by isscalar (x) && islogical (x).

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.41 mustBeVector

    Function File: x = mustBeVector (x, label)

    Requires that input is a vector or empty.

    Raises an error if the input x is not a row vector and is not 0-by-0 empty.

    label is an optional input that determines how the input will be described in error messages. If not supplied, inputname (1) is used, and if that is empty, it falls back to "input".


    8.2.42 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.43 octave.chrono.dummy_function

    Function: out = dummy_function (x)

    A dummy function just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.


    8.2.44 octave.chrono.DummyClass

    Class: DummyClass

    A do-nothing class just for testing the doco tools.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.

    Instance Variable of DummyClass: double x

    An x. Has no semantics.

    Instance Variable of DummyClass: double y

    A y. Has no semantics.


    8.2.44.1 octave.chrono.DummyClass.DummyClass

    Constructor: obj = octave.chrono.DummyClass ()

    Constructs a new scalar DummyClass with default values.

    Constructor: obj = octave.chrono.DummyClass (x, y)

    Constructs a new DummyClass with the specified values.


    8.2.44.2 octave.chrono.DummyClass.foo

    Method: out = foo (obj)

    Computes a foo value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.


    8.2.44.3 octave.chrono.DummyClass.bar

    Method: out = bar (obj)

    Computes a bar value.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ullamcorper pulvinar ligula, sit amet accumsan turpis dapibus at. Ut sit amet quam orci. Donec vel mauris elementum massa pretium tincidunt.


    8.2.45 octave.dataset

    Class: dataset

    The dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It’s provided so you can use tab completion on the dataset list.


    8.2.45.1 octave.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = octave.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    

    8.2.45.2 octave.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    

    8.2.45.3 octave.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = octave.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if i == j
          continue
        endif
        ix_subplot = (n_vars*(j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.45.4 octave.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = octave.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim(haxs(1), x_limits);
    ylim(haxs(1), y_limits);
    

    8.2.45.5 octave.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.45.6 octave.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = octave.dataset.attitude
    
    octave.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.45.7 octave.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = octave.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    

    8.2.45.8 octave.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.45.9 octave.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.10 octave.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    

    8.2.45.11 octave.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = octave.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.45.12 octave.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.ChickWeight
    
    octave.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.45.13 octave.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = octave.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.45.14 octave.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = octave.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.45.15 octave.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    

    8.2.45.16 octave.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = octave.dataset.cupcake
    plot(datenum(t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric")
    
    

    8.2.45.17 octave.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.45.18 octave.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.DNase;
    
    # TODO: Port this from R
    
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    octave.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.45.19 octave.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.45.20 octave.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.45.21 octave.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.45.22 octave.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = octave.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price,1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.45.23 octave.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = octave.dataset.faithful;
    
    % Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    % Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    % Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    

    8.2.45.24 octave.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    % TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    % TODO: Add linear model summary output
    % TOD: Add linear model summary plot
    

    8.2.45.25 octave.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.freeny;
    
    summary(t)
    
    octave.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.45.26 octave.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    octave.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.45.27 octave.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    octave.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.45.28 octave.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    octave.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.45.29 octave.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.45.30 octave.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = octave.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.45.31 octave.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.45.32 octave.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    

    8.2.45.33 octave.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.45.34 octave.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = octave.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.45.35 octave.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = octave.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.45.36 octave.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = octave.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    

    8.2.45.37 octave.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = octave.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.45.38 octave.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.45.39 octave.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.45.40 octave.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = octave.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.45.41 octave.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = octave.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.45.42 octave.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.45.43 octave.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.45.44 octave.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = octave.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    

    8.2.45.45 octave.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.46 octave.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = octave.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.45.47 octave.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.48 octave.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.45.49 octave.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.OrchardSprays;
    
    octave.examples.plot_pairs (t);
    
    

    8.2.45.50 octave.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = octave.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.45.51 octave.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.45.52 octave.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.45.53 octave.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.45.54 octave.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = octave.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.45.55 octave.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.56 octave.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = octave.dataset.randu;
    
    
    

    8.2.45.57 octave.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.45.58 octave.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = octave.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.45.59 octave.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = octave.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.45.60 octave.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = octave.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.45.61 octave.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.state;
    

    8.2.45.62 octave.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = octave.dataset.sunspot_month;
    
    
    

    8.2.45.63 octave.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = octave.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    

    8.2.45.64 octave.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = octave.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.45.65 octave.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = octave.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.45.66 octave.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = octave.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.45.67 octave.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    octave.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.45.68 octave.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = octave.dataset.ToothGrowth;
    
    octave.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.45.69 octave.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = octave.dataset.treering;
    
    

    8.2.45.70 octave.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = octave.dataset.trees;
    
    figure
    octave.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.45.71 octave.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    octave.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.45.72 octave.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    octave.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.45.73 octave.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = octave.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.45.74 octave.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = octave.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.45.75 octave.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = octave.dataset.USAccDeaths;
    

    8.2.45.76 octave.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.USArrests;
    
    summary (t);
    
    octave.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.45.77 octave.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = octave.dataset.USJudgeRatings;
    
    figure
    octave.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    

    8.2.45.78 octave.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.45.79 octave.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.45.80 octave.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.45.81 octave.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    octave.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.45.82 octave.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.45.83 octave.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = octave.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.45.84 octave.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    octave.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.45.85 octave.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    

    8.2.45.86 octave.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = octave.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.46 octave.datasets

    Class: datasets

    Example dataset collection.

    datasets is a collection of example datasets to go with the Tablicious package.

    The datasets class provides methods for listing and loading the example datasets.


    8.2.46.1 octave.datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.46.2 octave.datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.46.3 octave.datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.47 octave.examples.coplot

    Function: [fig, hax] = coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.48 octave.examples.plot_pairs

    Function: out = plot_pairs (data)
    Function: out = plot_pairs (data, plot_type)
    Function: out = plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.49 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.50 rmmissing

    Function: [out, tf] = rmmissing (X)
    Function: [out, tf] = rmmissing (X, dim)
    Function: [out, tf] = rmmissing (…, 'MinNumMissing', MinNumMissing)

    Remove missing values.

    If x is a vector, removes elements with missing values. If x is a matrix, removes rows or columns with missing data elements.

    dim is the dimension to operate along. Specifying a dimension forces rmmissing to operate in matrix instead of vector mode.

    MinNumMissing indicates how many missing element values there must be in a row or column for it to be considered missing and this removed. This option is only used in matrix mode; it is silently ignored in vector mode.

    Returns: out - the input, with missing elements or rows or columns removed tf - a logical index vector indicating which elements, rows, or columns were removed


    8.2.51 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.52 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.53 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.54 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.55 standardizeMissing

    Function: out = standardizeMissing (X, indicator)

    Insert standard missing values.

    Standardizes missing values in X by replacing the values listed in indicator with the standard missing values for the type of X.

    Standard missing values depend on the data type: * NaN for double, single, duration, and calendarDuration * NaT for datetime * ' ' for char * {''} for cellstrs * Integer numeric types have no standard missing value; they are never considered missing. * Structs are never considered missing. * Logicals are never considered missing.

    See also: table.standardizeMissing


    8.2.56 startsWith

    Function: out = startsWith (str, pattern)
    Function: out = startsWith (…, 'IgnoreCase', IgnoreCase)

    Test if strings start with a pattern.

    Tests whether the given strings start with the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.


    8.2.57 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where: - Each element of a string array is a single string - A single string is a 1-dimensional row vector of Unicode characters - Those characters are encoded in UTF-8 - This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles. - It is a type-safe object wrapper around Octave’s base primitive character types. - It adds ismissing() semantics. - And it introduces Unicode support. Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.57.1 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.57.2 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs. - chars and cellstrs are converted via cellstr() - numerics are converted via num2str() - datetimes are converted via datestr()


    8.2.57.3 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.57.4 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.57.5 string.sizeof

    Method: out = sizeof (obj)

    Size of array in bytes.


    8.2.57.6 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.57.7 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.57.8 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.57.9 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.57.10 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.57.11 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.57.12 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.57.13 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.57.14 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.57.15 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.57.16 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.57.17 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.57.18 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.57.19 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.57.20 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.57.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.57.22 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.57.23 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.57.24 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.57.25 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz.


    8.2.57.26 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.58 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.59 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    8.2.59.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.59.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.


    8.2.59.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.59.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.59.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.59.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.59.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.59.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.59.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.59.10 table.length

    Method: out = length (obj)

    Length along longest dimension

    Use of length is not recommended. Use numel or size instead.


    8.2.59.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2.


    8.2.59.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions.


    8.2.59.13 table.size_equal

    Method: out = size_equal (varargin)

    True if the dimensions of all arguments agree.


    8.2.59.14 table.sizeof

    Method: out = sizeof (obj)

    Approximate size of array in bytes. For tables, this returns the sume of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently unimplemented.


    8.2.59.15 table.height

    Method: out = height (obj)

    Number of rows in table.


    8.2.59.16 table.rows

    Method: out = rows (obj)

    Number of rows in table.


    8.2.59.17 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.59.18 table.columns

    Method: out = columns (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.59.19 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.59.20 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.59.21 table.ismatrix

    Method: out = ismatrix (obj)

    Test whether array is a matrix.

    For tables, ismatrix is always true, by definition.


    8.2.59.22 table.isrow

    Method: out = isrow (obj)

    Test whether array is a row vector.


    8.2.59.23 table.iscol

    Method: out = iscol (obj)

    Test whether array is a column vector.

    For tables, iscol is true if the input has a single variable. The number of columns within that variable does not matter.


    8.2.59.24 table.isvector

    Method: out = isvector (obj)

    Test whether array is a vector.


    8.2.59.25 table.isscalar

    Method: out = isscalar (obj)

    Test whether array is scalar.


    8.2.59.26 table.hasrownames

    Method: out = hasrownames (obj)

    True if this table has row names defined.


    8.2.59.27 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible.


    8.2.59.28 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.59.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.59.30 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables.

    Only two dimensions are supported for repelem on tables.


    8.2.59.31 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.59.32 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.59.33 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.59.34 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.59.35 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.59.36 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.59.37 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.59.38 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.59.39 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table

    Adds the specified variables to a table.


    8.2.59.40 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.59.41 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.59.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.59.43 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.59.44 table.head

    Method: out = head (obj)
    Method: out = head (obj, k)

    Get first K rows of table.

    Returns the first k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.


    8.2.59.45 table.tail

    Method: out = tail (obj)
    Method: out = tail (obj, k)

    Get last K rows of table.

    Returns the last k rows of obj, as a table.

    k defaults to 8.

    If there are less than k rows in obj, returns all rows.


    8.2.59.46 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.59.47 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.59.48 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.59.49 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.59.50 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB


    8.2.59.51 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB


    8.2.59.52 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.


    8.2.59.53 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.


    8.2.59.54 table.grpstats

    Method: [out] = grpstats (obj, groupvar)
    Method: [out] = grpstats (…, 'DataVars', DataVars)

    Statistics by group.

    See also: table.groupby.


    8.2.59.55 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby


    8.2.59.56 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.59.57 table.congruentize

    Method: [outA, outB] = congruentize (A, B)

    Make tables congruent.

    Makes tables congruent by ensuring they have the same variables of the same types in the same order. Congruent tables may be safely unioned, intersected, vertcatted, or have other set operations done to them.

    Variable names present in one input but not in the other produces an error. Variables with the same name but different types in the inputs produces an error. Inputs must either both have row names or both not have row names; it is an error if one has row names and the other doesn’t. Variables in different orders are reordered to be in the same order as A.


    8.2.59.58 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.59.59 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.59.60 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.59.61 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.59.62 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.59.63 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.59.64 table.rmmissing

    Method: [out, tf] = rmmissing (obj)
    Method: [out, tf] = rmmissing (obj, indicator)
    Method: [out, tf] = rmmissing (…, 'DataVariables', vars)
    Method: [out, tf] = rmmissing (…, 'MinNumMissing', minNumMissing)

    Remove rows with missing values.

    Removes the rows from obj that have missing values.

    If the ’DataVariables’ option is given, only the data in the specified variables is considered.

    Returns: out - A table the same as obj, but with rows with missing values removed. tf - A logical index vector indicating which rows were removed.


    8.2.59.65 table.standardizeMissing

    Method: out = standardizeMissing (obj, indicator)
    Method: out = standardizeMissing (…, 'DataVariables', vars)

    Insert standard missing values.

    Standardizes missing values in variable data.

    If the DataVariables option is supplied, only the indicated variables are standardized.

    indicator is passed along to standardizeMissing when it is called on each of the data variables in turn. The same indicator is used for all variables. You can mix and match indicator types by just passing in mixed indicator types in a cell array; indicators that don’t match the type of the column they are operating on are just ignored.

    Returns a table with same variable names and types as obj, but with variable values standardized.


    8.2.59.66 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.59.67 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.59.68 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.59.69 table.evalWithVars

    Method: out = evalWithVars (obj, expr)

    Evaluate an expression against table’s variables.

    Evaluates the M-code expression expr in a workspace where all of obj’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = table_examples.SpDb
    tmp = join (sp, p);
    shipment_weight = evalWithVars (tmp, "Qty .* Weight")
    

    8.2.59.70 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with evalWithVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, evalWithVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = table_examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    8.2.59.71 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.59.72 table.resolveVarRef

    Method: [ixVar, varNames] = resolveVarRef (obj, varRef)
    Method: [ixVar, varNames] = resolveVarRef (obj, varRef, strictness)

    Resolve a variable reference against this table.

    A varRef is a numeric or char/cellstr indicator of which variables within obj are being referenced.

    strictness controls what to do when the given variable references could not be resolved. It may be ’strict’ (the default) or ’lenient’.

    Returns: ixVar - the indexes of the variables in obj varNames - a cellstr of the names of the variables in obj

    Raises an error if any of the specified variables could not be resolved, unless strictness is ’lenient’, in which case it will return 0 for the index and ” for the name for each variable which could not be resolved.


    8.2.59.73 table.subsetrows

    Method: out = subsetrows (obj, ixRows)

    Subset table by rows.

    Subsets this table by rows.

    ixRows may be a numeric or logical index into the rows of obj.


    8.2.59.74 table.subsetvars

    Method: out = subsetvars (obj, ixVars)

    Subset table by variables.

    Subsets table obj by subsetting it along its variables.

    ixVars may be: - a numeric index vector - a logical index vector - ":" - a cellstr vector of variable names

    The resulting table will have its variables reordered to match ixVars.


    8.2.60 tableOuterFillValue

    Function: out = tableOuterFillValue (x)

    Outer fill value for variable within a table.

    Determines the fill value to usse for a given variable value x when that value is used as a variable in a table that is involved in an outer join.

    The default implementation for tableOuterFillValue has support for all Octave primitive types, plus cellstrs, datetime & friends, strings, and table-valued variables.

    This function may become private to table before version 1.0. It is currently global to make debugging more convenient. It (or an equivalent) will remain global if we want to allow user-defined classes to customize their fill value. It also has default logic that will determine the fill value for an arbitrary type by detecting the value used to fill elements during array expansion operations. This will be appropriate for most data types.

    Returns a 1-by-ncols value of the same type as x, which may be any type, where ncols is the number of columns in the input.


    8.2.61 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.62 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.63 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.64 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.3.7/user-guide/tablicious.pdf000066400000000000000000016723511515050116100272610ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 263 /Filter /FlateDecode >> stream xڍAO  0Q5ًf1ұg\ endstream endobj 13 0 obj << /Length 660 /Filter /FlateDecode >> stream x}TKo0JؼmTʩ=8@v,xeLx̆}$B+0D4gcNkN;r BH\6EzFI^\*DOH Ѕ-!A!Wd}&Η)4m&A6G"5" ]ȁG ~`nIDq2c\oiT^n [0'}EcgAN~ 5)@b߇zPnV>0Kxh@6!PBuy@m~4 endstream endobj 35 0 obj << /Length 565 /Filter /FlateDecode >> stream xMo@{^<ܠUPjqAL-'r{^۴DFBU"ήg>b`9]\ΌIY=mY_Ϡ0{dRS YqXnhv*sR_btr--20AvK:qo&0*ԩ$x0 ^ ՐfAY/EG@{ &#8LM \S˫jtJ-&uv"8>0҆+Ҹi^>)և=ڃZsWU;&;>T`G?%Fhɏ=9=&+:hN㿚W]ZN>Ux;z'UvJJp0)8$Hqv&-s9Z0_Ճǟ. Q endstream endobj 124 0 obj << /Length 1477 /Filter /FlateDecode >> stream x[n6+M3-&,X(p@VN$[2m $$B9!I;ܞiv37OwJO7F0>\2p`|=P W7f?|3);.Gni pTүIJ[ (dXng{xhH\261S8HF i7H)-W?thmx-XZ[mdx&IcHBY|&in+,4rIr{LisdZT5saaikroȴV^[lV1p tϝڤ i \V)*晲q;-ݛwINj6#n_tW]:a[TT*rF)f(݇Xܢfd-z/xMOrNr7 ^lBkkkpD }Vq0+D(mTYp^O˝ufkȢ`{^A'<]Lȝna 8fsL $UdNdsQϦUSqb▶`ԣ+^ 0XNlI?UCJL,5ژA'z#J"7j]g2ɺFxL7}6'VXT- yZs*(*c*}cTo#%iFKl0޻_>U4K4n, DmDԏo1l%I>W%hY7,^a>>yU`ZV)94bYm4"i{Orb+B<#SB#hcg EՍo*V{Җ!,]/֥eQ[y_ ʤii (0©c]TS%X[K>.eROl%21XPFהyHQddt/cRWu)l>4Rg:6g)e_4p]6\QƷ(iI o7N O_vԬ jJT+C 0ɲ(K8j:pZռQ\xu;p>Xl;Vgɘ?ښ>hř!_L )֋֕56wi&̱"߾VE QqP6-F3 endstream endobj 226 0 obj << /Length 1359 /Filter /FlateDecode >> stream xMoF<mv{{,h XvKJm_ߥdQ+i q$3CCBK9$ ^o?}3w̻͛R&@C"YmQwy7%p΁A b8K5)JoE^eiv]bYUGyѳv܍}w3PzK/ /~m HjA7%3Na&3Wˢcvݠ%ڰb; >OP#cVC@xU(s"}!t,#s~څE G ;&7+fUj [i{*X9{*.a-9: Д嗯bĆERЛ`Mk<ŵE2A}G *чCXTv]˺pE!7NF(}f@L% ,, 5 ؟! Hwmt1+' & ٦/P$@!6pEc2P"2&,.x>ۄ_]B6 V(eU@!2:ذZ+ϫ ʅzU#֚ LtrtX8!^??Wn-BL\s ruq%#`ݗb ,sAx 6ql`;su^.ے?ۺٽ6D^_&dDX62?\cti`_9^̉ u&d 9 8.J\Gj1dGrףgrJsE3TnB1l0e4[8V"9סT`0WiݥL}zso`,D$9# bV_ɥD 6uWoz3nRp!br->-1/%@b-OiQ 3Nx*f0609u-_mK0jMKm5VP33>5 I, b5i SySˇp]l@Xܤ֯xA:q>S فĔpT} 11x/RM(A36&TJeVS( Rb}̧ٔ_ЊC ]"ߴwj:s|(q_9HsH"w#dDL;'v&h߄n,gSGG6u'ݖxç15ERx endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2395 /Filter /FlateDecode >> stream xڵZM\ϯ1pM6?asI!GF`jv@Ada*$|%!F ā\BK E UP*~Co(F=Uȁ=dS2JL8 *;Z <O9j M fDY UJoPN#HBAgt>zA$RC!8 = PdCP*( TBt:h*)A^aTi(4AGDЕ2J 4ǂVaojƿ@QIU #AQr~ꨒ R^Bc|1YqURkƏ0=c x Fg : D.B7cS&=D @M)% jSY+Fe`IѧF,t"T0\DZ]БїjWmCk|QC9lgD>1rzt~]~||x<<ˇǏO/0>%|P6Ov̟}DZx*t,D?:9C^߅˯~eO{I0qY>m\οqoNW,mU+K NVlEddCɆ Ux?Oo~ ޯw8HSNqT3i䊑4B6/^rgISICSor-XpqΩ^wr_#x/WR"9|R7\˒7.,qRKc4F,KĄ%Cbɐ*11j(PTCR J5j(P4Ci J3f(P4C J7n(PtC e0a(P C2 e0=XI^⥧k59999e/? =L{5'&lTƁsTkPW7vmuIm9vQRۋ^tZqӷ$-Ü+ #m")箱my0JlXm4˨i@ܒEtH 6X^#/MmAC)]GaBNe|.H5ȝW*Cȶ%M,#EoA ZpT 1, ؒݎr=)tʩp>%++2[S;H3N,8 ҫ޾TSNz_k:TnWȘH *tʩp6<8_]<^1n{:FY\ 8HSnRnLI' Y4Y̫nئ*]HCH)&}Z3nMp4u 4d0> 9!@FOv;SYtf7MJ-NLHM>6t]SWk95PWmd f4,8sj\ȷkD R䭷r*\H+D6@QH,hSB] gcH؍.=ItΩq!ߦFG'UD7.17Ωq!߮r֡6ıR%%"iu78Asj\ȷkAm肃iK'itΩq!߮)cƢV(jtΩq!ߖkjqLzsvwчitΩq!>yW|jrz"095.5b閹7ԐoRIS::v)\r1T3l>z جRklm>gT} vrSܪ@U 7+ ~rc%u<7-m rsܺ@] 7/P̩r@a 71m >@e 73 ~rC@cnY7кnj`75M vSi3:M /_j׬P'-Tۍb<Tlˍo=HSNvHB[C yk2]# endstream endobj 334 0 obj << /Length 1362 /Filter /FlateDecode >> stream x\[oF~ϯcx`v̽v+BnKl {%i[FL}߹}D|HHR4S|uwhןἩ9q8݇OG#5f'f/w?͎WoYsOBR"2TFME\$EJ"͟bЇO}+0!?Dh/_{  `iaxyR4!: lMع ya`wN |E'-} M^E ąt㾛NDZ@ƅ@,&SP<yI/OYZ$q&u@@NZCVM Uv->~_qD *&GLj rjHH9>琐cR"̉ܠLiHU ď D7x4ok!^Z7M#޵%IVh|Fƛ~6kt㬳LL|6 ]MOYWh#V>fv助|nr5OXFMsUW[oTlxRvТ4 t3…6?9ێE{޾8ƀ.Β@b“{Mi?ǝ#ňx#m=.9A]pD!l`;VT)n5z"Wt F|^x[8 1nѝmu%ea׶eqJ$&j.y/2U2 I; 7>g]Fz.>CJ|8>1~Ƅe*tt:T/㨬ܞG*1-wײ8%ʢGki>d٦8sn畫7*XSӦkg\刐P_2> stream xڵA+xL.Vb;|!"/#ƮZο+NM'Lqg^"&V!FIyߺ!,2w-su VY!۸hp W8uxo8,36?AcY+$z"KS `($?$q=f^~- dަs c'XBe\eC 6ׄ>:myUbet me 痡\?PT$bb3bL 0#P7VD8!Z "j~QfEn5m|VC,+SG -h&&T4 Ry3cL&Ep 3_TZh*5o44j(^bCRh,tlZD1ؖN,ʼn4as F3XiI1A~1l" ld2ϼ- H43q<;Db ܓ֩Œ#K%Z:aAq{LS8}1`b4  /Oo1`VM.xTiOF ˍwnkmt2fL;1l/h`7ܩ1fL;1n+žb2r&] vdO&W͘w0z-oRoWUk23f{2cxnDQ0Am`ku\,ƍs3&Q]R372fL; u1`=}b|cuc2fL;& 38{簨{fOr#] !h7axyfW:5Ű+cUK Cn/;f *ʭ:+d}+E _?>||s)/_ۻ_fzwvw>tė> stream xKs6<mx$m:ʹ6Ɂ3z8"]II(3)Q$.@aXd'm4_Żh+\ף{#_R*B9#ѻ/7~oN8oxȚK":FJ@!fz4q{=G8O{yJ)ik.MY蝽ot'݅Ըp`Js!`PY',vM]t~xJ|0a7+#;&{Fi]u $ MPAKYac}2RYd7]Rۓۀڪ+zܙ#ni[T>^Xtz3 ]߶_fy:Jiƒ6zp?\ iefBN;Xi UMG M &/'Ĵ TEw@p&<Rq:Y2N^8/ջHNh<,yY]~K[6LCܡ t {qQƹMϳE(E /@BH5Xe/W$ qj ]a*췅 h=Kbj ~^jr4PKMS#msa1FP э`_ jқ$a Qxܦ%ŔǸAv‵`쒦dzvdi:d~XOҁ? ,͹YŊd@& Xq i]q+C2C  tw5tW<.l:p>^d>ox. pz޽gѐ>|1&gq8"oy^{0kũ|2өwfLr@W}AUҠclD5ŗ8Ok罌̻ˁ6b \/ijV%'+y~FZr~/|qmrg_k4́[z )'QC p '硰,mт k68KPΔ> stream xڽ_ScRJ%C;%Lǰ9!ijV`u_I-uiJM Rka'k5!d_4֢+-Fĵ] B֑,މuBܗG ⱳOҔITPfkT3QukN/_` 0J@N\-bvDF0.ml^ӂQ&dp5߽xqwyۇǧ˛/~w?pU'zǢeVQ?@h JtҋtyC>}KU뿦oЮWOaȳtFW\Гrs3&Us,͸Yv#܌~WƾZ>+:18ZzOE K'̴; 'h1>1dD ('IRk.cxnDbL7͙kiUrs3&bZ q#܌~'c&rU\܌~'#3Q7#c[-s.cxnD+ztF<|[Gx܌~'+Cg݀.-sNEG{\܈~'#fn<|k>9o1d'Xb[֚NFjU+H2u2fL;nUV2L 3/r/]-܄vXII*y6  hw d <3ǵ^-7bI8׋T=551<1d\S%iCq?1Ds3&,?mo2fL;1mVhGl;<1fL;1mO??T}4ܯ"31<7cɈXf\܌~'c[Eǫ*Ɩs17C ˍgw%\(,-v;gvX-A̓Xow*=]?hJ_~5ͫLJ- i_ȴ}dן?Ga++jOLgwϏ_>}?ǟTG|Jy"]?j W?bev;!#Fz-BP#ZCz#F7Boz3fЛ7Co z3f[Bo z+V[!G"5E8"^ z-ZkcD[E?T^ JГГC>ATlY7 q̳;@ˏ'glnu3,7aIp2ss#&5a }Q.cxnD?tf_:-CrC׭SAIw endstream endobj 555 0 obj << /Length 1428 /Filter /FlateDecode >> stream xMo8:cӤ M=,r"D In~)ٵ vaK$!ŏGygF!?$28R!u4{>hm^|xFvᴷٻ+!"DwH(ͣο.vg/٬ \04כkjDHO`|^LTxbߛ_ u\%5oTY5+#$RڿoRmrs䍃o9Yq_` q~~\.Eєa0~D6ﯫ8K|_3'\|`'S.Hh1H.B!AI,8 NjnIau 4L15#ON4;O҇]4AɣK\0)EL_mKT?ݶ,-F90!uRe 1FDSÎBs{wï6l[pl=h'afw1 VaqeuIꉜy9;qqeo,tv с*W A鄈5aIU,q˱JFC`SKVefm-AntH,:"D(o}[Vl3CLwX4@]n|M)cqvQxQHE֏U˯q4Ro{jEgM>PB+O.`m($oѹXe-GY@$ڧ8-/ER%'vj3%S~N) <}t $ I %D?yn$%Z;:BLC2>JER>5:) WpeN+_yG@eFdžۇp(yף"PQi#Lryp uWE=8i2'~ smӪ`RMņQ:}At(D;bd$1`;fd8yr&]$Ynf#+I=S"P7}Vdڗ]6x$e% ++,$9EooY&xs?rfrTWT4EFԈ0D٦iQa۷Yt8",v&K_P=w(i:Z* Ok93tQ+iqyqr;B9a2YPs_8H܌i/ w8C\s2ͲΚc!V5ۆcY4?> stream xڽ݋es9:@R޴`b_4 p%ݲ^C93o)PF3<[zUJ+]1B+̎>"΢&[+6ިDz2Y/Ը:u/Pd(+׳^Hԭ >񱈚OV>7DI ?z@ljӈ""#|((c"^1bw0[[axŔgcz.ƍ~# c{W g"7BL˅J89޾"/^_7J3޻<^ C%>-Nàn86`|Woe_~pMiɼAo.d総!3r~SLo?tw:jwOB /~/w?ۇ_/FQ1g%*pbX\y ]Bߍ2 {fhHz#F7RoHz3fԛ7SoLz3EO[ː2 {fhz#ԣԣԣԣԣԣԣԣԣԣ6zzz=zS^OlQ=jGΧzzzzzrpKW:gZWQ{V#rgwzl,aXD ]Z.}v:BL23%1=FQkKc_Lc Fqrt= V_7:z.ƍ~c^)(.Bߌw^5V& ; endstream endobj 687 0 obj << /Length 1611 /Filter /FlateDecode >> stream x[KsHWpDYR9kSm0 JB* !j@_tuH`pC`:"9x4Mig'F Mf8|K J=Y])aiF9㛛jDHTb|NTp/_ZeXD%?g1lcuAT^ɔHu"7YOz\'`[T$4WS9SHK7y,V9"!ܼb-1Śذ&`+ݭB".qxaut0<ჾ%H(۱߄޸/Q!g{h+iڹ;s!W'˴8`&1=`&^0ѵ\[8"?Os[RC"*"CU#YWU}*`>ɟҕR)WiR=Myi9Š6J@Dѭ`f&eA̤42_ s([x6Q ~` .ivVAi(%eFXqeV;Ү(8= me 큯es;rKΣ@Վq :h\ѕ ZڧZ#th{-(b(8 zCBpϑ +Ptvq +ʃ}bD&vAjWٽp!(" K+X;߬`7jmk< |^qk:vERqZX[=R#!`qI| XP0Qx0y%` "{س] Mzq K$r@5ی[P7Mw3M-)Jqέr9㸢ivXߊh]>8gPkׄrtKX'^u([v̢~.aI;`7j5ܒՃ\Uo<;OZ5RQ!Cx> stream xڵAݶWplx93! ؋P +g =;Q@7-ZK}$EP6RID()1JNReM8MwKmt- {vm@HPӡ~jDbyjD:&je`Cu&lX!~pK\jFOL&. u2p0\FWOxWY2OoI{UO"/u $-%%J@;4mmW$׫Zex.*Ju6UTyNeo^UW !K*ZY=vQЪIQ݋2'+®*!jl8gҼʒy*dV'kGsI60 R!aؐԸ{UM ᗙS*:<īzj]Ee``$h-?M }WIW]CkHy#_{}t(Q\m=/ip/ R 2/_GbL]34b8QiF6eb}n$݇Tuqo ÊdWD ]Vo|yr}?O?=|J rszGRs1xwG6U]z"]ߤ>;oҷ^2rӲ]h6}"GuؓOB ɸog4 s&Y{I90p̘J"Ǟ$ vFihG#nG"rŌ9lY0s~qfɣ𱧞qH1M9y<%1wi'1d\3 NxPE ˉoCDX{F3hc;),pNwF: ;rc vFC>p+ qlqX{.Ѱ-7Yqߎ( _sqYqNJ6ɸogDd̗rqlqΈy_¶ۓ?K-O8r. ꘋqT0Rf]yNƅ~;cn]&;_:<).Cs2ܸ8)>?}Oz?zC5BsR^s5L>O[9bleR([=ʛt+)JRQjeGzzzzzzzzzzzzzzzzzчơǡǡ''''''''''WC^ z5jЫWC/ۢ-ۢMC/iiiiiYYYYYYYYYYkB^ z-Zkoz D F t;~V 6K턭̷ ИY3~:f9 PJߪ㉿LyNą~;#.We♵e ɸog䑫/ik!.3 I d\3RGtI\#(=^F'-lqΈhk7.3C$\hBڲo~ .,___L. endstream endobj 815 0 obj << /Length 1419 /Filter /FlateDecode >> stream x\Ko6WsHX[`omsAkkYy2G"BS|oeXfi Vl^U{\7Å3g寗g>+1J,,) SyE,ˋo_~|Kq>ʞ2!<# 7W5ws1cnSHQwܜ[Ч }#W=|"߂',9{\`&'31jUٌ[C 11h>PC(;BRAyPrL`DnFY__5n F}KgD,Z,T>7?,%>GQ`z,T!hs<!klu|ȇ0`2 Ɛ%r!`*3v3c,B@Xt{T8E0 \3pBuBfTdh7qbK\Db,px=郡?jwT[}.pĀ͔D3^M~%Dέ_gj+cuJjCʰ+ʅ2)(Q%7H2QN{ ]zvws\lEd]m$;ɃC9i;1 =h a-*2w*y`=O )>' ymRa(|$-€`V) ٯׇj&Rr{а`AES!;96:]mHY)ELsS/Bba0VR{U9t*([M!?RjURP |?e'tj]rGºIˀ$Bk8jzQۗqh-1'|weV`Gxf!zͣ,8Qr%xC<{D!fPov_U&zGp(Xo25chnrM@A{!O~$8lDJqϗMSTQ](ғmcj򔣽f@KՆ8r.ʫx/S)A(b~edࢱi;in"_ݙv|a`0\ĒfA -掤0b\87}tz]P}'\jW2&^[Nc"׭3OI 1 7 endstream endobj 696 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2123 /Filter /FlateDecode >> stream xڵ_\S1yQKR n%CwKe<ͷ)uH`z1+A{OKJ TkC*T]ZHkRC>1RI*CPlTiޫF:>X Ki%pq_Z鸸QjUIh S#P؎KGP:`PIͺCMTwg%j6N?DOH:z?Dcnl'@r1(sMܼpC(13ʌpwwEI@G Ϩp:uizʌ2uEIT/=+]<Ǽ#9Rs{%Qғ Ñ~&~$-5|}y:sX>wL1G+:ϐqkM/^tC:L7'1J8PfͻR{y.co2hԥVh/cxNƍ~J轘fr7e3??[;1,q"++QͪN\s3{ޓB ωo1b Fm`Œ+s2n[3YUr.g\{s2n[262FfĢ5ֽIn6̥\b7< #mZsgًxd [TD"*ٍyH97-FEfU= ZuPztƝ~Q5ߴ2c7G=˱"իd;p GolL{s2n[rގvlYyZ:Ƕ؟Xi(1XFn!fvôDrmX]5lu3eNʝQmY5?%lAwedhU O:;#fpo f΅vCiX1RhńYkƦϿaQiڲ\)"Ofݐ9!w.HR m.9)tR4\:*}.*YLr9RM+q˴DrᕲZKO)sj:)w.JlAUuy5Aa[ zMFgbLrʌ*g2L'NE:za ævl0@ IpQb"ŇybnqwSi(+;B4P*}a Lr,(X ݏ o sBn2Zsfc7]hu ~N0C:L~t__yp4u^aO5.׾9\v~Jί_Jw=ÿN@Spc|zγ~oV?Osny u>_zY%Hy~gDZ#mRq}J4((((((((((8888888888zC^z=zГГГГГГГГГГA?hzuzzzzzzzzzzvDZ#mRiT"H/z~󉡂ݮ/34knQWOv-Fys/.D!v1<'FňZ1C6vDT]o>P< 2L'NEɈ|g^'7zлi(e^M e7eNʝ<-Չ4!/qbD@??D {͐a:)w&A@QZcjKy5v.8E0P> nGy=RYZzD endstream endobj 924 0 obj << /Length 1341 /Filter /FlateDecode >> stream x\MoFWhٝHS@{^hQ؊@i_ߕdz\ , 4)fYF,4 zdo`-݅Ε?_]z#e(ԲC&'_.~z' #d\!SFLCHK.6l.\wF(n侼=tKB?|}E>So#L&l CEt02i`*oxȁrs c3>`1OpiljUD59Y>>vgzLĸȔ|:Iju(]0&SOi!1*Œz$<^ܓ`#HP]>wycWEBs>jF.gU:#Rhlk'b:7h/A mZANv9CyH̓)(FX,z-P#EKKPԈ# /<#z%HTF@ =(_Uk.fDnkzr 5|9 \a@\>Ei S`N O )]aPjg8}+MUF|ZG{?2uˀ0R ֭Q"AhBu8L/F`| Ԓ0A y~wv@R3l $i/gUԛb0@ͲXpU:vm9NZ/R 0(5]Rq@c՛{G 2m^g8*zB*lb0dޗ;/39)45h]Qb8?hR;uE?v~`i'(};v{.nJ9;7E@.ƗTaQ$ M =秦E;@*G#^u[4eLij0( @^zSo.ԋm`o&дyۄOl裑9=A//?\&ut@´Ur@{ vD{;6R_k[34 *idgov_PNxڨD鰸sZE6{#e廠zM{'uF1џ]^(!2߀%v&;[Qcu"J䭈V% U4njC䩕G!a>80Ƃo nkW>r Y}U1bڂU0i.4Fɺ{t endstream endobj 820 0 obj << /Type /ObjStm /N 100 /First 907 /Length 2054 /Filter /FlateDecode >> stream xڽQW1yHUR nY!{ K{5l}NijB%$Scu=?I.5YJ+>QBVx*Cq>Zы.?bϹ,QzyC $"`p`%8XkCIH/#Tpi"J.ZhfB2`r{&SDZ#T-4U"~,4:"'A#\ QƘ4! ]  V"U^;P"4=BEty?44ݤUj-^rr~]~mw**j:$<+`R)ǬM)tSf4Q$Z'q\Wd0ݔeJ xK7 SenL+XU9s90vHCgɔWMixPڨ=Z](k2dx:d8{Uވ$xWZ+2L7dA)CD׾1cc֪GD2Ǘg_`'S4<([CUbGʷdxnD+#DEb!Wh 3rΘw0N$ Fϑ;tLgC4<(1ꋜ4Hɔa)3 JdXƞ:92L7eAid랑L MixPaߋ<^k2enLÃ$~PJvs 3}^$?aYr!20>ں,abWF2e:eA Us.A>bٔa)3 JA2i?h*U)tSfƗf7”L2GM,%[6enLÃind0ݔ%r[HF8\o.k۝ sC&]ZYOG֪7W%Dv?פo: G^ɿO?>$j?^eC`k`Vgap7r~KPo?t_=c|yCt ǟ>}˅U}kg\ \}#ߋc=JdQuq\qs#JRQz#F7Bozzzzzzzzzzzzzzzzzzzzz3fЛ7Co z3fYYYYYYYYYY[Bo z+V[Z=JQJҢ +~zCk}2E>BWܽZcLq6,q6|7՛1`Y}"(jL!tCfH{|'m ⊤$9)nLÃy>[(IuN2DB/ lxA)On;Q4<(Q%h{wjM!/1n.YXwb Ͻ /`}-!ZZ6dnLÃRa$h 5t)2L7eo^ >Ǽ9 $j endstream endobj 967 0 obj << /Length 766 /Filter /FlateDecode >> stream xYMo@+|gJJU8@dLZ; d]HJ>$^̛ }xXdI;lqDR Lko{RgQ2R\b=_":'?z;{뉔;#,QEi+%-PIRX\fI"lr6/tؘYi okƯB N@kuiB 룢T8B(\5ɰu23.b2yt 7tw伉c&J۰X"ʀ 0a ɧe1A`9#}mtn5X@l`]WޒAjypB[@썌?ޚWr_uEզV*p:4/+49xSoyJ bѩH`2R];YhDb"ɭ6@KV::3\H\H{\!@@Vo-՘q%Re"L" nQlF\qmUBSvG | q r-VBce> !vkahJQR;DM̚eKRtnr `,g0gKP~ iqU!R A Ch 0Rq6ȓy1\rC8f_F1)6(Z*){f٨FYQg[c;Խ~& 2hOɠ/?a endstream endobj 928 0 obj << /Type /ObjStm /N 100 /First 902 /Length 1925 /Filter /FlateDecode >> stream xڵM5+]v]R (rahm6{x,!1(n㯮r{NFTJEj6K~$+}^@Tr͇!`s,|ԨԮ4pS0\*=9ʨFPBsqډ <đǠֳ6jÑъq+$yڸTF]5 lj({@aFbh?˙4r!EkIktꊋF*sTsk?ʩ3XͼQG3ufBM s*u!r] Q)Ccu8X@vuﳂ6-Fzyz2ޠ.[t9UȰ׹e?:*Fkn^7k #dAߔYQ nW*1ֆ)̍ u+0?4 W)RuMɓ㏏_~=@o2j~{8<7֤#uj _t|FΟӧ7A: YaM1}&T,FtS.I))KMwM'ԥS.I))sNf9{MD'e M ` YKMb/{A;⽇Հ3Jb+FKtBF nJhIPsGHEC. )!7XiҒ\2RpS"ewԚ&uFKsBF nH. ?Mpy$k|#%:)#7%;HOӲHLD'e)=lS5NHMe\=}AV'-r:e:.6|["BMZ0RY|]Ѭ7\2RpC68h%:)#7%XY8e8rNHM[>`f%riNH e>;tF}EriN@ #T4dJlAt,E#6cohdz- D'd঄)2dxcKtRF n6RSez^Q.I))=;ZZу!Ϛ1Ro3"cMεV5rNHM5ܿvdJʀ y֜zbĊ{=xkqކ9!#7$=$l@I6Z0uPMKbAWJF h%:)#7`]}y$/LD'e*&e%~#%:)#7%V!ͥZ#rNHMYst~OxS.I))3.@`5 4'dޅѰ֊8/O,]ݑRt@ _<]סkϸ tO{Fo|?K:~h%oy~8<* HA㋇N _<{Nק?ߡ^t8~kdgy^:ƇO%oO??ά6ז,vU?u3rNk_*WWʵU9+m+JeO=YdٓeO=YdٓeO=YteO=]l /f%v^$}FmD[ZPSxYr-*!.ɉs+; D'd঄]/C?NHM J֞HX%GC. )!1OBO[s09)k9CvN,fonEVb<W. pdO!p$GC.I))w<%GwS 4'd=4smd܌묭moF|oF ]3m:֫+('ŀ endstream endobj 973 0 obj << /Type /ObjStm /N 100 /First 963 /Length 1308 /Filter /FlateDecode >> stream xڵV]o6}c"HA,ٰb+0[2$yhw.%;v$FEu{9r">O)x*A$S cN$ߍ x8kzXp#!Fy<c=2aDx"O![>xTd8T, ") 8Гg 0J-LXBA;3N`(@]$U0@)h$h,-RK\Cc a N9px54ݰ닊i+TdbXkF %%GƘ,J9YƬ+P I3楔U 8 ,d"@Âx(1Ft4q~PҀePFC5DHC%{RU둩 u`ܪFg,rXy2Fe*I v!ƩnʢnJ] 5 pыMːw-L2|OfެҺn)ǃ uۇ*oZQoM̧:㣾rQ>϶ ]_]\/;E.UV,vac#]=h->C~7 cNi~C mǪ Cۯk^ޥ>QHv*+YK ~x "-.aWAÛ>7mǙc1N_!j} ^A0/*-r;k^.\=Jr/]1fu|K5CKWc|1U>7|\tQ5:U>u,y]I;ϱ]v#sg٬F9> stream xڍU8+t̠ܽ*Sl~Zq~`3!υiu{ݼ'0#,|ܑ63(iPQ2 \AGN8뺜|thbAo.0WNu o15_] o㺥'c-(/B'(lW(0.IvӢiTmx-SJDf9qY3[Fataf1pa eК} )s4`](L<fX^/%\Xqgϡf30\R0] Gx5Y$d0T1A= :7ԾTǧ[܌w[$G;NMp۾:(n$x>a i} B]W4EWқ_w+$U]~+$ѧ7q7$Gלs}mnq=5iN[$s1Es3 n񥯛}7u,];<0UG?BZoa˵SUߖV}5<4~{ށnYgedf0?nk-:$Gkc Ll~\?7q=vv?r 3I5dJnuu]6w s{ZӞ-qc/~w_䃞wf'p.2pJn~K#9oR\G0}jcjq*w}F"ʍaHQC endstream endobj 1351 0 obj << /Type /ObjStm /N 100 /First 957 /Length 958 /Filter /FlateDecode >> stream xڍUˎ6Wx|XirrslyG-ZvSE1DV,Vu7HWJqV˿N*:MJ*%./J (-DBҁiqL*$AJb`5$G''eT-AftVY:f+&Es))Qbq Fy汕W Rي#NE m&8S$kρW)1BF68L噁C4&UܚĈR8Bk1olыΙm`DNC kK"ZqYQ1 -IqV $܆g`Gg%[b9"gsmX+.υ0=-K`wJ̣,dౄ1Ԉ|<`46bൄSx99bG8׺qHa!G`:;`Nq3Jk\ϵνs9+ϵsЦb545 u\oi[ #԰?Pt6s=~U=^;~Y/Ջ}{AeŮi'+kf3dh?uݎd76m\#.+W]w?`wqi&:t~G.n9{W氚.SEy9˪Mv Uz;N4V6>8U kc}Tomw[ #{'pYz[G 1'u58_; &kix,x߻}Zn=4< ޽.r͙9N]+kXft[0e۞.a1am;xe(i?m:z8c2?Dz?WT=5w߻vu6>J~Ś<9x>ͼq/߽:o,؋OUpu7>(su, endstream endobj 1552 0 obj << /Type /ObjStm /N 100 /First 957 /Length 1083 /Filter /FlateDecode >> stream xڝUMo6W^l)XZ+x%HᮜU-^y F2ךq5iEOϜǧd\Pb2nc1k,gB3 EV3aInjgR@KI(LژQLgr9SC}#kɽg cɌbF ,368f/465^&lO؋c%fL}W~Ou΢ [!74-^9Ok¸ٿa endstream endobj 1753 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1081 /Filter /FlateDecode >> stream xڍAs68X$0LgҦ6K!2]ѵ.obIזTtm+UUUo@+]J'UTHSTzr(c9(BRiU: JeHVٚpNUZ$*˓UkWԊ kWq]Q*zHN+_ Adĵ ޑ5",≘#G[yb#g dl4PS0ak25 ˦G!SJ0X]^TW7ePWꧡ}xnb3뿆1^Z-H9¯x ~OCJ أIg;辆vnߤ,u{7v4Aj7InE"럤,a^繵CM솾&ҳLMIevی3~Tϱch S}(%0E&;]|TsV{c}HNJv}wY6J[=BH]v7L-<pbXb_wC<ϸw x' Ҧs f[(_aا3KYBkӈY2!nlO+!'^BWN<#ZyJi@<> stream xڅTM6౽x5 ȩhcPY$&_ywm}Y{8ޛ> or5q$)H9FZ!I"B`!s@ %Z(L S -q$M: :#DSgI&L `PZX A@<2.DrR8#p!q@^;Y@`,|!oϓ㡉 G" 9WD6,@P I Ja5iZ=Nsa=TXse3 ;2ؠ3= 2U6=t`ɠ L9a,z^%ki>^lڃȦ}^T/ \6r ;LyTNpxCLC9)>F0hp%#r$ =Rx칔`\JLETI=*ᰂ–ĞKk{rhrC8>ԗ=Fh|7XsiӾX&Ħ9?wჸ[[KB%.>~[-n>T[mKGh6g*o*էX-n_Ǻˣ\7ފ[*>)Raݮ,~:Tu8Qbo/jYSSn3mj E-\gZM3p{VkOi\3deh&TeyܷU345eч)_yyXKܶy;/`+vE]<55Yϥwx9=:]a7b'WRӝNL*T58X5c#}ql~jU^_bŅyk}觃"(qlY?7?dV=kd!sc66 ^swF=ͦCjO෰K!~y><%3_ψz7 endstream endobj 2155 0 obj << /Type /ObjStm /N 100 /First 954 /Length 988 /Filter /FlateDecode >> stream xڅVnF+\bK3Ibl,b&rnòXI<&!K~"sKbnC>5 Y{+rBXe9w C #ZŢrj(!iK'ZAa, ,Rjۑ0Rf˲&ᘹr Ι-IڰTov2ȚHYŠiI+Oㄕ G XB-4.H6Y+[KE-rԯd!7n}}DO==}&>ϟw @>۶8qߎCݍ{QeffSބ>ȭzR'Xa^x0S6ӿB tV|=/3w]?Z%1f>_ K_ψ?Y}ˑNs-_!Msub{ߖ3A*ơwI1, hq-}S9}T+Όi;QI͛֞8jNWHW+m`> stream xڍWo4_#7/@‰$Xuwc8W3qmCxO #Px?DYQ?B~sv2lOH;|Pc-0_7 _ 1\/.9!Gڽwe6r%wA#]m@Ʀ{:ԍ'G  m{}q@gլ BB6q:cuH(/q/'3;q{\3ݺj"KCjN-/`ϕ{g 7Q=eNӴŢSd7Ĺgȓ;w{Ж=@KZH{ƴygXsJi&sɶԩ2NIFۭͅ&*ex'Nu;Z3fkCk%bzV(_-` \o $r u1 8)]`cٌ$0 qS Esy>@-KT-{A 跺{ ]/ LIXʔǙ 0e}4xupx衲?Ⱦ`[Ol>_) endstream endobj 2494 0 obj << /Length 852 /Filter /FlateDecode >> stream xڕUQ8~ϯT 6>U]oBήc!-])PϡXߠs赧vaG-%o7)Օ\oN֎4=t9z8zP$vs O}7&}hN rǯ]Z@,"͹\-hU2M&}A3;o'% X;,m_L-> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2503 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2515 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2356 0 obj << /Type /ObjStm /N 100 /First 941 /Length 1524 /Filter /FlateDecode >> stream xXnF}Wcr $pQA'M/hy0I8_3K%3d4mϜJ*cgRHV{LpKcBL8D$Cm&L  )4il<ӒU[t !9XGC`l4ʧbV4ғ24UjwT9E^0Y תQy];tYF||6HkV^ J9D]5EU{ňuYui[X)Јݗ kO =qF7SmYm8-c:k[QWT'EsFvHt1hR3Χ fNvpM;/ٟeuc5R7Q8[eU."9 ^uqq vtofk~_`_bX/u-KdVqzâeso׋[/ ÿ\k͖)M1\k<}uQ-ٖ$u BM5~Cbn<Ƥӽu<)Cai h YG7jD PsRI8U!e 1L1h3c1<*iIgzqVV-uYݶ?OE9fUK>d4"8ƍD9Ff\{> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.QڇiUj 80K*0; a \e*"t_ޯd n&?n_bJ" 3WFh3Vo/nGFFo)\LF Tj!#M덉Uv TMg,A סTU*Œymiػ˦ o\!Ek+zU|{Kt(cV`A__ & BOU2CP:i*uʦJ2HR;0  e?EUhhCwF2 l]:;¸CsOQN"4 V!Dya-s]b+uE'H@C@e @d)!Q7͞0hOk Cuna}`Dh chBKJeD(B$*T;,#ab3bK#ChP ((&4DIwX* 6j/u-Ŝ^/ E=r B(|OSn9 L?"=F] mU't Z J,4V; - @ 7ɇJ씬ftI4j48gny)O-m۪"MYw`._CҖ\UU IJ% k(Uk%CQ{f}Bh*g7~t'FLL!F#k߆YzrPԻ|Z9d6R)@zk ݍСN3;@+-0C)rfs݁r:k˜,'BLsQɘ}ӣlȯǸ$*X*vMX\L]+geR7>I+ xb2` =P-JOV;Զ6wE[v ʡh*>wYp.6,JJ=\QFzw-8'0tqht3F O&.=QyK_8 endstream endobj 2531 0 obj << /Length 1282 /Filter /FlateDecode >> stream xڭWYs6~[ș "HGޜ7Z=f>@d1!@.2 _-ŷv,?:+Y$`l]Dfů?P'7DdqF :[ngRAj({ɏ3U=y<)gnЄYuY8i\s**pd<8 $蛵.FT8qL2̓@r] J(˶BWb h8(R4Nr#\6Ip\H~UVVnvz'.km|MNI9<cP$ ,X ,|eP]ڡ.wҞK2{aRtN`wѲ@WwoCR6uHS ~.,/|1Ia'Rge%'*NS0;I1O_4I#@nL!^Gۮ=g`4w=ìU_עэtWmWEWg!0)ZYV \ބKqQЛDɠ.Iļl6[A,^f?]Ld ߶qrc۝-hSLkUn1S XA UnƠwi%|#V/FKNNlD7 jW˗zenzg'|HmndϺƯ> Yϣ$ w6⽤lkeW^>?\|j+!4oCGmh{; ^ՊԷR6D#r="EC]կ|YLi6J\ 4;8l(x~L಍=Yk!ə+=p6i&IK쿰bvksk.6^~ '۲^{]cߖ?mJz94|EU xf0YM`_]]zzD4α:CmcNIGsՎU;E9G܂ xB GZUTr*ɂj뱯L7Kh6?ffqRpn;cơ6;q8Dh` V:UN0yF>cfHڙ@#ޫUwz!_Es-Z9#V̚r`Y? CЇ(`N˽9\k4ɠ+~LAN( endstream endobj 2552 0 obj << /Length 938 /Filter /FlateDecode >> stream xڭW]o0}߯DCG>'xm`YKiR9~=׹vhz9^{$HEdσjs .qq \"_,/" I\$ @ۡZ/!!IPz6hϜ$) ҜDŽq."hAoDx%R˦ ZPAB&!6b$h/K#Zk@uR80yQ<2*XXֲu8]ʨŽyDDBi<ŀmy'qD4X/"2}]j ]Qu|[T/eJըC6vG`?"P$3c@<9ߗ/Kjpe3˴n?N:9$&.ce||EwF ?:bi2=00z`ߺ?: #x5!̝W Zz<Ư~*]5$:y ~F ))t ;1#S6Y`D BUp}Wi5PT;smپQliFb٬ڣq.;oOqf$Is }??6jX9:XYYgZc G}ۜzԜe*J:_r6{[r[0GsF厰lV71]FK+7nǓ!RVx*hu_Way 8qծT4URmIs:[8#=Nl4 +X|,qO)%1e}.^Sl*Kv @VDE> stream xWK6z Tý E[dh[:C)Yk)k5=>g7C8a3ڗDr$ΈZ4i :gY3RgO::ʥϪ\c\tzLpr|p)LFB2umg#dA(.D\ZO`o|$qtB̘b6 0)5P#.7ugIJxFgL_p!A1yc Y@ KE砹tK)'3 #<}\TrTR HMӚ'.%}0lkT,MBÙ%W贳u ӻ˞a~d}G8μU9/ad?^yn1ˡ6Rå4El7ֵkX:D#}B@L (M' #UW:Ѭvš{'Zo 8he>P.+EO>LU*vy'4K1 cfl8B{,D3@dq_@b}RhϩVzdޮtJx:'TW32 iޔME)*?G̤J樜F^->t\}F~+ endstream endobj 2598 0 obj << /Length 989 /Filter /FlateDecode >> stream xڵWKs0W(Ԯ%ۉͭ<@i2\(ez$&EVEꃽ^,Aw-1ƶyתgku4F!ۤZö3lОH]5I9(GNBvH\CHܨ9,91]U 7#\/m"9$7\l"bZ@BߝP3SS( wK + dd!9Am944CBd#*jхzzbt_˨\R?LR4, bMښjEmjMhb] endstream endobj 2612 0 obj << /Length 1639 /Filter /FlateDecode >> stream xXKs6 W팗!)RI4q8zJ[=⺿AjW^mv| ?d/db=紽o }HNX,EĄ&u]uO< xoH7mGeMyog{Sm޺U+DX/DG MРoR9Eod,M20e%eʷ Jt 4}ޙ#mKb]̰yVN`Pp0Nx=~)ߣ\O78a9?9gaQ]G;A˕&{h]i// %m:D!fp>]E5ʧޕ|\N7UYdLz"c^"\oʗ b蘎X2GIfqf+؄0wsDL&|U A1TlgsUS !ѤߡNVa&@q[m^֝1yjۧ\PFK]佹moJމwRv^SWeq ,0kr9ZzigZ TĽΫJ?BQۦnjn g.BKSYbUi%} 2NF,I/6Zp1[7-š7]_BZ0:)`Ծe@,iu~]n5A;.xb& I|'+ +aaʱ/zUQ]XP,R<Zi @WhQ6EncUsPXC΍0@m&Ja K,PzsS$0'Iz=>Ǟ;JjkĢZ&QGIybNO sX0 }?Gj;'пS5Qx*ЬY,z,*aٴ8|=Hhyi?gL X R)1Gy}؊WŸmƙ*Eh2Wn}VjGa ;ZǓ-Lȩ(XnfK 0`xL1ghvѣK5vnR;vk` _ex0N;ƟV$ZNֹYz6tH3Y7Ij==7\W;[3|[e O^ޡܿib) 8Y0 H)LUe7j9uuyua `pIAҼX,LFj84u!nJHG:s'$6/:VwUGH~otBBW?~ endstream endobj 2518 0 obj << /Type /ObjStm /N 100 /First 979 /Length 2712 /Filter /FlateDecode >> stream xZnF}Wc=}, -f/#Zb<3%9ϩvcIAuWUW:UT &L{k772J3iSVb=J0 }'g  3,T\T4,h,0,F5Z/ZI z񃑆EJuIH;tt@)Aј I iHd.Ʌ`0FIVeLKTW`J$`wi{F168fL#˴#88צ}F'N4K\=,%Xu4;|$,N&]ԬPH {'8 $;s!YH !l%eN`qNk=sZ \-7g= Khn5"`@˴ jIFw>͋ 8 m2(dr)HJ0,kYD, ` QdQN4/JU! fѤÊ99@1D P5Ne2M ƹmM]O^78fa۳o]6 u KW'j8n`O9@8CR~;LOy{Tѫv}Q [✭^ןv;?lԻ"iUݷn]cK߽/YI[(:/=I7n\m|nBڛ1'=)'̳ճQxKװ[y 0QkIQ8}Ƽû!} ۫_\þj'=wj'rJЅ└ 0>?ȘxӮe5T}='j¯MbGLp P n$$2kph`R kt%bCj;njkPP} ջMnCjP{"^G+-]k+@u^qDH%D\0'ӔVſǿ&l)tg:3QyyD-d2Q YrȒC%,9d1KYr̒cMIzܥ:I~Wv7Yg\ @qtDΔ^!).uzND3D`{gwnPE}QkzpBK'} z pL]s,ptHx~yh9#JzSXW#Uн\Ti J#Sv{ߴ/)ёOaQ gbnyFzJ(Tҩvv{ p.t4o/Ȉ盪/> stream xYKo6W(+Rzh)(iK Y2DiP|XR䍝.9p`LJ?줾JYnn83<z?Ͼ>J;u_|s/2kx= pg^R߯-_K>Hb:{?ݓrqRu qp|0O[%!AKAdшKVr˶fM^Ҏsϱ(. &{-9R"=-+cv J,T-2MjyQg4rYE=kdjV ؉V3vrFb7SL(+6 Qw {Vt U`䬖$ ,_ʡL[X[^*m;@+ӧ VTzŶ띙Gx2aNMFsnn_6N# $QDץhXr -l>ϧ,( "m=f2TP.Gy&:^ݓGz [&˅zZi':5ʗZ>MsՓLHn%&׈n7L`-v@qE"+'@=T]´[.:22+d􀀭j2/u$KeN{ӊFI/TݲKaoxW|ḩJ }4ϣqAaNM~*uqCZNfSѐE$&fEn0hkhwHNwuc.!J0r1EL3n#qd]s1 Bc"d+(k$Ts|T DwGxY0_jM,ӱD(¾%IVE|XrE0Qa[4tL;=;OԮ`;W{{u$H%j"B#?eEHh=~;e@1OQjw9$~ZrʣC4qE/1X4Z拸s=e(sCwϦW8"%DEf$~~A'fnU{Qg6}z8M΢A::D^fx%7g[mN%C0)ѓ(u0 2w1E>;0om . >4%NkP墜n5R=C S$Ig |ţKlkGy QݧEj76G{kM[Z6R](mu),wiӡ!c"I~<) d;7(׮ endstream endobj 2622 0 obj << /Length 1647 /Filter /FlateDecode >> stream xXK6QbV|J,CMY{Jsڴ@\J,yv[,|Mf3|!32JdlHU\ Hלpd*lZg;u$y`'6Zd O.~]69!?蜓]Nf މ!L.G>l$+Uj̫([jE58iNi#LH;mw5l&O֟KHrNKVb,E8©~O7'"{9??C42c-GNz1l,C`E$9"eS<_ X뀔9ɒI`㼷xuxC&Mp%f2,,pu?z.^w([ɻL}pLhc tQᝐ+tNז% [6PUy&.*I0UY|AX4`BӒbnL@cV N}vı8^DTŌ3`4!c43z#vbcGp;8)?3c -0-IPȑ^=S.Mn&ySbyז8J_ԷS~o簓+W׽]Fu7jek(@&$@-Ǡ΀Iu G͇xPstN( ٿ4UUu] bL v'h5wB7;u/##ӄQm}B8&#kaxj]wlKgt Ql75AX2 J%}6j?L{uQƧ=$7eK<ݢT(w7QK4-9MLradq>ato:nq/\%K]78%AsXZY Q)ΎcAll/@f%఩_ntW"H𓃣*Ž;jG 7~mcmxԚNݳ4B'VY5r!.ȏߵ;M3~P{kr.~TP&gkZgET_P M 'cI~%Ljb995^`leܿ/;e~v:/y]8%.ߎvmC%4/lzƼu!1$7n 0kۦI@Wbs=wuxᕜnE7NGeIm{2dT$_ͮ6G-ji *}ݲs[EVB<cuÖ7%`X@myjUP=qLpEWo}טB>`8vZG:vO%ӻ)itdE Rv>`~ȯ<چWA_O?~ endstream endobj 2626 0 obj << /Length 1949 /Filter /FlateDecode >> stream xYݏ6 _jϲ,uk1uvz#Eɶ|N0>()[VE84_mb3Wx#fB '^=w!V,`ݔvu<=Su9aiV8`՟] {$ypHyGHU%YEx.ss9(KI1_:8.9FHr 2J&5a\Vۥ6r9.zo/iw꺷KqZeNMzBoT"PmUVIն c,|(@dbqG.Z}ju0qU0Aà Tu֝?3GP"x6_C癵&{2ʲ|AMfA7-SMGMZ IIZa_aM TegWu +VYoA%MY02%|oCũvBq'N48[:(D,#vs&cqX1IRF["$.S6=R%-BZ Ai6G_F[mowb>GrR%~ ,%ʲ`,0]}zW^f1Ӛs0w8.E@ipRxb\.Q,gy@]CoH %(Z'}n1 Z@N){9 uܤb $$R/<p?z_7ػ9LXs7 Gd™ziQ1s&|I8`& 1k[؝+({ixQQeיxé??p,Y46*7I,_ d%.-h$38DtQaP)Us(a~ ?^_3l?4yBET-6"d4<o[22j^E1Ľ:.X Qt[7Z!r!^ [Wʊ[[CZ1=?Uu~V>>S5{J!4EC' 3;Gսs(J6V1Ս+i+άqlpCAflM`g~ݐ.&/_/xltU=,<ju:+y Xl! Ҏ.FypN0o)Df9a;Lx+~E{1[4`wV p?N+.n];{!;DDDwٻ sUt/gA ALqK\NMh {DݧENX{_>waVE26> stream xY[6~_##TCQ*UMD<; lU{|lvf4j*Js b,RJQD=\i{Wϯ]Y7?qeq띻u ^Ro7c< V[HybywՏ㙜 ' 0E1̠ & y/or4H)j7OowN(㜨|м`7OeÞɰ;Gxx(]@"E1KoXFb%Q`c1sGǏL b&[i)r9Qx.9!;%[TQ){,h }a3h9d_b*rYK>~.{Ibґo0ƌ_1sᨔ ( 3Ea<-e!uK5,3)}N9i4 A)&~Ex%c[BoeUAMju<=k8T n *;B>D9C^ [3lY >` rFP='ɷ޸Bzu 3l꥗xJƺnr}YgP ]Ǫ9<\ݸdH&zQĈOA]Oqv>&G;7EHe) C2T?=e j!9tG<~|oGq)UAePl{"ƣY^F_e'U304˷C<6VmdoF endstream endobj 2632 0 obj << /Length 1524 /Filter /FlateDecode >> stream xYێ6}߯[% by" ނ(P,A]l$9;CҔޅ["]s 6j: Գf>\bޮbb_1JjZ|5u5_d?6wBBJ77pmV3ۅ ^1E3V_2k*Z~3&|t ӄEP%`nv]h֤v{oPhMjVpA*7v{TºJqTYw]N"W4N#Q:K~!iy=R;/*E(* Lms'eOUfΝ~nA\{X`%Z&]>z Ul \!,lCr0"Xָ?}^lY'!BroԾ `߻ ڽ}oޛ9Mil :jy]יzmMLQ'-L~ʕʚ `PVdT<@rȓPWB/Sj"JyۥyKܚqcL@6þ7%J=Ճx֫=%jołǚ$|Ş"R3QG@ʑFxiakS(XIJ*c4?Bă#\JHx 8@t./E#E,4<ʃۀT|vӂˉ0N^XRڵQq:SU23jTpʉS+"ƟO%>/6\Ut ED~`;S aLÎDB3}̀%5~>T`#+c{N~I($}#@n\ JuM"tv9vi_{(&7Ɲԅt|D}; !K {0v ޽U8Aڢ,Rj=,` v!0s@pގ$Fy]c?g ;GO)',v3ѥ` ٺ+w>Xoo: Buŝ̮wnF[*.$7|>4t# R[l\%ĒTjK$*gʿ6+GmR|>PA3QMWK/#:"ǁ Xӱ[zhȣ5Ry%I.n/fc;0'V2k>uUIXBG<实'a Kɂg*oxaitEpr^OzQ TI$;Ay*Ǩ>S\ӔT[ߠ2J uk\$rN,%> stream xYKDq#4D)ZSwwd NUwў=ꪯ*lY"d:[nyZg+ H~s{ŷJ%~v5{=FW"J/T?<nn 0E#Nozzۭ88pvWK1XHط:JJF@ *ӡ1#T+hhuI/߄Ƽ݉_0r5eCXȑf$e. y.HkڠHHsg0lnn⺣w (1TA9"?aqj<wz~G/];] @peVsM1d6W}Y]O ig !!:-JKn4ĺ3$ǘ|gcYڗqCd_HdIaZ;(Uv,fϻp6һ}c]v,+V6!SFI{~2ʠhq +kBZx =%JwGh)3$BA!D kys`> [ׇP.a@ -ZLBg(!=OzTy.1F&EA` n!s (.䴉@u({l1c]c&߭(77hܖcT1Ιk%\GM`]}:32g3d~$b'P##^ZRlnr+"O0T ۯgoi,;+{mH6#lX6z)Bե`?OXk}<ʮ\յa_5~ Bisn v\W(S qk\LJ/$zT%#)Q0}ߏ;ru:E&-7?cpPV(Jf4ekF}GL1ǪrCu2w'hB01*iHؖg(7sQ,0ңQ&,I0zSbk}љ$-Ntrahy/9xd|'8'm*uK(M:w,޹oFrx0A>bA:r(<piwA]YpxA^O'!穓)a)T\&45~G}`ڑ,X?$sPwx)>g"̲>)gں9l!3)ًԙ~U=a-jEqO aiHv՘>7j+quzЎ`]#^gyxE-2i?F IZ endstream endobj 2642 0 obj << /Length 1880 /Filter /FlateDecode >> stream xYKoFW-I2E)p^hj%1Hb'3KT>A|.BCI8'"4z׿\P7nW?\R I&tqY/n]zhu\q΃r% F׺r"*À廛_/^tkJƞh<.f I9T,ZF$r% ۪γ yϛ&/ht|ٹV ܡ3ڼ#Y1YH<?.8j#hk oяιzIPf %wioɐ,Dc"U ,H$ Y@Ƽ ͸FW'>.o4̎`^cԱ>C0O rEZD]1Oji2k 9 sgSg!"P͖F131¿O?:Go 7(򘄱03k)Ny]?HH*<#a;vQ鿪>a֭+.bT"W >&wZE g[sD 47 >m>3ɀX% Li"x7n*v(0J\BeQy3&Tt3uAgY\q"` W3jܐL>\SNKƠ+`Eƾb['ᡁ.&;sUWjC}<>uFmVC hlͥ/tPٸe0"?} `NiX!0H`z^@7vPZy5 ӪcϮW[] X\~c=ώ(2 Bwp6dѳ]㮓T D d69jjo;!U]"gxpHNNtI&N!La~jnN[ئۥiѠuY˺[&QMJ䚔p6kiR=isk;qa:t܍>oA񾪊\&tKu1o*K'PP~c;^bOcOt.{{25 }IOn|(Z>7)jgbʒ^ۉO5ipfsW_6++[˝ɉ;{VzCvߝY)'魒LmEkZ,eR݁FS2tPP *kl:8)3٥zR endstream endobj 2646 0 obj << /Length 2181 /Filter /FlateDecode >> stream xˎ>_a%2Z Icg dL23EȒ!beɭqnY ЦȪb\*cQ|=n_O$ÅN y$YHQ!WݔԦ\} 4nq?Ch6[U&(Pje7㝉R72/J"4Bƚ˅:LRlf`0U#ׂ9V?}XqpnC2B))E$ Cƌ=L>BD(@T<_vwnn4e(B%Z(yl/>6- ,a:saGAG+I yEkў(R#bvg-*blga.(xw\T'߼kСsK@"NR7y[ yݯsSdcPXKkҀK2Dir90 @젷h` ~P1*h9& O/Jz,KIW"ԺIQtł&9oTI]I+Jku{B @N'Xt֩s~:u7ѝxo^q@3bqr7@Ar#;n]Б,8z4^b Z>Z 09k5j k u*`%FԛF}a L#vvv;"c{@+c\Ƒz" a {U )7E$zTFpMsjB^ 9 6&8%`d|`1V?w;fQ8Yt &fcĤQArwSmo8z߇.u>WKG?@2g^%o"!H,THəgD} Цn4{L^Z8{C3 g/>6Z$J,;r4=[tkIMM,laj`Za܃ \" Q%s9|rc΃}_1 endstream endobj 2649 0 obj << /Length 1935 /Filter /FlateDecode >> stream xZYo6~ϯXI Xx(Їic$iyΪؕ:wȡ5s1PȒ93bBg$EDijA`Vw3<|vx3$Hlq9$X^{tWrsνǹ/suJ/g,:[ wNȘ5\fY[ᓐ(%Lyr5@I*? d3eD#&nvIYlEd&awNqyDB0_r1 ^.5jtDN_)"a"NO&a DU(\ꛁԉIXAI.Xɻ*1!p(i={Dgf`}H''0iN'IH 2ݨIf$v72LĝgWEJ-5wq!q<¯ g-  vNnLJk):+S#\oӈC0zN]Ue:g\Z!"ǥLWs)tӨ IBIXHBX6d``%s5[\FF\M2dyNlBz]@{`I|A`qk9[qV5-g)1; Jm+1E5 ǖ:b7枱=SI¶|[H?c\xMa9k+i«OV,I ' E$N\7!=0C10 j)əWF1p0l}އma+`k H?s#zUO3Q,ؕK̠fܘGzn^leV4tnϬS G^Cώ4ojDp쨻@g{<»?-O3sQ+P"_$g̺L^ԣPp6-g:M*; m຃Nj=? J7,]2ᄳC1J2&SaeէE|#X8.)gE~OǥQUZ4mMrzŨ䣑q:P';) \EJ"NU0{v!CͿ]vq3AQFwY +LI=V7igmK - q YUe;\+J\l`/[bIY9x\M8#1-\ybKK@uui v7aׁ3UUG9V5f ` frӬP-;bڭYJqMDVu=LۊEr8[^WyW {-E ݵjכqѽ !Ѱ{5ERevd0M5Ay~&N"Nw`bnn:?{qL2>@ʕi8G}QG{U-`Z烬:'_+ijKRT~_`]⇖Ie8@4S7&-?խG> stream xYIFϯ[@*ƒ(/G#Yv_tSc4aqj`=X#5PWSUtu<Ȓ}+jף:Ow=]-<WV 1'gMN{:'%oxwALy!b&hB&++2:E(W!(qy!ڬ"'} (F1D>|%_uVLGF_%'?s|4CQcxʦ G("DE˃lbdw#uB"zqINym (_iyEyuR}UQK[:DBSk~ϦbD!4-vnS N5ݿ] 4F!+ztpxH66gfY;/_bߵdݡ|ozuy-/xIv({UꤕRSF0q;OFQZ?Vua`gqѝ"ՇΡQW``DuPi&)˵~EKڼ*,7RBD!Jim}jDtkUK~sR,iuˋwZVi]ͫa|jJ׈eƆ35҇||FKe*J!R-URv}M{s]W Z ڞgr$.G\ʓ` S$-Ȅ۪f׻>W L @R̬rWȓ|}:: d mZ4AaUyEkORw6K'v)x8$V%sǴňwbaX ) A$dJ.)Su0fuj]ByKO]!7cXk+njqI7"r=>r#j8-82)d>NXfEؼsFgJ0&y㋀:;moJ؋ OFKI$@5`tqOOuҪb[_LIcKbE >;'s"\_p<̾i3&mVu 5n8'<j$wqj8F1aw @y}oj}-M6$Jܦe./Ph?c?'(fDw]+bx]:]6ny7w)#( .o} K.%ooжmȾr+Mz[ utd:6~]oDzD -UiX7R,3M>k13wSԱ_v/g(K{;B\ l9?>_oaQ> stream xYێ6}߯0X&QҦ@ qi27Ԗ\3Hm%A"@LQ!yP }?fD><]İ|XH76v`Wο=k("icAԜygUHjdh )wmM ?{i7s]3,%gzN<+ϕcg!gȯN0*qƊoX05`p̸1csJΤ6e}OFFM-9ˌB߈9K&t[$ rѫŅ;ɴlѾ j)Q^MK?{oaH|/WDLQdמ7#aYWy$E:"~KD|^m[T~Zu@Hx )οQw#X۬&2tn]#Ebod52(D.T&d- X4iԺ(6hĠ!i8 qPCks4[6,KCa^]d4d9L1/+ZhP 60jaXèj3eWZ%5ˠ$SRڕҩM6&aYoI< M'XKf` SMδYu@ )J^-g2s6;u ܇ƇW#[dRLp )8[\a7_Cμ@6p7>*cB9-N7UY5;rRPX0 =3veBb2Ӡ)ց3TUn֝zPlтDDpXz$ Ϗ1 )Ñ'56dxdpkB0sqdTuA4A);;-"f="簉f'tr|kAqMQW]u}̺߀}#$> stream xY[k[G~ׯe; $5K &CS%HE!f[>+`̜sof"J!(" ՑDQ'rI.\FB!Z \ 6:fˮ\l lFntSNPc{W͍D AG0S^F%2 #4S0" H ,8b84F`E4wb2 KywLx& %S"0S|U1w4ÿ )'%JJ U GLUPdj5cY6r "f 4C1>r6%%;hM& ꔁ#5lRBbpZJa3Q`_:mRNH,5Up& :d៖H0ʴjeZ2@l BP l(Kd!'\Euvr2_Vl=ylfܸ]*<#m+yifV 1!^7濮߯tg Lo7 <)=jV5Oh%{y$gt.ЛS?{+[@l%>Vb6+hjT /kQn$ʅ: yBeL<'$^),݄@#>' dy` Pb~@#iS@{=bsL} "P3@gyc]_@PlCƂ-.-^ WXwbyn%B e:%o7QsPc&bY|=ac>[6~7v\~Q$keƧeLJaJ^8-HH]EF-ZѨeLR*Q+-g}nB;?J#D}`LMc0>cWcPjJ(1{ dJPHX ۔%@b01d @_*@.P({wb# endstream endobj 2660 0 obj << /Length 1558 /Filter /FlateDecode >> stream xXێF}߯G  J@2=!קlO2%hu]>]}Typ8`]]fvpvvF3Gw?r%qt;wn}vvQJCu1Ç??6oz""1C"VogWOqMNȅ-t9tB1)"(A$^E\py_T9U+C=hNHB ""I7 nڗQ9/E7޹s+`"pB%8'^ <|Ĉ/>D ʥqkL5WS?T*}#0aqpp(:dq$b'L3}hI ngDؖ#Ļ--yiֶ+ p oVH'4 ӽ{ݱaog:3{z7.n}0ĀyA9`~6LGaV>:ܳ'^ iu*,dq+.HsCnm3{'" &ESpE\8 ޥFXZZx:Ot4Yy/e@K.Sr7bjܑrXлSND!PW%Y\WRL%1 D+RYDavH:!5S4Q*v* 䳷cQӮJc{ol k'GN%z:awy"̮#JEEӻ9fs}7w8knq.k7e9)mfSVծ1*:4wG1 M.#I#Epm & (L՗\C6\ڕ@/\-P|zJO̪Cߟl$t Mok+!Cm{ +lDGKɗ恇}홃p[]6.,5},J49)EWgׯ3ZtUUXP@g5= 8˼2])n> stream xMo6MFW,EM[E*l+_ߡH}9t9D3g(DHq24Wl}r_ψK0X^NϾE`&zj:?-mmIs_ \kSbf& M1M';8"H#*&4gA+c؟S 4J(E2^n {?IH%Wovw-VT ektPYH<#Y~rD9m.B%i՛B&\FN *Q£ց⌧rg kC=@Jg1 *[rVjx\/m]77+4ߛ8lR%y<]>|gS/Mp@ζљ)5\|KdV֡\@; YlJaL@|WlwQqVڕ#:U>!l8Wpy6{Ҥ\>JH6T~kbrunBl d4\`/qV􌍵Z/u]/pWޕE"Z2nzM4U6΢cYԥ2+l8tlL SЌ485UD,}"'@DvQ''b:ϕxd}sZcmW{cĨ'[Գ= ϧ@6gEG`C<ΟwH gywayvt1oqǼ1a[&/[ L40 ( zXX ׃ߗAaarc.F#&ЎQYӎipvծ:y)a_!O*t,<qAoA`t۠ ` MH0pFBi2߁Q nj)Y D36lڔ,g$}Y*OuSS`@NaCCՠy[BDѽ:v* Ϙhs6~>=k=䕨ob?/ l>~eX@~>-P>j>yG+O#Upmf7A*jVo1 ;C"ܜxלXל?xvOo ӫ endstream endobj 2666 0 obj << /Length 2059 /Filter /FlateDecode >> stream xYK6W(7=lHѦE=(+%Cz4E||3C?J1r6vWvĭKaaXobE0qNVۥr>y+CխSX}N9j[uU)UDfySPz#8 ]FW! :qD2DQYBҤ,j:͚k0Y\R ev-l"KʿKX!~)uoa= N\,E**3x ,Wir:.i 71"!ظ-D.R%l‘A?O uۀw`؉ƹP'VҘ2hꊡ4$N%'VG"PMV)O De$/M!O)USݫ+2s0ɦtiUWoK%!/8XQƹ;r۵QS0xCMX䂇l+5~>==>6 KrMpM*6Z΁vU\Pq.Xʤnk` ]#֖$l#db&QyԣBћ=z Q#I~׆yjb:bp*+?wQfƻ 0iGo.G Y/N4>R0ḇ)|h?'ք絡*u`"n9/N}|e(Wc4eMYVékFK4v_E5UɣY0苃V_qsE;gOog dW=B0`Y齬„=۳>vM=+>$ e421Kx+c%[W̬<ա2?֏/( Oʅlu~M(1l6vSVѻ0b~spLjL] ˜V)"z g c618CB8 DÙ\Q3+w3d0#SAq_7TZ$Fϐt:GI|Iyd)_gwv.=\ܶQZ~ !ҋh\& iESF) :<`lDB}7{#,~ SyÕ+o$76E5nų^orj;Uګs( c.bۏ5Hg1ePYpցG!gDw[<Ŗ|i b!L,l~1Zi؟Rv[`+k; Ot܋`vsæm:Upۯ6nZ-DfPtn6s$}G@)l 5:QOGmLl,g>_ |]LPAd\WĝiX.L"fMv)vnܻE RWj2I(\0>c*C,HlFO=q9WO=ݹOYm~5k+,|2qQMDw)77龽p'n #9s DESfDS,.Q7 p+=<~6(7 UmNN\3#lNH^y(AӘ/iK@Yy)/t]xYO%c+?RwnIӅ)~10\baXi3(Ng X3nNGng'W9{Rd\gPԍMtFѽ5+<|g su=}_M7[R;}q!J-NE=( O}!kqdh"r4L9Fٶ>02n*uAFXO_4Q|fCOA#^% endstream endobj 2669 0 obj << /Length 2128 /Filter /FlateDecode >> stream xYKoϯ۪ç &@as%[ZH;>Ei3%n,b; l]*e+Oowp st1 ?߾OJ%9}~8QXec)U}нnKyxt7n3dP>.;&wI& 'c*Ea`+`tsAOLDݳ.L@FrYtm,.OG+%/RƄ'*:X=IO6,$x,s C/}a6/菧?b}c 7/w~%. c"'8+ͣvϳr}]FQ#2N(O:Sx=M e*OYyE4,0>1[`SB_w _ ӈh够ޤ1U=jpZN!.֒Mg3и*͠_oXP2{;`åq&(CMfwtA344`2`@{s|eE:& b^*}_\ƝJ?] ߇Zt |w9!.)G7zX4t):Z;}w 9'ɜ0~62:$IDM=KN(4MD oEɧ~<@;]\|7\Bhk B;t>7*5^yHQq`^poxX\;7|>iX88鿹UJ-r/AGx?vBb$Ǯ57 c]n[Qh3 ƚ0wP[C s*}nÁ1nm&'\epʡ6/iTna o}x*2Nf$A,Z<(K}*|qoF"K:> |pDV8y,/Q]J@},h {z"FG+ .u3`n` 2 K4HwyFs/kJ[0nPS(:Aqe*kঐzqѦu1KLBt#dá`͍@v㱳4.pOO)A#NSL7kW*wmu҆R^/x _~@'p4H0Xn^(Px^>w9 V$W,[?͇?I¤D{ ~iV.:WTȘw=AR 0OH]EsG(͌ϥQ8fjۆSwuU5 ܆v1& q ɃMHCM;Y4k_#4`Bl(kۍĺ L/х[6eizSm҄#hܗyƆD@L,m"V!;w-/4_ܯ1G}2o^L+S;Tv2+zb77blP6HX/˘e:W,@PI"oQ`Qf> stream xXYoF~#[ţ@Z@ (/Nhqe1HGZgf+SӴ\7cEtEst_Ez_7Wʅ N$Y]ZHetLUmpj!_zgU>bjL4;&EZ-1^6y_8旛ٛo&m7fEμ󝪊9Y&eJ8n_s8 U>X; +C> stream xYM6W(+V=ih"0C"smHr_DYI  d%-9yoU?x'R3*ۭÛWϰx2ͳ^r ʓ6SSm|_٭cJi$~^nj׿_odSuL2̓^lS#ϼd)J=]*”"uSmO]1TmU]W,f+AR!Pb"*1/9[CDfR kcsNԤJ4Xt' 8FxtOI&KxCK@N c 6sN5O0=f~>Կtz{3@GQqdDjYp#֩^ɡ736ʦ2^}20m= hx ,ݺnGg7r8u؞><]WI=Ѩ/6: NqSa8_#_Hd#.t*ʲbBVB 7ɟ !aan- kuhxfgqZʢT۷Zzh/A8+p``a-kq6Ι-\SG`Bv0^l~haGXby!y9Gh4*Wpcmw3iPpѽX0zo,k` ;Ӡ[7Kd;9C],ƑiVK 6++ Ǯ:]U?NL|VyMe:G#fUmTSReQ{%D2 ׺zWȞRekĿx/C5XjCת 1PfgSԪY@9V̷M1_R7̚jch[7k}.Sxd:>ν!`3,k6"Yt J3$,d?F] ]IoF*'Y0u.6@ R1Ty9JV^:ªJ|aײ@G/v1өN;RjysѫgS|meꇢmRƘ(2=.]Q9>}X#3t')Mgňt+βŝ6F2"<3DJ^O}_YǺ*f +i!Ola +j4wi~T8-1{FӒZƢbTC=a}#ƙ"(\4tlqB,ɀG( ki i?ҙb s)d[G5S@z/ݔ$8+UP4*N/K47ױ,uͅ>ۮK"Ft"ieh6%B~`z״|^R-pWERd/@xd:ʣ]i&'nr1`m [ ]Parǭ`a}fLA6z^Y=Uyv֮8f]vk=>/b쩧\^phlGS0uW@؁OU(()fD^5Iȅ /ayg8zRt(/8bP:[0->œ7hϧb, *9v0;C"5Dth0z<8ǼaF:Bb'z-%&Uk/O.}ui!͓ͧM]asJ= h䝭僺U˵9. ¨V_tIk"lق+ ]HCq endstream endobj 2680 0 obj << /Length 2136 /Filter /FlateDecode >> stream xYK8W D"%*@f1{> M%GC7ݏI e,HVy,1>301|sBhB\v!e_{ծ4M#rs.W;ժz1˩H?]ٿ.=cTgNMI92 MNFX"c@/5zT|3Ar٥ޮe M'0()`0v+z'>4WdBt1Ih_NOס=3Q̋ ʈ7!eB@2^1‹U nڹ*A@U5ˣ>ѝ2LFhvoU~{WGe7[b1b.@ hN11N0R# $CGGv|\S0yAnX4ptQA hĈW!t@m7-sutt1@<]bԝު($z򨬷H<Ќ\Eՠܚ'~ytn4m /]L8Bkz H6\9P)G:0O@"K ctR.6]JbsccDL<Ѯiu #ٵ$4g؀zV/T<o퓓ōt'!U]Tc"^X±8PeaLsBVvۖD_~IJɝJijDV]cEa8I}^^ZyqF<}9Of 4=H> WVUV19Nu| M<=],P'@*vLe=v4TrwƶU]M#,K3e3K>}r^l *IpOdYtve`4 ֖,R擛|,\ܥ,V# YF_w5x…#=X֮ v|?JVRU;ml1bYyZ7`%LU4e'}/!Ѿ{|ꍩBUyTCéTP6<9MFOvmss6 2pN)m󄷞IS̓w}}N+\;'= '7@ƟzX٤zW@m4._^?LH2usy\y2[tQ0ci'4Ԯn'e.i%!OڜGF̡^t5gY,I̮ǧ#-Gk?N;4/Ǻ#1ߊ)[xG?DT|H<59aCV!DzW@npp(P)\ȥo߫~h.xDJ&ZxOŢL%NB2$s*(4ȻѽL6G|p|SnWBӄ+յ5w6ωLXF,'ٔμXi\|޻Y@s#tXt/9B~<]ctwqvv4Ѿf%Qhmo #iWm/̽7.gZ-!/H*'e8_!H|CkPVk7խUUS_0rVƾCP%y$-wR{G>ҜXo;GsɍAzֱ _1çO114O~}i͜۷L Jr?CAš# "=ؽ|fK Npmv391,85wdؽKqIUZR5)'Wp~rgb~/༨*"2MN~%ܕnmEzFE%hPMABO* endstream endobj 2683 0 obj << /Length 1566 /Filter /FlateDecode >> stream xXM6Q֌%Q)zhHQ$EC$Ţ*di+ɛ.pHYZk٢)"H(Λ72_/xJ2eEf۫ݼu+Xv} ,bo.ovuoJJ˕R:4nmk]DuI|`S p :#\ytQKE g˕NDTvE۾[p/i`t$>_M_6GLri-ŕ3wCOƫfǽʘ*6_ ݢK2ͫhm?84Z&&a&Ӵkںrm*bMu'$IR C;U<$%Ii-39RAJbf $c rMT4Kͣaom1g81*mS3,}ue}߉ SH1a}a<6"@P|O-Oۃ Kʺ`vN2hhi7KDyue؇W3 ;-F2]Y4VsL4[(# ]&1ҁMCeMQlzL҃ܯ>臔iާ< nʻn~Sۂhq(Ghaa,<75{{dֿ(y jix{,ܡRƌCΚ{=}tOz IMw|ΐwSj5oiɁ]|U4mCe/}/@ <0ϦF@̚a^<JO %U,9`bȜ(ig!IΤϜg H)} VU׷<{9s /(+ȍD\;uYZCQv!eد`1J-=eT<`וEck!3jo>zfDCZDFq~2GO[> \ŽzXP Ay(qMpW87U6Pz/ޛCJ[:ڶmZZ{{X5w4t2iTDz5 P6r_Jp2T$w$gD ޹rc(P@r=w,0$M O;22aO@S~g٦QǨUQEڣS1ߣh"Nx}_dvlhqgIJ!n;8Wt"2T[$J]{7T$?u6򚳡?T,qÑnhqFAxi à7rS]>Ӣ(W rV> stream xYKܸW4|Y50͈9lxq{60VV-SR2=bX*#GnB'7yIymW!Q?>J:0fwZod(0\}yޞKoN)do8O|τ`:vR{qOEߩr6I bVw| 3K-7?6-.UpD&_ -,?1q)/OYyשKkQUp2A<8+z~ xa;%I'% ߧ$q9!ky$"Q_2XN~.cgt+D™9ڡ)WYկ[/ 'OVOQӉ﷙ N(ʸ!G}mV;TB򏞷rlSK>*yY=ag;KU'sW%gK|2 Ln"~d/YlUke":GhG2JE!؍f^ВvQ,(;` h\;n2x)H'а2x ,EuD;-('H ig*ҠI18xk{ӿW?ҙ՘%Hty6gW]sLJ@؍E`JOmƔ[NY2(ӑ;&}(ƍ2uZ3=TUYIFsfG\§#Y*ssc-);]6hpJU4A@.TnQï_1kDY"{KK[ݳSqe/P`w6Al>˹1X6WGrE ^I/8`J(HS;T)c;qsRU*L Y1qπer"D=jii4M1(cHDcxyH(p8/a @îOzH?)_1t1*pOD=9hqNѱ?໛{惢\o<ʩ@#ie*Zo1 ,У@r w+v6Н;ͩh-g yA s>KE|w֟$~WU`xEJTv"\6~Wn"+ʐ@Q4aswȊNja-/b߅TMvIQQJ9WeSO#Vc  )EA]?rnLk*xA_C?FߐV%al|A!9d ` }WэXZ3+aۍK,!:~SWDW[u3]Z`QH-qyع!o,q^;s/Q%Z\-M`qu͋.Vf~/ç׫ endstream endobj 2694 0 obj << /Length 1891 /Filter /FlateDecode >> stream xZKoF W,z@m)H$9ZV+y1N? ,$Hto%iso_>N.x"//8_Djj^|d],cJiWESTy<(_~Zհ&'D=R%`N aʬu)"p1$`lκ[jR FV7:?@D t`8}Jq%%!<%{xȧ_Й1ElN_wMACaEV8dHpulbTh5Mήr8Z[jnw]re]"o1>#2!(k$t/UrgRRﺬ+sk뢻a'>vk4RHw %HOݍ}`5L5ǢAN&K@..U-~r|yS`wl!ɻ-!qm1P"P>X@l lHXdMh<.Tړ$A!n+HG`_m@QmQ̨^9Ѫʋb`,I.P~ 8J9Xt6vM6EJL M2CbRd_ 5jPO)ANL9ntϮtՔW *Xr.S!Eަ8vm\eeZ2>,rm d@'q`-~2]PTFy͚¾3n-dfC_v)pUXdN וMT=K_~ }<}5bo^:  M \_pړ'SSf @|tb&_!hє<\22N%R `.OL;r`anݺtNT؋z{QL"}׍S&2;yisP#X{:@;L CѸy3{H|z6&kfTӄ=0q#'O S2/Dw 4Rh+HFgjDʕfǩ>ufx>`D 1>GF#M).G !i#d0җ%yg3t`3lQ?vc endstream endobj 2697 0 obj << /Length 1834 /Filter /FlateDecode >> stream xYێ6}߯0RYK>inA-<6m+%CP$M EG33C.g? dfÕo{݌Nn˫h=>ϖ۾f{O) )}?_(Ϯٚk3_kߓ׫Z[gEb%5ۼI|XknOEӪR`V0NholM|Jt_#ɞ">>*d\P<LYWb`=xQ89 ⭝/66NMz0$BMiZ.fZ 2EҹrDCc[vŧpʩ޷ydh*\'B. .w]@+)]u 1^\lS_Hz&)k̽!Xޓ|Cr?%pP .uMq4O6E3*3e꽡FEc+V'S:5)K4RCV2!nCM #MYmYhsAgS VdF!Q)o*ZAAB[OqFxr◢xz (6^ن+rC񷫤TJ-zX7jX`Z|LOi /S;zϺ( aokmb+)M\So5#\O(}K~5dsTHvme_p .H:QGXUt; :Y^ }֑mC HSG.ᝲzoHyOJ/=*ZD@,]]NUm^(.}\`KXhrk>b{E_{{>b Y=ǒEሓn=?MO8!noQD=$zս*7 24 R;l /(yh{u!ʹvk2Yn'TaƲlGO8䮟Ij ^(q|n'IEMiΚ-uy`n!~?vUd/jT<ӑ'lv,nq?${s |yQvp !vc8OB[tȎ$ͩt=$FF>k崑 )('gRtиDdXR(; X_'/Elfdp(P$V*OřgY*FVR[(cGSIvSd#ⶥ4`dLc_V~_spaK-! --!h -=ua7qJgwDxSegooGtvCoR GIa,{O;-gEyܧk[;oHh-\;@q枭`_[ےzfB9 sd_߸aF I~a" ?4te1'BQS&v&<9 ::X|nԣvj! CyGhhZH 4FYpL, Ozg> stream xXێ6}߯[d bś.A[ M6"X@$Z.٤_!:N>D Ùsf8" $"_f. j|0G.~z%$ XmK֋ދ]zߪzsνBz\ڨZZ,2x|r);،IBؘvUW[Ta0F%Y d0 L0gins.7FRi[Uxt8!l:5B,BSHEb.r+C6mU텗' S$A)+}.qp3vl-/xhH|koX$wU:Ϭ㺶3p K{nB[ռ|\JEȜ!PI䩃r^yh=6#C>~h[PǦV[|<9 ! 8{>(Pg8]% ӺN; z-ZKVm^۝]i81Oy=S.6 ЉKq!M!W2`Q2i u59o[|O\\^*O5 MS?뉐,)ۃEV,Uڊqo]3k@{0;wqVɷޞ6Wh۠lyb>aѳ>Y]븩Tc綺j`F3Nj ҃p|݁D m>]eOȻmW+^; tueMNz$ײia!\͌K[>LV>-9K;M+zXǞiҳִv|IK+ o_~p8T?"rCx[,$3a87PG| eԓeZ[üXLDžhb@4 rad]VcWB殄ξN\`pByF=im P,f4u>b~R3NԦwIIt 1G5rȲ&2xb3cUWj,pE_}Ⱦ ?rd숀뼹'q@fZ;ohG8i|NGh?]6XŦ$LI&| CwP:`ڤqOٷBBgF&Бmmr丧`ADBPDf5I"#y]I$zij.IkwS)M <ѤgW2 eKq8:F]]NUM׷6dDOB?Rzޜ*6NZ?T "_ =$D{bیtNxŐs:֓ΘN: Akסn '':*g RBY8,''I<&'౜xDDN1#2- )@2_T(ouz}R+ 0?Nr9 endstream endobj 2657 0 obj << /Type /ObjStm /N 100 /First 965 /Length 1386 /Filter /FlateDecode >> stream xXM7 W^d?,$ .r$Fhj }'E;L =QIqTp*rj"NN=Qx$qSDB+$lPT3{2 ,d XC5Vhz [.J5 ͊u*s$_ #2:M5Z Í *60;cՊPg9&8v̪)ŊuBfQ1!aw-(}A ŭŭbFlJ,a F55vR5Ǟc2搠άa :UP.N{TÎKg(np ׅM,kH R!y3;@"B)l bsHP8 {b 5$(q ]c{p*uA`I%4aO(Bk"zD6 `m{RA^1!bBR fAThRDIh %F)eBxG20YNU^&hL*PvJ~.8fD`mHWggthi˯Y޾}z@;;Vcu@5Nъ|@: 7 2ҧhoQ/qa erIPP$8: `1d.O[lV2>Ԛ.ua`~z^zCGOy]ۿ^n/!cNԴJ> 7qҧ0˳ t9VdaҍE q PoGp1FH2n#T?nP> Q"Q5hq&ٴh|vnھ\,Re Y[2j_R4뢛-M5JRYo$s*H$>(5ՌFN|}۴<괼rv% AR uh4[ƀJz-Uu @ByjAu1+ʠMIUVL~KVF>ܴR=\.)Y٧Zo0ZLf endstream endobj 2705 0 obj << /Length 1683 /Filter /FlateDecode >> stream xY[o6~ϯ02Yu)^>(2%Wf~PMyE<;b"?E"%ˢtQB3^/hpVp5Yl}\Yf|,Ϸr% 'U/iB_Vׅ^DUtnُQ ÕwKłKzV8i2Drbʮ+kVvu^KɃ[fnLS%I*mVmA2Jকۣ*aPcUé*1lİmB숉$TdUʙb>2z <1\WzA武ժ*?,EhvQY*x,,ARu(jZTXIqR0o[+ǘ'xւ]փv.|cOn5-պ+sygʜHf >7d E*VY(aiIdjP]L?VK, - o1guїMMf>Q9'_pMʍH x;լk>}'dm=RP'K],v9TH&.(^菇ljK(\9p]m<{{.#0 +ݶj&>Y4 !k`OV0X7FԳcd܎dn4${&Xv9m:$D3tZ ȴk[b9uiP0챼 I$&FБaw[oiU×鐴i ͰZNtx# ^b6 z qwRoġ%ŘFz??DJL0nHS:F) nO jvU^U˼uG4aAxg6AY\}A~O2Bߡy"KyA4\}7 wЏBY Ώ92Qq_btj?[Q Xq!WGmW34]C6=\K1?/k+&{niƺ SA6v #Q!t|r.\u?9t endstream endobj 2708 0 obj << /Length 1499 /Filter /FlateDecode >> stream xYKoFW=`non)RA9*!*Q(%n}gvWd  |p9;oV+%sVgEXݼq|90΋h=s㓫P|2Mui.R:{SZ Osa.2馯~=שxqyǺRLd3b\*dI5͵j*ykwkg`;XnC7!1%,y.zy6ۭ|HiwjiVC+ߟsgL=~qO*\Q F(Nb^>25mnK* 0ΙZPĽdĐ0aMQAqiݫ>&W t#=V#00L,t1f(,k|<&IZf>PXRQ!>VQP9)ױ.]-UMe.Pf<8Zj!} 5TuYo6 EV/h)D"*$\R R1d9dFYqPaSani 62v NM!QYՒws?'(FkJS !{Ƅ'Ӽ9@}||01-ɗkr,xN1 X1QbU_T <`OEa%%^(AVJoB[WHS9҄8^(B:\0Ҟg!Kϣ=*-7cQ6=z4`;@lLLRxm:ARq7MhClm%AG DıYfIO:5^2;86Z6e LWSH#p'aȩ$pA`֋nPmrwՑ X G8d`o>fJmֱn5\zV-ܶxp˃KyB^.-)Z'۾Ԏ>xKXja=03uZ>}ˇA-|\;o7tcA(} >zH0)1#^1?Ly>Wß"?Ssl"//}+޻':Re_!Czq4%[fENOzt/vv endstream endobj 2712 0 obj << /Length 1921 /Filter /FlateDecode >> stream xX[o~IX oCi Mܼx8R]&=Ҍf5 iQsH'6$JLn{Pۿ] /`x$۫Ͽ,U͓ۆJ 6: [lgnCoof$Pct1:!RnT34,•O#;ٲY~PW6Ɓzӂ겱~S'1;Ϟ>Wa'=@yWpbI7 =P(&"^۾7g[0`R @nj~_)MpS[:w<5#&1^1J\HY RHZ4) lz/TMJ/3Uu?| ,oA0vuv&&bLfXS$#aŊI!pA0ըMd$2ɴSep4kU bzmlrt[=MaQ(nQ?kwB|?SE% (1K,rStyRkj&/kd(|PPg,S'NM;&-kfp"ЇQjtAtqQ;CxmݘB@:ß8h'b_`Y@&FgHU HV"%sܬ,>ɼx)R{`˟-ZPe`iI8#v|zKXpb'GeE,E]T8c5`OЧ>7֓`Ib48yʓ+|'x#qYדI ,Ls Gc`g@j7R!bk1$ثǮ]`L4 >vAmB}LKky隟H̙j!}a2 "duվ D\O9ڈc<.qdn@KUa15)wQt`MN$'>g ۅ>e9 4*@i+(id6c7,[ڳ gW \ `(iN _Y$jRH;<› @R%N~-B/՟WMȏ 5|Bx8 x8 zJ4[z#58OJ>?ݽiܫ+P8Pu/85JgE;|}J7lDkQ%yE=y6ѧ6I64i&.M  SŰNO2vg5/&3-`xX&ױPM7'cs> stream xXMs6Whr)4LO, JriL;@pvۅf>,gis,,]FE4{qRh>n2"haFՊʼ/J޶tmLfә^A{}zsnqR80<7Git2 bw1Y+#G0~O î/S+fpJlEhAYTh1<"b6 e'YvXB8~S1JܶTRWB6ÜnE_ɭl Y(@, ]×ٕ% l-Dۮɚ[zw] FEU-@eŷrٵ[\QDn4NɟЦBZU(кD9]#]6D)*QLpp--B9#Oc}ifiHbXHP3/"_\ߒ֒roZVKUf%$?.׼zD6&+)=xQ0"8.9p ``Eӗw, F8k-ԠFr?M 1M w,j)0 "ZM:k@4Run%C~n%V^;Arv1@RfI-6#~z8/]GeWjVs- t5batRB70R c>+ C^A$W6C6"]+Т}VRg@{ \6,bSM(Nah܅;[1q7I|,G;J8w+K=S;KtFlJY K@xeyz,OVE#6X RwS\Xm5c|=abK K3ubp0݁M܌M{ǵj&@D߫׍AsAħ/ꚢ/TOs▲-s_xZZ"{.kDufXX*7-iWn$Nvy>F-8I(To&-kԡ YF1o&˞ԥ8}u5_=:kɗpy8N9 X^<GCz:`n=< T؄Ɓ'?]2\Kk_Oqs~1q/]ߔQMDאwA0 " ?/'} endstream endobj 2719 0 obj << /Length 1437 /Filter /FlateDecode >> stream xڝW[o6~ϯ0R`uW=$q.C41 ]10ms%zy(j(9]tG';}A2Vޕ Nns١<. '%ljO>YKV\ڎVrd;AZ׿ sˌێе<882C|.&'.S(MH2P?@SdRԭJ%iL"GqjeC¦kԬTX_aOwQ6DŽ,Dievķ.A>lڪeTqOMl>K%Yafۚ5zFRDreO UDu;KP C/ !j-fQQ :kZ6ðSYK32 "^|Ԑ.MFj4&a\)Vor)xcE TNa$Xӊr(SVŘ( z |o Ar 0qU[V"g-W2MVUҙ2%sݣQ:}ϾU]M 48MQ LGf(9;r:5ޛ-q> g7C0B:! BȳK{V2'ۧ'*5+D7cA@ZotBehK.Ah<"HIر0FV[2Fѯq<啻‰cƱ\@~ձ'A0x2ͦ{+k֒8z(4#mjDa# CmF /Ϟkߥ APV^[[}wvk"G$2^S9w$ $S?n+ :CSɻ`5iTT0Ux _ig|U~ Ű*ROrS%@n!KԡRl?vAƘ`n?ϪVz37M+Rtk&.L^@ eFV.2Đ4zۥaN[놠:>oy%ZLUM|7n٣xitW%Q 8-"|ٻDеЈֈK:1:`sHX?hfMдÐ،I%F$%ZmgN )&1SP3*kF&h>h}ӉsvOpu =FFDA۔ c3捦.*ÄdߩX7hI5JcgY 1 q㶈MKA'wE$M(H>|4={5S@_d3տXBeC3 ?Dy/c-z&\xS\yXzGӲ0GFn&{xO endstream endobj 2722 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڝV_o6ϧ]Ŋ(KеMbC6EtNTNbQC0wŃ~<(`$H>{ rF;NIqbWl| _,U봝DI$JS>zK=Ĕ8LۓWM)}t.:> SƓ _I9KeDO1Fu[yUg/> tV,YL,А)+r" `qῚO%"6 RDT٩'GrXlUo+k9V^UmCݺS= Ecwrz~z81$ s)EDIs&@Kz&BDS8n& 5+:혪FHlWE6z>^8尗p=̈<& \H)zclWLHlz67BȲxY|xg,eRE9yzRiҾW ћQU/dibvJ~mU c'CjA= $N4.4|O~$cI8{1߆2O$ZUt3& KW&^gDbYu05`IYR>b"ͧ?\(¯í;ԁ"gS\ڻAiʾ_մc_ endstream endobj 2726 0 obj << /Length 1313 /Filter /FlateDecode >> stream xڕW[o8~ϯ@YUp1ס}ȥZ)M7>U3c0鰿~}L Ӥ&>+ZQ+$H.<\ZH\;Fwyrs<,Kus7Vu[銭[.7{q0?Ǎ+~%2~B#C͇76#!8]b';Zo6P)fsv'gbi>H(D,u@nT7-JID R̡elguωub& 7goL?r7NHk85>e+&Y.c-oY;@߿$ S|(?>$Z1Ēܺ;kãxQ`Eʹ$\_l39_35JnOLl *~i/Z6OE=%}Mڶ/%5Y r]ʹѮf&7t䀫 xh:Qx< \?ݮoMI|qA|!@Gog-s`ypjsE[S *PSC?@-t}/ ޮ@/!ՐKz 0PhXTТ~(+rbU@6`&UA Cwx|֞ Ea&䦄ek>2đQp+#%cxǤz% endstream endobj 2729 0 obj << /Length 1376 /Filter /FlateDecode >> stream xڕVmo6_!`_$ D>K@.1P m1mEe;Nv䪉-=|+Ui՛Ƚ+?_p 0|`|q,xĪbբ?HI L̿z _ʥԲe"?͂/Y Z~=Yt2e W8/y˷J\BSQVK6N I_F*픱MwVz]/^v:^vBV^n1+˪ #G)eUɡV7IxZ ʗy1ѬE?6zվmP]G&moeNYM:.L%b,e8ʒ]C*Mk~-Z[Kq>1jJi5}\!$QӋaߎ Ywrq0pvp0_+O{-zz%MeP/0sh#V4Z82) Co0Q-: p !XijE07M8qxOڂcA\`[NS(TB^\@Y/sآrߚndo;l' N|9Ȁ4Շip$>FNOP\ԓEzrFE@k`9Ew?$sH,'@)U~?9&i*N;{kDp򸓵#gwvV.ܲ.L$6hǫQrʑT~ $Lɔn>te[u`n {RQ(f#I-'ఁԣS|pP=F@x'1a]'z-SC *k$  endstream endobj 2732 0 obj << /Length 1397 /Filter /FlateDecode >> stream xڽWo6_!*N{hh]bl>0 %wGR:7lC: QqN Id>pw'8O'?ME ƪe-(= 9$5 HZ)qƒty~qf3#!8`FϣKsA]Nc*$I b0rÌ3h)씡V2O2P"04M3ӍZg^*qNNC -$F "rmoE-N(ҁ'd,RgD=!L`l^fYWq8뾆S35odmPSp;2WxiF;z03F,$R5(d/ Lg,'ZW3MZaQ{{I ±`zp 7貌#zo⢃@xzSʺ7%В5ž¯)\" ^!l/s^S|b &-ƀXi烻޻zXeoUȂu^؉fԪs-ķBvjY%R*vynWN[YkЭt!c1Q(N-iVSW|j>,(vr̛jŖ`PBtDCqԟ > stream xWo6*Z,Iv CB() ߾tV^2 Y:}b3,qg4YZS!q>h6f̥z(j;[k;s;㏧R^K%T/bKhu}vfx3iތq<Ƴ0)>|s/]! x1d氈#OsP!yDY23+jWVfH_D"1d'hAxAԣ~@zsq;HV4'gxn*Ɍ&VU+U)ک YɴVZ>"^#L"QRb~b.ϭOj0x0*{,Jq±Wu5=V*IJ(h <5{3Y{F483Aes't=rqՊҽC_ޡ"X祡VR 3J}~z@?aF {/y8yB](E[=m^-wwwNDA2RuTtUVj^-/&iD6ClxQ%L% >>̯78912M0F_ss66HFӈGaMi-B|G'5'G\}xb;1dpMd)эV59> SKY6aT [YzY5!,n/u uGRnm6cغE){MFZf9+_kkC2{"@Ҿ)i\N+yP;$ :K iF`Q6ꀟŪ+=(mԵDs1o84LSh矪v+\FZ?녨jlo;,Kg[ endstream endobj 2739 0 obj << /Length 993 /Filter /FlateDecode >> stream xVKo6WEV,Iz좇t-f@QlJ-DI6>dI-Cr8oxc/"ǙW.v~ N/pyl6]FQgo0un܉DS )a؏'2aOGGH2/bDxZ/$LJ I(ϫox+;e%z+ k.VT$y`>4]u]9DU55$1 l>9Z\FeBՑ0/K9qhhGh.q׸AJGVMt8Jo\!KH&(C>ɤQ{khu憪Ug`XV-Ң3Pd-dnXZYo-CCFQ9 >7Z9XIdlHc[ ^^Ѵ5]& B h(A!h"l8wO7z 'ѻg?H U#܁AEsoX[KhyVN[)oa;-.奮o5Cԣ˵)ǵ΀~6Wm 'ڗvSP5 = =>WT9)*?o6>%k^QwV>r[Y?7Pqމ]9ko= R?ӿ d endstream endobj 2742 0 obj << /Length 1572 /Filter /FlateDecode >> stream xXo6_aI"n{hf[QA<m $OTA8q4=L/žD}vyԱc/;&݀29"S}wky/8܏igZ,y˲i/W(I1!N'iw8/嬨Xѓ2,h5IS i[V5"ZeA|D]ڈhw:n[mB1MeޖZ_F^|;Kܸ:tnKvh#/<ΘG [⨟&T!5Ț0=S:9I>YV:̌Ȼ𪮐: FrA[1xdRп95yCMTX%w-t3}ڀzssUfUUw$L)NY'/#Y$ֵH7H$,OI7gS$^%,*ql $ Kb 4pdEm &o&k(hx :He\vz0_09hmX|zxYK&z'+ -sXXkKDx4Ún ^,Ptj.'ڔ_i-U(adL{4)Ȭg4/Gf賸GⲪL ]W~)l(#boڂݎ jq?(]:Ƕ6Vn`POonv 'ո]]L"^hWLҵ,Ƕ))K6nRTDjR|eX` \InKSߘF^!ɦP> stream xڍW_o8 z/,ܶTGIVNVþŭ E?RI|RCv]O! YYi*|ۓ] x{8QoC B>$;maZm f\j=^0GN ?9hӕ,ňX 4EnN7uoö @iQupn6 U vRR#܀MPYF2'  k_ڟ^ޮ9ތP:E#Pw>8;\iM{?K endstream endobj 2750 0 obj << /Length 1495 /Filter /FlateDecode >> stream xڕWKs8 WxzYyfDa=i1u=-6g%QCi~DI)$?|OBINQ8Yv3ɧ?θכD$a'WӣVV6YEAl:$ZYUj:sA§߯ޞLx$8Լ.!:3M,f< iVÛWpUWS^i`s2g)h:l3kzAeul&i ;m꧴,[Z;])6s D,! zAمyYw7I4 :dpktWe;v3PA-8 dS-}I@-N4 DyNyܒW)R#Ә~5tzCJ[9upm lj%WZ̉l/qhĤ Fu`J/CoxH[tOrSV#(2'^nciVrL](freԣЛ z3T ,`r\24xG/[c^/~D2/\V7MK+o#|?Jfce=RśOIe@\RCZ>%_Ʒ,Nz$ \y4 <۹O9ٌtg'ʔm~xj5ϋSĒmy[WrWdݓ*0g"b<qӧ$RJF.1ZնpH&CR^Ȫ){JEy>IDN):yT٪]"eQߔCʰfԻ( I|P)9]mR)R'WPo+\ti )ա94Bzr/NH:9}!]4Ҏ YGKWHE`"/LaFŏްBI' ؅O}cuсҪWVr'gjv'Q #X [cqGꐢ1f mՀE[)i~]JOp~V@f /){Y%1$pV AU_.D-{'XhWn %OΉtk]z,tiiM[WPZMx|_XacvLc .Ǹ tfB㵺U[H^\6jt0g1O]7b2VG #shpER m^iiVvYzl`90^̠Ckj S=$ξfW p7 D(L=jO^5.CM{ʾ}ꭐ$)]{Q[Oď]/|r}z4"?_x{ǿvHciLehOR}K$w endstream endobj 2754 0 obj << /Length 2539 /Filter /FlateDecode >> stream xڕnF_!xPEج I"{f%{(ǧ.r8 !@S]U[, C?yߞ1p50gn]g* Wg7g;ۯazً:bKF\ٍm[Z*X~yͤ3+C?Y3)YE #6uTpV~ymW:^5/,w+Y=q=6mcUוi?Q9.[FXGGSZ[_:VqTOQ zOi2oI8 0\͝V!O@dB;=VyF@4TӖq/vpk> '˔AXD1 ` KIXh }B8 |̆U)Me+J&k/\o*dN4|9:}I:T]<^n[ٓE_(O=@{2i,^8@lxh4u!u /dCdVgJ:x'M4u*h: ɳ+eS2ᓝ OKF>xhIx+]E2?7 ~ ?tcѓ1BZ411vSRykr!ƙaґ ­w6XƉaI07,O#=;.!&Qv̴kka@S%`XQDʇGe>Ӡ _-2%uD0ýYƇ?2٤ endstream endobj 2758 0 obj << /Length 1398 /Filter /FlateDecode >> stream xڵWmo8_tum'  $ !ʇ4veI-7q6@*d<~p8 'Ny,#'-x'mnzpy& W#볋J9YoƦ֙sn+r}|*˕ _o^3E  " '/u6uGG@KF`#틤 ~ >}euSdyeMn +huҤK[Z7Ŧn,` LF)us ek{&HBmBɹ\ČvL9wVgT221s@uY$uEWEgu݁7rڒj[,t=a)_ژEk@+2WY&nqE; ؗG}u[ըxoWK!s|;mMVqA讗$kY{~"V@O(jNd֘]@ZvS#R֥\ﻢnߞ&_Ͻh2x2% Yb(i74nKg} xՊ*Q5oo>Uq{=)wn xzf PQ& |LZmXz G4m+tT_ 2^93?&VAU4pŅ"BרK>bA0I֝Ț&˚B~<Ҁhѯ$^$׺8: zTSQpuQ.z0} 9!>}, 9{A8)b"CB6{҅XnAmZ\ xPO|Eˀ$&O)i}% ؎ }1䔘scỹ9XRf~_br^w覝7%vPЍIѐe#>B#b9C(!L67N6[P몥IѾ6~JllyfOjcq]0Dq4&l&:EM Ӊk2?q)O|^I/9$5H8OڪCE_e9慕~l׃~F,{ya}Fk,.1hϑᄃAh迵>>hqq,Fn) Ìffj3A7^i7> stream xڽWmo6_!d +J,ItMހFmRrbI9rI{xP/Л1IAhvҳ $1ѐSokJԓ c?{< WvZ.M.'A4,Y2y;qp:dQ@p(,hLBХYBhXtH&K#_{1vS_B=98fSБxAʝۯgzy!2xk5XAEhu c @?cX 'q7! r RμU _t0'T ;,o*>NdKtJFNne# X/ֺlK!o'@T[;hx:ٱ5~d.JIvej)1j7xG͡۲(EsĿ 02/ `z| ۃ1|l2 $];vj\zUg7ɵl' 8A}V]V@NMJuiܥS)_P+SXjG;"s'cXMuBPj wd,$ݫYR#2_̌򏓧N 7"( /OyLX!(@ i ;l|Yp.BiA!#JQR~ӔDvs[g-fy4O?7F(mtuSAWݟ >JIFV~c;RWegg ̮875 \rJ#;?v8,\٬!oWp,߬ 3C!dh5QSJ{qo7m1I)a@eA NV.AeA%$d@rĜK^v:?K C;t|7);ծw;w#Xi79;x.7WZu@>Eb)L@S5U5p5m++].B=̹pޮU%3L~|5eI,{YkTq]jnOHTkq|@tۡ|ZQawf)57"NCo!\0lOanO5_6n.!ʊ endstream endobj 2702 0 obj << /Type /ObjStm /N 100 /First 961 /Length 1662 /Filter /FlateDecode >> stream xYMo7W"=Kr_"i@R 5|MbTֺHK{FjJ ,so7YlQ3+? 9)HhX9vQĂ(FiD(QF\rQ-U/V.h {.U,exb[4Rr4ʩ#\8KI &YHʬD20e$, 9 6Y tÙ.ON2ꍓ5[r,Ӄ  Dp&b F 88h׉YTDK '#í>[1JP4.@ PZ=2V|![8V!"Td] h D% C4T16#Tǟ)ȉ<]N&'B@(@Dΰp.ޞtGMX1W^K斠bUƮΚaPǪzj_UGB}EzP b.AuPϛlTϯO _6X 6fw3<-@[7< $VܴzrH:w DhI| zwd?a?~C THh46@56n en ]hly0z%{&`hEOlt`:D)e4Z:\.߃e3׳ỉ32hSЌ#`ţ9jx2iFxoã%[O-I):z 'B2˛M\bmiPiN@N;@T" D=n7e{g5hρah `'w;vw116a1bCmao=ݭIЮov&'@lm6HMnMNp{ D>j^ܴcք;8O@xԔc3ZfCQ0De :ӚX cfMI_+%pRŰ_QAN].':P_~ϓŏUӧlL}ףFbA.?|χj>kDaA_1hM2@-P@@M&q īn>ɥ dsEk-+,nyMi37L7O6餼ɚQƱKȷ[{w%S`HnfӉ~|.p Bb%SsCq ;7,ۓʫz=nI*e4!Ñ-כg}|:L~7q3@fr©@8>]s s;7:kxrPCi&z0o> stream xڝW_o8 ^`,{ڴ[{iz/ppm1X9YNo(;Ih")I<(FI,LGȳ\}?"bv~$';GϢh$u-{]'YͯN>y!,1zH-Z5 hOG$"o&'Rufݙ_ִy&r]Anz=UQFJyUlUeU,BQFۭ׀I4sH o[ߪ|o= <4'~7 H}r8˵a#D%{APVzT` M"R4  )yq߃1$1 q@5.;Lz( 1f{CAt- 1 Pݑo*\)V̏^rw*vQ&bTvIPd.@c\[AfBlqϓNQefʶڠ7|6sg,= tBPd3bJu-);Su$2\@:fh rǞBAIJf_KWH!m!&j{K(.=sχ޳Dkb?P*O † ~Shնz#>g"q`tsxšD}ȋDK\0"hNXbTko{mMq ʾt_Ŷy{׉$fA4qw lCD¦@!/%1豃5% f4<+&@yɟ.iPr)썦x&689DI endstream endobj 2771 0 obj << /Length 1500 /Filter /FlateDecode >> stream xWmo6_at_d D0[[Ѭvm?se~w<ʶ\'}X 'H>wK(|TFeTSq(rFAޟLf7S!^5CWY+FY0'p\߭T1پ1`yYB,I1<_xK]莤ӮIPd,SxQͽ2naWuT i+E[Pӆ Ҫ{ C@65 PUP!X壌sIP/ݜv,"4GpL$eÓZ*+~@ZZ)$A;7bpW<>O"}Pvw" LS7n7vǓH^駝wȲhYf?%J#ll&\##(;y03jhq9˔Kj:Pt8׾N9h!-P]e=̥hFC mN#[{'" L+kkO' fz-5*zs yoIF$ =j OU+ES `sEЎ{9^VޤB<<d ),O<)|qq?BF.[ºҍzEbOy #ҪYxBHiv\&Ak>1!pڻg烌!t8eՍ=zݱScunS`xL2LjՑu\,m"&C=.Ѭ_ǰ|#&Qչ5f?xT03fuypeTG=6qr IUKɃ V*q+LUMmK"?X!4Š tq@xl4Ka_s`+qox"_x$ azsj;78n?Vxx%z95OGbX KZlj]l2VO;cc;c.hdmVfE7~(\b\0X!SڞūϦFK Pu/u.j:Z,7}mhh袙bz]iBS{퐴hWEWvUK w9nVR b-}g ٖ:A|m@"C#GBLl-UgϻuG+WqDhm}^~Y:&wNQӒ?28jT m]OxSR=Ms}r&va:Eu&>odˑ˜wk?Ï>lG@#5 endstream endobj 2774 0 obj << /Length 1127 /Filter /FlateDecode >> stream xڍVmo6_!d_$bI=C?kҵ@,V iP0d_G,9i;E,,`+<'K/?cJCwd~u",QbcUfؿlNw\q}?]}װU K#`;33v1 cY+Qqe28(I,(pd~T@ۥ/߃h~VKCaҎ-ŚRlY&7YW$olͰ]c P曭J?"{~bG $݁@J$yP ={ލm*>u͏TU~yc,9TCY?XiƞN&!ʫ Wf((ȡA2+/, 2'g[8Cо;0Qy:AGxm)78{gXs(?>Aozw%%oovD3*ܾHyodQԣHRE}lX;(>&tyӱ5L0|<@.7G3+F]iJm9x>5vfM'(#}][Nc;dGPcC`\0Hf4@~򍙅x,wPu2%#koE_8ga5\f$W-( ǡFMj*v$Kc&d7i"/A:!A8ޡ Gxn Y;n)mk?!nNwGFaPa7#<ˉ}V+)fRo>u)Xh?+4p߮&32&ۃx3ՑNO ⣫V$nƢX{S㙞FVGw`oN[-*A~ l;1 252W#]\?LHSXzAI0VJ[HUmG.h?^zJyԤ0GHV˹$Q Dzߟu|aF[^m}_J endstream endobj 2777 0 obj << /Length 1372 /Filter /FlateDecode >> stream xڽn6_HQ@[X$:g"dH@K\`I(?]ٲEa9">8p_ȃE1lQ4W | x> {ǫ,A.V}Vr;N21^f1>3ٚ lGiHd?VLE?|A0PH86 ӺjC(YѶT2ʼۆ }$<5-c`<~m>4kfHK*YࢶϗJJnC|!F!1_mR'`lo,NN0;XiERY*zK8'IRGxhHp$'Ċ̢h(B^F8Ćm9Qɾ(Ci]pYx! CU=hm]"JBC!0Ẁڟ P|h˪2_L 5~8JC I+%De倜LۇZ?܂cZo$dVo { 9ڝV8%'{팛3"Utk>F!n\Txo 4Tl'&2_ ؄Y﹑OEb]] b9 rMMUo]M/YuDC7S̶QmAUcЮ2lΦ)<"[‰|)ԗj.*+ČM}޽;tiE'jv>PO#&ڲ;9gEGyoYʷ\nv>"Zn!62($ <`fCo Ηyq7_6h[&m XZNM7tLnL/ hHkXFkq;0HVϝvI0hb?ˡuNsʠ Wez LLpBT&g|acȍ8Q8x-xcwR(U6 Zvi3ҪciT 4::*؄M/PQb7 r8?[E8qr5Ҳs+#<2eim~*Na)4(f-8 kPwZAĵb+g?)NϻAt538]NQ@C4BF\9fXrn>Tȁ.,`\B)5vq #͒$X#ki I5W β/?Q8zybg;6/N}bLS9 䔵}%.d:(smY2)#2/"Mv]ҁܢ5> stream xڝW{o6?0LjN[Cda芀hG^4#)YJ+ X{3~t8HdzZF$<)$+q&QOJd:1c*e*ۍ-Kek.dZbŮ'Q&6VV-M CA69,|&wY}`¡u7&QPJrXGJIδ\Z.㿢FUf+xh`vڔIUC,I+Mnd+ Omux, E^qfԗuƋ=yP{,mǂ`NL=,!TZ.Pjs;(-sY l0τ@,mY23f+mZNVgMgM%~@dCת] JΆǃQk_zkyTy|s˵d݅РW!|$A*| ӊV[f:adDa3Bg+H;KS0oSqnǞܻnAr3pL%oSCr~֏6PԿ[&&=-Vez?6ahc[Zj Nǒ\.а4[<+t g^eF oTa*>+~\STp>8Ԧ,VOu0~?j*f!bʑΕFv 9hv*K #_=޷`ܫ91vuji”bxΆO:udsy"д}7B ٗ);F;(V˺߮o[L/Fd\Yӄľ{ ܅ە FM*TZj#Kŀ+qWZƣrUЈ*کl0^ TM 8ëግ,qpz0$ x@"8n_}:*Sg:4-ߨ&yWͿІ6==ccM7 GL_)>Z#7=6v97 2Yc|׈k)߇ޤз"鷗?NFma/dk! u}4&d'\": 7\]7-oFr % sqxûj4 > stream xڍWo6_at&-R=$MhסЇȒKRNGr4LBYq̊$RrFOpc0<:IY|vu3uU;xVbc8$IT-D ^_ޝuQL;hcyh9gY0'dhFeqLܻ')x'^sylU|Y."纹 0 yϙ3 ZxtOyG.i^^,1/y<DX- CxCעcPs'*}2+lL >W Bw篺F:Ab0 %%zӌ٢(\R\O+JV #4FI~.aDt^ sI$i:FJ6ʭ)_JLOxKZR.Ѻ[)]%ZZb9:P.Xq,3%)2E$:<[?> @^, PЩc AG& it|4%4+S$d`%gEFArכ=lQx L6dԺ,[60?&u1rPDYiK(Sr*~, ImX.\ yoZQ.Afƒh1vjej̻0@ⳙw#/}`4ZbI X[:, sȻjxRR Cavta8~c#^ endstream endobj 2789 0 obj << /Length 1486 /Filter /FlateDecode >> stream xڥWo6_a`ᇨ {p̀A#30Y2DI~Geˎf(Gx؈etA(N'8NK9bd4cC_l>\,պ8B8"LnN?FWL2`´E^ qכ5onZVWXz]qH2E"Ixұ#JDC>ckV"ǀcBȎP.I%髫gnc}C 1ZJ TxX՛v=g4~G_ӾqiB2%2F "8_Ԏ^x_P{Mz#=x=<&OH .Kzck K{0 0d)7ԷJ_?9&%ήnZb;=șd25wGE5O({a8h<;7%tW @VC^ka sjv\??Wpӽz \dxB !HzklY4s91|B]-bѠRS(KS[Ȳ!i9s>[gi\occ< endstream endobj 2795 0 obj << /Length 1356 /Filter /FlateDecode >> stream xWKo6W,C@خoNIr%zVvC^=->oM!E.( 8[IhWf'烠?<_blA sXݏUGUŷK?"/;]q̼׸^ -B,}z ]~^9\d H~. !s,H#,A-}PO*=_g'}pu4.64 A]{Y7ygԐ6QTxXzwQ2, a2 )cpY ̧K(Xi<ъ/Lb𢒩Ch… -Tܕ M BrK= ^/Kcv_%8RȂ׸܋Pr#F@8ee3\İ wy[⮐ 70fXIulI*Q8v^ڜתS^=6ƥO{(]Gxj I0b,P@R aQh;u5 d0\ܽU<`I\w]+oD&?M%גA"궶T[Wlq*ŗ &wpf$Z衚.d>:٘P*~;Ӆ8v_@߅(]%߾4Ɯ V|')nxe0f@h͆E}eK=T_OMȯS6&z ȺZUb},Rgr(GMBl}4f}{B~Ps\;= !v͏2`oCW endstream endobj 2798 0 obj << /Length 1345 /Filter /FlateDecode >> stream xڍWێ6}߯0R%u-dtkH@h,d۟f䵶v0`s;ñHI&'I,J'LrBwg|$_~{%E&35/UG*tazԏ{y{IwfaSf78Nt%NTFB9xOfK+yW8I꽳UgAʲF%0 d, M^V +MɝG& revLABbҾ65Fa׼٥Q&Sy\]1ByM8JyU :Ƙ[StֱH,=TaNWD$+c{4S_y<1+A˂|x#:H)PzaJ|*ZVnؚ#Of?g@,K+_0" "is`il4 GՃ{^?!`YE(~Ba6 gD hM'l w;v'$5 )8VϤ@cJdq 8p}1PH\0ni9h,qx [Yƙvx)|Sx_ 6n!]}e]n Ë_$ ) HRL}4dd~;(>iVM)˯ݖ8qj42Q@*- Y o-e%>,0.԰fN8db⿴Pඟ I`.wj|~ @quDžA*/ zFZ0{lp?LB>,EG&({ cnցpBCZY?˫ˆw\e/O0 ncIo;=l{v9᥸D2Fj);~9:bZ0-dL G'ʡbCtpkAS{0sۦiZB~@j,Qq g}<`:DoЯw{p**Zz7_ێuwun qQP:Ԧ!Xt"Ru7?2!rC@7:NG]7_Zo[ % `~sqsN[@fj \-Mm 7ps˃6A:łXqp= qm endstream endobj 2802 0 obj << /Length 1077 /Filter /FlateDecode >> stream xڭWn8}W Mn")c*QY2H:/UgSp̙D#QF9cET~W/#X||s@] ׳τH˴$lj6?:Nc8:pBj2NhND2up: [a8u0 L18ECEQm}\nj 畭5k];q<sǣb|U5$N+h %a *=A% 9jmUNq$wpBfWN,LpTwǰ{!jUiFU lu_ JMCV9({ N|=\gqѫjc:|u(_)ڜ\]lLstΑ % TwAx} SwEˑ$"DhkY5͡R78,Iɩ:vG9Du՚EϵW/!zV?,tUwn^0nۉfl~PyQIHAu+i URR6{JI9fjm5{~/Ub` 9XTimS[F(#|ֈdC"ffRʘFIu4ʄ]}oTS}6Zer]5oet!#۝jsddIp ŵ?,P|_L`:`/'`=i_Sx*zQAo{bQ`P endstream endobj 2806 0 obj << /Length 1523 /Filter /FlateDecode >> stream xڽWYoF~P ]j.}cuPǎ%  `ņN?ٝ.S5{?>(~4J#fonn8Bod~49WjYGmVyLVǞD/Ǟ+2}k]z쉐+F54}t6_TBGgUW=0b'r"F~eh%/vr2Itk ҌE7)"iF޾- !i8G]E4gڲ!>lYҀ1lYBnbNքϷyƮ`<`(GY1 W䆚[?2pd,X9\2$Ʒqb,"mKuGNJ6,㪮hi ʒrbZ&ycrYY" ٘N^DD! zm&utf199F<=EFPWx m S.bPBKfUj+vK]$m&9Z85p E٣(Äu,e1Qߜ߼w+Qfb[$@DmL^8nǑO ~(lcFy@WDa ȫm`5؋~C CC-̥G! W.}O @>vXD4M-4/\K^W[̮]3N#WXJk]V6O!8VsvյOmȄ=hbV,O}ӛ: \NNkh+JƪBBS]x *߅T7i,|h[UtԑV+kKѪkcѷ"U37 \{-vgnj1'[gFqlPbF]!A>e`<&EtHgyy<,rxR C.BdF |qkNmL9>ii^$eh? nuWsmAsŦ,6d|L$_ot;%S, ,>p3~0<t{b:zMF2*aVOM#/ehTwZTn.uǪp"N2&$mw`bqϛT?7!v{gFafa׷0ϒƫ;0nr{5lxt'l@T endstream endobj 2809 0 obj << /Length 1199 /Filter /FlateDecode >> stream xڽWmo6_at@1G^2샻$knbCg3r%9m?;e˩x@1Oso\ Rxtq$n}7 #8itn@ \&&{ܮZWGCNֆƵu[N]4SiKli@p ,HCtRf<$Rixi]ڢZ2RNH򮡯ˆYUn@ ]cĀf|ـ%#-=͚<_3 ֮#+6Ts{g9TH]ۭܦ/d!A|@.8%B&K>lIF6-|64'-Us6_wվz}EyNRxib w )YA33#{]SLgqYƮl&a~ ]S?]&(_QeGZcXUmZhҴ+#rN80\o` 4o}eBcx׿~'/-=O~(K,ܹz($FA抧qQR;{pflw B s"S좷'VHŊN .Ie͠$?8Fر$o"di/ەۻnj#Uj:>\-^MNۛFh endstream endobj 2812 0 obj << /Length 1209 /Filter /FlateDecode >> stream xWn6}Wy%Q}Mआ}JZAn;i@ -^334uN8i<ΜP9x; [<ȩ̷Z'͖o<0#i/Pu*T_wf"ؗ8Vx}LjVid׾B-Áf-W_/Ƶk!qQ^_<ždT]I7;oZw=kK_I8&\٨^AC6K9T7#iv63ުASǴ=o-3i}Қh le4|K %Blߪ80FeUKJbPi,g5 5cCܥ g;q"0(U~z7i`}aha endstream endobj 2816 0 obj << /Length 1570 /Filter /FlateDecode >> stream xڝWYo8~ϯ0/4PJ9= bEA[XY4(9i?3ʱJ. z87g&r"ONr1Iq6)QrB7q^%D \NWv*6 "qËD Le"ʦN;I>r>Nʌg\F1܀iŦ lQD7mqUk"VMiHXrɧ _f Xzv[tdU,h5$ xȈ˄ QȊf)Y@nјA(kfUD&B-$EʸNila¥ؕ>ȔGCXXc>*Iu^w }kgQ7qwuyV7Yn]4v!Z`|9E7|Yr!q2#Ęk~ \ȈT [Vi7-criʦぽ!g- "7eh<%IcXˀ(iuSZ];Q("M{@lڂ+mkOPr; zQ,~¿KmçjXqbpIW$/k=Ӊ<_{(#:q^Ћ@:)]P >F,*ǽTP VE_lXU72-= I endstream endobj 2819 0 obj << /Length 1295 /Filter /FlateDecode >> stream xڝWmo6_ad&+R,uMm4- Fm!QtRo~Ge[?H:yHA?:((MIA!ﳋS5Տ,0T"AV琂.PoGHZ&Oόnk/㚬1麴ϭȟ /KGkQg }9h.:s~M=&@)gTmG!G}&Pzc0ͯp Mմp5=4V>{>3f0M<& sm䈍4~Rw3K4t]')'^fQ}Ϭ(^Fا1Oh\Zb7浒ۿҸ`ύ\03zrdpO WwmQ+XӮ>'b$C]\U.a\hT*e1d:8OQ3؆=A댝`F$i%}Ur!Fv@,5rδA~y!|Ni:Ȕ<ߟ=X +zx+~/݁5pmw.|A̓Q?\&> stream xWO8~X*'ίV@A[+UUưx^K{;!H<3Y ?|Vų"MY%r}[Ż"PF/fٌǬ+>[\ZԳ/Jne(MӠ|FBdǿHp.QRQR,88=x̒dSCx%+gy)ON7/&&)YQU,OSBpC/yX-٫jnAEI8!?bKz=k:% uZo1+6V)`-b%KȘ4O O>m`tmw粱m ۊLS._%ylA6!.Ϊ,Kl\~p{$c<νK}Py<J@x~TQZ1+]NG]B7#N֍p%3tj僑M]e#^b*{"'_f34 +v%I"YM2=}їL!3!0N\DKmH[yW2a].^kC.wF> stream xڝko6{~}LHztIK.-0Fm!zxzMwǣ9U`R_4_aȪ@͂6oNћ`:yZY|ZOIVzݺ^NP:WZuLVoOW{Rg It',YDIxgbM EA@ا w9Y:NWd$PzEfk\+ghG_7COxuc7輩5>RiREn[RVJȤrj%' %#'q;It$20 9U`-ְa'9wVti5\Ϛ+:#Gwx/C[c8-̩C:Ǖl苑i$$+P+ǣ~kØ|0.@ˑ@0CѻQ7$}2dFm4@S}8i>oUQ7 n ·mhGB[,6ο kp 1E77nvP>%3|=HXigR@@m0bgnG%qar.Y{BӴlO(Upb"Jigwl2)oe1VyS_㛒"$-f#LpϘ3CtܧA,Lę{I|pSII!񚶛 >j~2"U -rOL4bCCÓ; j [@oɪ, Sq*մXV)U^ʙć ıճ!Ti;PVFw{czcVbp (GkxN;GWfh;MtMsuDif M%P3Ϸ&Tr$TiNir?`2c,ҵ7D oh>TW Y<7Z^Nۺ)sFI"p%K±lmsaV,,ԉcRǰ;kmnf r M{klGC `X~O-kC"f|Z["+m+⾔߸&,*.عgL]|b5GѼ c$vQ*>h5LUQ+3M8DXoaʠ22=R"(5HH)8뢧$"R4kYC8jE7"dzo#ѽ2;hֱ)l}q*̓| Px`ZST2ʽKZLXQl=w;]>@J 8G FKN3̘N2o_GZOtauyvWMka;P{j(J0'LPPRtpas!'gy@=1  5\~kOD!8KՖu3L&4!5ڰÙdQItUpvDh7P6Cڽf,u ẆcglR4xfI9xxǝUJmW!0 cNcGk\k=r*3T'dbi0}f25Ϝ}S57(~+6Ifo#4 &DV7'm+eAZ{[Fi%c*Y}UӋ*}0{d1YԱC_c> yϾgSLEA`xQ9lƒ endstream endobj 2828 0 obj << /Length 1478 /Filter /FlateDecode >> stream xڥWYo8~ϯ0vVbVe@&$ RE/E% rXp8$&(byM(Tw|S`nq̏^'Ʉ,r>noޛXiE^ҟq⽾zOky+l OOo?Ihr׺t:3M,f< 5>u#Z:wNk}w3# #US+bg3Tja)Kߑsvյ}fH'}͹}і0/2cFATιm@6Ux\Qڑ(0ہ2Vc:Z]ԅļ>`jjaK4餾x0y~|aef ]LFrC0!o27 [x p-ɜ*ұ`豭3(Yx9zQggxL8Bnh͇mw@P.K*뱏t> stream xڽWێ6}߯0^id7Ⱥ($d^+KDY;ál9Q-P~Hã3gb'&$J,J'nB/o_oa8<^i=e<rj .Vƚv*4"&ޚiM]i(y˓ZG_EʉPCx)K'q1" |Leedʒ,"aRdop~GSa東^Y PLqI6U㷾[`)MX`ZwBBK['tMO(h*jku3mn?FfG/kpa0C$_iDRieI8  )<>N^}#)G[۲ 6ve,>",Zz67[{`Lj&x*è"B32]U%>ϙ#.SNE !y+rc˦ {t@(! .|csG7qb'Og PeӮM[=LP,. ̒@<"KSByr]sGk $;}J+\ ĕc&#Wy}g6M9\A ȁH hs|-R[\MSS`dO˜ hq5͢&eR%k`N˟MO^Փ7 ZS4킍:7HC3rݏ<pPsLA׃j}#fIsm%ʤL%_TT٬sI[FK-*9",NDY6ִYW]yVn7yhvL$ǩv ruj|5}yߕoZuˊ/StNT0)~o̩/;u<;=v=+yܳ]Wb 9ɾAwB50cD$HD)bBpnMa,*CJZnU.QeM[uLc^ۮC w1yͺ5W;(ţdŇMRϙ\Li0)BYpCDLiB Ni{,Kb(h:yҖiX ɝȇ |ؑnC!~(fq4eՖSIczYkoKp^Q<=I#=2Vw'\<7M}/6~ ?ђن7Bg YY~n,t?h:ibq2(RC/}ڟU0hW'ܿTI@VLrhPTg(I* J 4QeM [sdGn;<ܔ/ĵ'LAS ʔ<(Ƅ4bC endstream endobj 2836 0 obj << /Length 1285 /Filter /FlateDecode >> stream xڽWYo8 ~/6Шobz.fzM2ot/OVW9XH!ax<ij[:4BbGsRm)4!J|:߸r{743bL"y74-q1b\ZV5ƅ;?k"g,4h) A;k4=s.䕕D"8{;Ȯ!1s/ƒ`{By1eaEi\Fcb,䡽IT&ARR{—1)8zγY4!F3g>!?6`8J;^S`qswO+^ָ>c/` endstream endobj 2840 0 obj << /Length 1684 /Filter /FlateDecode >> stream xWKoFW-R@$ M KEQ=H K*Q3;#ć Ao+'䤌&y2-&U,n9!3BXV?;{e2*d~3p{ ȂLIݞ{>Lv{&,s{~ùOtXey E4΃>vd0-Sm{[ۯh kZ=8+r .RB (Q0.s1+6yωɵjL2x綦 ke*,Qb:];=R33Z{ yYGpA:: Yap WoO@8{x Q]JU0Nڍk7#9{Fc 75C'ƃP.Z%:t'Wd $iCKKDC]|GykOaC}ʼn^1umS(lqmMRC05K3 5;{4B/EKB%ӯwrzVrG~s~vv{{neUvE n%b+}us6];MS2e'򸢇A޿'Ouao(w 9/'I尪<dQ8}>,;A=G'ũd( LOσ斪z7}:W6P;*8IT`?sdR"/Ρe" /!t's7QfĚeyo"4P&0.]|Ύ~s ~Q=tq8/ ԡ endstream endobj 2764 0 obj << /Type /ObjStm /N 100 /First 961 /Length 1678 /Filter /FlateDecode >> stream xZo7 ~_:Ij 뀢mAQ\kc$ ,/Qs[v;Ŧ$>%&Q.El4*V6YR. )CKR!*7Jقs+Rʐ G`ܲ&PΉ9)E(@Ja4I؂"GY Y C񅍕წ8HTs ^-e8)2Y1V,$   ʘabHY0HT4b\ Iy.Lm :[p$Ʊ XrVy1Dž[< 6փb !`> 6+XQDl;}`ik z1D+egTpp%FE/8J|ɎT T(v_2eSbcL/dཀ]5'V\@裢/@kNhCX T4DdT '{ת?AtoGOƳlNNTu Ϥ<DFCdWyRzuz7_+U훻Ec3Äfj%uqvIL_B6f%f c1>&`va@>h{Ä?L i)d%e$AN a~mD1t0Dg: :Ӑb"uFR}͐abS&-?$=A;]l6{Ql4Ny+J0k\RhOgi|~Uή w^>~\?UU_O'zލ/|yZTmVƓj\&.鲹k4-&^vtqt:Ujg=@!lJڗe+.;Vԫ{?~^aӓEhrus},2Qkr(l]ZGbhD p^MmU5ʍ jy+ΖuCy[Ⓩ9sxΙv d?}(& |e<4Mv|PA5}a6Ll0ɣ0DDB>-'ƹ;C~W^KE4wIr|9T7uus]I6z;MsrǕWmTJsiT3};.Z=_~U,zz~,߉`!uv&f3=hhf: ܳUaC:}0ٞhfGo `$}<89ڞhP-&J1M4$0ErNec;; Hݐbj(%;_BϧHvO:O?M&\pL|68)SS*Cj>6ݾL44:boZt`FB.iºK{Wz> stream xڍn8=_a`_$fEbҦh 1XtHM,p(Yj&s4_EȢqv'͂'-p9|:y.I<`EPj=_7r /(W2!.ZhV_O/Ko'oW$ iR>.7~Ľo"D~ڬ"P'5:W]ɊYt[P^$`*gEAD@̪9 A:yi0Ђ<I"8G'.^>:({rEQ-^j1`<I=rI$p*n vvDspiRmW ôaImzO"ۍ$^bM')6sr(0508-Zid υyAl7D J |K-FnZtjE >؀@ڐ ZўzR÷dOD`\JÂdUy7w`-DFL:R&zED=uGcqf4l=S{-*fēAƕpk{l.cvl3zC[Ye02H 6pݩzM_# ctXhZ8|ScSU LHkBoG2#Oz2mp41XY]a23C[|.P9.5 `@>M 'yP R%Bs^$t@~W0%FuYuJ"$ HH1#|& J3ocq41e |@W֥R<]GۘH&_~|=ƙqPgwnl:ct~t'>yghVv1ȃ!VҭӶl<^A. 8l7weyd,g {dT>g̼˙Y'e! Ew? *d "C endstream endobj 2847 0 obj << /Length 1137 /Filter /FlateDecode >> stream xWKo8W؋ \R$hlv[HC[,آ@Iwq/"@H3߼IXB%M I%ʤޞP/I\=aQo柋H0J*ZdZ,Ꜷ9<-_B]\镶lLҴ(f_OOeGC',aP+I vݣ_&d s pک;Mʩ^;ra뵲Ϊh,'fy|WmS/TRثh\D""^JdI2"$,Yj Y nfp8K]nT<:ƽWDn\XNee,(y ޹?e0J1r:Wbxt c^r%q$ t۸>f7B^[Ҷv70Q0+1&F>%:}m5`^;M|4ED#EHfvf4:tkCf }Uz`ᾴMv=Y' Pܤ ƩE[]8Bz&fmu;7AlPƑGr xۯ \6Q7 [1*3Bͭ5PIa ^JVMC>'6; LyfnzӾ?yn*9m55hE mgW7;xꁪ&>Fe4!ȣ3D$PΪ ȶ-P|Km6ǴѫGz&x"«ȳF5w*\1x^xr1AO&ꬮv7$QRNE& + H8a_Qk+ Yts[{$*PiK 1A.[`rbm!UphsyelhU# 秶qa;T~C6-Xq.wںD(K|69ه ? &[{XL}jVÜrMq~^@pz;׎ 'u:?g1RI`9 endstream endobj 2850 0 obj << /Length 1108 /Filter /FlateDecode >> stream xWmo6_aF5'^:C4EIw#ӎ(ڋ<ʖ?sw4c<ͻ 8I:9B il4UM{1doq rv7nLi,T0R&Bf'o'["tJ>.Fܳ1ld1ezΟS /Yd+X8AS~Dpdaʵ]+Tx.DgKYmrk,b4cyZhcAJ CgY qG<<䰈h&\4o=h 0riVEluYT1< Lί^ٴV37Ra&QV2 *"8D32-jiw^9XEbHSKedu5$#SWX$( NC}߲)XVZFb4ǀ(q%5px6-7ׁDVn!ŗztzCeczy=&LB7ٹX.Qƅ> ^e/]ָ0A$|ZFM:"6X.i L D\_B@9|sWNX vx톸C<C\|!pG˕VF\-vP~ӮpfNKSUOKYeV5ϮkhٔR=]ɍt75k wv$f@8x}IbC2]GXFםtTX H5{a NMh2PƇa [% endstream endobj 2853 0 obj << /Length 1137 /Filter /FlateDecode >> stream xWo6_aIbN{tmc4>(2c ,Azxԗ,y!@Dɻxw<|xHxg6 qo磝~y3Klu?VZϾ:mZkոs!qR$X{ը]ܹstvmJp ؟q<8Y< cɸj&u^?0X(ݝǁWo UF݁G Rf%t*ktQM=skijiBmoi%ݭi@ՐnTʪ{t`́7tʼ(Rxpތ qFL`Al|&LGL!E:NS+7NO;Nrc@4QV;(=UejcY{ ?bb- `R=PBD\p@ ۯ *₮[JyɸgI3Ж Pv@i|bؒR:#)Ӎ1ۢyꀢa OLu3I?fQL.T>UL4׮!XuolZWQ_|PğHT1h9_G/5ُOñ!;!ϡӹ.FB 5lNvN,gYҵ63_}j2aql߬L,#X9w G\ã !WMU' $TJLW?}BdT9VD r⾁ةڏa0Olozchd2k=4u;|zKAH~ȶ eHx\h~Pz^~^'б/]Zk:0;xShU Ф~SU#`ڀu^t 1P!mNR`Me*@SUӭhr1[Q?k5B?u~P pŊҩr^3O>ۡo ?}d endstream endobj 2858 0 obj << /Length 1830 /Filter /FlateDecode >> stream xڕXO7JO7Q+A!(ڤ̞۰>;㙽,gQ~$u'4H&YʵbB+|0:;GWop\nv'KL3u|8&.͍iL*tENu2 =!c]Jd2@*? "a,#8NWS/1uߒQg0^nV=( aVIxK8sMuk & "N뉋m" @ud ,g3.6 X,nt&tXЄ2Ig찏ZE]z}ppwwL֕.uߚ% ڥ4^庚:]WLx(P%ŏ|~Uٔܗ#gq*Duu[Sf!&N =4_C]`r[`Y4m)Z@l$Ԁw6?!jUgl9 ~lF%ܟSкS^5NInhVG9f{tOJf /!@K9*dw/Ou nTЭ.96,|_jܱ|sy1zYT )Oxw{]&{%2sWYy5"xoEwَ?ўk"? gH t5}/O!R%|~"=Y!@1t5譢Ό[NF Wd:U![r7~Ja|[-[6Hyx%c zE^( vtz!8HcWϸq_@`hO5F Ϳ/Ǧ͚|e! N؆vG$Qg3.U\%5y[dC]֦Intr4򤷉.t! ^ I$L7 = |*XYmonhڜ@4 ao)fRwcR O@b.6\O&]?7yi@/$ (j8y$ϧGdr gd[ͻܭ9(WVog@*{ϗvOW]i=w̶9_T!cهsl՚%+Ⱦ/j ȴ*l6anx >YW<4[aj}+B0Q6<@`1 ǵZhǾ/jF +ʏ~mh_@Ũx%ۧHǯɺnq܏{26Z4ߦ^ߢ endstream endobj 2861 0 obj << /Length 1549 /Filter /FlateDecode >> stream xڭWo6_a`/2q$CҺI m8].Zɣ$'_;ISy$w?OrORoHdxv܌Hs]|5;XDr4^5+F_lj3v pc7 sZ]zTlЩ|Op @xId%AH/΀~*pW(q6/@{ҩt4״5o3+ds-KS]9꼥"k36JHˊwkf%6łTO:g8 '_ч䙉^|^ z9cS m^.rL4 I270&C,4{8ycG0.)zM =g-&xʓi(J2~((;M/)uClA˨sRmt5mY?A,pI!`LD`"co7MVeלfoE+wZXHDiJza oﭟ ڳFbG<S][4alOrqQgu;`E2 EFN/A$!"զctQe]{gA}4gm܏"; "n Di%'8_9/|]͐4ޗ(MiSsHm\ &**c|' j@UXР ɢ 8T,c6k˜Jɚ7HBФH-^'=JH/^u`E:0A2+ `(}*S %aWzHQcK݇|1/J OM.nrS.1NT?9dBCTXlJj0ImŦˡ 7\ip"rs#gVBE"vcRJ͎) ͧ*wiFXYs䪲]U "P8m8 |mm<U&[!b:׊qe*̇]>&z^Wpl .W|׿wi?hEDChHS D=Fk" xB]h zZM<׫jЋlk Yf4ު?SVDYfawJ:m/4IUfv"`Sm TB#ObWX-zY麸M|bϋM_EŰ@؈HRt UCm+#n> stream xڽWmo6_a DHzٰH<CW Z$ˣ6;HEj(LNw=E آy2-U{;,pyɋWB,XL˸djxO~ʽQz%IBQ r ՝jWes&bR'HpV t_ϣˊ$Et4THdt%|\&(FP]@a'"C")-yi CTf yAB-BLqw0Q6Vゲ8 J?n.`pe4DP=1gsD@#~QAwgSr) vV:mU.PЦwp.չ+]M6i.n-*{?%mfV=KGs[7w8=+Yʼ.LklߡP? #p'Ac3b=_#k#inzUt0ؠA#ezϯ%[9J ͜QwW\ ʄ"mPtWؔY}It HwN7Գ;KQ%dwAݡղHUfF2PV>2hi/78-ؘ\#j಺Ru㝟S|M6mJ9X\дbxj4xe9汯)XQSr>,dSÓ&q2Af fyYN頍oHB Bjm[(]a\ HR$Ϧ3'q3}mFVz1UsC*YrԐJJrBAVa zRQ֏%o|ߌsk}ffL}PwХo/v]D\G Zgǀՙ, e|=A5HyNHiSh=i9ؘ n_Sϰ=, -@?Kq~Unj3Z*Bx4ut.uU𹂁3V& vN)VwVn!{}M5 b_(tQQbrt;n3oί _ӝ[~j7lo!yLT 8Fm3]~$2V"[~s8CՅc+|>M6{ZwX endstream endobj 2867 0 obj << /Length 1300 /Filter /FlateDecode >> stream xڍWmo6_at&1',e؇itX4ކFfl$Pto~w_xxG7Y6 +BuNx,xYty{M t<%Q!ӷg'C+ĈKxz" 6)}wl&ʩGfcmgL&N=a6J9g)ǔ]2;?^ۣ/.d@cZpONa yujWn'E/>~ P7qԵ_AfMXtK+,p1Q Kmkc )Aq>b;(sn!fIC8+Lxh#a|ي~PHXy +-,A2l;JΛ5jS53mJNw+YLD5h j%#4џ.uHSo(iio;D5p hufWN"C 44"hG=} e5;R%*8PgGÓ ~'4v9DSz̛%vܱ.œ鄄X( 6uE;|E&pmg x'gTY=כ@ Ӑ ".aqÞA:;eT.цڋl,QR gyQ5n2̖ oo00Î4sV[1~ ~^Ӣ4mB>A%=\? ?mӇiCv )vΟ<x ]테nRFx'pχQ53yDF/ Ri#UN|~ݯR5 _(I'(kO5.'L":p(i%nt_X-e-DF^o@B?#\o :8*l}dֶv$!ᚣ -'◦]jg_'G<0xr?6oSޜj٧D8[BƮwJb눿r6T^_y9^ͻ'鯤C\]%|mjKd82v7=7$?mk.yqʆaQb endstream endobj 2870 0 obj << /Length 1871 /Filter /FlateDecode >> stream xڍXmo6 _q؀4KaҴ]5M+nr1.؟%R:mׇ*?*U$LU{ݭp'6p>x+)W&nu{^wBrYqOjpf:ܥgO .zS{M9|#E(K_ԻkAC,V_yY؟Fl(R0YPV ɂS2V>~Mލ$[,F3&E6I#nT>Cess: yAG4E 5E ;5ĈvtVuqi!]vHehݷ3-,&~]vCVL lyAT@Pg֯?,0B Qz@vѨhinO9'a `SEl&HCaO1m]Y8.$p=NRB`k '"iE ڨK3U w&cFs3@Ѽџ*DFG)ɼbz--[Sड़2<^$Lp1k'(Qh9Ԙn! νBiy9/L%ں[E\A5o5 ݼi\+懺ѷJ-ҒSbd6t,>1sM4{tQ"\2vDt< 9#b R1E`XEihtpߨv78Xǒŝ}8S"ƩA(݆@ Ȗm绕p rn_Mׁ|2a/Mðf7@:);Իygܤׇ;h@:i-|{s9tԇƊ (\}!p zyYA%85KۮFDrd1]m_Oh> stream xڝWn6}WS"H]Zv4A\YyH@ki-]K$J6[p8 b~"#$pE^g>>;`0A^ܜ|A HF7wSW77tNeEJ]qt=>;ee&goo5yI"_K01<8eF إ8Č.1Bwbi/#$^Nm':i=q-0X7Y)mne[,zTո[7(y1~-ZϡIսja&xSI hYSKlYdq+ʶ6uّЗO0B_f ?:o P.jI#xmVg$4HB/P"|0˓f%d ;):Gu'>ni΋#=s}U'T8 zyڄ#2W| T7uPˢT(5WnK@Ye;%!d:d5ŽGj)?VXoT Z|Ҕ ya\"dĕnڃZ sdre.?yV8 zjaAuTL3 ub!:M,wZT],C[(ͲՖNx_Kw,'%m#Vb&^GB_ [顶Bw.e販*.]YD?@Cdn}IMɄYI4ѹS?m;Svl0k*ش16c{THǞOch)Mf.=36Յ;]X4B]Áe]8 %[jg*YG>QBfd&̋TY=>#BÞ#p,3co0"ӭp@5|UtAWP;M v~cCf) (sE i=K+F6)5u34uɿ[к}pMv/zZ)%>EQTrȬ)N3b^}ט/ endstream endobj 2878 0 obj << /Length 1255 /Filter /FlateDecode >> stream xWO8~篈xJc;?vuP;VўV+@4&)NIat:m2e?$ԉ8'lq@zpwMvk x%8]8 ,0qa$ B0|n 7kR=\Ei֪!zY`eb[SJttH\:SP"F.p`1<!J"iG(Eg ͌q6yf Y5s.靉š0K#\F0U.=\7vHuHWWl-8ݜ[*)4DsP &gP7bk2}샶GΪra,yjJ3v ?8|CV: ;3ix@@Q;$41Ss˰YB(٢[:55\مjceԸEʅJExtӼHG{oKzv4&nPh]a詫 4D}Gi82"va3Gؕ%*S? {}9%vkl,${LQ j3h(Om5*6uiiaL!!_/0GEWʎp}3S|5.x|v1&4ZW=k46"'@FD'Bzw#=͛fhِ:f^"A"ǠZyQG(P܊̎[v sXs.V1{ȃDI'OcjN "'έ}xc:?+$KDy(HkVnϪvnO9xpO#W: GͧgI\aÒIDP6q)V C`\/0m)VX~#f}-%I!u [ҿȗMXU?PtT`UڶӬeEO. gua/ȮPٳa]onf`U62!1mu zx~fx endstream endobj 2882 0 obj << /Length 1297 /Filter /FlateDecode >> stream xڽWmo6_a&'R^6C4k$+ccѶy"%vPswϽBGgy8Kq6[' >|B^HwhH0rlj^>yob({?c}DGJ6 ,<<|3v$8 ]f4"!s,&4]F9Ib? Z@ż>zBNjmnkug@<)؊gHRӍ\WR yg:JrΙ&BjwQ2Vc0~{ހ, pfApؠ'aMHm*ޙPm%lFi6U\*: Uo]#B"PBwKqucD!?8=@ޝC7U6+ߌm*ڟ$Dd,#iO3Q~”ٽ.^ \.uVMlۃ@[(}'˾d{!Jj _j_tВ_r,u%Gʷ"7EVI IȲJug5qN,?j|h7l%y`zTbcxv/JtQ.peSVeb%}ieK7PEdyƽAj=l)/xI;СN0r˱+] yq6|fյ:R!#4% FF}W†(ΩdF?wLV1c39"ǍyxpN rm]ngɁkz|{pi[i/E%GK;*V;CgٸP.CA$bW (e# B=C\r7ph]ֲsd PQ=yGh3IP endstream endobj 2886 0 obj << /Length 1655 /Filter /FlateDecode >> stream xڍWmo6_al*3#R}HfkѴAkc,"E'~x'v0`Qx/=&l4)IBv&xM[4?Л1$+e7QT440V-ֽ`l\ez឵ /aLבMf]8;բ[XFyۅjݕN5 61Nz j몞^*ٓjtϾJ4bz.N8Meku hv8Rn] sZXYá`76< nx qDh!8((y(hHAP_1vI'^PF`6Γ`}7HL0j l 8KE <  uoPނ$ZRlMP]kPR}{ gU߷ZY,u" [:n[ RG֬xgUhh:T x[Hmpfc8,1gfMѴ53a~fJ%vn s7Դr)Mxl#{~MT u:Ҥ(rff TY0x웺).w}69d-2 oxPab3SNL[CVUsx6.Hy:p6)D4}k\ Rli6aonN!w'e㙀>8@ ʺTKp $ &H7U#gn B:n0<od `瓨E$pғ#7Rʹ??;TT 3eU}:zDX28Bav=ܝrR8Ve"MWjX(1GTFrQ*mP>SFUK_xM=;G4 %^ VGLdBОhTqp!xJ`{ʓ:? wbe绽T"Q'wTN?V52KPȩj6HLE\+e>?{i} o!0'0aS@0sۭN@!;3Ҩ[ -L4ޟqlӢDQw@.""`wQ*2j.$tձ,!$i&Gs|ߦ37k mP6WW(B]𠪳l^X1&bz@ו+57BhdXpIb`NN?u?u Ge;Q~{mr\Pz@0_h՞@Љ%43OfEP:iȎ@E|^VזEGѕ*kQw)*B[~x{zrڹa+Xp}&y|AOw@=3/g{M endstream endobj 2891 0 obj << /Length 1899 /Filter /FlateDecode >> stream xڝ]o}WQڢ޶dW(#1K2(9N~3#%|r,"Qkf|F2b$@A!g͐j={UN۹EqxnNzK=L&W?:ݙw KI|汐QL_d"D1#O<̽o6v[@쵇۹$޿t |H]ᇁH-VKG3!Fi35uejӂ^v'>ԌX$οS[*88ף@k{KnUgpǭ_\U99)]gjB'}&#SC=;q.0bwuGΕeS* 4-I*[7HSQv2i,ƥ춿u`z.v PggӴ\wɻPTNO`\RGZ)2 ? P "Z~5nʦK[kzpkҰ(phќ k" .ͭUmԽOd&E8*DeQzj@>5`vxڶ 䉸=lDVAOjj|RckNb[*x{vfDZ#Vեi!4HiT%yw&"`'3_O+m9~')'E@,8nCg2^n졑`i0,B`(=X?SK˃}{DAi,ث> stream xڍko8{PUQop4 ڻwe$*K>J`pܸEh8΋"?E$az"rX]psB0 W3ʷgBDaUbYůNU$Ay\i7jk\ŅȢ?ZO28!x!0P;!ʰ\e$%/4^Z ss^Qyq4'&#@HZ6U 铮vzxGkZmF{j=n/8wFe=,wY0 ړr+pgrТw2!]zJ&u ~z AvN6C x4'Z\q&YIc]@7/}E"yE,EKsVJT>,V}{NOS,Lij97ls/wmװ7 }j߁ϩoi08 Nwʶ;{>e8(<0m.?(ipGokZcWgadXRݷ QAP@ڕcۮ;b0uّA=ddAEJVy@(>מ2*QѰr;xN'c[$Rmv@RVi^C'Wy6@`Fx 8M[:][?bߋx|(iIK\ܖSG&SΛժ{5ţ)̃ & ]\::ADUZ{kYx'=<3qZVQ!<sN1v8נNmrQ|:ALG*MǺBV.;WEٓy:͒06T"왙Sf4 3uY{0_?<Ů__BoHU O|;ތ٫Ckh:iKBZ 'n}dY( =[(m9ܚKU3p+UF%(Ụ{T\N#f!7?ܖ(K(5 bS4[!znTO*`L== J'=M{,2q0<"R) F5,p$ q15aD͚0&<MML|Kn^kjsd)L,$ԖRKBpɩ4~EFl +V3i6-qDGٷmu%aRNa{Q('_?_?dRA&!9W4 a> '_InGk\'n9SwMxc=2,6Vޫ3dGEIh3q?tAgg.BHn''g#;U%Х2vS ScjzqR1suoIzayI ;!sL`< Ѓݝ DY,+U.'ew%~'PӅbtGA4=^HI> stream xڕWYo7~ 2$NNDhyVf+Rvp:u€yh8=+'_h9@{B[Z7;ƹ` Sźfm*8G9vYNmm50h}vs[SeC4AI9T4ڛRM'^y κc񏋱'i2Р8'O$U IRdNԯeZ(Uqlrhj6 |3|LPYDJdHlr?vIa "1!tr ^,ٴa#8:A3}h]e~TyIym~,Su\yȪ(9*V=}O6V*J~k*0k\?n%ϋ8v -֧2=?F?j ) ;) M+1N˳FǍ!y!oOkhmm#Ă"՝^o\ۜWkd$V1 :Fɫ۾K(A_tGHmSK1OIk`MlQ b 1 6JMA/uJb(ґ dY n/@[#Lwi(c4~?%YK!)忩HF3@k3ZU<~pVR-m 8>k]u-9*  2yn6pD)a}6X럡f.߽Mk5͒8{vhbFt8:8 XLcҡOHe^0~屢 pLa{-Tyt,mRG1L"@}qAgD(KxB~ -|Q:eB*gp=PkmBjp?4$ֽ]U 9)a Ck34mc]nڳi2YBtv=фyo,/ IvD($2ǎj`7  7foء.P'y\QO,RPRD k9 8]u4Um۷Lۮ]#sݣ꼃QiM|C!q> ; c7f4b1?t5<ab3 endstream endobj 2905 0 obj << /Length 1420 /Filter /FlateDecode >> stream xڭWr6}WhRjř>8v$mVӇ4$rLt>ۻ%Jebqlrqp^1#&)A0,6'ܮ6 ^g烡?|1?]*5<jj|lkt3 ө;J7Z/cۓݞJ'CKD@]4uLWX| -m]-0nڛ\r^N\$ז  m_Az@MtYjgWvĹ՟A sm[3ӏ4OA9mmZK_Fu-~eaTWE b⏪ 0Z*]p9hYEC?huSw/KGw9MCȟ$4R#q K> ^ MH 9e_0gl8-/8l3< Ə^Grrᑭ+f&Y{=?}D-6[?:6<|V03|s ok@2{Rѱk  ܳ0!v!eC0 9k-]5(Tߎ^"=h8\oht~7¿-*_aTwWɗ^;>i/JǬjW6ˡTXJ`h9"I`bϕr_j$Mng<,ZTsɄצy_e.U<Ҩ`-6+v@ ܖ \W ګc;=&]~f?~֛o[ endstream endobj 2913 0 obj << /Length 1842 /Filter /FlateDecode >> stream xڍێ4|ERxs{9 t[xpoȥVH|;3IoU2gsw,,"Ql;ft>GW7I2(BǬWz6Vs?"/;8.?{=s?dxE4}ͻ^fT)kk'L$E1KX(&wZf >o`w?LEHHo>epPoӯ0WDh͘4}u3h cy8xI?KQ,W.B'"p8 =0 Ҫ9|UF[e}gH#'1(zgKrڮAB{  ($t:o-ID kOh'Xt[Ep:t2!;t7-HcO1k^yyѻ)_HEVѦS*D:j5蕲(Q!j.A0oͦKաiVs0%^]7tWStv\:ADF +m,+1|lQm٘UwdEYdaFy d+,&;h}^v7Iڷ" +?cGll(MaE~U(T5Rà;Zl+Z}KP9V-:I/I&r؎SXZ Z6p>'晡q5F?wH4iz$y鷇ra7%4/vHSTb\OcBPZ aRA,!CWxzU4e-xTPT M sy 0sU 2e\r׮D'eM"̵ )6ȫ[p s̏]55)rsƂ/PdjQ bVQUsX5t)'.>qcUSᥢQTPg c/ = ˞@T6#L$7Vp5/+T @SsHuXHHΕpM8ֻY xG~"ҝ\9\)` ,QL8) q-Ķ]",[Ȣw1Ćx5r '^Yw:[rPCWh&O(jPB0ֹw7^fwsxfP>k?.$Gc9Y8(Z׫5p0κ toRmFߍ֣UD^w>NrH}.HN[PA;C0Ε)3)<Y\#SۋGcXBhaaBW[w]ժbqwb&cQ8LOQJCn aKc\OϼߪSq`>~qw'x(s>q66dP\ Oy|t%Pa$ѽ8}Yw(hvǔ_/,y078A" A$/HO9ӳV. JP`Fcqq!Ht  CUGW9)?ά endstream endobj 2918 0 obj << /Length 1641 /Filter /FlateDecode >> stream xXo6_al/21$%#05A vi[l,?#R$OnPNG>yg6R:a2'Rr'w8LOή1JRt=j:}.Wr[+= »PZm25ypyzs˴)8?;1i:b%!Bq [7;}k\JEuϻ_A|v IF/P"%P{pH=8b /ye-+UW:GR^U(o"ƜZ1{U@OgMI lHQ! `&x(Nu*zo5H(p7+dʸRUm_7I=t_$$I4!W WV/ TZ:B U쾔,܉ԸvywzF~ Ǽ(9^fʀ0|N#O RdPT|J]JOVw+ssi* o/aL]2"t0dD@x9zA Xqfx]@$:P֢ki:,*ڽmu9+Ԛ  qzVķ8<:x_9H-ʢ(ЫXDx·N`&?>dm`jou06v-gXӾ='{~4]FH݇G+;?tGb㵺tCL\J^a4` (5'mj5 ^"΃!8cV*pN)kt'Zfg@Pg-uy8pK>.S6_.\WyUK78 ^:.=`~V,yj "_lD!fͫf9mg*s CmEbEtoeS~1VSeixW7G4Qڶq?]>)wz{R}MEwA.Mũut71hcߠ'$⢗вdpMjꝖ:V{p0dkgr+`#Hu^Yq@o8 zRf:/y8æ 6gt˽VUEp"nݙ_~b{mNͩػm< QY5%{ ZěXe7ᔲÎIGiYdٞ'$dB=7~}`?^TLHr}6`Z( 껲rNHzi#,ڸ2\7ŏ47Wrݎ u ^ ̫A4`^z# Sf3ػh WU?E.Jrz˜ӯYQئa9˦I7P"7͹Fu#VCx(1LE/08?@ˤ8'%˕/ &fũ!LOl_9 F endstream endobj 2841 0 obj << /Type /ObjStm /N 100 /First 962 /Length 1781 /Filter /FlateDecode >> stream xYKo7W%9,MR HR,obղVЮ$~Cن+éz<<9eME%{R6G&sE' gB8"H *,DVɁ/e)I“@ Sֲ_uQ B"-`FN'3y_^Bbml J Re &$D *o Y6ޑ{Ǣ9dd- = AG|"$)/[V $ 8X 6 Y*V1p$$1)adN܌13Éh@Z*+6V lX lFI8JX8c a2},s".':2`5B!>E<B0a'&5 vuc"YJd'Bdrӫ4\gWz|U}=& Nt]h8<>$VՏ;>Gԧ?tXwطmbBӁAG"WEVso =9EMw8Xu;=ӺjtV veEx3=[}~}Vӧ؇Л[&i&2!c;tQlPHGFH#]^JPS{Q8jKXN瓺kҐW|O]-v_]|#\hg3+Wo^!iO;SCqjH>>O'l}׳as`rY9l[9V&di 32 e,O>OfBvt2c5<Z(7SDDМJ#>޶d{S6;<'#> &&i;(gLkAҵ\6{4<=KZfD.ʱ+5 `F{"ex@:!N̥)HB2i[J^B&8r.${Y\})l&{h]8o.\wᰇr71?& ($mq h!79ʍ*ZsK;UրTm.J5HK+). zWۮY?n鬮l[.ۻm]Bh٧Ч8pIR3cy>2Ҏ#s #I$-aHlnxr'euvq4ն)cS3I;@|X/u endstream endobj 2923 0 obj << /Length 1121 /Filter /FlateDecode >> stream xVRH*f#U_z15LHRbgBH.mn˖ &S:}:0sDBDμ p% M3]MM7}j<_/eྻ 7jT5W#P7 '[G3b0A(3I성$LH$)-Wj_L8 I$" zӍ"TeoTsR+,`xbGhG&B<$Zo\\n4tpQ U2,UQkH鮆"H(D1D$p:.<6`0JiQ0, w$Nu>V:D Lq^!u@ B]+աhKBy.U;oz̀糧r|w_M]%!c35{qx'%c9\k^"*)[K8֔>xLIhgT:tsH6H%過U B7Dr ,!\nlmV~deW7Ș*"5X8N^7suD/,>pyU"&v'?XÓSdPo>]BHȼ.~8? 1p5$qoH|^4A2rGL5nCؙa0(i?OE:孃^ו^׼ljӝHcDuu/}vcL\%q6J d̴zٲ~1(~[A٭-A?ӬQfrőqMnu^̬bf5k:5a:oͤNBW[*S`7Vg!!gG_ F9hrBWf}B:+Ƿb43G- endstream endobj 2926 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڽWMo6W9Q@C zp֛bwv;4YmaeːioC%GLyyPŜ$^"i5+0 Z( I7S _k*?#PATVSAPOW 3Q*"bClRG]]m!JesT@?٥tSxt4~lnsXA4bR d]0j]e`5.l>DkHp=.|lW[{fgc6`, RU˕^v= +O7Xr]|1M縱vo7rBjzVk9ޘ>ydCbCc8CГ!m)jheó>ad,-tf^kgA'B:u{<1)9WE1 ֑n ޥ󩲺X vIǑ}@!t5i6Yϩቒ;NC(MtfBaQ# r&Ыd'^r$DeLucX zߤMX9FvPj(t~_6j 3Mѡ4(z~&gf\f>UQ$vÚM2ajw?8[gG?#fD~x0hPe?j^ji(nOz!U}/1Rn[a-ςѺWv۾Fy#V^z^yJmqD\1\yYRX]- ߍOB endstream endobj 2930 0 obj << /Length 1639 /Filter /FlateDecode >> stream xڭWmo6_al*c1Cz͚n-4C[lDeɕd-WIaspb)Y$[jF8|yup& bpu+j>ZuHJ%Q-..u>Ñ{i<|U349.B2uB$,DI S]JM}aHJZ M\ V~U& DW+;Vj3`rUeq{=!6eVp&dlʹ.kd"d4JO RЮfdI↾Krp==:+i,pgUAąEک1UGp> 9Gl-kCEdSfnMqM9UnJHUR-PK1)x3L(WvuՅY:k& xyZf}rG4 ؙS󳭮C[aASaA Q߅w6;&{樫"/.K@$CjmM`bلodQa$yvɼZhD@@C;\ jji:/Ɒ & ƫiUjfS[Őn[*sT|;v-m$$Gڙ*3Buء^)EDTzNT-*@!"}yXBa*n?Zn29tĀ9(8NUntF ^ XKUVu8wM0hz8o`Uu6SšxG4Pz]eVt%f.wlv_g $v7͡E m?>mqÑDx >-`b̼0p4)6piK ٜA;˂ Q [8qM[T=]jUiVxoٝ9Gx[fGbqAunjl4\O- Yx>ĺ 5]]BE3 բ4'U314ڿp 3ʁ 8. hju/z]MKE4-i|үc;^\}C%ft%5Q>@.@hQA]d֖ 1-Z2 SzX`*Li,^B&xy\L@WK ݶ~MpZin)f o>b]TtڬV0$(vY]:+Ί2e=͏cQЃ~3WOܴ/ROu}q,f{[ Y0 {mhJ Fja4 #y9mq;d0b^K;ۡnm } P/zQwdSA-x:?}$D``iԟNbڲ! 4޾w/dIN>,{qe$8`U"8ջ{zYT\;fTϼfU(]㵻M65E܉6e1 o: endstream endobj 2934 0 obj << /Length 1243 /Filter /FlateDecode >> stream xڕW[o8~@A*87 tJ2FM xb89v(鰅j'>ε^n&ls]r=I8*:sS/%rE t pn/ #r:63d><'M?7gNg'C%~!t$tICVeo%~kLnFvyzLV#26yV*fǼ4Os1^˅k j\mCeYꦡ#*kCޒغdqY-37hEoYd@l+76@OG{jmipi= Ɠŗc@og;r[IK7 S &clh);-Q+LS^:3Hh - dZF1mS)6[eY+ȦTf¦ϲ%ruywԖn8tN:V T_gǴE]6dβ.l'0Oc]ZW񬱇>Ob49zMHsXS$C3A+rj%/l0X:*u+sSIhoS5/쒴oR6RYk*_DȻ1zm~Ӵm $qG_!2ESD3>Z_o_U-YsuY<-2f. Vh ~nE,J ݧ60s? m*q}7~>8qv7gb7d%JZZ`se5h a 5Aj4Ð3;B7!Mט+lȋzۿK]^XGWmxo>Gv_9l[#aDvԎFإIa!0yB8]ydoV.lXy_rrFo0{ cbo NuW`kEQPYi"/dCJH*>4;̱a)㩣2E$,O̺1H7Q-M mu޿qhVÁ\̨d>Ru#3ҁ|A(W @YTH|}~?_!s endstream endobj 2937 0 obj << /Length 1142 /Filter /FlateDecode >> stream xWMo8Wً,)bi,Z m;)nDBdI4F5eJ`=>3lB&1؏&z9ͿGMpgv~R $1n%Fiw9wSw9~7j*N ıub)<@p't7aPg1hD>aGr!>D*>BpBП݈;S|=ײyYIqVS>]9.1($qC6 aqJ.-P] 9N;S,ңa;VypںU>8 Șr"ѹxR˦[tp.iU,dqQ`煘"Lbi]ɺ>gie1mPNhˆC0A"K*j}N#+}adgPD,~NM6J`/,W)+I|W~t:a1I#I~r;V9dSil Ãp%3tץnpViUY2iq{5nN}%hyk WY=NYD< ~`G#fp4s G3g+ʜK[=)|5LjVxӯ!|Bx-΅oi{@t(hm@WC endstream endobj 2940 0 obj << /Length 1694 /Filter /FlateDecode >> stream xڭXs6 ~_=L9Q"=duӵ[^u[ʌͫ,(9i~9v˃ @9rŸsQjlQV.?l7ف寋G?k=ZNׇ?ӵ6Lgy'ՓL)yAK{m;eEDg}Pe-J&2)IYjRTJ\QZ%>l̀lXs2>3dخw3-`}pEqBBHPbiͰOʕ 5=FEr5E0+K*EwSmI^-IXڍ_]t*4 $s8t"sqqVZ`\?5T$5ncM vIj2~䤇zݵfiӬL gj1$|85}ޥRAl\z\SK˔N .$RF=Ȓ-\P:r:vUОaiwvh&EzW(ˤwErޕ @Ea4r.ryT)c]sr ´]_Pq>& L1Dc Їbe8s=o8niCvq\u1ݢsw;viTF]4hd6[[É^]^Y"?ek[g6v%% VP@s S^'ON֪$Ԣ ݓ[Vs'0ƝKSƂ UO,G)+u;-!H sԺ>`~׌K|A2+P7ޞ:2j}?`Ui*dym=&L\?Wֵd. ˒ljȴ>/::ܦ s3pu Seɤd=zyT j=|/Ϩ:YYu\gM7f07V,!/E)DCM`u%o\Lq3aHSL,+b5j\aM8^'P4)EG|:~7W,B{ m0"=L*pqjLC9g+d)-/Ϙ~?v "c GC2ޣ vMpgv*G1%H 8D$eᚇ锞)y^JCb|(V4´Kqj,嘕2YG HŠg[ 9P 5g2eJd& t@ n0:t^ewEb7nJDYO=W%=GGoP($=!y4.ƍpqS,rHl]GS~Ϝ ~v]FZ|z ]a1GJ H3$u t0I+ܿvIف sڍْ0I%~ҾXS]$&Jȶ{KF!hԯe"a7 LX`hivHwNk)Us ~78Y&LjGGX,k^f#o  H+g!HH8H>H"GG{ꉠߞ$ 12pgoaD0jO \2 endstream endobj 2943 0 obj << /Length 1501 /Filter /FlateDecode >> stream xWKo6WEV(Amуm< =0m ѫlCeKYgE/EpD3<:>Q'1ܙgUKΨ@h~EIԙ-f}M'c ȝwr!rq.(NNk=J9NCBYN|,7 e3s]Ep!&oU4M)tMIpx2K_KVwڽ8Jv+wf5=4fFAohS1؝`QZ2˻rrMxfQySKU%72+TO4xgQ6$i %$3U;$heG6u1U G &P ;y|Vzݡ(t5]E؍R4(7 >|\åʳLf0Zu߇q>%q2Iʡ9DIgq-R4LHPE)(vU ţ ~WʾV/`U.e:Ds4^>A ]i|$ aDxǁ ֡ , ![(Tx:Z NT>w8[n-#%im}ME/ăZǽүo?$IhzK'mB[@?6 }xuMU wS|`ZUhsЦ\ ǜ9[Ȭ"JK VљA09cǀ6>=A`S]zǩ]Ie/4q^+%d0\X Ogzղ[ge 2>LR=VKZ?*o8}q4V; I F @t]NM53xp{RZhdվR#j.F#1bozc׮ƩЧo*nգZa=o2s -14UݵQ7ť[.G @V) g9~hLNNzͨm5"TV}VNyc˳ iJO,ؽ;"yy<I wEMSc/!^-\9 lġRK!-nrl0t4NnM~{t$=a ۝mV yI:>g萉  M+Q8!~x.PܮDk/fY֕`r5`!0}͏v2/l ޝ*LEcJ%杽!S)kdz\5@j͖ZEQ"ݮRO5]ekVݞ_cgX NƔY&LY&3,~ez\1 S`-8S~3RbFo('*.6,p endstream endobj 2946 0 obj << /Length 1351 /Filter /FlateDecode >> stream xڍWKo8W \Qԃbin[ݢ1,ȒAq;ávl 74'y8Ʉ`y,'"t\ f 8I_>I&rOF.X{K&'1yxMOyR!Hz-QD4v( [YL̵ҫ5nX/^ "N1D\meQdK_38QX qИMa}IgBf$윶@@I}20 <533sgQRpJ/2u;"82';N@glke ]/j_,r_\8 \8!uPXڹ#I,,fMKl(Ӹ=LF+@0pNW o*{Wvgڠ^JukwAJwppaBl(̍AqyUm(iQ7V,akx4j 4d:YnZ hSڄ yuag\Զk:ˣ"]z;| (uo~{QB(~ ]ý%v~٢g Ӽ>fgυgosEf76`s Jˤ#tiuw_Q5=.CG`)1qEI?SX{୮YSPݯbh$YxDI'}!vj=N?R0ѱƛsشіuav-pI,PNUW{MWO?=9_=yj[= N\cF^9-F24\L余s%:&Y4 ,1D_M} 0'k .r2VԥIRp6ÐA<=)> stream xڽWo6~_a`&5#AeC]; AK, 'wl+uo?<wă$ž# Mq7毳wA0Ofwfs'ѭ;R:ĝ~^~ ӭRNE=~}vpgېd|^?\ [J7EQ!=&=i ۇdٔ`ӅbQѩSk6w٧g4` 8^֭21MY/^hj/sD,@$ +&0P8`D L0ܻ;;.ܸtV˝d%>x(&1EJIM@>od!'9hwr0a3WdCV \uBoI(WÆ t{b> cW[o\Kۢ1E]8G$S,5͠ȭ4G Kܢ;-MfӪӭUS34]UϙNliݟm%C9,z+sclO";JK]MN߹Wu|D"r>2d!BCN^7˄tsӠ(zK4LQ!2Gd`F}깸i"Mۋipb[EutGVXEf߻_,\8\V}teyu/]ῡg|v)DyT?/Pm>"O0!哠_[)5ZuZVz][/$M/RJP[`MgR> stream xXnF}W X[.)iX}(<"Lq% %RR{33.%'>IObE$|w~%y &z3_[N/R?|1MkLk% _/S'4r3( }OëwPÙ%j"“2$J!u@OLefoe,"i|8Lsnf:6eVxk\װ4Z<8-Ni)hnb/yk_ Jlk6R0ҳ1~QrGлUauR[!Y[JLgQ ?׷.vЩـV Ҙ?w7ցGKt>,v"lSWS+|ii^3Bh{Y뽻`sAYbf!9CRDn<%K'LpkZb9wQbYnd#G6+}(6 V|[zW oylWg-!tם-^n A9 T.GcIӱT #"D,&R'?Lf<{&#u()j{#81.x xƒg$*$8%S-HvXϊ{/&wͬ‰; yyrvqXDdDFu!iw&-75d/ӻl)MW> T U轡ֈEfi7bt V>O_SnJێs/lf]aF jj--=1ga,Bt L&B R7ʃSxNvlH4vAq5}LHP9< ס(Y$^Bɤ?̳"w,Dgf\Xvu~,Ng_SJUY _w3 #/67p+yUSjn ,@ڴ+:Gk=Mق{HFE;(N% Վ 5Z~A.^♕ȳ-Eų($(I HzݶcU(+,#Kq.ⶤIBqȎ7;*ݚ6Op,t\_l[jyjmjFn+;vre~y+,o`-Ue|b0QϾ@NC8 lmi`M<:P=_|wqSz y%`bƶR'QI1tO%a1ˁPz2_Jľhqy7Ԁ>vEK{O&37@E@txO;^\% ;t1[RRncg}w{ 2,az[ncth^uy/b&?F}:poISԿ@ endstream endobj 2957 0 obj << /Length 2480 /Filter /FlateDecode >> stream xZ_OGXDzMshz,Ei[Wr%vȻ^ip(r8E ":IX.*nAn &zNY|q Ilű3r$I}\IG5fijy{端oMr3_`OJͤ4'x]WtX5E[dͻT,8gR)E$bZ\:pPǩSƴt{C(rţf#'] 7xe)۵0KjGVda gV =V2hFcO*݆kpSc6 Xv4LӨ1kԑ㺀92V(hg5k7|kWUYh"`:TvиHt_%$Y4Zj{C8X:FAb@; [`cpz2mahxnb4h"c :cI ёIhKLxdy,Ӳu}<ݜ& E;̩Z[Nyt;+҅ǧ`K}oRy=G Onʾx|-% 7B' ٫RFww8_hf> BOJ_Ah+iѹ4ףݏ3Rʏ~y9Q{#clɄ$=4& S i^IhsN1gZk0+M|X0 'Sɜ{vħAL34K>ZX>+"fC#\:() EaOG¬ rt"H>縀r9+;gV4d?|J`vW޶4Pvc)Sbj;O4f:E;a!A!pʡ( /z#…`,59-B_% 8=e]η1 j#gHʕ~S|ʇ1|Ȼ~P`Qv9o!\`T4>}1eIb9zGY %{0DF ZO)uG{ʌ֗mW"rn.p/Ҩf`htͺ3}$K>J{_.OĈێcvS4-([BQ !5\⃌Guc1,zO*;S lAuktet9ڮqoV:oQh i2Gͺn6-MpYl$ } t]bGN%rW6b.wq8SSПvݩq̸=d^֌ȑlIۤs`\!T M) L#d/>j+:Sg/t_?mq:tmO\ !2U)!hmG2mOuo}XS75 7 )0izh1(9hxuQus3ȉe(g [_Rn=A6%WxB635~~xw7d-}BOǢu#|Ku~aE-P`pvx-\\gL2Ť IY,Ŵʂ~+e7,K1cOK2afOM.Jp.%!³E/{< n:{aJj/P1L Js.rn#?bByiQAa:"\;¸}͵C)ܵmx!Q@u3 ќrkt/6)N_Hst⻫э;!$5e3 xD^t1_sg{2fZK"<M_j DK *7;̖8{ ̲=tt,/3v5zY ?0O%|&.t n }j+֬ZRf!.U$1Je> stream x]oݿb'V+;$E\dI+D[I{;!%Q^- xIj8ߜƇ?IM,&o|64x+<onmnR?四M}{Nc 'ewܗ}Q[G7_}s3 x&wt K6Q"$qx B@(Et>>~7w LOW?:iJdEu܉dpm׊!Cy|PXo3q1?obUU{1iDQdc"Yq -3B|X ?L`pr zYkrcG.ۢgzd@?vIHm] RipVHb29l+dD*XK^`[L~څt.9.z<@ RX0f/'kΔo.U"9Qnn<^&[$td5P#?Pp%`-D]+"PW׃Z ~ Y "%e<.H``.?3.CVGOBיPwjZUHν옵E$18vw{Z J6Lޗk|[V ܷsL [@_wtW!B T=! &SWxɥ L]<÷]m9?nYK;ho4a~jf$$rrD% F+\Yr> ɛKH T1>SIĤرʲipf5_68|R~[Iȇyq|< ׿L}g2N5ʂ3`"boG TI.fqS~мg]55͚C$yvVMvr'*h3MN0HMr9Qc/bI*EhR/~%rkOwU ʨir[ NSPJI[$l.P)TZ i`%}]Bgu]PC; ,gRj#l\цI8/b!h"1&$ȮiHWzIRl;&mu(\x<h=XB_g% 2yNOɈD#?,81OY͗,_\q2q9}QPD CtM69,lnxl92S5PKHK٧`|ϽwsrqyNedCZD&cAu`uPRRԫK)xhB]1H.-g-M6սŴl<1ݫ"LvqgʴMHlSdcF }e) 7cK9luvԫ4duOk^* 5d^:YOgS9JA@%ŬYhM\baonORk߆Z'EYC$- ݨI#9NTMg9hj !0l-<'fi|T|V#a=`4"z'1lQiwi%l;s`9ܨ5I_lSd8eX}mL D8pI2|' RC@~&?I1`' endstream endobj 2965 0 obj << /Length 2038 /Filter /FlateDecode >> stream xY[۶~ϯ0VE@E(Ry`l+ Inv;䐔(4PS973]elUrN*!WË޼zA?ܿ<_ьTYEW9]:urM*D|kxSonMʊ"7~ӽ?4g3+aRI䪐P.#"x Z+޾WL&O mצZO#8hqmPnh>ّr{\8 NQU41AʜToԷ3'r&a;ݮwC od 6|m!?ḯoK0\17p#wӫvgg tCl,j׬/ -}dnD$xM1O ld4/I58Ó%a$B,unyϸK n~y#yrjcӵh;~JI(db2Ҵf[DUds *[5;\6-z!,gdhL i.Tk5ZgU1pzOߜzeԅ+`eED.|.'#TxFbbu6tw ; ۴,:|=-]8 aDޞ}c @߬oM?ᏸ e)T߫jc!x[ѰHP[iEI)HH%Wʉ^Vmf/qQ(ps͍Zl& {n,]$:V`/بf>]zޏNđiϽ3= giU ρ[>0QP}׀&w~ ,<z b(ȟg1VRib.yͻuizIjks905#->ΏQkQ/xQ_REFjS8aot"j@&*I0aMk()BmzOv74`I7,%onz$TM%؉}׌@vz`I!zHƯ"C*P+DhT.}45O)a{; L~ 5`#9SQ{XArskAǧl E k΃1~_Z|9L== 9"΄ (Op3 8r/'Of$E:?@?Q$(Dw(Mhߺxz>,:&xBocTtE_"-`@3 [Ȅkl 9$JPV"A?10p}34 y\]Oں .:Vs FAI$-ifO5*,u]`ێ]ߝ>$ba&=iZ0)k$!hSYGnH-kӝ]U+̠8k 582! _$,mL I.*UBOI3MEUҔ ?PO2A>-~t*h^Z1{-S9W */Ic 78ǛTH% BTB͟e>"t0QthB>4`er  zmq!NG+id{QuBշ3l柱0rBGYrvy9-e7l9 endstream endobj 2969 0 obj << /Length 2248 /Filter /FlateDecode >> stream x]ܶݿbꌓ"RW>8n\\:F $~]!:i#isqp:y cp8:ؕ.OTŮ{[hߟ 1\`~4݉8*RKRIG_IşBſnܚ޴ eq ϾOLS)P:xBQ D p/$Ё"W Xw-dQؘw+Y>\5!S\J&Z) b"DJ0ԣ>KDdqeͯ_rWcP %Jũ$jSz Q_?a#Y')t9PI2΢+II*́T?KCY]B;Oa5'A%߻Q0ԑe F&3-0SDOфOia"$J>0t" s6#:?j҂ai45F2#J (#{h ~Y " nPVUw孰-֬ƪ 7 9X^1{5^=5 ym[ 1b.&np VajOEwn:_mTaK6a[jgxy摐aNW(6(PyRz|0*6 /= |U%dx宾~0b:I𾭫v'ӝB}-3&$({4B{4}Í=ҁ:Y\ΪEPKxv0 %Y$$3tBBvvN ;9/9j:aϗ&B ;^`YyjIVCZ;6Tm6m ;{]AVOb{G<C;灎N_Bٟ%G}G-s1!ep 8UjCx ΓY<;hI(#`8u@HNiG#:'B5 lDWg0;[?@SHKٷ?Ƭ9n4Xl̺wSK ]sՀJ;wCG>y*0ڌ.}@Rby۫"Q<~v*5iEt/RYV_Άu{i8m\h]oM#߯ ׯɚJ~mǓMu'` c15Mw>/*vq!jM7KV_P`?I;X897+9> IѶd(m~CZrxƧ<Ԯ#E#hc8.p{ -ȑQ(OfJt˕? &֡{fjkPJڦ^Q#{&EA8*,7⩢ш1?afN&-B[PV E !v_rƯY7>, endstream endobj 2973 0 obj << /Length 2106 /Filter /FlateDecode >> stream xXK۸ϯPTՊ|mU'rl'^CAlO?@9v"h4x_Ua%U}j+.|`L8{"VqVQn.x~gziP?%ު2zyqT?lyxh$ߨrzq\*/E52i(4<|^'eh qeC+M ox;ȕq0)q`^ZwdYQ~3±K1]xvUb~3&N8ci!'42QYslDy&$UXg(\ڥpHy#HEeo=ߤ($Hη<۾ؔ^RKىn"Ny=4;aAkQTrwGp!%N23`;_L7;^܁$:Q/Rp4 P_0#D:Dlzb_x6:fkBJH$SQׂ֨%Gz 3{`Ed$eDžqF1V q<0qHDݘ+)C'YoCs1Ol`V0u:| {gұ`>.|S-xo H*xc[T <` _xp2 e?3UV<ט$!p]rs ё-"N*:< ΋ϧ\IQ>0,@2y4UFTaZV7^jK'0d, Y:/پɓp 3܀2rc5Fx=7Z56c_Լ}}BCRTETB(_h .A~ؗSck7%Y   mxk .3&KzԔ+Y|Q;ZR\/GN0P 5cU]2\ ف;Nr0nAYɟyp zS1 竡,Ij,ZFsg6`;ZQcwH2z A7H<~ۀ;k><ϦX'eFE1tg h Zuy, 1?x˘~33$W/#FAlyUφXQ䍀|W©*RV{~1՛#0 ^9C97A2-9WkWcQ6d@{?XKqz˄/O^u{=D܈($?qaJ)ѹ_bVsr0E?c㷋]Ãl2;tAf9}R :)?.L;lgOx=E__?zMQ?hGE&FthVL=©%|:|<(=H3oiK, endstream endobj 2977 0 obj << /Length 1442 /Filter /FlateDecode >> stream xXr6}WhD̈́ {i$NzK@˰T"Uv."8VZ7A  YxC%/ zk˧BiOl۫ xr6Z笩띔o۫zmm(>qvȚd1Jg")=" ΆR4W37U,qn&iWyA#M&w:i>m6ofmɃ<u{d51"MP-K(_%D O0ʪGcb?3wB뽻[|2f8%j#WO7e2NO74拏m<^KP;)^˶"bǹC e b殈RtiHTAԻ}Z}0 ߠj>b \"A_}'겿M5x!V$*3߭-Š endstream endobj 2983 0 obj << /Length 2057 /Filter /FlateDecode >> stream xXKFϯБ9lb'[9`ђz$#_f؇Fdw*U|U$LJV|;$isX7ܟ`<:^IW1~>h.mֱ2ʟct_҃6u,T'|}͋M`xtxxXqϋqH 3ƓuS]SV[KMyΊl |vtȣ]J-g/VB)At8 $t rX%r8k%Ɗ %oKxrQ(%T0Ub0&޷uХ*jri5Zdчu",eSt^(&jkwF%yTt2$/ R6c1]Cy:ΐpK$)65n;9Ke:ɞA 9]K֍L|jdEq-Lm -V˶_5ǂjV\Ój9XBgv&# ߀6 XATxHD{(  fPNOav S@ks^,-X>\L&QY [GpЬ>ff гK65hOjuRBh `]L D1>'[}о ZDLKV{x =(; ]0Y-5[j?t]YApĿWf)#z\.9ӒOw֕HPaHv3D`SAZڹa/J p[@>~y1i? Z]P{]DC9/69-5}U:OqL,5w-컶$_g+\cqz :4` Cp})g!^];淫ƶX6 xWovݤwC+6>wޅ BBOܢdmnźMU.{z 7PVYŦH_ˣ8n/8AwSGpx}Y5{³ɎlBw-.v\S:-QAi͞4aU|"yuDžrApei _*^3ngL@F/8RHgTᘴ>dPԐޏuVp| zAO6oRോ[RPiFM[>t 1[c+gNg>x[t'|1]u>+A5t̚E~V M5ۓg$/1ulHځ$e2Uځq?\2UzY'n 4GM E:a *ISeaД~ > stream xY]o[7 }н )iH;+:lXmE08l/vЏ_C9)b&H\^#:I&/ƙPB0IM}ΐxx.F𐜘ɀI,=PBd<@(pIƻB 4l| ;6*GN)I/1AjK0!YcPϢ0 ᭾6D"GLUe * U/fz^zʐTRlj!Ac@o!+#A/`$x)3&\c(uDML. }ǂcq.6\P %̑׭Pi bL KXr 1NW73{,F&׀A[J%9`rR7%c9MX{Q$3 uL sP1A&1!KsR甕NsP?!j )M#.;0 XH\U^ؗVZaBU J Jz`wJջdWǠ. H0]6",=TJRz{{xnL%7*b#_ z}x9F_ =_Oގ~ߍ>A^ GOpa44^h68? O'{uDXc6?O.?+f+>9܁=H>Hɘ{؍>p^v2>J[/'Ǐltptj&i{ҡ0erǟp] .] TlB/;~-K.Q͢ B}d-Їb5]y[].v3>s##Y~l;یzE-jzQ}n΢Hff'㳑=xdYo^n&Wi rcL7cf1@ 4G6 e{bR11B2d='o>1O(&1gK>"Gqr!=Mr&XNa*M]@a8l7%ھaSǑh:[+ QwHNjMN)m^Fc]c}~2Ýe=0xd\'qIa_g[z bz] õy-0x%/'KM1BK7>B"rYK\,-7|5Q8gKYq ѥ@rg@}3o/q{_q HV:_RHMx1#i./uhqt!$w5"w78qHP֣~,F/}=4|4сrK! ?I endstream endobj 2988 0 obj << /Length 1660 /Filter /FlateDecode >> stream xXKoFWV 0zhHm (b IEu}gvIӱS[@盡"_d"e*]仳ַ zyt!Wg_z#E_nVep1PJ,Ct//i㵽-s E(\,V~XBO)練,zqK`:a\-Ci뢼eiGg{9 %{"ps%)H5'/0 J8S]2 RB3{tcL$ E-έƆvI靍S]3k(T2 WڻxU^^OAy[爥ʢmE!XQCOUKN/MZTU/>^mPu%`gYpD>vվ: Kf[izԶ9lspN3Qbݸ9tENގ@nXk̻=mӘ21@!dTC']4頓>ߖ^N@ 6רnt:9m;#-ႆo@JrTPV:N{NI?urO$,=eZ&lR.!Ju/{-,b"?RTNkiol-ۦݵT4-/ rT#zoIqg@3Yu$;l{ϗXs=&J<['t+hJ9SZ5Jf+8ClZ<5-\ٟ=$Xd[+dɊc:cL|2`(LF* Gĩ MEQ\K,]Y'Qt" d> ]C*|1|ģIi߇&Zך'͸ Kۮ&ל?>F<`*A_[=9|jK^0')TIu _5D]d=]*RP%qPEvl'lqS;gИ@u)}e~tTݨ&d(z^ m/hxvE8[CiE?X]Ve04YK;~qWώw}ogp2$li{S6y5`F& $#V8}iyȶ:v+_eLٗ?7g2J ɑ<0LuU`b];Ll^}>(Գ2NmhR ,)0&A~%hp_xX K'&ykP9+J.>uM+Y)U7:(EEQ;8Gi:B#t7yRFӦ4>zT@wޥHs ғ  J/sOyKQ=tc) 6Qs~-v=h%U7 endstream endobj 2991 0 obj << /Length 1652 /Filter /FlateDecode >> stream xYo6~_@̉(QnE,omU(Iۿ~G%S[uw}E "$O䢸9lY3V I>< Jp iNKCzMVQ< iېIIlfR0;Vbs{Nf۲pu WjB!iWwc%EYbҌ$2b,} rd%&jC#Z&!9{ׄ"͈ez@98)Y%%zw4+osK@-<%- iyy ;*U]39ciNEND{q]w%|OBm7#( 882պ@zShW1yS=ޡOyABnt`aƉ j6%Rw}ZVw8hrKsl'6~:6ci⑵DѴnr$p!IS}FͲy8 8i{7A“Kfg/9v cMw_^?AWXS ubɨa`w*coc/r4ai 9ZB1\en`̍*~u)Ŭ/0TF/{g1 t߃WƲ-dR-;s6CqQO=- Bb'LD[R誚s ; m]Bg?S7c2 9Dg{%p|/BPf>(CPnlK] sڎCa=l$ZEWN,HG ,N=[VC$>:+$D7lsO/'9`M &ƒ̢hnv-;ӈs}9K F9VC8"b n>cTCۃ[azp^;?虩$Dx^ooԪ$uQ7. `˓KسO_w2/p endstream endobj 2995 0 obj << /Length 2305 /Filter /FlateDecode >> stream xYY8~ϯ0Iƶ1@0$ "i.̓ZfؒG[Ţ*t;b@bU |ǫTJlUv}Xϸ[ʛg_k1㜯nn]qMH)F)] M75ui$:8WO={u;Fp8XJ2ŸTꀛTD"^5v]qp9Ꚛދs$gg=㚮>UtxɘL ;`eƣSO <֍8Z^idNWSי""p\mx3ɸpٚ-z7wL蒹bN-2=7Ŗ(7!5Ӱɭiڠ$Ĩ7qT- Ί3N5GNx9|)jߏr"gNμ## Ww{wd3-h\t = %t{ӟm7UYix;]ŧo_Kk̟Ǣ*+>X1lvg[za0s@ :@'7B2%1tʄBNye,O-x wOmpk?v95IH'O A<p32!:B3' Fg:zAQI<ʙ?C+І,p2+Q܄x/r= $TZ\bT V+VfHݳwvw| 羊ݑZU 3$ܢd+c$,lU\9qvIx|R@GMX/Le3r_SPb-@듒sk%X'ԂDP'6,ES\+Q|ox ZŹ{ "JIuA֛_g@]B<X~^A|>E_AJ^p>NVu R:oc8AKwRxהW7@%J(l-L W9,x<![|yR?$԰+2uB_FP.l՛?]ovA[yj=T.>4\I ;1*xd$@ar%Ԇ[W*=笹qC䜘<Ժ(/ڔgL=,J o`")Yزl28CJ`b_>rJϝWsWqtf*Rc:K949b^6v-L90x SML DCO ]m;zBk y|ҞcWDN_wqFE35`(eL<}9Od~pyjt0+`6$1%R \ @|:x 8Y Ni^f0e)Vi䰢~+ ]u[V7Wϔ 38$fΜg"" w5XO%qBjCl}Ί kJJ' endstream endobj 2998 0 obj << /Length 2207 /Filter /FlateDecode >> stream xَ}o#Rd dƘ}`t[dHtz>U b-7䦈6YB*rÆoJ2\ ݫ$"*fw7#/Wc\ k"/J$6LR 澶x5O:q U"Tצct#(D!xADroB N&q`/ay`hdlU;Q1i QBGr)vآc+F]f.[nb# N%lT "Sg3xnc$xb.J2b&GCanFk*(|;lc5{^U0kшi2Uգ9]A>qd(V{@u "'9q;x95 j%1PF @S]B) &=S Y}@2rvYhb/=8gʡ((_ė~o 1fhh~ 2˸@b!a!3T nùa::o G%s*\"m*϶ܝBIu}3?drv4"i26k߶/qX_f5g,M훲~un&GnRQwdkՁ[4C1T?m(~W펾__2+u}>P*$`t[brzO!I tj!CNV)sOo;VkjXkr*t!HIEcn>WM}Z,;en#,ҹU~ <] V /f|xujXK|.m;*[q̗ўːsDZ㘭)MОPֈ咒E%7Z,[/8k$w'UHy]Zøt=v*ˈՍ+,JY_S2K;cJ5lV#g!ooj8'2|'$=uWTY:~uꙥ9}SJxEhqT^{{0zv_i-ܟ .Hj͟όk[":WU}XGJ%‹R+E/TsO6ZB"5b8EM7l:T+=wʽT.] RzLnZ~=,u:UY rۭ҃7fѽ7S❇q  endstream endobj 3002 0 obj << /Length 1700 /Filter /FlateDecode >> stream xYKo6W-Z ˊ)R rh$hA%Ɂޥ 0%KkvR$m"7ߐ _xeҬvIo_0n7lO~zԊ,3ڞMUm\$I'더*o$x\㪝[oD8<]~b;.xu8yFxb/x"<SJE±/K\ǻKa^m`hRj؀ät9˔8if4~PCb2i0>fD6 U|L`4+N F`3JG{,CĆ+Ey{Q5ʄG?qxԃqIW$yuwGaXC(u=-I򢠡µ;;(iM l&ΡÖ-ƭ#h'yuV7rPI_gwkCIw5kFҖH<0A2 %-A%`%Xh\׭a r/̷a/ Kt -PؔLHq sM^dT2DTe (!D`Je޵4@!"N6$@l@zW#J!t r|3Fէ v}iMG?& F"&F.f_k8L]۫dA}>7hk`ۓo꜆vP706ϛvf0hlP 3&R:+K]^rb.+7d[N@ RPN;W#)rvEKԘ#Ϩ2*3C3y@~>t Jg|NqC:fM_K4MHl4 YC4b^$]BhM(1;!s;( }˺ ]]eNHͤTIwPn>n A@_ywj&23-efebFLqkEI$\x 9Q^/&XQCxU 9,c©5dd!MNYx\$3,['tFm;<Q<G>wKt+x{=!~N[ P ((3[* lw rz[^,YWy}ʬr+'v,7›ݝ W͞ oeK"P=vXs2:R5>Dz3GvyKwo% pYrVzC?@+8m&TǣwQՎdJq endstream endobj 3005 0 obj << /Length 1403 /Filter /FlateDecode >> stream xXn6}W2"ERd>lEhS/YP"BG8ٯPnKA ppx^`!T,.󓠛6 38p[@jj,νQ,}JęR*.'8ZW?e<OQ,<.(!5"I$>kL:4íB -|BҼj%^6/qX#/_g>5 "{o aS4Du)"t0*/><͗Oع x}#fG=]9"-q27)nw6}$̌!SL^$Da8#qEDŽ!<TSqjJMW36^h߰1K {[Y!JqhQZbI"͗.+*̾6ַ͒q/n5Zi=_jDvcJ ܪtmtr :&"4i+b!1\"FZg3T3Ul%e۸8?)Sk?bpy~6 ufK^c'i:- s ܼ=!)ec`UEڭXU\᭜;l#FlEݨ8qӘHi4. [`A!Q(K)s(@8׺S/&%/ew+60(26f 9g{-ӱF~gكYyz*xO9 иsx\`b9+TT]7pL5\R&#whf?tI(JY'۸1J5mUފ]k "yK?.mOejl{ 0&6l;Pg`+dNzhx:X$vLs`ź,jJvXu;oYA(:%7qWp"<^gLYiWӫ*ةݓ*2;6pwj_LǛJh;^\[* i7:w;ޘ0W5-]CV?j/ ''H~Ψbm,%|\U,2"̦ױ"Jʔo?y1M(S?=1닾2sC ]Znz`"]GXEl;@Ze3I3R=39ش -/tΎ!ج ϫ"v}VB[.SVs3殍\xijl`;8`2ֶfBzo1}~ } D &GDv endstream endobj 3008 0 obj << /Length 1198 /Filter /FlateDecode >> stream xXQo6~ϯ[e DR{؆uȀ.E᷶M*d)xޯߑGY#MPY, g $l lu7߮['7BhH0嶯j}~٩{sEw78^ou/X0T?-uy:T0#x('!b#' #"%4/DV&lcvƹq\J&c$[mv%DJR!ݳB/5})& VG@D}QJL[鏡N1MT{ًX$TP3 p(x8PUfYRVxN"NbOT^qi`K2vvYs(M+Q@nƁsB+.f_'ݵJVQ*3ɨ ,aI<`8 t$LŲ֨/~" ֎/2KeI w?2$r'r1N\t@Ws 5*? %n\ﵓ2@[S4*Ϗ8C-SH{eUf$3)G\KRAs۵Q̃O뷷p!R]m0*68Uykw-+k.a_c5ڻK[V! 48TN9zJÂ6X|RoƟ޳R<.'0+AެXhe(iGqnh@i!p5W=d&+ !ؐ`P1`XU&}Azlm Yzfèe};P^0|bqHnw;w))z]*\Kd'pkx2|N'[LU778Jn7{˿U9}B ab{3!fÃ-a.JH)5ʗljf endstream endobj 3011 0 obj << /Length 1577 /Filter /FlateDecode >> stream xXY6~_GX"uC4m KZUȒ!ɻᐺd7@SpoF+?*"t=^qKmޭhqp|!0#ί7W_z%8x&VXfz840 }W?"µٛT[eknf_|vy^*W"bsũb"R^$zX]~SV6/5)˒U(#tLH[:íeZK<SsDc.g4:.1h/R |rŤo~[$Rl$I, 8+^P1oi>ykh bt4B1F(EA:mS#UѴ*ceU3u2x? hȔ.^p5gB@QXXD jQBKߙ7\>7,Jtۼ{ 2:8c3M޼+%qCˇc)$K/xl 6UuecC3]^G MQ!%DB.dqe{%.)?\\S)d ]^UsrE LpQCZT$l7?w1>E-A3skwHLo C s$=/zޒ7cKC7T4˂ Vxn>[`C1Q:rUeP|l^[$q҃e۵ Оn/|K~yvYǝH $!32&N,,m}1%s&T6ͫks* G;0)/޵uoDe'X9f(|:jJg\AnYsH>7Ρ.bUtwY.}Jsu禂PN. Xxp$Rugj3+Qvw7%F 0{zc\ )7 x+.ӆ5g̱+(e`Js|"X4gOQ0bՁ!$1g\igȏ}9yDKPTMJoqƾzt$ȘAVtt%62vV:B5fJ7fq M3*$4f*bvȿ50IOg=- endstream endobj 3014 0 obj << /Length 1673 /Filter /FlateDecode >> stream xYKoFWH^ȡm"EK--h>HjU,7/( jv8of]Y?xV3I)*g]mgge I|qop}Uey&(1Os}4#B<$O_qRNȉarϛ'C2gBQf\+/W{4)<,׺5VM}JB2B)|BwQ$ Ήٔ]W-G8SuhmX!F~络1+"6\~ԨIL AQ# ym±pbiLW 9~D񤧄|pVwQ5JFr\ߦVQ3,PZ'-.}x1U+f9ʼn3 j};ZL}BAD0.P! 9K8Sc'dY6:_jv~ֈyW7PEsRjbeio/VL,sKn% M@6[ZF̹"z)3@/jsSԶF/j(ma7z7oYsv`q bFyyX[|ntdK{x≷Ń\VwyX;F&_2zbQbᒏ= C4t1>HJ rՙG}5V#Տ9((z7*h(a7>uQBEڠTlc#'H>#p>ԝQQ7X_>ik*w *).d.zBL % 3gV1ѕQJ' F АoJWu< _1 _Yt!+_OQJlŌ[0Bi$Tf $cg2f@\@\:f9HW@t4\EYB#Hc'*8vKT@^v~!+=I1$żMK…b_WWthHY|lTT2&†KmUj0 YmlNnKE=@<(.C-ʿ$zfr$(QbHjϵ22!2ZQZfvVdõ!:SiLK}fp^r%Wrh82˛5Mr+38=*IgA%1u@" UI.cl dqڼ^mכG]-'CC3Q^m 'ZlRݍ^5 pͣ(rc٭xI ~ST.?7iا$_WM燻3vè5zcZ0G 5^Đyky xMsU79ȑ;:ŸJ,]gzȓxhxȫV5ձk:{9'(2^|R㏵?U;wE^Y#0f}p @ RI@J_toGs<'`03ML#_l?'u9sw caZD?gq~k endstream endobj 3017 0 obj << /Length 2002 /Filter /FlateDecode >> stream xYKoFWV*rHHѦEj@KT"wfgX)€󛙕\'iI dF/} 4Lr;rx|wڼ^Ad2~}Im^:_T0J.^eU!cLD#6a~$XgmQxT* c (aw$>ϷUhnK-Бl 6y9 5v B߅RD`m%Y P¦"ȗ"%e:I@"m缽ܼJZNX7D1MgAxփfv ]> BQ8=ut[q`2#_}wJ8d8ǔEdL9Et?88%Dٿrá.oU49F/ I{&N QB]i:χ"`|]mRl}r۪"Ik%wyUHC:~pÂxZ{dN&PCXDͨ.{8WDhoWS "f&*}">C1;R4&Fp a2F̀/.xi"^@wA@'f^dhEz0/9yQ0k2)Gp /$ `Z#.ŊfԢ 0/$NMqL5:u_خ3:Xg%!+$;z[l~\)BLNp-꼪tJ>zDBE30)j~p閆u pBkWM\ہan?͝Q"RTmDkC')g!qq^c0,HF6 Rq3ՏGe` Gൽsqf=lʆx ݕQo]j 3WCArb$^|E=9ZC.a HwHvYM㊟/uۚ m(UQW8fLcSu!?@ qZڸ+GC jwxfM$B};O4*W:.|Oz9:Er u[bjv9)ݖ\$c;ievwT[j!p\ԬX ?C82NQUol [ 66~6i {ᳮKN]ji"F=˧?MYƛ?}A? _ endstream endobj 3021 0 obj << /Length 1757 /Filter /FlateDecode >> stream xY[o6~ϯdx8`ݭȆC"˵Z2$9YEB ɲ R:Gǫ_/~HK0'^(q JLD @ 'LBHnpI@&ɦ]<+>`}k99 !pD"DpmVUp6G큢@ray ! 6Z*{I'i]:Ӝ,Ʉ#Z^ 0Rd|׆Z yo> stream xYKo6W,zXE)EvnHR8>pWWVj$rg ER3Ù|t]B!Id= Lo}ƛOD4x8_ЀAJU8mQK.(џ'FZY,\~b+:=y [А`5/N"BK#<%_W~t u 4֩qtc8!ew;e]K[SjTmX+8w_]a%T&YF-?qաM2|?V\keRջp!X\ND>j% aTrRB QB6yU4f̬fڌ࿡NvUШSjA{Khsey4țJ:B€[ʡ s pchya%0K[J/!{ _d^Tّ~pLtMq@4<}rxHQSe]O]rC2ְApclǯdS536QdiQzg.L`n2o_Wk~oYUhه+ݕ-.E'@n-, DVIh@tz 넃3T`Z Iyyh̜ K씃!š̥q@=:R!=wvA4^^XQpN-)l RuHuQ!n&$Lmt>wT,GiĬ3>.KA|M&Gr\^`6̛~ Oq(̏Ob?poG(`V7}tQF楝sBYrrz3U. TPv>_Wh2!W{9.~h 9f2@SYMfH{!1|{ Md G7Rkẍ́t:NMfڃ> stream xYKo7W^(gF{i ɡ,TN~JHڄu "ryp^sjRȩ F吭QNԐe\Rfՠ8aA 8$+5FpPlBL4XKNXS*٩fbDDP@ĩH֜UűrPrT9b*9VӪeȵ :;aNm攡<VZ NpIB._CB{Wve `悱Vrr kh6 nQ9sL3)@ }r84{TMAB0~/BF{!),;Õ٠!N+4f.pdsGWSp>ڂagl .I 0L&Cų EáBqp .@``3BDbH16-: E+C6%e-*e/)saLu>&.08z#gʃ}D.xyX]QY%i0^r= #aY#M'!3Klt׬'ߪL-6l1;ms:1ޭ~ybxǾG߅񞛖0F\@ ~X촉kdeS@\bjzu|Đ91_8@X, +FMR+؋f>=1 *H:'7Ugh ~q%Y@*JGڀf![1f$Paܿ'bV"9udJQTKL+ra0 !­D:y1d3$FکNQgv2'BkT@i-T@9pfҜo/L#'Z)9]r HIJ%-pc$rr,w _GnD{/i)_Ϛ Fv7!^o6?" endstream endobj 3031 0 obj << /Length 2212 /Filter /FlateDecode >> stream x]۸= TR"vҢ"[.Zؒ! gHKvšX`% EZ.E!YD+adzz!ETB.6!n!xs(Ͻia$Az*տٛ[ 4"Z~_7J߉ Dc\E2Q$^ő."U,CA_M\@_T%@cBMUM<*EQR៦?4M>ҦQuB%X1tH!u`W (#bYGy\ (9C)Q^HjBY2R`ċhmߴ`5"禪#dlC#30pGNn"Cx`PW q[!zG), vmWuU">>NKG6F;HtT)CQ V랫0/hݶԴkBvcMOo{|^0Qnc\+=/69U_+,ʇxN8KٴNwst$}bTft@( ~J # co<Qɗ /=c='ȃO+V$W RF+PF){B:2|Y#sMX Lqլd2c i2>Lp 8@hU'83U6|޶vEʿo#NT#Or2}\@?3uǝ@fr÷eZcœ::q>U0'tr5 3}JI 6l˝sDmx;\d䠠x6'6sL}"A=nx}2`WE΃-L4ֺ5`ta1:?Յk`1JK S+D+?рApy"JgZnjJoid4Y5j4]k#~P1~?O6;YӈƐ~ZaOlFU펛f_zQ{~Mt,*˸'[[uRqdZp^P#vp+f'b.T Y  aJߛD<ޙƶrGaO+|޼`OrߩgZpcM몯Q֨îoAMN`N*tdY:TW6cB^ຎ>Otz;Nue=Ϗ f=55zS]?U4mNޏ)<4Om,b9 7DqC_Ň]EK嶯f% 㢹Їv~ zi0n}s,\ n4Cq$yq9=dX ){CsO Bfegbno(3}ɎÀZ/s3/!Rnuq(irh!MRo9w1]DX\sH V 2\ P| )ʼn;V+o.l|GyM[tΦ@ǎ 6ym<5zzdWٌCZ]sixs:HN4Ŧaos̩]jKV"״րꧪ6`d?Uȇ9{[$) ltNL*F!LDIG=l p# PKo pie!pO8ga0XRȡeͮ3kv&^ŵ5{BzX2om)VHW9>wd.`Z_p̐3c>];o_*.\/}ӞJwI46ř endstream endobj 3037 0 obj << /Length 2276 /Filter /FlateDecode >> stream xYKsFW|<6YǕ$v$k]H@@q][<JrZ랞lA ]DBDƋl{Fuos0Wg[d7Wg_}ԂQЄ-[]tr%⯗+)U7ߛ.o*˗+?^^ *Οg Bƒ0! prBtmn\D$+. ?ݦ)`}c HE+fNȧsB£Q;>,&j/Br$LT=Uw$\_Nϓ~ҹo*UF!mZn*$2?b>Kˬ (Md[qHY0e&WTkcnkEXZ]jZY!td`~+naT6dE1' W,$M/X(_V.QףLګ^~{eVBW}n{#1Ŵ]ۼB< WJń+`45YSl0(P3mvVh;3PߙnMbJJVLk`U׸fV۫٥f*C WJ))E)%igh) (5~kq*pkۗ]=6q ]l@5lEI'CxւEk fBaF` fh"1X6D$fr",8p}CkW8Ghg˜XDI q+,xk%d3on1ػn~XeȈ`o}Dz\h!\%0߇%**drҔ\`;XU>Jqwrqku)3k˚˚wH/2O1t2$i$O\D+~v7w Ql lG[xkC䥟 OAG]db فY/Ϳ{_M/ޣbbzg$+U~yq S!`ߣ~ $Cǧ7tFS9F e2*geq9NkǤabx^F"L0IkrgKNqzY$G ~>lOdCSr@)ۅzo܅،8{K畝fM⬏14xڣKӾa`Pal;^o+0KǛ> dg* 7=LDwGơp al%p}z?N4xEJ[#~칽M}X%NpjSz$DǛP%f}iflzLC;ODE./)l (Kz3e\p:4`+i_?8.yb mѴ/cbgN]k'@S 3zkqj+{&릸/|0/NÒi'` ؤJkiu.Y]~*""njԽF@LJŝ9 @?%BSos(Z|*҃դ(wd0n"aKJLL-6-],:fň4 \09sK]oy?*4s;>&z{Qxk*8UCg1o4n} M=Kvx$2& 68N:mDj endstream endobj 3041 0 obj << /Length 1876 /Filter /FlateDecode >> stream xYYoF~[) b}Hk<Irwfgܥv rvf8ηĬHfRq,݌W? [㼸>Gcf"덯z={]n]J(>_hm__ܔmYBI"!~?j|uy`^.gB 楹d^ ʨ[ܖߵ+u_%Z4Sy\d30;DA^,m- 3!B JxRR)E"鹞MQz Q&. Cy{&1ɔ!:cқ8s1e *mSY[:Mabaq\1X:"2k_ Ũ>x(` !Hʣ̢O4.ݾw,-]"{gnyǤsF˶>lrwӽ-N`wn`ȋ&-<٦]mED-w冾Lٔ<.-eĮ\uL5}ۭ%sn+[$J^( :sv`u ?d5eQ -w}PħO=ݸA ֌l$@ڹWKf/۶hz}-x)2 80y$>zMeb4[?f0O@Ғ{TD]7Qe՗PaI\ jGk0ӬID$CSh>p64E%g݅'R,VTi@!ƒven97FS`!}F'8H,JwkK% }|XݞV4m 2\XtS9D!X>X^r cx=Ϫ#5^F` Z==찕@ 7j> stream xY[o6~ϯ[d ěDCҭCd`/mUR*ɺ_sDJ*vbk@#Q!;,tFs 5[lOv_Op0䧷RhD(Pr>x]Cy^C!dp;3pWBC2 (K;T2vp)6Dp>{X B0SCn6ԺY"(cR$Mf!c$Hyu :`.gTJB*͜ Ą%q7O edPFnJsX7#(di5_hw"HeC$#a|JJ\PB J3Oݘ36Gp9 $]ܖۻ]kXZC2#Sss#v&0"^ipXXn7^j" 4Íyƚ;?*jrWw([P"lC# /k3Uv]k]k0[㹑ܬf(ͳbh$M͹tui:tb$1zM a'#adQh&ˋ5ca{c=xolaLHWVC?_X rɣ ȄܫF y 7~)]D+1[Wӯ[UY _ <Cp Q 2Nw 9z;rsT T۔ 0KC$aǀ3o99 Μə=:qw`6/TvwޅsfGviU|IXqC!@=m6fESVT4xXCp Vox;^E"MAjمt0N}ZxSF MuhCICq[^F%ݹrU$Ƞ|0G05f^]:&h}}x>˛O>I.Le+sRz)=R,(,c":|1Uj2IVW;5콍0O޼b{Z0-m8rw t3n{X6^]m̐f|XfOh-Np짙Sکˬm˝)/¯ pWCrVwpnȳ`_UYSfcx;sґ=Kv-;< +CxwmN[hǁJj7P+)e u-?hszں[pi* b@r퇁!m0SemLzd=X{1Dr2Sv8<1,xPD~DYx64]F=RD J,?Xapa#J71+:Ē=;:xu3#CDP{ uD7gU;&<8Hz2/~m/zl;\=,:PFIA5bpN]'> stream xَ]_1o6} Nl% `9\g 9SUFUcfrßd&UJdmCۻ -};ظ[͋o_LnnKT7/_/N);M?_my(۲..đLf"j'ؓ N 4q}quAGFi_VV7rI$%%Oi87Xoqw|d%FT'WMM4U i+ V/E>=Uw=,ߵqmIYu{meB%Ց@*iCTT4:1%rOԠmp7®\01(Gq>[@pgI#?nq0t=rW3\cQĸ6DeŒyO}SK3&9~".b7GEEs|!OyajEATz+Xi9D/B%ګ=s@H.?#~_e78TӍha0<`⺹?Cmtvadm&"cSD$6]=@e#>|JR@B.HɄUF`[: uHRIE~쏍77:dAb@O9ͻ#d<%?[(/91x7_cHkP*dh$, !p$CLrg}ptB!KBk,CWM )úSRX/X΄JP2}JDc(u x?ը1&恡.ΚЙZ%SضMw}xUf(LR.Q@.g>mv?WK!wimꢻ#iq(S2"vɔS;wH} RtrUʢYe[ʂ̔2&7W^/f7)}Ӿ7``b5m2e6*mU2CYɧ)?^ggYd{wS!sR\HW7г>d&Yst=!Z6)EB@2<$N垑l;2B)$(\1=p'7GuT_~9gqOk2=3$h2m-> XiKE3sSS߰ V7r0T3JpW]meB3M ˲Νwц(Xs\]>AJ.%38le &r9Cg" $:z/Yᴧ }-ߏ ;5|K]ބd<7.Rt:8|b9VzSRG?I? "i1˅O9 N]{q`u\/o%A #ͻg1憘H~Gҏ^yBm[?baԖ"(>trKCӖ+cpGq5!ڥ`\;p,Ttһ&b>sSZ?C;ZU7tF 0Ƽts ◤/BI~JLM]2ALM'HEמr=ۚH[ϛLS;s"ی6WKHǛG HHY3mVDenM;eXR}; (2B,Y-'M*ZohJAo0N]>v}Vj?:ʹ580t!w|&\*BsLPzJcPʉS9}ϧq!4w? ǔw?xc@pCaӰ'9y֗玗Vҏ?հh-AV2jȿL`.X.SU7~KoM$SOKyLO>-?m Wq\L:悠 D׎!QWJnRʳxQE@Pźg1JӢó}~N}ԌhRw蕺a"]Dy{ź endstream endobj 3051 0 obj << /Length 2464 /Filter /FlateDecode >> stream xڭYݏ_!%ppw.ີɃciLFEQ{R/{1 ztHy)^4OD$( I/7MS7ͪmi|F5 c6R ҇@(v}wE]SW5ʒL/|bwZ9M5~TT=rW2 p72]RVyjLۗ/IW:& |]6*"4)inyǬm͖:Cs,eu0]ݰIidudݤ="v>[|#LkzuCѶ@q2$Dž# J՜e}OlV0Pk`/rG|,^|]W 7h #^ѱGH+u߽d Kav.-LI>$ f?ޑ"+ A".VcwmIU ǐa%xn dc`9K)meo1D{Moj͟0okv }UWzGt|Cy{XӨb|h+ޢ" hGPpZa0£uBRS8&g xӘo*m4C = &nsOJ).Mip0'@NK+tq|!HihX]@u`h~R1?N`p*j>EM;;NY4.JQ1XaԧX*lmH5O2,Y&v 'R ?]|wL;7}(0 uq`6pDc LGjӋζ\,IRxe 9ts=J}&N|H7C&BɅ-%MFA&tJdB(a{pZ `zA6P( Q-[p H{){lj_/VUQiXD)M$T2.HϦ=$:ܾqiDXR Bts#vV ؟\ |uYQqɂL[ƒ@ƣ wv"dg?a Ÿ',v[[?z}5{5'.ڙ՝ٍejIo>XWmv0Ӧ}AzM8ZWHt_43W%X̷Ӎqb#OG=KnDw4T:`}0o "ut\s}NG^m8>C)BZErf;YI{ُL/.\V ye\7,g'hrY <Hue<']Khio  TD}G<F!ϔzv +UqN&} xt0TPian(fgΣn/,^7 e Ĉ 9$6N2+ۚ&ӫ>0qkAbء> ˆnȞ0 ۱7ZU C߿/x8FP,e7_^\"W'KyXƈAӋvm{ ?Hnq+Ӊc'(4R7Ǜ8f2tn{C endstream endobj 3054 0 obj << /Length 2111 /Filter /FlateDecode >> stream xkܶzDGH$pP7`pDJpenhpf8or&?ɂM,Mq|hhwϸ_`ًeA7%!om0 EpSucx< xT DsxGB#y2;|6&ƾѥd.YNtk5a85J:ީW{h=88`ߞ AʞPr%@%6 WmYq@a V]Q#@1 jgjLohfqۜfO2J8<ԪHG~ 4c9h\.#W6ƁS٨U  9j+ bX"$FRfk0)pHqOUy-S_ƥJɯ^V&hlwm^( tiJ`Ĕ%91cayR4DL;l>HE\f7Zr!)1w99:A[f;hD?4p݄W,kG3~E.=z@[ gk,7b/R&KUƑx<(ϸu~T50Xs9RO5KPt)Kw 0@&Ǧ3Wo槿A;/e|;[#nM;3c d=؎.7/˾`uº -}y+#cvڮa: 26?\[1xD?GoJ}_srC.mw]7ǔE#ZN76wZISF"Iu$^K.(M tQ ){хDnqEg }oDus4p"ܑOio.h7y?ʀ 8mSԕA>M:$'8*CXYe= kD3&'ER ڿ<W6H][-LK WrpT;f2>P4^uXqR4X_Rv%-Q v ݃v ,A䩓K j^Ȋdrۭ%& [3ꤽpv'ʑ<ʫ *rru/AhJT1SB \u 87z:}¥BOV6׻@~Dlh J5 sϠS,AGN k;B`QIJMyIiE6:T3Z~ꮕZwn3t+J]V% L$RY+ۄ~lb'|´$RzP]palO(wg R͡?`#;{WRԔתw1$8z4&pEi\\t)4?mLbڙ.9 ɟ s ڜ8ږX7.% . \{.5NWƀfǝEԟXms5ϐ`~,s+}]!JXM.w]S9C,Bhq߿n`p[;$7ԋ;D KU`6Ln9(FB^;h@0 -\,F?>?UxCϒRuiZ 6PO/ endstream endobj 3057 0 obj << /Length 2048 /Filter /FlateDecode >> stream xYY6~_aa#c,$Eoc^<2mkV5ݝ_UY`A-ŪbHS\n0ym+Fӆ{n_}67J\jxz;tMy>'b;6 cg4O=6'=jTV ]86N{UkӏVR1UVGJ`hÞE {ѯ,78/Rmv**f5TG~pn}?Y.T>Ί;&ݩTp=U̕fAt]Q:S: ^㶖5ueT9C`lgRcOkә?,sxy04׃u6GCJC3e26MekMUgEoUY&Z mjK. /⒚EsW[*8¨0(R]ѦVomMgS$Am*(,2…ƴX)2ZĐ!,JmL@#+jbƞ[ï(Jqx^x:SK%q5$rRX=ׄ# "Nj5Qdteaϙ(W{vU8{3 PË~a-tØJYaeY%Rْ|9Sx7mլx́EpA>ԩ.\TrǶ[De0nrܾ"catF~ҍ$5 !lT9jS-?]u,ru_:tG(Se< >vQp(Յ>Iٜ<{ݭNPKí>pd" w1$yŸ&Jh.}] fw& "ɴ<`[Jf]?JTB ;K$^r:Nu3]_atcOVٺzQH:E1pricCË9>G3^gl+?:Jl,bWd^W]ʚ7`L.zzɒq]9T?+#6F9$.G]9v#lTJ>K'4sd.?4+ '0 5/K,K<0EPie;fBC`ˡ# quZ4HٲQHO( $"γ[kB޹Y \޲J,n +M/5< endstream endobj 3061 0 obj << /Length 2310 /Filter /FlateDecode >> stream xYK۸W);T{(hE*O7A=N吚!4Jl""dJEoӫw|+t; -(p]lDQ!6%}yt).'}Խn+4M@(/t;HB &P$ _ASe`ߊ@>跮yD->P7ެqPKoql[h* )0i|r+ -UKD["+#NeJ衶ȢN\haZH553Or0*tXǾ;!.]..Bߌ1`^ǎ7"s$JYm`hjp?aA.T%^E}p*IF}Y6,#vM]hhEMҠ:`bm a[Dp\8xeϴ8<-yS@F[4b74K04woL،糵o b v=K@c<>h}cpuG{& ޓ-V!"(_`nlFagյg(n\35<jz]d[‰蠸¹aЩtӀµw e|w}] V%$]LKrmw:CpMPJ2+t٘Fu[5zq#X=0!=---q艚I{'\5P,x0{֧sOi"9JS 5[p315S$߃l2 \3FKqRKGUj83sXgaRԞpb-%,fa/<ǎwF;ӊM2Z~ 2 <8Ɛu>kLr8AUI*Qs  )3i&u%]gh5KY5]l0ΜFўt:YfJ=1gPuwO e6yҚ; >+|O] o*BJA%OM]k%V!p5.)x$&Py LbogM۹2<~-F&3<|_}TJ1g'Ԝ ag/>zXcն_I^'sBׂ)O!1na7ii[rlW[iu1Ygc%]3.Ptybe= ,*;.=tSc;澔qA(3Ԝ?[67S%NrύbG3J1YaB"&_O^0%x⻩ -{K?V=?ֱ*v5dx:ׅp}`!] 0v#Ǚ| "K> stream xڍRM0Wh01{kjUp%·BD@)vYUWHf<Ǜ10>`d9(eB^ݞbzX.h@B}r˞;KRD1IoX|S$͌ђb)/>:]d=+,3V @Eh{P!6zם'ڛ 3Ӫλޟ<˟% 6Xi}5`$<&_r8VI+񑰦+ ,Drp{0ckً0x2[Ө ImǶ[+Wf릭,$ 4 wUqvm7#jkNQ(e> stream xڕVKo6W(K4iI&ZׄwDȿ 6H f(?U<*d*týv8DtF ӕk *^hiY.%޾Tɷ͟%β_̉Y$ 0)AW%γmNK1 Yc9I* nBeE'ֶF#e|tv&)Ɋ% Fu'n!b<>O8>=IEaRPJRd<H!IDme|1y@a)P]M)ca?yoLJv ac[+ҽOvw`V'3bs]"x2ty\ mBHIIV\ Cj}upEZxTSչZWJ%l+ZdqQQaofh[=52gUYnGiGcy#x!QaphQz28K ׍`&.gOmCtDM驙qL0fCUEӭ8ǰw&Z )#Zak6lڱG}djw3%+łK/w}㎇5(zVcav#F .?%`\}B0S]c Ex$xa/ƭ2%(L0]\QG|J̀ma $j%@H> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 3089 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 3091 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 3095 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 3099 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 3028 0 obj << /Type /ObjStm /N 100 /First 976 /Length 2896 /Filter /FlateDecode >> stream xZ[o~]1}Ih@dO@6qċc_X_qVBGHqKwL0-gRYdxVLCcZW9EaFhZhӘs\ ൊym{IّhcSKHPD ڧiI,(K]I;JP`IE *`|P$ҐdHڡO)Rؐt2chL8# HDрjA]  a(hRQL>*!$ab 8"֊fN+ }d2cN`3" %QX5`Y: 1HP>V0‘pcLNBbF;00E,E! L 7YPVY2.bxGь&*EFc fE`td( @|&Q*Z2cs̉K Ҡ"V\Ef#4X~FȩIFL2 DA"yX^ CC$%%e>-~d|[hr6N2Cv*c-;cvj-9DB"-5JX<;cƏ180~ze1_nWo-oq JoOPD7]yX~ɇ?{?>nd],(uEDhdD q29'dFI Q=!7 Az:DdsTnw3~\~^;l_-**`2씣\S~2d u=lTIX09) M3#T̨E*;w;9SGX8O|+Llgt؁O a )#/jZ;@<ΦE{^wܾmpT𫵩޵rb¥¡V {0Y% c3#6 FFD Kb.d򿐼fIi[VNռ". o0*81cԚ1s:߃s͌">ȈCjfFʆڍanxhZmUhf4 NZԱʳH{i,]ٛe w:p.2v*c) 7̨C,͌J)kA@u.98[zn09Ôu͌ڛx.cA1fFitacܸl~ѹܒJc4nJs*ѽif^NfF<.?rf%%ɭ[uq_QP)Eiija{L^[WP!q\\f.։pkц[YSZްўzͼ>Ìt{c֩KH[8Vq6zEzydhYȊzD)sWY"H+2_M>ĝ=qlڏ-,i)E6[TSʙDOS,Qԏxѐ*)3SqOQ8"ReYr;漪:3&2SRD!D7[5LR' 5]NSiN`\JHkg9w0IaŜ)Cmn.IZnV',4b {EQ(PRŪn~QuZc5ni:Hջ&Aε*Eء"]s;}cN5s+zJ~2K͖q43&UvilG:6PQvHm4*f1!?+[ENqF;58"BAT&ktgAڛI( RVS f8Ti<3+يy*Bكű$J/HLFxh 9j+i jILDzN-:oyɜS봔z5fytyOyE~s{{!笣!J(i_L[-t+`"$ӛ~ztA_z5dbˤgSIQwkN[Ii,ВZzζz0JYENʜy)1x'z[AG;|"8bЩ̭ s_:u4Y(cTSo5R#'{%͛qcI|,#骥K3^U #޿y?O_>ň$Oy$~EovFzKL?m_݋K< =4?nEd4.CPhj2.Cz- ?kG}^ =>c׬.$kV6|t|"r&%6,>q; w3{| (^&0+8; X9@I' ]}-d._3 hnrv QQ@_˒ wn7A^BLB̄]h?fW5ÝaRĤ;OI+H˩I=IndRCvZ$6Rŕl'Cʊvg2.y hs3l|.ǽxJSL LgpuFNwa9fU^G_&/uz*(>כKdLIDe=!7O/r4B/ ˊh|vzFһ/S<:h܌7۔8+gr&FMLc!7~v|eꦦb> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 3104 0 obj << /Length1 1474 /Length2 6583 /Length3 0 /Length 7589 /Filter /FlateDecode >> stream xڍxT6E:WIB$ދ&M#һRH EtT/9s[Y+y<̞NVt @p{2(hy !H(o;1$ClvHQ {B~ ~Q >>D@ h00YqtBdrvȹ= @;@vE @lH7 ^^ooo;WQ A:U2@Wi?vBB@?c75oP G@~0(/>PCtA"4C` s_%5l";;_n{c Q!ɜ6Z]3HibB2 W/EFKHe-MQD\qOu1FAm6:R(Ҵ|#o6z,:R (؆<Ȳ!GƣSshlzT͋QNćYo&vfl6~<&Vd(V5% )| 58ouh:oq))fӨ}]^@J:).Q"cHUn1L`ƃЄ X(ڷ`zGR]G~K0e^˟xMuDLiôZc̄V΢ZH̒fFLu5o6lZUVU3)}vwxR .h(d&M`IȂ+RXk;Sη?)䌆(\YJKzp#z99i^Be9Vb_nYUFmEhT M%2݋=$?m&ݣ'Yl*edl|h'Yu&x j"WS.Yϰh2@m~1W[Ttz:ei.KƪoM9X^ %yzNxTӲ6\#yD. m9+]klRڐ R0G2]Pa#]zHf5_&[kd)V J#}˚bd)+ekɨLK~_f-͍c6BԋpRjIB&[*l},k^̡- @Wު@Otzk0n ~T}dgg$N73FfXG8* ~%kKQSmшrёԙh~s7 wk;4^~Ib`B7M2%Hd5u_&Y8˸\MՒmgMY_q9疀fK rhrcаM\T ʇ@2L1#.]M(?ޑu_Y?`[g&Cю?F p OR!D:Y@ZҢ=gPrq]_R#0T9 Z}|$Ƶ*8'jAWaKpQE$ !NAU#et΀ZV㙓8P0 ~+6R?TY+FLlz3ꢎx4{#Zc q}[S:pk67r&77|fzN$nL01UD H*u(BvY~@w.[aL= c⣝Pk,&%;.:$6n=]r/uTJ9K9ӖsGaJ0o2-?+ NqT<~c|FI!ܹ@ǹ.+N{'jPE#=s &]n㴓Y*6 ?a|hh<𣧠bxbB4O ~ 1/mhXq/y_ ?KsoMF3lg_86+}/<6!7\' Rх}yLÓ0N~ȰįQPRU51GYv=9i߮Do/bybA/__ Gii)}KusQ*Zu3 La8s|1ڵ-=ؑ#~E}yx*]$'?y;_]ETZ PS%&VQ9EË{3$KcG֊c g-= 'We>&l0ixy= u=#ۋ?)K ƁG&UV*J@Da(L4 ~QfM<44C#|EH8tƇ`|'jnBݐYWChxlmzfT`ٺnBڔkdXv JAhr8esL L c߫]Z&a"7^vF]00Y אcZ +`dʞ|vԍWbۨe^!.cУcA;lWqxrzd\tx;kԟd@@vb+JL½3hZ{wK%@/ֲ<:j;(Pw#Ȍu67vj y69$Eu3lsKii5Gx4 _*~Fk4G{zP :ktpr?(4zNѕ.cXTgUǔYXL-lttKfƝ}Pv|{KnWU53UZ{vAA}k*B.L2UNeNq|']aVjƾX(TјunhTً Q=6[r}tfzu[!Է:kG&@Da8!$.EvgpOuQg{ ^k{K&yZ+2sI ZV$L$x'GgaKbEӧލ-3%K]S)`0,kFP|0|*5iMpÛ-TMFFW5A'FΣt_q}vr`f(~xn(I~'(x6@'θ[/} #ǫsBPLzx;o2O-669粆ttդ~ bw n6W0}-'I~r$Xx}%II7״qFW۟p U<׍GƳ&5ve|TܜGPXy͙Y 8/ZY롏<ԙOq%X}|Wߢr" Oְjy7DǑZπl:Ȩ 2l!:h̊➊m"2<×V F[=OE6N=b XBnynfڷ䁜Jݜ2C¥1,PsV] ]5m d|2pY@բStwNׇyD=^i/iAK9BAhiG4'HV 8hݱ&6n6(^̿4޵o4սD3(l̋p7ll>g2}κDՌoŏ/&K[%T ~搿'X k`j^U ܻ-Gf6,[\V=8$_fTm:/NVqwovlO^$|SYk1WC^BGY+E-leY85cIk1{eL>'|;YD\!3@*Ibp( ǨԈ9a ;73# K4ĘVžsN<醈knE :lV#={Av鬉^\y$p gÖ#| ?Ƚc;:Ä 2#/Ŗ?R?Y D8fS{JͶVmw)J3ۋV@X|ڎd+?er 1:=7,zޣo1f_z3H/ kHxa=*L6NRkwb"w;1z)77s\ ?ֺ,5K9#{n.ZͲز=`73ñH˭>f^77=W} 2SVjue_>m车>?58_pЈWBփy4,El_o\R(pmH(dCՁƟ%&[cޥ1u뙴=׹:"ġr L2c^]'K'/Jn 0lXmU9.7Oz4.{ӠSaI|"}j@-%n(gOUet!)XՖ2By;CoX%4l݀dI K6Y4Wq R~gS,Tv5G?%Wu6w-CuGĥ@3@ cUֽc2':u=/\yVjg3lܩQgǑ s|is[ #j8b=۳܁@ptrm}LCJ(%S(Uň翋WͯO |M0EsR\DVpÙ``\gjM #3=PT.qrnr%=)|xo^8}o<R>E+zBΦK8V-7㼳cq7Ȋ.q†X{2R3e< bݱ9 X;OofN >~ݝq НTvK""G\loal0|N4Lƒgf|jtA'B# ?{2 x[W神ݼ 3֕x)z[[bDoB %w v:F47P}u\C {+W y  -'> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 3108 0 obj << /Length1 2881 /Length2 20706 /Length3 0 /Length 22335 /Filter /FlateDecode >> stream xڌP- ~pwwww$n5C  I*`ݽGE$fhvtpcbcfH(ijXY9YYّ4m@#Qi\\mp2IP n`qYYczX W$* G'o+k7p 50ؘJ@7k=89hnrnnN,,@{WfG+a:F5@ rY~ Pڃ) imBv6 WАS86VۀOsllW N@o+":X2ڹ:@;/@\]l\]m~+ R 7W_$m\@{sA6ʰpwbrqvIc!Y\3en+/%/1_'G'% %}T7BbcXؘ@V6H ˿1]lc?#Y8:y6Yt$e)_pq;*x9X:& {3c);=憬\_lߌe$ngohocxn;5J wʹ `eo#m\m@6nb_{fgRutuXYG^.s[ ɿT wF)sG_K Xeo!0;8].H "K7F<߈"_ `,2;E7FE7sQ\~#0E_ F`.ohF`.ڿo\#_;wׅ _9;? 7; пrN_bڸ>_A~g2f@s[W;0s@na[l r/{>  a>@x2GZw4yu['Fɴ3!4CN~6;xZ~-)+%'&dGDNoSCŇbĈDL~O~om!{yT _z~j>6[˭X)V+m,UYkr87&bz3/٫RD$X_u9jMv^|J|WXԾx 1kB tkヤ~c=drXxv.|2,ouPw4L^3XzzJ~2 GpaPWX;R8?ӧ{k6!~A,j李9r>PU;k=7&OKc+CgZgpw>a -2켪Npe#`tRorL] fs,}ݵ2r^ʰ/Ikٓ'*✦¥ ra%<Cї4W#tc,SZS?oRܤ&N5H2Ϲ/u 7&{gc-d)k49f#Aʼqv6Z+Xc+BmT䝃҇rK#AsRZߊ14Ϫg] P 4f#D?ɍtM\LlG+cw}i'ypȇ/4j U|#Y:#on'VUfGF}VFqI_rk!z QmT'ݨgUJHr=Q;`?[;Mj/աexDgrI,{?g"h]G8Q%E~޹~_az*9mlJDf>Y]asF83[j]U_i7JC]M0o]lW7&U4.uaŃ]0s|Qӗ2ӚJ|p&V_<6Pƻ\?Q# m_Ǚ(f3e>ftES3^A6dR%"f kz~mz )b VJ}*2_gHVʔ7 ?đ/AWR^&\$;QYlqј83^3Ty7n?\;!iWJǬ 43qT= l۱f$G #S_1)W-bS&Jn?>E6Vץ2ڇ%<%Hoboȴa.r  Qgِ,z^ᕿ 󐨍VlIԯ0~)B[3T06mNL![AaiޗOMi7x=.~Hc<"AgͷVisFƾ2ǻ MG NV:N>->ʼY|K릎o@L˶#]=gv1zdxpdE+WUhDzdWEE5h:ǃbEGG*V(p6e ̽Rաgetew8%tNhot5Q5>h*&)~D>ŻD[HW>ޭ@^;f" {8!_>dE,oy˧$} _+Bedԏ;4a/7D6*gW : r.bMK="İ|wL|Ѫ$8 ͶFMVGp͎&Gzd]S#`Bqc@]m߱BܟYivKct +srOm*n;Q9/AFxXݟq!{?fL!I~{e&791]f2wuPCahΜ=b֋Tw;Lg=u׍d`W}UHF'3"0fMv/y>!ӑJǕ{q;AD&SX.{DhrGpXK&˜oQ44,`Bѣ< 5+z6 =:єM[7Vf̴H}UD1SPiTN=?qx1.'}17rv~U0Z&,4x"0ֈۻU µ7KRǼ3!K&K\=x֢ 2jՇgg#T! }MHD&Y6\oסԤc=[{\G)np .̨}`35u_y1 $m.I/"1p!8LY9z")_ƶʛnkK M: ) 9h˾uJs=,ަ^'8 yE6\WJM#"ЈN?[N4u" ZĞ%r*L 97:@(2皓u]~Z:`&ZqߵLy*?{?#zWc"΃5` d%aA8=mLMFNM/~YsɌB[oH_|fjBP5ߵEWR0CmJk~TBԺ>L1{ݦ4\tH!Rb1}kN@ar[])Ѱ40d\.8I{zx%Ӌ0IN# Z1Uipיxh|- CLK ~fŒYP<}<4.ra%q _O^ n0̍X8)&NrqiۄJDPx/!&||X֔4'gųݦzԥ;2܎0-KB(ʴ=Z.Fl.'IKuVs!UתﺉϙSAjj>eh$Շ(Fz{nLjvz;+Ю2#7!hwQg⓾2 q=M+t%z\M`DDpD^$%N֬U^in [ [;\߯Rb`&jt+ C!?D =koDe?^ z0UDp=ڇjDsuv>qBBZD+tgU$?p]ñpQrJ4# 8O˃o&6/DQwV{ʔtr)*FJ˸Ai6ިy2ej φ2hwge(+I9$ /]JƹRP)@qzk"uA{vXo+V>&rdž5j Wr1sXRDN[;J#Vgn$5/i-{ wgsxqPMzH6M- ~ .pdg@Ҏ)W_]2 ]&4$>B Ey0}5$c*eRLYUĔc~ƝK;` ƒ;ΐLZŭwcB2,K8X)OgBxdX)r;~r\&*k|2? :oX_x[<-+FPRZE#YL&6@߻!Ҳ|(]0po^1BuIDGA@^GEꙖʛ׮X:xŋB&brSM^YOJ~Q!KnaZ+ısΊ#o./Q3Y}.ܼ'F6V#ѱ&k&Goˆ>=pז(z+EP3H{ E@TVn$Kp&PLQn'@f6ŒFʳ8vc@S%VCJqBGw/yy4Лo*9J-ّ9$$T0F=qGDzfÁI3G|:ZwsJ_p~6_g`.4 5;(tJ`;`nX]%(qtܶ;33\ yT ߸ fn-?* F: lBb^'K|ʊR=xx#h<1R5ɟ'2avw/MNC/H{XT`6|DZdt,-RB>-53L'RO~TTF7@x4z+MYzdQ3΅{1%clz :B׫Zufaq-XZ? ^xfڨ`OヷG`7imik(GX9hs9z8g4. YnO=l|8S n|`[Zmgb[ M\P;!\@Ҙkj"'d!}7aΊ 7%+NhH;rBbd,g8QZg>p4ZM4M:T@JEHW_;4Vb=tD˗rj zWoc1K'EҸܪHJV .^X0k ?@fUQw5lxAP3Tp(i)x⟢6=ҧf&5(N֜~1=i2˥T(I[­FWZfURxQ$ 4ϭ+"HAcr|.qvRO| g mW[$]@[5;5arb5ҨH$ٺIDzr=!5nZ*(8_[#4&w&Q7AQ?p4B׼řcr2.6H(+&j(' h vUcLߪ|޴%£GфƍhW -'\նR|ͻص\Ɵ˼){EV2VFvgZ6ԨY$a5tҽJt?v' _u4pbWq] Nyv},Z*VObwS 7!kJ9tV%p0+tOl~\]+Ir=ԡ{aA65Jը .x)5,CN_@Ta 3mڇ.vۏc#WhY Mx&||4zlI6Sߓ q +=\&/sѣ/2!KLL4P { ֥SJ4auئŋ|MEL,[ZEW}bF@I cbh׍IqD\^v%L!~DąfNi ުl;q EYl3RhaFBqd5,zH됺(U{Ȼ36ive}C rd=l.dFk9mr@] ,z6k#oo0(6[_T3_Ue8ؘ.(>abS!~Nx!D ײkB񴑯X^R=w ͨT M$*A\xv,֮2q AwxcGCOz"KU~KqxW!Z̬=*=~~YIrv~_ʟĊX"lq#K?_ua[ Q@_ cD69:Qi-8x_i۳2*jDm.cܡ!UsN|\`EьiTaՔyhr# .쀡ON{,(7̔; 7h(:-~A) WpqM04kl8iǣ/f4]o>b׌>Kd=ewo DBiq/K?1L/$N1wFeG>_;倢D.{d|:@p2Gf G:. 0adؙ),yL*0uޑlo_#,Z dOyq~vb&@ _H}J<5,'(ZW2c'4=MsTtݩ~J|+z 3mc&rX{Ǫ 2jsFJPvwޜ;jάa= } g 8N|ўnRB9&\? r }BfGxQ h~ rǤW<'Yɛ~Kp.WB>GXK{7m"%GKj])1ߔj?ILK-݊ZV.S+izTh= ./]}&,wFFͽbWoV{_^zzJdu;X>D c037]]4OӑqtvbԢ>Xi솱.mq |6.5& |P *h 61Æ%8we~tiljnSOFhZL䶅8\>.--/lp*'/fF"zDZu"1m&ErW0zG"n= TiI(t|a yW)b_!ٍϗ2Ů[c`ƋAB,z4NTdiXX`Xzq;njGZ!ZfV b#\:ϔvWLԿ- BMz\,yrBa5Sh C_e~R377%rlލ7#0 %{+H[Si!*/\وHhXRw@_NoةVߔol-pM-Ye<ǖ{ Q"Pz8A>GͽYj+.w:W[4AK e:0`! +hh?Ia&%b$CؘjMBΧ!/e9ɠG3d4l+c8+u t)e]"q ϣg9c_R2Pu{kS Z]RX'Ӟ$Me^`I"[&o/T iLaiF^ρR{$Fm[G͹ga^aIz&WEx7e4B(c:2>rE-j-9xzdzr_~o#4w NLBrm3նKA ]K1K1{_%3<:0X7#.>ft`Po!Npc7 O GûeKhjd">6CcStőh5wMKd 몹>j9I (fo80.Yx9>*@&Mu9zX͇rskP'ܮTIǟa Ld_?D5:zgu h9^_5DEñf  u}[beJ0TI*rw}Hnۓ]"m7g{rݧ%לOh! q4u Vݳɴ~a79q!c3ZaOeW:WzgkmA6- GB~zgO p\^`,A#(!ҩGTtUG_]xXJFvgJa6AFʿ:kq+-[{d-h^)Զհ-IۡwU_[B.)4fN)\I=0mk\2l%;oo1D+D wL` %{~z4J!H2 Fa͕ CF=j8d^wI6)e;Kq ߍȜ pwXƯ^06K1tO[@'Nb!uR*b4Kw.2_<^FIlE@懡ۇ _``~e3jw4 - P<q&- 8T=oB&_/e1 {Q-NK0-c`Ay}.zn(gW@獪[bJmLF*TMqSB7嬍dE |Q(xfGo};" [^kQn'ƕ- aJ3;#Z =rw{'NY_XhM㺡*NO(R!RZatG?*1nIb$"Z|y͏dyXĩn9=.vWF]Nņ_%qP2/B'28pc|i%ކXf!_n1DTl6>Zch'c'?A}Ι|k>LIr%x5%ˢvI:?:(!0M!֗4NdHoOW'j8ܜB&ajap/!sh†PlO˪6&۽3C$c%}LO#6ogBnUylR"dqvyl\Rf'~Ն B'Mc LȆvڮ~빁|uK%^(r VZK?ُ[ L-yd XT46U#­p\V; G˾Hoڟ)'~p@WB`RCe"`_J;1N2F^- MCqnlq$Yh}"]&58JK[OMr*|RݤFPeJuD8_0t n}m^A-p0:EI1ves]֐NdCfZϐQ`B2wXTߙgjWpУ4&-uji#JΐyHÎEw}j񁲾 7J6)׎ DNzuǟWs;v&=l>wuSpdNO9cTȱvPʦCj׭5nTRGan.]mAnM` @w: Z)"&]#8K9rF6`b9H74] iɲKk]Z샇`}ٰ<(MC vV8I'(U\Qw]g2HوȲQ_[^~|OK, \\-za# N$ rdaB㥟p 0WYUwÌV# =~|Q`y[`fb^nΑ'-"p˝2UDURt)Qːu5P.-R}?OSXkKS86B?~,~k){Tg^iuj_(' RO6UFYɜLZBhE|,'RAg"O(puSz6zu38CA f ۤwxfgGQi=G<%B|O|ruY BJ1m1Sm[1e5!NXa.J$|Q]nIJ]"mXSSyEVmwGdt[ 'ƈ\+2?bR׀Ͽh'mXsmbC`8>s 7}hBD+13AMBKߥ$'犴CʇZ·)PB~vi|tKhe)B@BVl!נG {9Tѭ5e(^}2hfgj_U᪽-$ D_wD^Oq Do<:g(-ȊC'aOIJ".xo% ȯ<ڍb.A7,gwdL[~rMqG.c$:$|!?w ($Ky=sǠJM цOG}99s'屎i A-~<5}:f)Lּw+lCwxB.9'h[uh9z+ozG;5ZIl=2`- 8٪ߗI;08GQfKv7-y^ [n=zL0g)l* pfX72vXgM&bYxY۫K?"9d}Al+{薈OκRr8JrfYI+:j H1tˉ1Nd?>Eto䐑 둘U{% qBHNcvVbeN`zK`kzʵS'-@et(XjN Fy搡PA۵Ye95fO`-pkb猿wK&vA.n؞b #0٧e,㇗.}[E{  uUT4#'`MpE"PCM!K)^>br͓o$_]PJP~7^bsG";ph0'`3+B/0f rQڮT;)1R8FM|02UK.D&d{ }(b6;tM\Ï za讣G0-sP1f.Ks^'Y8<O5~فq{Z{CߛARëJYJu;(vHHG \% $\(yqzGS0sKn_4ا 0k3- <|ra Dd^0O($js9PQA:A F!۟uZ*C\4 xwzz/JC «cdNv%/=H8gSYX)a4 idϪ56\ ͏\4eM3jGG淎 w&Jn߯?QyV&nyFYŶ0^c}FT^Id>GU2m(iSN 3p W]U>,Λ8ʤ_ly4~9۟vW醴+~&d X=,r+ok1V2MtT)jOďV3 @IoH{^w7K*e+5 t|.M9vWf5{llU54ؼrY2-$SɧE:h0{l`-a2|&Xӻ!IgDueZ96V3±{;3uB~`;9YQ@4EeMgFvk J!^13jCVqI&kzx\Z^oTV73 OvN [FWU-r Ds>Wa 䑓k+ρ:!iW]:'P#{q"-`י n׮U]mUF]˄@c*ى䲠$`PoZWfIuv=Vg& Y@baOec $AW0Zx.ydPWM}jDxs /Sqa|n筭^]slқֺvk(8{I{hl'Xbz[Þ|gOwˮFH {ǫ=jWȎ?VIA<Yo 8lrk6J(K A|F@'% Ԙ¼tWgM-l"hJrP?ZtвJ*!?f$ pXli= (:X.8?.\,:Lo;Z͍4_]]g!-0X: :$򆢵[/+ UFRҷv{&WԖ(P.+|c%g8S@^(WI˙76OtNZ 6jw֧ѹ9knN]$1ݝ@da2=n8lvNR@&/<끚#d<0fJŞژ/ B%G>Hv R./v .0!rU6yco,@i -㑹 MrLFGᏯZ:;=.V~'*>?ZrV>#0 HUVH%c&'+Ǎ9I˾~jњn-( ;sr2OL<%4\OzUx[ڎQH; ^v("lRgmWAnCz g4kȱiq!\WSqVxg"!FbՑf+A{EkOq\--diJTԔajoc#IO3Tԓ憵D݊62~//@RbjN zȩڽ %FlARr)e ˬQ <"6X81C 2}=Rn(9J Gxll&δr%rQ8n 3W ޯ !7#7Qd]z#6lTn]FiC=!l JW ݭCHub tXy{ٌxh U|RёWs4em8V d>8J$GTޖjdԔދ|q=(> ƏǰݚnçsI"X@}F(p[:"A4AU<|!hJM_M=Ɲ搌$MU`W01> Ä.lZ4ze"&(GaձOo&T-d_OhÿCR,&G(,#nZ8AO.2.3V[ȗscMfk )-.7lr_tׯ wG>nCI MqZ,iLBIH5G]Zw/嶺U+Qu VwMe";!2V${c*i %Tl }Tj!CEYa/! E?+K&JE ´s̀RٔLf 4Z{@y]Z4j[(wv.M![vq2-}HW\vULؚo@a-RK\Uȗן7a`6E4;v߾ۜ>!ޱ`7"/ ѯE{@3'N}sW6w~j39j_M/ d~":mm_[pWB~ϰYOAutRNy̢E_0`}M5?P5b "hC!퉶,d3|DuI®Ă\jZNV/4 j5 7ě*?Ă1԰E֑b\D'L~5PdT].Azپ\64=|v]sv}fMeܦ|tF"<&wh;NL)S驮k+N7eTiM(sտB^Pl9&J WgrnmT lA# C9Z)Ő몯d\,}l𼾶f]!\^Ncre/HW=ے6eyr|h嬣Z@aQsK/L*h"N+u' 9Zc$$rۯ-˙h'Sa?ZvxK590/*k'r0ONDF`^DV f<Ԉ-$L{܂]6B[Bo|˙l:"^`=bѮ9iJ8Njfߞ$㮻AB48 =wt"Nx n4xQGyaDZk A>|Ltn.ږ 7V ﻯm2^[05/4m2C3(n_@#ʊĭ QjXu|r0SJq"u'i&&셨Y ̆Gl!3t{N &:&+MSCUxGxVXq''llo!0ݭ|oexL5Ă]\?ݯ7‹7-'cTY- )13PJ&M Zød/ b+->Q wE[|2)v endstream endobj 3110 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 3112 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 3103 0 obj << /Type /ObjStm /N 100 /First 987 /Length 2810 /Filter /FlateDecode >> stream xڭZR}+ޘ jZ#&&lÝmk!a-^'STI%x9'kA/@p]H)C` e}|a@BeLBX /]Bxw)$|(*8(?xy! KoL!T'"- _wh;c,ԅRK%*BB0MGi*BlhF!C;zYh!B: DFm0g0,FZ"Gdm$rxrx$N!yC,Fs3 #,kCTar!§ZC1aF!*9*D\ +ZDP)!6ʄ`Vk4Ca`Z+# #0AtfZx+xB{\@mt`wV.СΊ]Bg*8¢ p T|-4*v+x%67F@0s@1a^H̽6 X:oCPn pBDpyCwc1<`U0t` < xVOlb CkΟ_erWx~ݻ O]^qLp|0L ռ?Ysi&r8vzeus^lWioP7@iya]c Y9-{r8(Lho#Y \oewerUv®G3E>XKoW(JP(AqxjPgƮfA9ej݌޴fB&xwp p~r !Uy]V5kV;6d#6e&}:|4dw*;+3D .>wqM]gg9;f';e/+ {ޱ쌝#.%}9׬7WUh]Ou!vC5z/:&jT0ZN1nY4 ]6΁5mVzw R}/ٗln-u[YϾI߰l8 ogg14Cqjt ƾɴBafi &U(; wU}R~G'k*0eqYeG}g?O)ǣs4ث7N #ng'z+ۥ<Lq ^\~YB^X#qN9[%iR' D@<5j|Ut/'¬A\*T9֗&ߛI>|[b^r 5 {V'Ӑv^{N}|aM~]+vu.N?=n%EnQQAQhȩ'Ptpxukk{}~*;9˃>0xvRϪg'I}|/QWϪESw0 OKU+Ջ`sMg%EK}NsE*>E-EA+89av.t'y"ǐ'ˢ"!55ROh dbMV?'QKn *FpFq8ԟOk<Z4'T{U ]5(GѺ7pk1'5R@m,!0mд#t+\j)h5-nEE9!(;ylTӫO5@oNN!*%*KTݡ1lC[<WܳBSච%leFK6Z؊RXEyjll|,ibGD6[LJ\渠@Sචr#h褢nCE;A[.C߆Jȑp tf+*KTIDX*žo7F Z K荨lB%QP`(GVT4a=MX`o(a㶡" < GF8w߆P4=De:dLR*CxݖC"8mmUM3FӬ25Dו^NQ:gJz]i5yl؆ӲmB۾y<<e毷gV=_1;o7/|OtPj )9=};.7_d`V .Ns:B BUyփ&ʶ%hݕKTQ%To5&'Au ${@jjM`ꏑY- ]0rA.< U6GT‚ *rAW `:ST\@Ⱥ iR@)YSdd0EȬ)"2Et"RSd":L)"kL5GSxjȚ#SzS)Lo:SSPv&ES7Is) BaML! 62vnದD<Slj͚m`:L1)6kJ0%!C0%!Cm+!̚B (*fwvh7蕀:`6(@峀z@);L%)aLMLȚ"#Sd)25EfM)"aHMYSDd0)"2wSSD;L)> stream xڅߊdE ) &JDJD؋Da]9lg/f$t3"t},!ްhmюNG_z蘶cc~g6rcO#w>mح,lpXm Ri]ءpD-a$ x.bƎݻF4lu{8bl1 Q(C QL'ev wj۳m'#FmcYG?[aGgR$;tZΌB2al3a[Yرǂ{!!Nf:XbYѢE"ߛ%C;`b%e~ /F+_BʷP·F,*f*옴v됅\'Y\$kc# ި|]m\T1[1 % O :T>ƴTہjFV\-FFIrK&˥)~6h|f{ v@4Ne4Wof1;[ Žqc&b"/~߿ zw{[?¾~_n{=;p2  [W܁s?r@--9:)2JN((eR2 )#Jh!EJQ'E )T:)ZHQRI酔h*;)ңJNJ+(R )-J驔椴BD)-Ҝ)HR)H!EI…R$N R8JT ;)\H(S)P!NBR(Bw)+yG)IZFϮs96zN=FE9m=cѳk\4zFϮs96zN=FE9m=cѳk\4zFϮ٣'!p⼦ԗ3ߞ~?}359(X}%}L򵼕vJbq3 pݥG@u@)AʙBJN,LTtRf!eD)32QHQL 'eRF2R)IBF)#NR p&|:)ZH3:;BJRNW;\gKg6}9=9l#tCG_ @n|f8P:HI,f/ą8P: )qt 7R @ @n * @TH33g|*L2"Z*Bӿm$ޛ>+tX?=v|ȼw{ƷwwPo1r ~ sku@ ΂BOT'E[L܁}?J>S ݁m@pBJRNNR$JiIBD)-"NR8JT8)\H(ER)p!NBR8BN R(JT 9)\Q R.eYʤ= L0 endstream endobj 3122 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1716 /Filter /FlateDecode >> stream xڅG %$u1@N!a yHG3صvק ml6е$F8}lm~&so`<O/'lim0d4 g=p4.=Bx0y_W/1lVCz_lƚG@GtC#/#ސP۱P%T"/aFQaFec˶tʆ D-AFCmxF^q9،Nlװc%^ö@>F6rlƾ>K欆 ~b4؂&.sdfL &bz! ;:ax{)|5lp"G6öb#Vv./UDvaa;}zi/UIc}Un UkS]~s&ΎX/׊mzW~|Ǘ?_?^>}]?|}__{|ӧH%p <Jq6@@*H 30HFd)ZJ E)h)Eip" RYR8HF g)\J e6Rf¥FR2H,eRfBRf)jPB RY R0HF f)TJ )`)h@RY R H@)e)2( eoR zAekzm^sk^Z&5A! zAekzm^sk^Z&5A! zAekz=2!p$`zt<2pJRn 3p@ H{^|݀~%BYug`R{bRA 6R KR )H,K)@#(@2)#KRRF#ed)PJAx.ſYDਤȺI% 0KX9&)ǂٟK/> XI]p6@Q)) >5HF ,hRA4R$KR)H,EK)H#)pRAJX4A/9! zA/eKzi^rK^A(-ds"^cn<~[X/]`?rW:ZeJ} 3! *C_B]?XRHy9yfAt:cy8OLBg2ߧȹ8s; e; s;p̺v@B; vHphxIvC; `e;v1G lvvC;Hv.K#%\FJnl8,pph)DXJ w8WI} !}2yJRL߇p޾1@ >E0J xW>=qG^] uQ1Bz OK]tIwuP}c~Bօ.G`-@ia `40nznauTf=f)J R枤 6l endstream endobj 3123 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1751 /Filter /FlateDecode >> stream xڅώ$5 DBHB@Zcwwuiw粛|v/SmlCd>XΣ_R9xl6~hE?y &D4<6olTg]p2 O g"h.، ;iE@#9z*ɯzFc| ۊl$3]RhR/Ķjz62} |e1#x8`aIٌv \B!c\oz ]،V͘6sZ i ՠюf7Gp4WFjڌ]DG6CװٺI1k^Vަz [@VH#KK|6j6;Iri~'.$[(հKa+>|\h+qVf#`#8?zrerml5P*U+zWh+ku_{2裃FkCҕv݈lFcmfCoFGf a͘C}| ;:ϟro|cOɿJ oOg =}&AL;RK\}_+ħ-uܖ/`K_|)oٗ4(Y$蓍> FJR"AJHiYRZ6RZJ)-HRZ)H,R8HRxd)\J )w­C*H-Pi-bf TZ`=,-` [H,J)b'@?$`%HlY ` lJʕpvx{K{<{Z:xtyy2.95K_!y ;aRה"$_\<5埀BaHy^S~29<) ,-3_H2< 8 (p xkxx+ k x.qkxrnPrkxRB)ܮ 6R(KR )Y R0HRA n@R`#,@)@)Rh/MB`^ 8Rh2J mI RFJ , otRJRFf)AnhK)Ff)ZJ E6R$KR)"YR$H=?^!ilx)T=MSz*Bˠ? &z^ܦ_1_8O,kp T:*Wyp %K_ @NuXF*Ч5WB}*CBOl0>ЧT>68KX>ǡ`@*&)X>ǾC7RrcBFJ},CCn21>FJ},CCl21>FJ},CCc-2 3Z{ xg+Robs A{׌>#hҏEH!e_\/B [; K`E F%, A !_`C `BiXZ`d̻K ,{ 0rC ̾f)PI`r6R`rB endstream endobj 3124 0 obj << /Type /ObjStm /N 100 /First 1004 /Length 4632 /Filter /FlateDecode >> stream xڍ[[6~caJm3Nv8U眭[3rԑԶ'~ԍTy@EntgEnxV0f1 3f>+$) Ae |%>2,u~"3" 0,-r(rԊ8,$K`(Y'X(B9 VX+ |yre2r=W aklb.ig8PK$}f(̆oKX`MW= 7sŭXo1/{$9]o&"MRXmTz5Y rZ.CI,stf X謞G7Y SVEn-U7+n2W2xo2:pu޴XE[ 8>CD M&eШom3(47)ł)A;h#6HM]M@GE108a$p$H(RK҉Pp 4t0;BV!Xj n/7EpV x 8 x P8t&k\2Zd#& fa^)72↮"Qc IQ`&q3iŀQ:Q .A!Db#D,Q45KQcs#`22粅RXfF}HNd "FAdC=@ !) ""r+㼇øqQD⢄RÐ90P8Ɓ =jnqP\E х2 r#=(є } L2W Qb}I $=&AXx>(DH*Y 8G'%"t(iB<”!Q83%" U@"K: EZO!&1)Ĥ=&Ǥb>:BX!bZĤ=&Ǥ'hdhbӈxL1I#&1id<&FMtP\  #&16dTE G~@#ptHxF5YDP.bX,PQXlr2PM mi78W.h*M#i)\F?Qblº (MZMVl1fX7gg8C̗}W>-Di:-T[BJ'+r! N^I[Ms7$njνHXTPH ޜRU7OO<9$={CWQ:Mc%Lp2l{B3uW$Em{dȘswa,s̬SIJ@>C=MzWmh)\t$:,uj;'(X#6,p T{  ;qYވc]Hq;"ʆ'mgJ(U|z>dӎeHqsLԱ3 zi|x5>K:: ?&[|SWx>$?]]/L if|Q e*<\.7¸i˦`+I#X">gGɣMӺ5{$gMqIe 3g#\Ȉr2aupjE~XO8n?zK BM]ގ՚X-5N 'BA{03<A ujEen74ed$!ޤq5"l01`It}j!!WU{FFS9~}T%el)1[ {>=>jgM\sч=I6lԱ}ѶiGvݫ= -~uWU-coƯ+@(蚿~tVm{͌[\]}pOcbw$n=Q=&jO+Nx7e\Ǐ}I[tv'qiي J54<ۨ9|0Uղl] e92H~= !l/:܀mJo+f@QKi;QmJ旇jfz誊ޙFX7UGtUjW"Q{n1^4+1дV+lȸ;.EPt?m6SWjq"H}P0bSJ߻l@P?4{km&-i8f 0CU6~(w-&x\4MZ5W?Tg҈^vF66av7v!hl7zodq,YK 38QO6s{ؕMK#KٝDVtj ӧ_2j:H֕x(+._Ϊ6y/drOGo~xC'p:$48ACӉFW \E"-MP[=E6?AYNBa/̢ԚAKB 6^pZh}ww.> endobj 3195 0 obj << /Type /ObjStm /N 38 /First 373 /Length 1758 /Filter /FlateDecode >> stream xڍXKo6W"`HA6]zW^Î;4KQsq837!)qjIFF44͸rn >TLca,:C8͎MgɡN7Yy4p*X@XͰ.гYG3q]zhF|LjL_mb,$9}ltFrS{CQ(mǞRkT_d¨+ V<_5֯fXUp(bA lt 6v`BQk]O:uklaKgLQN}5sŽ~d9(}k Ηc+ϋ> t6sA|am Фu^ڪZJA]5_a ?b;8Cٌ]~Hw߮`|_F Yֶ+{+)[[W} y`t223ճq1е;87[a.bxRĂo`[ !qšşxqyx3r7޶bGH87hej?Z@ 71 (4 ) fx\SFc  @@ݕٽ ΀ǡm^-FR)JTiN\U,热C 8đS$" љGrı r2 ' 7DD+Bl&x='=~^>Ek8 Br|aD(}`Y>dAET/ !pKO,/7~B'A=+9G%3JӍVa6~W=|vq׋"И ] /Length 7688 /Filter /FlateDecode >> stream x%{l]y̮w}Yqn:q&8$;d8\$$$LBY"E@Hoi+(h ti *SA;*B[] j!Z'yXeXVe,--[eu  3N;2Vp?&mZoSn7aH4ht @п{^BA4Vwu}\2Z1y,Ftmu8 `C8'8 F)08 ΀ \8 4.+`̂9p\ 0Mp wX+.U`<3E 1c&  Sƭa ̀5: Irbd'Wb-+F\1Wb#qň+F\1W>,@ 1H@b#$F 1H@b#$F 1H@b#$F 1H@b#$F 1H@b#$F 1H@b#$F 1H@b#$F 1H@b#OoK/[Bk߶08N< ` B,Ff12[23,`  @ A; d@7zn `>pdA?8p8(8 0NQp q0N3,$8΃E0 . `\up̃p"2Xw=p` <Ox c }_c6օiQ q0΃@ 6x<k%D/!z K^B%D/!z K^B%D/!z K^B%D/!z K^B%D/!z K^B%D/!z K^B%D/!z K^B%D/!z K^B%D/!z K^B J^B%D/!z K^‡`<%|MjV8/k]R:h wg ULU).@4e}K%'D>! O|Bc,`  @ A; d@7zn `>pdA?8p8(8 0NQp q0N3,$8΃E0 . `\up̃p"2XXԴfY_u7-RvW#Z#YK4v} 0@W5tU;.+ǫ_ Zj&A;:x'`<` lg  hD$ H4@ hD$ H4@ H4@ hD$ H4@ hD$ H4@ hD$ H4@ hD$ H4@ hD$ H4@ hD$ H4@ hD$ H4 R}c$5UY==*xC O&s^ G/>zы^|G/>zы^|G/>zы^|G/>zы^|G/>zы^|G/>zы^|G/>zы^|}G/>zы^|G/>zoEp_c_? Mro/m<PlKWEz>󑞏^|G/>zы^|G/>zы^|⣗ۍK^"D-czW3oԫ"Z)!H;A̢ H]C9ҋvOIE0R19!h'a06ȡH8HnK 93]09BtG%H9:J.IkD::F^jlvLBN!䣓~N%DŽ qraCD tqEtcGX#r 5#$D$:OHG8%@HKtPb3%B DW%1O,Qt\d:I9x+' IUnIG9MR0btrh<’2"}pE..m<>[5]<p^̷p΋`9zSrGHb[pt Cpw/Ȝpnpoޯ3 `;An0 !w ȍG%&ȭvf_&, g-&C CE½Aۄ "$̂~r(6@x6Knp!7GJ: PkC~I:GIrun!]!, +.gQ'sx:&̃IrEsEz!)@nBޢD?Ob]V22;56?I!ӝeg\B ɝ%/H4c$Pu<)bvb'1G1k(dɝ"\ݣ5{4' I{ M=}^M80KNk}󶅖4p=UAPOU(a잪C˒;B0On wu`vOaQr{䲄{fTFh S:@Irg8f#ԍcvȼ./==z`S5GUv髎E8 040!ݛ"G|`v|'a`v_ؼ'07CPWOC[SKNI{*PI{$=(p`vOJr0eݣ@H9-ٽ"ԅ @(ݤ(! f/3tuOInwZJT)w00{*'lLrf/3rv^fv^J˄@`D0{*!Lr ^f &0{){`2S0&a`2] <0{0yLe{pMr^f^%t˝#Lrg G-wp `2E˽B88g^&<0{^" )(Es@irS z)ޢe {P72jRIB=^(5=D^(.eb}- f/˰g 5j#h0{Yf:M(a̤)#'1{M^P$j fjfI' ^&% k@'7I>פPk\ڐ0{e7fI a&fI hٛ/{71{ikB541{Sy~IÄkٛ3u 1{טxٛjwb&f-Mp0{m.ku㘽KKcPnJVěj&d'1EtUz.BTpň-t% QثLWc3]tϋ tQr홮 ^Wtehu<0E~AMWFf/RZMWFf/RsMWf/R،MW&ֲKȴt%0{Q&^dZˆor`"+ًA'`Noчb"Z6f/x}^0 A`*1[CUl\+^ea*lu+x^H$^NJp 4)b 6N(c*3МB&Q3_l6ӕ5٫@su٫2IWAI``*a6ӕM٫$m٫'f2Iz'޾2{e21r`*K$fG ۀvBp0}' 0{)'w:f&(CNU*?gw6T^eM̩^٫* Y½WUG(`B}f?1{_jƵUF0KKc~]a*nw` na٫*(#WUPv^ec_ UfF9=3WI&HNÓs-;f.f2$LU9b` T2UrJR3@fgzi9 fI׀̮f2;32Gz^2;ME9- Sp7ulup쬻-{@f$\2;3<)i*:٤q> Q7c:3.,}n)ZCB}A^h9) 6Һ:Oc&fpuri%NrtH `:guY;K=Y;w{fS %ɚعMo˺-aus0 0{,Nr f3qn:}pt}hS\#Nq^x8s#@ՙ8י8B us us00{LvF8 ^g6LfS< zAFE8_]M;k=&tIH*E,90>:/hG!x`ϞכSnCzD<җt]j-1]_ԫ蹑2w rNcGz h=z{z]kh5sگEW ҢfPC;(}X`h4]ԅY7\H7&C`x Yl0 F6Kk@qcL辁!e 5c`ش c7( jDѠ4u5:`O1ַ4z@`0 0hm5꿈lӶKC.a/<+ńT Az918fZN\1CE崑6hC90j纆k̅[8\b168JX7fF9.s; 7c}A-n[l}ZNCz=9&I~ݘֿPo} ,הCc>j.sF6oί|Iϥ+dꮶrjԪCo|!B;']M-[6s9c~sef_Y5G[Y&'3l؟{.6}}cB8^c:t!5d`R@B5P!c"1]?^5 hrE:wjM5.n9H eI37FU5RʘĔDb$(vQ]I\jP^1& E$Vux#EuvL͈ٛISP.&Lb2io(Td$޶K!+"O8c .)0WB9xW\1D sfXq1!Vux$>dd0hZ'MpU+n/+[r`$n]\1p$꿮h9n_)s`ߞVUP E׿Tď~WOWxb?™Ai&iW1w/-LMro*Ԛh%˜{L2ۭZO*YIz䝳Q}]oѤI^Bͳ&yU3`$^IInKu䎮mRVm蠎f똮Σ:::*Yt$_U]IFitYmku}۴uT=3moLۧ I%^2eR# [K6?_ __Iޣ=kG cBm G/8rI~S?Bo[fza%a%aaaՖaՖaaaaFfd=j,,33r:L#+I^dM7&uf5VO,2Z8fp$<))EG3/ϮҧHx5SQS3GYipB< ˣ:êt9֝aa XwcݙgWuXUSp;ñөt58֝aY©z˯K4jKtfKt:J6J YE[~llEnEDVD--=M]m;%%%%:%%%ڟ%:%Z %z %_bK |iؤ~־a?rߦ endstream endobj startxref 480732 %%EOF apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/000077500000000000000000000000001515050116100223325ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/000077500000000000000000000000001515050116100232765ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/API-Alphabetically.html000066400000000000000000000134711515050116100275170ustar00rootroot00000000000000 API Alphabetically (Tablicious v0.4.0) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/API-Reference.html000066400000000000000000000047241515050116100265000ustar00rootroot00000000000000 API Reference (Tablicious v0.4.0) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/API-by-Category.html000066400000000000000000000351341515050116100267660ustar00rootroot00000000000000 API by Category (Tablicious v0.4.0)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Copying.html000066400000000000000000000077421515050116100256060ustar00rootroot00000000000000 Copying (Tablicious v0.4.0)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Data-Sets-from-R.html000066400000000000000000000056631515050116100271230ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.0)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Date-and-Time-Representation.html000066400000000000000000000060461515050116100315030ustar00rootroot00000000000000 Date and Time Representation (Tablicious v0.4.0)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Datenum-Compatibility.html000066400000000000000000000074541515050116100304020ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.0)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Defined-Time-Zones.html000066400000000000000000000060021515050116100275100ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.0)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Durations.html000066400000000000000000000046361515050116100261450ustar00rootroot00000000000000 Durations (Tablicious v0.4.0) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Example-Data-Sets.html000066400000000000000000000102121515050116100273360ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.0)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Getting-Started.html000066400000000000000000000064041515050116100271750ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.0)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.0/tablicious-0.4.0.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Introduction.html000066400000000000000000000072321515050116100266510ustar00rootroot00000000000000 Introduction (Tablicious v0.4.0)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.0 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Missing-Functionality.html000066400000000000000000000105251515050116100304260ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.0)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/NaC.html000066400000000000000000000075701515050116100246360ustar00rootroot00000000000000 NaC (Tablicious v0.4.0)

    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/NaS.html000066400000000000000000000074551515050116100246600ustar00rootroot00000000000000 NaS (Tablicious v0.4.0)

    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/NaT.html000066400000000000000000000075211515050116100246530ustar00rootroot00000000000000 NaT (Tablicious v0.4.0)

    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Table-Construction.html000066400000000000000000000070261515050116100277100ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.0)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Table-Representation.html000066400000000000000000000100161515050116100302110ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.0)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Tables-vs-SQL.html000066400000000000000000000113521515050116100264630ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.0)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Time-Zones.html000066400000000000000000000141161515050116100261610ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.0)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/Validation-Functions.html000066400000000000000000000117371515050116100302350ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.0)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/array2table.html000066400000000000000000000102671515050116100264020ustar00rootroot00000000000000 array2table (Tablicious v0.4.0)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration-Class.html000066400000000000000000000063021515050116100305070ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.0)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration.html000066400000000000000000000205171515050116100274500ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.0)

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    calendarDuration_002ecalendarDuration.html000066400000000000000000000076761515050116100333320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html calendarDuration.calendarDuration (Tablicious v0.4.0)

    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002edispstrs.html000066400000000000000000000061121515050116100317650ustar00rootroot00000000000000 calendarDuration.dispstrs (Tablicious v0.4.0)

    8.2.2.6 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002eismissing.html000066400000000000000000000056751515050116100321340ustar00rootroot00000000000000 calendarDuration.ismissing (Tablicious v0.4.0)

    8.2.2.8 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002eisnan.html000066400000000000000000000062661515050116100312340ustar00rootroot00000000000000 calendarDuration.isnan (Tablicious v0.4.0)

    8.2.2.7 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002eminus.html000066400000000000000000000061361515050116100312530ustar00rootroot00000000000000 calendarDuration.minus (Tablicious v0.4.0)

    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002eplus.html000066400000000000000000000066061515050116100311050ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.0)

    8.2.2.3 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002etimes.html000066400000000000000000000061251515050116100312370ustar00rootroot00000000000000 calendarDuration.times (Tablicious v0.4.0)

    8.2.2.4 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calendarDuration_002euminus.html000066400000000000000000000060221515050116100314320ustar00rootroot00000000000000 calendarDuration.uminus (Tablicious v0.4.0)

    8.2.2.2 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calmonths.html000066400000000000000000000064571515050116100261700ustar00rootroot00000000000000 calmonths (Tablicious v0.4.0)

    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/calyears.html000066400000000000000000000057651515050116100260040ustar00rootroot00000000000000 calyears (Tablicious v0.4.0)

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical.html000066400000000000000000000174631515050116100264540ustar00rootroot00000000000000 categorical (Tablicious v0.4.0)

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eaddcats.html000066400000000000000000000062341515050116100305200ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.0)

    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002ecategorical.html000066400000000000000000000135751515050116100314000ustar00rootroot00000000000000 categorical.categorical (Tablicious v0.4.0)

    8.2.5.3 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002ecategories.html000066400000000000000000000061611515050116100312410ustar00rootroot00000000000000 categorical.categories (Tablicious v0.4.0)

    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002ecellstr.html000066400000000000000000000062041515050116100305620ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.0)

    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002edispstrs.html000066400000000000000000000062371515050116100307730ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.0)

    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eiscategory.html000066400000000000000000000063041515050116100312640ustar00rootroot00000000000000 categorical.iscategory (Tablicious v0.4.0)

    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eismissing.html000066400000000000000000000061241515050116100311200ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.0)

    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eisnanny.html000066400000000000000000000062331515050116100305730ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.0)

    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eisordinal.html000066400000000000000000000061151515050116100310770ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.0)

    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eisundefined.html000066400000000000000000000064301515050116100314100ustar00rootroot00000000000000 categorical.isundefined (Tablicious v0.4.0)

    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002emergecats.html000066400000000000000000000075721515050116100310750ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.0)

    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002emissing.html000066400000000000000000000074421515050116100305700ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.0)

    8.2.5.2 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eremovecats.html000066400000000000000000000074331515050116100312670ustar00rootroot00000000000000 categorical.removecats (Tablicious v0.4.0)

    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002erenamecats.html000066400000000000000000000067551515050116100312470ustar00rootroot00000000000000 categorical.renamecats (Tablicious v0.4.0)

    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002ereordercats.html000066400000000000000000000072131515050116100314300ustar00rootroot00000000000000 categorical.reordercats (Tablicious v0.4.0)

    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002esetcats.html000066400000000000000000000062361515050116100305650ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.0)

    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002esqueezecats.html000066400000000000000000000056211515050116100314500ustar00rootroot00000000000000 categorical.squeezecats (Tablicious v0.4.0)

    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002estring.html000066400000000000000000000062231515050116100304210ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.0)

    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002esummary.html000066400000000000000000000060261515050116100306110ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.0)

    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/categorical_002eundefined.html000066400000000000000000000066241515050116100310610ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.0)

    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/cell2table.html000066400000000000000000000101551515050116100261770ustar00rootroot00000000000000 cell2table (Tablicious v0.4.0)

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/colvecfun.html000066400000000000000000000065311515050116100261550ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.0)

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/contains.html000066400000000000000000000074131515050116100260070ustar00rootroot00000000000000 contains (Tablicious v0.4.0)

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datasets_002edescription.html000066400000000000000000000064721515050116100307770ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.0)

    8.2.58.3 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datasets_002elist.html000066400000000000000000000062071515050116100274230ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.0)

    8.2.58.1 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datasets_002eload.html000066400000000000000000000065061515050116100273710ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.0)

    8.2.58.2 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime-Class.html000066400000000000000000000063571515050116100270360ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.0)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime.html000066400000000000000000000176271515050116100257750ustar00rootroot00000000000000 datetime (Tablicious v0.4.0)

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eNaT.html000066400000000000000000000076171515050116100271240ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.0)

    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002econvertDatenumTimeZone.html000066400000000000000000000065201515050116100331030ustar00rootroot00000000000000 datetime.convertDatenumTimeZone (Tablicious v0.4.0)

    8.2.9.34 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edatenum.html000066400000000000000000000056521515050116100300740ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.0)

    8.2.9.18 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edatenum2posix.html000066400000000000000000000061221515050116100312320ustar00rootroot00000000000000 datetime.datenum2posix (Tablicious v0.4.0)

    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edatestr.html000066400000000000000000000065461515050116100301100ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.0)

    8.2.9.14 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edatestrs.html000066400000000000000000000066441515050116100302720ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.0)

    8.2.9.15 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edatestruct.html000066400000000000000000000066441515050116100306230ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.0)

    8.2.9.16 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edatetime.html000066400000000000000000000132261515050116100302270ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.0)

    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002ediff.html000066400000000000000000000060521515050116100273420ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.0)

    8.2.9.31 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002edispstrs.html000066400000000000000000000057031515050116100303070ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.0)

    8.2.9.13 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eeq.html000066400000000000000000000061561515050116100270440ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.0)

    8.2.9.26 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002ege.html000066400000000000000000000062011515050116100270210ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.0)

    8.2.9.27 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002egmtime.html000066400000000000000000000061151515050116100277140ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.0)

    8.2.9.19 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002egt.html000066400000000000000000000061741515050116100270510ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.0)

    8.2.9.28 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002ehms.html000066400000000000000000000060731515050116100272240ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.0)

    8.2.9.9 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eisbetween.html000066400000000000000000000063251515050116100304220ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.0)

    8.2.9.32 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eisnan.html000066400000000000000000000057501515050116100275460ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.0)

    8.2.9.22 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eisnat.html000066400000000000000000000056201515050116100275500ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.0)

    8.2.9.21 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002ele.html000066400000000000000000000061751515050116100270400ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.0)

    8.2.9.24 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002elinspace.html000066400000000000000000000070151515050116100302300ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.0)

    8.2.9.33 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002elocaltime.html000066400000000000000000000066771515050116100304200ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.0)

    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002elt.html000066400000000000000000000061751515050116100270570ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.0)

    8.2.9.23 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eminus.html000066400000000000000000000067751515050116100276010ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.0)

    8.2.9.30 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002ene.html000066400000000000000000000061621515050116100270360ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.0)

    8.2.9.25 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eofDatenum.html000066400000000000000000000060351515050116100303550ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.0)

    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eofDatestruct.html000066400000000000000000000062361515050116100311050ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.0)

    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eplus.html000066400000000000000000000065351515050116100274230ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.0)

    8.2.9.29 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eposix2datenum.html000066400000000000000000000061721515050116100312370ustar00rootroot00000000000000 datetime.posix2datenum (Tablicious v0.4.0)

    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eposixtime.html000066400000000000000000000062121515050116100304510ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.0)

    8.2.9.17 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eproxyKeys.html000066400000000000000000000064421515050116100304520ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.0)

    8.2.9.7 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002etimeofday.html000066400000000000000000000061051515050116100304120ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.0)

    8.2.9.11 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eweek.html000066400000000000000000000055501515050116100273670ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.0)

    8.2.9.12 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eymd.html000066400000000000000000000061011515050116100272160ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.0)

    8.2.9.8 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/datetime_002eymdhms.html000066400000000000000000000063041515050116100277330ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.0)

    8.2.9.10 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/days.html000066400000000000000000000062101515050116100251230ustar00rootroot00000000000000 days (Tablicious v0.4.0)

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/discretize.html000066400000000000000000000121151515050116100263310ustar00rootroot00000000000000 discretize (Tablicious v0.4.0)

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/dispstrs.html000066400000000000000000000065521515050116100260470ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.0)

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration-Class.html000066400000000000000000000057511515050116100270640ustar00rootroot00000000000000 duration Class (Tablicious v0.4.0)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration.html000066400000000000000000000122201515050116100260060ustar00rootroot00000000000000 duration (Tablicious v0.4.0)

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002echar.html000066400000000000000000000061141515050116100273770ustar00rootroot00000000000000 duration.char (Tablicious v0.4.0)

    8.2.13.8 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002edispstrs.html000066400000000000000000000057231515050116100303420ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.0)

    8.2.13.7 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002ehours.html000066400000000000000000000057401515050116100276260ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.0)

    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002elinspace.html000066400000000000000000000064401515050116100302620ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.0)

    8.2.13.9 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002emilliseconds.html000066400000000000000000000060421515050116100311470ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.0)

    8.2.13.6 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002eminutes.html000066400000000000000000000057661515050116100301620ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.0)

    8.2.13.4 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002eofDays.html000066400000000000000000000057211515050116100277120ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.0)

    8.2.13.1 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002eseconds.html000066400000000000000000000057731515050116100301320ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.0)

    8.2.13.5 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/duration_002eyears.html000066400000000000000000000057371515050116100276170ustar00rootroot00000000000000 duration.years (Tablicious v0.4.0)

    8.2.13.2 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/eqn.html000066400000000000000000000074221515050116100247540ustar00rootroot00000000000000 eqn (Tablicious v0.4.0)

    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/head.html000066400000000000000000000074401515050116100250720ustar00rootroot00000000000000 head (Tablicious v0.4.0) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/hours.html000066400000000000000000000062531515050116100253320ustar00rootroot00000000000000 hours (Tablicious v0.4.0)

    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/index.html000066400000000000000000001315141515050116100253000ustar00rootroot00000000000000 Top (Tablicious v0.4.0)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.0.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/iscalendarduration.html000066400000000000000000000062131515050116100300410ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.0)

    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/iscategorical.html000066400000000000000000000061671515050116100270070ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.0)

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/isdatetime.html000066400000000000000000000060771515050116100263260ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.0)

    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/isduration.html000066400000000000000000000060431515050116100263500ustar00rootroot00000000000000 isduration (Tablicious v0.4.0)

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/isfile.html000066400000000000000000000044441515050116100254450ustar00rootroot00000000000000 isfile (Tablicious v0.4.0)

    8.2.21 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/isfolder.html000066400000000000000000000044341515050116100260000ustar00rootroot00000000000000 isfolder (Tablicious v0.4.0)

    8.2.22 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/isnanny.html000066400000000000000000000073751515050116100256570ustar00rootroot00000000000000 isnanny (Tablicious v0.4.0)

    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/istable.html000066400000000000000000000064501515050116100256140ustar00rootroot00000000000000 istable (Tablicious v0.4.0)

    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/istabular.html000066400000000000000000000061701515050116100261560ustar00rootroot00000000000000 istabular (Tablicious v0.4.0)

    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/istimetable.html000066400000000000000000000065441515050116100264770ustar00rootroot00000000000000 istimetable (Tablicious v0.4.0)

    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate.html000066400000000000000000000122021515050116100261110ustar00rootroot00000000000000 localdate (Tablicious v0.4.0)

    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002eNaT.html000066400000000000000000000100531515050116100272440ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.0)

    8.2.27.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002edatenum.html000066400000000000000000000057311515050116100302260ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.0)

    8.2.27.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002edatestr.html000066400000000000000000000065741515050116100302450ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.0)

    8.2.27.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002edatestrs.html000066400000000000000000000066721515050116100304270ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.0)

    8.2.27.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002edatestruct.html000066400000000000000000000071011515050116100307440ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.0)

    8.2.27.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002edispstrs.html000066400000000000000000000057211515050116100304430ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.0)

    8.2.27.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002eisnan.html000066400000000000000000000055461515050116100277050ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.0)

    8.2.27.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002eisnat.html000066400000000000000000000056371515050116100277140ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.0)

    8.2.27.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002elocaldate.html000066400000000000000000000105661515050116100305230ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.0)

    8.2.27.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002eposixtime.html000066400000000000000000000063501515050116100306100ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.0)

    8.2.27.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/localdate_002eymd.html000066400000000000000000000057461515050116100273700ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.0)

    8.2.27.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/milliseconds.html000066400000000000000000000063561515050116100266630ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.0)

    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/minutes.html000066400000000000000000000055671515050116100256650ustar00rootroot00000000000000 minutes (Tablicious v0.4.0)

    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/missing.html000066400000000000000000000074771515050116100256540ustar00rootroot00000000000000 missing (Tablicious v0.4.0)

    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/missing_002edispstrs.html000066400000000000000000000061321515050116100301610ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.0)

    8.2.30.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/missing_002eismissing.html000066400000000000000000000060271515050116100303160ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.0)

    8.2.30.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/missing_002eisnan.html000066400000000000000000000057601515050116100274240ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.0)

    8.2.30.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/missing_002eisnanny.html000066400000000000000000000055301515050116100277660ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.0)

    8.2.30.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/missing_002emissing.html000066400000000000000000000054321515050116100277610ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.0)

    8.2.30.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeA.html000066400000000000000000000044621515050116100255320ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.0)

    8.2.31 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeCellstr.html000066400000000000000000000045261515050116100267630ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.0)

    8.2.32 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeCharvec.html000066400000000000000000000045521515050116100267250ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.0)

    8.2.33 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeFinite.html000066400000000000000000000045501515050116100265660ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.0)

    8.2.34 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeInteger.html000066400000000000000000000045461515050116100267520ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.0)

    8.2.35 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeMember.html000066400000000000000000000045541515050116100265630ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.0)

    8.2.36 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeNonempty.html000066400000000000000000000045601515050116100271620ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.0)

    8.2.37 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeNumeric.html000066400000000000000000000045461515050116100267570ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.0)

    8.2.38 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeReal.html000066400000000000000000000045401515050116100262320ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.0)

    8.2.39 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeSameSize.html000066400000000000000000000045441515050116100270730ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.0)

    8.2.40 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeScalar.html000066400000000000000000000046041515050116100265550ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.0)

    8.2.41 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeScalarLogical.html000066400000000000000000000046121515050116100300470ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.0)

    8.2.42 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/mustBeVector.html000066400000000000000000000045301515050116100266100ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.0)

    8.2.43 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/pp.html000066400000000000000000000077051515050116100246140ustar00rootroot00000000000000 pp (Tablicious v0.4.0)

    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/scalarexpand.html000066400000000000000000000072301515050116100266330ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.0)

    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/seconds.html000066400000000000000000000062751515050116100256340ustar00rootroot00000000000000 seconds (Tablicious v0.4.0)

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/size2str.html000066400000000000000000000064731515050116100257630ustar00rootroot00000000000000 size2str (Tablicious v0.4.0)

    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/splitapply.html000066400000000000000000000113441515050116100263700ustar00rootroot00000000000000 splitapply (Tablicious v0.4.0)

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string.html000066400000000000000000000157531515050116100255050ustar00rootroot00000000000000 string (Tablicious v0.4.0)

    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002ecell.html000066400000000000000000000061311515050116100270610ustar00rootroot00000000000000 string.cell (Tablicious v0.4.0)

    8.2.52.9 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002ecellstr.html000066400000000000000000000057471515050116100276260ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.0)

    8.2.52.8 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002echar.html000066400000000000000000000061771515050116100270710ustar00rootroot00000000000000 string.char (Tablicious v0.4.0)

    8.2.52.10 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002ecmp.html000066400000000000000000000075111515050116100267240ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.0)

    8.2.52.24 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002edecode.html000066400000000000000000000057231515050116100273730ustar00rootroot00000000000000 string.decode (Tablicious v0.4.0)

    8.2.52.25 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002edispstrs.html000066400000000000000000000064641515050116100300260ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.0)

    8.2.52.5 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eempty.html000066400000000000000000000056601515050116100273060ustar00rootroot00000000000000 string.empty (Tablicious v0.4.0)

    8.2.52.1 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eencode.html000066400000000000000000000063511515050116100274030ustar00rootroot00000000000000 string.encode (Tablicious v0.4.0)

    8.2.52.11 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eerase.html000066400000000000000000000057551515050116100272540ustar00rootroot00000000000000 string.erase (Tablicious v0.4.0)

    8.2.52.19 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eismissing.html000066400000000000000000000061411515050116100301500ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.0)

    8.2.52.6 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eisnanny.html000066400000000000000000000057471515050116100276350ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.0)

    8.2.52.7 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eisstring.html000066400000000000000000000057061515050116100300130ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.0)

    8.2.52.4 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002elower.html000066400000000000000000000061531515050116100272760ustar00rootroot00000000000000 string.lower (Tablicious v0.4.0)

    8.2.52.17 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002emissing.html000066400000000000000000000061211515050116100276120ustar00rootroot00000000000000 string.missing (Tablicious v0.4.0)

    8.2.52.2 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eregexprep.html000066400000000000000000000067551515050116100301570ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.0)

    8.2.52.22 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002ereverse.html000066400000000000000000000061451515050116100276220ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.0)

    8.2.52.15 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002ereverse_005fbytes.html000066400000000000000000000067111515050116100314220ustar00rootroot00000000000000 string.reverse_bytes (Tablicious v0.4.0)

    8.2.52.14 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estrcat.html000066400000000000000000000061671515050116100274530ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.0)

    8.2.52.16 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estrcmp.html000066400000000000000000000065151515050116100274600ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.0)

    8.2.52.23 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estrfind.html000066400000000000000000000067501515050116100276220ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.0)

    8.2.52.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estring.html000066400000000000000000000070541515050116100274550ustar00rootroot00000000000000 string.string (Tablicious v0.4.0)

    8.2.52.3 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estrlength.html000066400000000000000000000072471515050116100301650ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.0)

    8.2.52.13 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estrlength_005fbytes.html000066400000000000000000000066401515050116100317620ustar00rootroot00000000000000 string.strlength_bytes (Tablicious v0.4.0)

    8.2.52.12 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002estrrep.html000066400000000000000000000071411515050116100274630ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.0)

    8.2.52.20 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/string_002eupper.html000066400000000000000000000061471515050116100273040ustar00rootroot00000000000000 string.upper (Tablicious v0.4.0)

    8.2.52.18 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/struct2table.html000066400000000000000000000067201515050116100266070ustar00rootroot00000000000000 struct2table (Tablicious v0.4.0)

    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table.html000066400000000000000000000225461515050116100252640ustar00rootroot00000000000000 table (Tablicious v0.4.0)

    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tableOuterFillValue.html000066400000000000000000000045161515050116100301040ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.0)

    8.2.55 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eaddvars.html000066400000000000000000000101421515050116100273440ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.0)

    8.2.54.29 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eantijoin.html000066400000000000000000000070201515050116100275340ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.0)

    8.2.54.40 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002ecartesian.html000066400000000000000000000076241515050116100277040ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.0)

    8.2.54.41 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002econvertvars.html000066400000000000000000000072731515050116100303070ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.0)

    8.2.54.30 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eend.html000066400000000000000000000054511515050116100264750ustar00rootroot00000000000000 table.end (Tablicious v0.4.0)

    8.2.54.10 table.end

    Method: out = end (obj, k, n)

    Last index for given dimension of a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002efindgroups.html000066400000000000000000000063451515050116100301120ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.0)

    8.2.54.53 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002egetvar.html000066400000000000000000000062321515050116100272150ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.0)

    8.2.54.26 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002egetvars.html000066400000000000000000000061311515050116100273760ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.0)

    8.2.54.27 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002egroupby.html000066400000000000000000000075051515050116100274200ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.0)

    8.2.54.42 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eheight.html000066400000000000000000000057151515050116100272020ustar00rootroot00000000000000 table.height (Tablicious v0.4.0)

    8.2.54.13 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002ehorzcat.html000066400000000000000000000062551515050116100274040ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.0)

    8.2.54.18 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002einnerjoin.html000066400000000000000000000072521515050116100277230ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.0)

    8.2.54.35 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eintersect.html000066400000000000000000000064361515050116100277330ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.0)

    8.2.54.46 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eisempty.html000066400000000000000000000056211515050116100274200ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.0)

    8.2.54.16 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eismember.html000066400000000000000000000060771515050116100275370ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.0)

    8.2.54.49 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eismissing.html000066400000000000000000000072161515050116100277350ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.0)

    8.2.54.50 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eistable.html000066400000000000000000000054261515050116100273540ustar00rootroot00000000000000 table.istable (Tablicious v0.4.0)

    8.2.54.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002ejoin.html000066400000000000000000000074061515050116100266700ustar00rootroot00000000000000 table.join (Tablicious v0.4.0)

    8.2.54.34 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002emergevars.html000066400000000000000000000073071515050116100277240ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.0)

    8.2.54.31 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002emovevars.html000066400000000000000000000070201515050116100275630ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.0)

    8.2.54.25 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002endims.html000066400000000000000000000055621515050116100270440ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.0)

    8.2.54.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002enumel.html000066400000000000000000000060321515050116100270430ustar00rootroot00000000000000 table.numel (Tablicious v0.4.0)

    8.2.54.15 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eouterfillvals.html000066400000000000000000000060231515050116100306160ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.0)

    8.2.54.38 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eouterjoin.html000066400000000000000000000075161515050116100277510ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.0)

    8.2.54.37 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eprettyprint.html000066400000000000000000000060061515050116100303300ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.0)

    8.2.54.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erealjoin.html000066400000000000000000000077441515050116100275410ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.0)

    8.2.54.36 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eremovevars.html000066400000000000000000000060761515050116100301240ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.0)

    8.2.54.24 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erenamevars.html000066400000000000000000000064151515050116100300730ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.0)

    8.2.54.55 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erepelem.html000066400000000000000000000066611515050116100273640ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.0)

    8.2.54.20 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erepmat.html000066400000000000000000000064501515050116100272170ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.0)

    8.2.54.19 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erestrict.html000066400000000000000000000105741515050116100275700ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.0)

    8.2.54.54 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erowfun.html000066400000000000000000000156341515050116100272530ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.0)

    8.2.54.52 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002erows2vars.html000066400000000000000000000106571515050116100277030ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.0)

    8.2.54.44 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esemijoin.html000066400000000000000000000072161515050116100275450ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.0)

    8.2.54.39 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esetDimensionNames.html000066400000000000000000000100151515050116100313440ustar00rootroot00000000000000 table.setDimensionNames (Tablicious v0.4.0)

    8.2.54.22 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esetRowNames.html000066400000000000000000000061421515050116100301740ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.0)

    8.2.54.23 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esetVariableNames.html000066400000000000000000000076471515050116100311650ustar00rootroot00000000000000 table.setVariableNames (Tablicious v0.4.0)

    8.2.54.21 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esetdiff.html000066400000000000000000000062531515050116100273540ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.0)

    8.2.54.48 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esetvar.html000066400000000000000000000070571515050116100272370ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.0)

    8.2.54.28 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esetxor.html000066400000000000000000000064711515050116100272560ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.0)

    8.2.54.47 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esize.html000066400000000000000000000071601515050116100267000ustar00rootroot00000000000000 table.size (Tablicious v0.4.0)

    8.2.54.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esplitapply.html000066400000000000000000000070771515050116100301360ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.0)

    8.2.54.43 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esplitvars.html000066400000000000000000000075171515050116100277630ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.0)

    8.2.54.32 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esqueeze.html000066400000000000000000000056741515050116100274170ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.0)

    8.2.54.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002estack.html000066400000000000000000000072121515050116100270310ustar00rootroot00000000000000 table.stack (Tablicious v0.4.0)

    8.2.54.33 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002esummary.html000066400000000000000000000055571515050116100274330ustar00rootroot00000000000000 table.summary (Tablicious v0.4.0)

    8.2.54.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002etable.html000066400000000000000000000122231515050116100270110ustar00rootroot00000000000000 table.table (Tablicious v0.4.0)

    8.2.54.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002etable2array.html000066400000000000000000000055761515050116100301470ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.0)

    8.2.54.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002etable2cell.html000066400000000000000000000062151515050116100277370ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.0)

    8.2.54.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002etable2struct.html000066400000000000000000000071731515050116100303500ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.0)

    8.2.54.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002eunion.html000066400000000000000000000063751515050116100270650ustar00rootroot00000000000000 table.union (Tablicious v0.4.0)

    8.2.54.45 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002evarfun.html000066400000000000000000000102661515050116100272300ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.0)

    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002evarnames.html000066400000000000000000000064411515050116100275430ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.0)

    8.2.54.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002evertcat.html000066400000000000000000000063771515050116100274070ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.0)

    8.2.54.17 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/table_002ewidth.html000066400000000000000000000055671515050116100270560ustar00rootroot00000000000000 table.width (Tablicious v0.4.0)

    8.2.54.14 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tail.html000066400000000000000000000076111515050116100251220ustar00rootroot00000000000000 tail (Tablicious v0.4.0)

    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset.html000066400000000000000000000243741515050116100275570ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.0)

    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eAirPassengers.html000066400000000000000000000075561515050116100327770ustar00rootroot00000000000000 tblish.dataset.AirPassengers (Tablicious v0.4.0)

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eBJsales.html000066400000000000000000000110401515050116100315330ustar00rootroot00000000000000 tblish.dataset.BJsales (Tablicious v0.4.0)

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eBOD.html000066400000000000000000000102621515050116100306210ustar00rootroot00000000000000 tblish.dataset.BOD (Tablicious v0.4.0)

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eChickWeight.html000066400000000000000000000113051515050116100324050ustar00rootroot00000000000000 tblish.dataset.ChickWeight (Tablicious v0.4.0)

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eDNase.html000066400000000000000000000111721515050116100312100ustar00rootroot00000000000000 tblish.dataset.DNase (Tablicious v0.4.0)

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111331515050116100330400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.EuStockMarkets (Tablicious v0.4.0)

    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114171515050116100326230ustar00rootroot00000000000000 tblish.dataset.Formaldehyde (Tablicious v0.4.0)

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151041515050116100325420ustar00rootroot00000000000000 tblish.dataset.HairEyeColor (Tablicious v0.4.0)

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eHarman23cor.html000066400000000000000000000102721515050116100322750ustar00rootroot00000000000000 tblish.dataset.Harman23cor (Tablicious v0.4.0)

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eHarman74cor.html000066400000000000000000000103471515050116100323060ustar00rootroot00000000000000 tblish.dataset.Harman74cor (Tablicious v0.4.0)

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eIndometh.html000066400000000000000000000110051515050116100317600ustar00rootroot00000000000000 tblish.dataset.Indometh (Tablicious v0.4.0)

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eInsectSprays.html000066400000000000000000000104441515050116100326460ustar00rootroot00000000000000 tblish.dataset.InsectSprays (Tablicious v0.4.0)

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000102561515050116100331160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.JohnsonJohnson (Tablicious v0.4.0)

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eLakeHuron.html000066400000000000000000000104741515050116100321120ustar00rootroot00000000000000 tblish.dataset.LakeHuron (Tablicious v0.4.0)

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126261515050116100333360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.LifeCycleSavings (Tablicious v0.4.0)

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eLoblolly.html000066400000000000000000000111021515050116100317770ustar00rootroot00000000000000 tblish.dataset.Loblolly (Tablicious v0.4.0)

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eNile.html000066400000000000000000000112151515050116100311030ustar00rootroot00000000000000 tblish.dataset.Nile (Tablicious v0.4.0)

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eOrange.html000066400000000000000000000115221515050116100314300ustar00rootroot00000000000000 tblish.dataset.Orange (Tablicious v0.4.0)

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eOrchardSprays.html000066400000000000000000000124741515050116100330100ustar00rootroot00000000000000 tblish.dataset.OrchardSprays (Tablicious v0.4.0)

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102161515050116100324650ustar00rootroot00000000000000 tblish.dataset.PlantGrowth (Tablicious v0.4.0)

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ePuromycin.html000066400000000000000000000124711515050116100322060ustar00rootroot00000000000000 tblish.dataset.Puromycin (Tablicious v0.4.0)

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eTheoph.html000066400000000000000000000142601515050116100314460ustar00rootroot00000000000000 tblish.dataset.Theoph (Tablicious v0.4.0)

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eTitanic.html000066400000000000000000000146031515050116100316130ustar00rootroot00000000000000 tblish.dataset.Titanic (Tablicious v0.4.0)

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eToothGrowth.html000066400000000000000000000115311515050116100325050ustar00rootroot00000000000000 tblish.dataset.ToothGrowth (Tablicious v0.4.0)

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000140771515050116100326700ustar00rootroot00000000000000 tblish.dataset.UCBAdmissions (Tablicious v0.4.0)

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000147431515050116100327720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.UKDriverDeaths (Tablicious v0.4.0)

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000110761515050116100325170ustar00rootroot00000000000000 tblish.dataset.UKLungDeaths (Tablicious v0.4.0)

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eUKgas.html000066400000000000000000000103671515050116100312350ustar00rootroot00000000000000 tblish.dataset.UKgas (Tablicious v0.4.0)

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000100531515050116100323020ustar00rootroot00000000000000 tblish.dataset.USAccDeaths (Tablicious v0.4.0)

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eUSArrests.html000066400000000000000000000137551515050116100321220ustar00rootroot00000000000000 tblish.dataset.USArrests (Tablicious v0.4.0)

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116231515050116100327760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.USJudgeRatings (Tablicious v0.4.0)

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111061515050116100344040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.USPersonalExpenditure (Tablicious v0.4.0)

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eVADeaths.html000066400000000000000000000113251515050116100316550ustar00rootroot00000000000000 tblish.dataset.VADeaths (Tablicious v0.4.0)

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eWWWusage.html000066400000000000000000000103531515050116100317270ustar00rootroot00000000000000 tblish.dataset.WWWusage (Tablicious v0.4.0)

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eWorldPhones.html000066400000000000000000000105141515050116100324610ustar00rootroot00000000000000 tblish.dataset.WorldPhones (Tablicious v0.4.0)

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eairmiles.html000066400000000000000000000072301515050116100320230ustar00rootroot00000000000000 tblish.dataset.airmiles (Tablicious v0.4.0)

    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eairquality.html000066400000000000000000000125521515050116100324050ustar00rootroot00000000000000 tblish.dataset.airquality (Tablicious v0.4.0)

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eanscombe.html000066400000000000000000000121451515050116100320060ustar00rootroot00000000000000 tblish.dataset.anscombe (Tablicious v0.4.0)

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eattenu.html000066400000000000000000000114501515050116100315150ustar00rootroot00000000000000 tblish.dataset.attenu (Tablicious v0.4.0)

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eattitude.html000066400000000000000000000111021515050116100320320ustar00rootroot00000000000000 tblish.dataset.attitude (Tablicious v0.4.0)

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eaustres.html000066400000000000000000000102211515050116100316760ustar00rootroot00000000000000 tblish.dataset.austres (Tablicious v0.4.0)

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ebeavers.html000066400000000000000000000106431515050116100316470ustar00rootroot00000000000000 tblish.dataset.beavers (Tablicious v0.4.0)

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ecars.html000066400000000000000000000116711515050116100311520ustar00rootroot00000000000000 tblish.dataset.cars (Tablicious v0.4.0)

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002echickwts.html000066400000000000000000000114221515050116100320330ustar00rootroot00000000000000 tblish.dataset.chickwts (Tablicious v0.4.0)

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eco2.html000066400000000000000000000116651515050116100307100ustar00rootroot00000000000000 tblish.dataset.co2 (Tablicious v0.4.0)

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ecrimtab.html000066400000000000000000000164001515050116100316360ustar00rootroot00000000000000 tblish.dataset.crimtab (Tablicious v0.4.0)

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ecupcake.html000066400000000000000000000104731515050116100316340ustar00rootroot00000000000000 tblish.dataset.cupcake (Tablicious v0.4.0)

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ediscoveries.html000066400000000000000000000106211515050116100325330ustar00rootroot00000000000000 tblish.dataset.discoveries (Tablicious v0.4.0)

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eesoph.html000066400000000000000000000106631515050116100313400ustar00rootroot00000000000000 tblish.dataset.esoph (Tablicious v0.4.0)

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eeuro.html000066400000000000000000000116561515050116100311770ustar00rootroot00000000000000 tblish.dataset.euro (Tablicious v0.4.0)

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eeurodist.html000066400000000000000000000101131515050116100320460ustar00rootroot00000000000000 tblish.dataset.eurodist (Tablicious v0.4.0)

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002efaithful.html000066400000000000000000000121121515050116100320130ustar00rootroot00000000000000 tblish.dataset.faithful (Tablicious v0.4.0)

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002efreeny.html000066400000000000000000000121051515050116100315030ustar00rootroot00000000000000 tblish.dataset.freeny (Tablicious v0.4.0)

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002einfert.html000066400000000000000000000116021515050116100315030ustar00rootroot00000000000000 tblish.dataset.infert (Tablicious v0.4.0)

    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eiris.html000066400000000000000000000121551515050116100311660ustar00rootroot00000000000000 tblish.dataset.iris (Tablicious v0.4.0)

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eislands.html000066400000000000000000000104001515050116100316440ustar00rootroot00000000000000 tblish.dataset.islands (Tablicious v0.4.0)

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002elh.html000066400000000000000000000101731515050116100306210ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.0)

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002elongley.html000066400000000000000000000115411515050116100316670ustar00rootroot00000000000000 tblish.dataset.longley (Tablicious v0.4.0)

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002elynx.html000066400000000000000000000113351515050116100312110ustar00rootroot00000000000000 tblish.dataset.lynx (Tablicious v0.4.0)

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002emorley.html000066400000000000000000000121341515050116100315240ustar00rootroot00000000000000 tblish.dataset.morley (Tablicious v0.4.0)

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002emtcars.html000066400000000000000000000124261515050116100315120ustar00rootroot00000000000000 tblish.dataset.mtcars (Tablicious v0.4.0)

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002enhtemp.html000066400000000000000000000104771515050116100315200ustar00rootroot00000000000000 tblish.dataset.nhtemp (Tablicious v0.4.0)

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002enottem.html000066400000000000000000000101411515050116100315170ustar00rootroot00000000000000 tblish.dataset.nottem (Tablicious v0.4.0)

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002enpk.html000066400000000000000000000113041515050116100310030ustar00rootroot00000000000000 tblish.dataset.npk (Tablicious v0.4.0)

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000103631515050116100340250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.occupationalStatus (Tablicious v0.4.0)

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eprecip.html000066400000000000000000000103651515050116100315030ustar00rootroot00000000000000 tblish.dataset.precip (Tablicious v0.4.0)

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002epresidents.html000066400000000000000000000111711515050116100323750ustar00rootroot00000000000000 tblish.dataset.presidents (Tablicious v0.4.0)

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002epressure.html000066400000000000000000000112301515050116100320610ustar00rootroot00000000000000 tblish.dataset.pressure (Tablicious v0.4.0)

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002equakes.html000066400000000000000000000120511515050116100315040ustar00rootroot00000000000000 tblish.dataset.quakes (Tablicious v0.4.0)

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002erandu.html000066400000000000000000000111311515050116100313220ustar00rootroot00000000000000 tblish.dataset.randu (Tablicious v0.4.0)

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002erivers.html000066400000000000000000000102631515050116100315300ustar00rootroot00000000000000 tblish.dataset.rivers (Tablicious v0.4.0)

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002erock.html000066400000000000000000000110441515050116100311520ustar00rootroot00000000000000 tblish.dataset.rock (Tablicious v0.4.0)

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002esleep.html000066400000000000000000000113051515050116100313240ustar00rootroot00000000000000 tblish.dataset.sleep (Tablicious v0.4.0)

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002estackloss.html000066400000000000000000000141741515050116100322310ustar00rootroot00000000000000 tblish.dataset.stackloss (Tablicious v0.4.0)

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002estate.html000066400000000000000000000130011515050116100313270ustar00rootroot00000000000000 tblish.dataset.state (Tablicious v0.4.0)

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000104521515050116100334520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.sunspot_month (Tablicious v0.4.0)

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102121515050116100332570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.dataset.sunspot_year (Tablicious v0.4.0)

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002esunspots.html000066400000000000000000000105111515050116100321100ustar00rootroot00000000000000 tblish.dataset.sunspots (Tablicious v0.4.0)

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002eswiss.html000066400000000000000000000140711515050116100313670ustar00rootroot00000000000000 tblish.dataset.swiss (Tablicious v0.4.0)

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002etreering.html000066400000000000000000000111731515050116100320360ustar00rootroot00000000000000 tblish.dataset.treering (Tablicious v0.4.0)

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002etrees.html000066400000000000000000000113431515050116100313400ustar00rootroot00000000000000 tblish.dataset.trees (Tablicious v0.4.0)

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002euspop.html000066400000000000000000000102441515050116100313630ustar00rootroot00000000000000 tblish.dataset.uspop (Tablicious v0.4.0)

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002evolcano.html000066400000000000000000000112131515050116100316530ustar00rootroot00000000000000 tblish.dataset.volcano (Tablicious v0.4.0)

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ewarpbreaks.html000066400000000000000000000111751515050116100323620ustar00rootroot00000000000000 tblish.dataset.warpbreaks (Tablicious v0.4.0)

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ewomen.html000066400000000000000000000113451515050116100313450ustar00rootroot00000000000000 tblish.dataset.women (Tablicious v0.4.0)

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edataset_002ezCO2.html000066400000000000000000000104511515050116100307720ustar00rootroot00000000000000 tblish.dataset.zCO2 (Tablicious v0.4.0)

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002edatasets.html000066400000000000000000000064301515050116100277330ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.0)

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002eevalWithTableVars.html000066400000000000000000000075651515050116100315240ustar00rootroot00000000000000 tblish.evalWithTableVars (Tablicious v0.4.0)

    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002eexamples_002eSpDb.html000066400000000000000000000077521515050116100312500ustar00rootroot00000000000000 tblish.examples.SpDb (Tablicious v0.4.0)

    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002eexamples_002ecoplot.html000066400000000000000000000150401515050116100317050ustar00rootroot00000000000000 tblish.examples.coplot (Tablicious v0.4.0)

    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000117551515050116100331060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html tblish.examples.plot_pairs (Tablicious v0.4.0)

    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002esizeof2.html000066400000000000000000000124271515050116100275070ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.0)

    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/tblish_002etable_002egrpstats.html000066400000000000000000000104751515050116100315340ustar00rootroot00000000000000 tblish.table.grpstats (Tablicious v0.4.0)

    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/timezones.html000066400000000000000000000077701515050116100262140ustar00rootroot00000000000000 timezones (Tablicious v0.4.0)

    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/todatetime.html000066400000000000000000000070061515050116100263260ustar00rootroot00000000000000 todatetime (Tablicious v0.4.0)

    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/vartype.html000066400000000000000000000064671515050116100256730ustar00rootroot00000000000000 vartype (Tablicious v0.4.0)

    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/vecfun.html000066400000000000000000000066261515050116100254640ustar00rootroot00000000000000 vecfun (Tablicious v0.4.0)

    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/html/years.html000066400000000000000000000064271515050116100253200ustar00rootroot00000000000000 years (Tablicious v0.4.0)

    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/tablicious.html000066400000000000000000026611741515050116100253770ustar00rootroot00000000000000 Tablicious v0.4.0

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.0.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.0 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.0/tablicious-0.4.0.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.2.2 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.


    8.2.2.3 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.


    8.2.2.4 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.


    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.2.6 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.2.7 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.2.8 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.5.2 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.5.3 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.9.7 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.9.8 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.9 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.10 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.11 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.9.12 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.9.13 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.9.14 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.9.15 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.9.16 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.9.17 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.9.18 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.


    8.2.9.19 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.9.21 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.9.22 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.9.23 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.24 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.25 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.26 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.27 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.28 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.29 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.


    8.2.9.30 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.9.31 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.9.32 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.9.33 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.9.34 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.13.1 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.13.2 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.4 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.5 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.6 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.7 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.13.8 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.13.9 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isfile

    Not documented


    8.2.22 isfolder

    Not documented


    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.27.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.27.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.27.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.27.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.27.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.27.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.27.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.27.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.27.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.27.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.27.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.30.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.30.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.30.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31 mustBeA

    Not documented


    8.2.32 mustBeCellstr

    Not documented


    8.2.33 mustBeCharvec

    Not documented


    8.2.34 mustBeFinite

    Not documented


    8.2.35 mustBeInteger

    Not documented


    8.2.36 mustBeMember

    Not documented


    8.2.37 mustBeNonempty

    Not documented


    8.2.38 mustBeNumeric

    Not documented


    8.2.39 mustBeReal

    Not documented


    8.2.40 mustBeSameSize

    Not documented


    8.2.41 mustBeScalar

    Not documented


    8.2.42 mustBeScalarLogical

    Not documented


    8.2.43 mustBeVector

    Not documented


    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.52.1 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.52.2 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.52.3 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.52.4 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.52.5 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.52.6 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.52.7 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.52.8 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.52.9 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.52.10 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.52.11 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.52.12 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.52.13 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.52.14 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.52.15 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.52.16 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.52.17 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.52.18 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.52.19 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.52.20 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.52.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.52.22 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.52.23 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.52.24 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.52.25 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    8.2.54.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.54.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.


    8.2.54.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.54.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.54.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.54.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.54.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.54.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.54.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.54.10 table.end

    Method: out = end (obj, k, n)

    Last index for given dimension of a table.


    8.2.54.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.54.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.54.13 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.54.14 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.54.15 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.54.16 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.54.17 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.54.18 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.54.19 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.54.20 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.54.21 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.22 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.23 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.54.24 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.54.25 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.54.26 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.54.27 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.54.28 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.54.29 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.54.30 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.54.31 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.54.32 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.54.33 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.54.34 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.54.35 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.54.36 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.54.37 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.54.38 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.54.39 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.40 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.41 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.42 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.43 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.54.44 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.54.45 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.46 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.47 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.48 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.54.49 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.54.50 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.54.52 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.54.53 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.54.54 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.54.55 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.55 tableOuterFillValue

    Not documented


    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.58.1 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.58.2 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.58.3 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.0/tablicious.pdf000066400000000000000000016525161515050116100252030ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 268 /Filter /FlateDecode >> stream xڍAO  0QdM=ۚFm# x{N yм&`=^^^/ΒI5 aRwްKoP9x3d&W!fE#؍n+N s, {+ >o|hao<2oM),qtB&CKE_@ei^ endstream endobj 13 0 obj << /Length 668 /Filter /FlateDecode >> stream x}TIo0ϯHűrlRNUŭ2ce#cL%|oa KjZTI;lh]SLy}k6wR&,i \ RVEtɟiqAۼLgu@~?DxfvfD%P<2Vk yY႑$/yB ϣ] B8ܗKD R>z)c9y _H?2Cf/H]UX@ozŠP"P  *z ӓqvQJZs}nP†Ua ڜ0 ^aCE~4N{fi46;~ hebA1<]Y{lt>@5gI# @2}C.u'hJ~р?]o":;%(bqqV⢟WU zDB/m];OPwHc e 6#^6{ y.҄bw=<^x-yodyiT-[*ȽoXT:ujMSS3n֤<>ڃwlYe"*0Qgz6nG" endstream endobj 35 0 obj << /Length 565 /Filter /FlateDecode >> stream xMo@{^<ܠUPjqAL-'r{^۴DFBU"ήg>`9]\ΌIY=mY_Ϡ0{dRS YqXnhv*sR_btr--20AvK:qo&0*ԩ$x0 ^ ՐfAY/EG@{ &#8LM \S˫jtJ-&uv"8>0҆+Ҹi^>)և=ڃZsWU;&;>T`G?%Fhɏ=9=&+:hNWMޫ.-G'n{|o|*;s%NNuV%8Jq$lPoaTŹUAd-O endstream endobj 124 0 obj << /Length 1476 /Filter /FlateDecode >> stream x[nF+;.u E E Z]z];m9dΙssg'mo!8ܸJc{BNzѤg:=Ө^Iq~G{ZC{ҷV  '׳t0F7|ixY ~)}AVd>-i!O*>n~9Aq0Dm‹nuŧ~.%3 aBOo(i4* xsm`*O<V'@ e +(E@#x.i~z+Z*'~N|G Ec# ➦ hc+*w»*6-EՐvWK_7B  B=4DŠAbp(|-?"1ɱ%ڦIgl;0$dŏI^a7rZ#dǴƘ1Gnp3WXެH^{Մ`=Ne%F|V1p tHڢ i : \Vit敲pۿ]S0ΦC4іNuN20%E%%#U 6ED\QJw9%d0Y[);^.\uź:rF7%@4`M(ϊ =&t$}%vC5[! Iy-Ltfmt,p'k]K8I}AS O'N6>Lp*2\V̩P}-z\ r2__7zV>~+VZiw uR m4߆{]hc:N/F]M&jd˲ȺfxL7]5'UXT-q%$t~UzQ+fUn@JzRL-ZSEV-}zq7i.i, 2𧏆D}lDߘcʒ>׾<{ܓՃ+?"T61pS94%b] nñ߂|_, 0Yi.ϻ$fO!- Z.)$, endstream endobj 228 0 obj << /Length 1354 /Filter /FlateDecode >> stream xKsFfgz96*nID`/m@JV$V*AF*{,sb 6=?_c܉ƙ߯}2`XjY~ $: ~OOw?KI,)2M %VM(p2OҸ(wdDr}w+x5~n@4L+Ni&V&mhxpٲ&\%bl#uW})p&IO)'x 0^iRIv܈`r]drw-vƘNڹ.pڔⷵRT646 h UxfPVV *+]8âK8y]h;|IXzE,а$an_]oA€ xcrj)1x8GX[ʢAB(1oFjm%@#ԕϯ>7WNܨoqM ˣ$7D9?-&xFh@: 0c'p7Lۭc5y?//ۇ ny6^]\Sb%/=4JمCaȬ 9"s,^<]W-cPCuISqYϦ",S̻8ڟ_tb9q~΄ RnYWG3^ / JBxq*K&; _"Os)TQ($`p:y3όsY9A5,F9 ӶqI$N X!M,e3t㫎h>sH<~!JkWX|"tQu3 7A4#ajԚem5VPW=Ye^H 8բJ:9yg*<7|.o4㜋}~q̆p2ϷWQ]:oV!䠛˶>? D֔<όцPIB x:xj~ r9>6X="Ƴ 9716c799t@P}c^߮ujf)CQ?mj/#6gD,bb4`qZo(Qг0=; rsC ?i O2:%/oNo٢wjU?6M8\BO u!m{` endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2397 /Filter /FlateDecode >> stream xڵ[Mϯ1pXE?A$aDac7X1DZNtǏb$!F ā\BG E UP*n7#OGȁ;duT) qPHS隆5*d@3nB2|q.x&$ @T:>pCn=CP} JjP[JࢢP) JCk%PZJ aW@e|YUJTM-*Qh*'4 RUh065Ok(Qϣ =A|HHHz cP I};@I7{F@<*蝁*h*t840qE`%KGe`:HGЉt$" I:RIm<+u|C#/6Oчrbcdx'\N/^opN?=??}}ܚ_6ዊ*Nxϡ󶯾ȯ^Wڗ >q>>}ޢ/__»Ś->Z9u;*t~)@9ir=;}T#(" +؊l`CaCaCaCaCɆ %'*gN4ϧ7?=NEGcaU)Ѩqlr2p׳_<R"jQI;T\}1bGȈE68ѩ81a!ajh k9dH+w ZM=6H&Ѷml*cȓ[k,"[6TmT3#"#}/7帑8ѩ80fi䊑4B —Wz##YSF>x`4$01Jls)o#ä.$š7u4f̖d>ex-'81BJ-~i暟qߟ!I4F,KcdHLX2$ CCR J5j(PTCR J3f(P4Ci J3n(PtC J7n(P C2 e0a(P Cѽ%{,^zښD(.LgBiGk4U9}tD,.QOb~.z *_NRn[}Xh$S';A9r6\o)}tGbz ӮȈ//MFq v`IU$X{VN9;z0KL/9񾆼{:TPȘH ֍*tʩp<8v_66n)+dتqPV8&y T:B7iRI߶֌ifn:aC fq} ddǿʦS68ĝkꞐ͓`}m-iݤS5:PwՂu2W3f95n;4b  l[o{%TPlcfāX7hSFC g}HXQ$:ԸoiѢ`9 [`,lո8ƍ|ƮϥCm&cҬFR%;$"iuW8FsjwhFmhhzjzM4:ԸogjGɼWsN~fM]P|,fsjwhDU$6:AitΩq#e [4{T ^ID-؅σ7^_yn#UF5 R(Q5W3f{ sxU:?WM_Ÿl -ͤ\\HG$~6F̳/RKsG%ܓ@nJ w%} rg5ܛ@nN w' ru<7)m >rSܪ@U 7+P[fTsaܱ@nY ,] rnu<.{ r@` 0XvuìM &vnb`71nb`}Wϻ >^=?ծY=t(Fhk[Pؒn ƢɶԽ r*Gw(D0x<5R# endstream endobj 336 0 obj << /Length 1359 /Filter /FlateDecode >> stream xrH~ -͂_$UYN,mUqq@d [U>>g|LLR l ھ-C,hy)/|.U RiOʆ1 \gCґq0$v*/r T?]l\8=CҢo,z `Gr5jkl>~@<~]}oT Q yAˋݟ5r#@+b[S߇QehT# q4n}_`LThZd*q^yd@qupuó!R[mTCNNDx<[OoSYNNyk:GZ\VQY~+y{@Y"qk.ĕ[(@ZܧV&,ei!o׳ H0#&J57r`ۿǒ}t ;h8  (=6u*nIkOET$Oi[GhOe&]E@%HíHGݮd3Z]\Yl=C 4I$}w8?thvĚYrH[-9g.SjKJnMeQE>B֩A}IM0ãљeiP``Z\' "z&q>-|E"!4-NTbY41;˙, .B@8=<m2@ (2Cdugݱ6kf;Ҹ;Z*A-VXJUްmF{x *f )4>׷ YX)'NZ֖$93>OjL9=GST\v1smra΀4nxQ 1g("SD4xn?Dv:W|*U4 endstream endobj 230 0 obj << /Type /ObjStm /N 100 /First 901 /Length 2062 /Filter /FlateDecode >> stream xڵA+xL.b;r!"/#nZο+NML $fMYi:QGJUgkeDLneQyj>8`ýR]= Pw?+kӋx:|o?tǻQmO>>w~Rw59TJxQooeW_#u1u#՟)vY)cxnD[@1qԒs3&Y]>$ЪZj_\7b ͘w06#Uø:f.cxnD+,aUbV1&2^=1oez.cxnDq4Q;T`쭪P.cxnD+0E(|:[.s3&k ưQ"#&J"&s]U,rs#&Կ(;XLad41fL;TƲۑGQV.cxnD{=_YAu EXnDl}<}ixtgzlXb%JRe\܌~WF6LMm?jDtO@bHf Og;bKWŴk6rs3&ˆ/5FeRjss3&w/EVՒs3&+oEy9z.cxnDW*m[VL:왩?߈1<7c[_Z呋1J1rOd2DP (ynF1ٷ09@d܀~_ls]s܈1<7c(}Vd܌~#kmɸ^J\܌~#5i{$3FƶG?qIf ͘we$7ᯌmS1`2h7{q\L81yc LIɌFB9cO1Ms=7b ͘w0ma1}'~W1`8CK^ɌFӏD G\İ܈~bqޢg 1,7bݕкo?frG0t<+7DfUTpt?]!]9?ZӖy.e_Zoί>͔뗯/O2ϻ/P_S|z/˥o~7\P'y8}DyuQ/v>&K:"K:ZiQ~Dq-?#HWvI%$$$$$$$$$fЛ7Co z3f[Bo z+V[BBBBBBBBBB.zZi#J3RtEzzzzzzzzzzz=zEr> stream xKo6:s[w-=l^TGMYH2cSȆ,fpp㉑9dv7>>$ۃO?߈y#:qT:ݭRq'?ɟÿƿ4~x-h Ñ`NU>WzweJ0',yslʫo_62I{^$G%#!P ҏ>A"V apbXxaH`ĵnS]t_Wv,W}ծ~E|(~ࡗ 9RK?tCouʣb(YtZE^+3XU>B :P.тK\鍧?\J^5-|8҇<AC'>GHEBI&I1}ӽ%U; .ӏݪ?˧Ӽ&׼8,K}c414C+Sd~| 2S,<%,|e>x h7VFD*kvW;|..ڵ bUE)p,,^y>BȋPͬWÐf+c]}mlGM0P5%QyȵY1}O}K÷Ic$NC6>(.9͉ńʹJWğ1_PXgts:N]Ɇ5i#SudlAC̅WSK8RriyK.uhgtlo(j)|Z(c1}\̳r@MUݱ,O1IE"j\ϧ,z-9re8ߒ@9׹ݥ.)mǸ.z%<^Q|ކЮ\-zWY)65Lޭt*9j+ָUZv5KurA K KУ7E'pS,*].EˠmjQDP@5IC ~FAҍ`ݝu˚#z.!3/HlGU$ c*Mۚ#I~ b뛆VPHd\aU UeѼ03fAиD]a=0u[0ڣ@i[fE endstream endobj 339 0 obj << /Type /ObjStm /N 100 /First 900 /Length 2057 /Filter /FlateDecode >> stream xڽ_ScRI%C;%Lǰ9!g VnZ-;Uj}D* bZ7/Fi !.EhU+5DM&^|"vj<M=jPO>ݦTO.akm&yHmw wG ѐ62*AHl/ex$.DSo`4;d`0`JvrQ e̞|U a1  ` aP^BXp:YŶ&{-EX*O*p?Y=Jh*;A=j\H.uVʏwr#u8{r=~eLO E~ (uMdՓ#J&;Qlxr4 (iL523G Z MZ"iJZDAz}e* ?PhhZd5O' qϡ_03A3=cIVAu)CDw/^]t_~|O?w=|ޱb.C;>ed}K/^ ]~./7MK|s?gvEzvNF"(oSe" Ci7b ͘w2QP}zK˭X&Lb/>еUl*sT°tLP }/c6˨ɈNF3a ujNQQs3iZZ\܌~'(}^g<׍s3&f@}rs3&(GcfZ0e ͘w2Z*vǵYs3&];nخǾz#j鈉v'!Fnδl\6!FL;|#8!ɌNFbOaZ1ť/ V _w.5܄v'a[L,{Cs3&XW=ٿcxnD+`6vF W͘wqDq3U3o+i7b Og;D9،:1db4cJ.cxnDƾ7nG=-+1<7c໷uD&!-1<7cɈ{}>4\܌~'#8o3e Z$y ˍgw%l{c[Z܆j鄉v'v׍z1:iFֲ?yÑ\܌~'㨅g,*2fL;EKeԣʎ3k~#܌~'#mf.]f.cxnD^76s3&]ysVhXױTƫfL;1vꌾ?gr3NF岏Vc>g1dZlոcxnD{9~6VNFVQ6|%3fL;1vO?fi 2fL;1viub ĕg 1,q)JZG‚Zys!9~G펰E(Gxns#gEz3fЛ7Co z3fiiiiiiiiiiYYYYYYYYYY[Bo z+V[> stream xMs6Q>I}WDrzpzq㥠)Ґ^b1Gub[6־>G9XQ-m2 f`Bـæ-E_WI8iD<c{ nOvh.ePV>3^í 8gOi$cˎdxs;.XɅ䋲\aofFZctn. !yh(W)М4W dqu(v_0>׀^X|ԣ颤Q£0vUp؁ASQAR>ń 5ө}^x<5Iט;>|/T- endstream endobj 449 0 obj << /Type /ObjStm /N 100 /First 903 /Length 2049 /Filter /FlateDecode >> stream xڵы]_EW3F`I҂6uvz ot瞐MC6#}I#it:J+]g!bV *]ъc2 F/s J)j̧JD ~ vKRo=l41tg/_MpS ӠSy+ܬ6o B+kgQa\U^z~ țxik9t۾Z)S,.Ҝb"ES,-"]N} >o>ᗬWV41I ◤` iQ|4a^y:VtW^e4 ``+!*19zb~IP2&@Cg$ 9pdt0{'TfD`$e2M$k7KVvU7VS1=Z z1C$HbI`SYmྗk`@QAԻLmBھ}AHPAPEAP3z \|XÆ_~c)ULtx ৉i%>I&^8ǻrt~_O~˷ ;TAmAV=K'|Y^(7?/8.З~\0Z)cxnD+.Y[m 3iu!2YaTU[2bxnDqh{Ն3Urs3&j ׁ2Fz.cxnD7PXұ9s3&,G"9+V\܌~|D6EnT;Ge_^Ff]MKNu\īFL;MDjئ`/F.a8:a8 giȦ`krs#&7vīfL;nvz.ޑ˱h.cx:c8FZ 19"z.cxnDQ#LmO>s.cxnDQ0hs.Ε<F6Q~Je ͘w0b^c*+1<7c0EsjO:r#] +,=xtLqc7cQdk'g?s|>wcxnDQ8D%3fL; !7O,N\ċ&L;̎kPG.bxnD e^Kr&] {ɽ5i\S1`4du,\tLqJ}—Ug<s3&]8N8ːK}K'Nr#܌~#N81GRs+s3&8 8Hf ͘w0Nn]8X*rs3& yȭ^"F̳bgt`ſxf]&lgHUmⅣnhst+ߔOtQ~xwi˼R-vO  endstream endobj 663 0 obj << /Length 1434 /Filter /FlateDecode >> stream x\r6+BpFwq[w&t:fvAK\r/H!|T0i Hz}{/ _hHJf*.piL.~Ykś+Hc DŽkPdEޘ_.~=2ʞeHQŐ~xBqƓ*3TfIZЛ+A`~@ȇ%h`wH'8$3j%\'3Kn.Ĕ^f\Fb/RP pȠM|5eEm1_e24BR*ZC{D/ wwJ CU:]'&ivU H >fYH60^DH>ƅ6AfΊK tG\SZ9JD"K0h*3Z1Bln{1 "zHp9P8*( ?nj, vv+A _" h광U,ER GcӢJおT ptlnjLoX?|_3z Y#˿Mh &Y7..6|.IgՒ" AaFـkL""2F\QLYQf*"Wb۵@:شu,39~^}dO^׫(_+`joT} ]y n@ǔxyַkzP0 5by8_a$3f .gG@.ɀJ Uʓb=9\wC>k4p:.up?ipބJ]\Q-9I}i`=ɠ`Aɟ= p endstream endobj 557 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2043 /Filter /FlateDecode >> stream xڵ]ϯeFGfa7ƹI}%LaN3$$S`Zۏ-6K+bYJ)Aڋ~g۱UY%1<7czKBuQE2fL;yhÒs3&]jHFQrbXnD6Bd#V1"FL!bT&3Zm>h7͘w0NA=ut|I%E KGL;Uu4 '\°܄~bH*Jz!܌~=։ȨgG'ãGZ31<7c}< `R.>Ve ͘wj 1o>=cxnD)K:bڑ1ȫ^ҥ7͘w06e]g<3Fݾg\˺$1<7cvh+2fL;c >v:Yud܌~cؿ٪Ie ͘w0^c=vpqrs3&軇fnCrr#;znL|oVuY,0 J5b>>Bm1`4߆*a߲鹌FmXG6Nf ͘w0_$yknǷE ˍw b3ÇT-1<7c~{V0h4kɈWMhw#$ۺUim:4ʧ=eo1`4k<+35%1<1`ztFtqhLOf ͘w0d8Me ͘w0^:0{ԽAګ3 y!܌~#zw1`$uoVFa+1<7cOo|ћ#qm307a p5!_'תm7拳QOoZc҅nU5TFo/|]q˼Ao  n߾~S/>OP=~)f)}|St=ˏ?+jsykuտ}{/v-R6",q݈F#H5R4FЛ7Co z3fЛ7Co z+V[Bo޺YkR=RT"H-4((((((((((zC^AC^ĩEZĩE^4Jӫ)^^w|0C,J;G^BU-07`) 0;<7b(1m%_ԮLLs3&}U, VEɌF̞y>4zp_2fL;_UQ.cxnD|}vLӞI__g. ?y 3 endstream endobj 780 0 obj << /Length 1505 /Filter /FlateDecode >> stream xMsH:|qv.o6YAQYHDw$]=hH, Gt3ClH`pC hqlΛ'39{u!D@02ؐ6X!"H{iq5I˳ZR7yW8ҌRsdU#4j<iR424)|Lk+.? ]Y*Do=~z{]HO & sD &>FXA WH@/y׀|2_` qw%FʴS30eB rlֽ!7 6W t;z$' F`)H|y]h(_}*82-p1mTe kZ߫_aoYV1AcGy1i5ߙ"-CL H6$ct/.^~u [6~I_b3;nޝ2C?y ^3ljƣ?`_]\4,;a@ʼLm&*f*QS^U':}/ɨQ4l%ZM"`|0:@%ݘ < wI!JRu'G+++cW6DpړqcmK)SGĒ Pdl$J,LdT}Cû ..v.j`򔃩kQݖW q `Ӟ.6Hp9Gg@Qm|mgj(eg?pcAqc(fOx-*;6շM}I endstream endobj 667 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2102 /Filter /FlateDecode >> stream xڽ_ܶS}rpHF퇶gQ wn$b_S+GQCK*vJDsC)IdԤğ~KcԆi ˩!9';$6? j2u[!0=qQ?y$&֒J,0nE!MPݰ!K<`%)ѓPGdT(dH)ĔvhUI@sY2䖔ITNś:`S3bNZdž$N ? TYp~'/{ZZr2wCj eЙuSu u+n jzO۝B9$p9jjM*=ù!ZGj]\ :WGD;Xp} ^2>/5{S@u(B~+Z4ј_Gùq穀Pv] [{% ٙ#ބ>Mev٫џNݺ W퇽Eg޵ [I❛fMފFԪ#^8K:|:}:)|8\>=*#}rGk2Hpŋt~>{LO9} ~]${sl$K%;bXNą~;DC2.\2Yq( GrwUH`y İ vD=&̟Gnc1cxNƅ~;#p=+OLuLo'9&!D\G4rAu&M%렵9{Hdѵ8 moo0 .۞DFVCћTF>W䎥Dpߎh0Χ]qΈ(Sd kCYq(tedUsw&vcxNƅ~;#v74,ULzmyNƅ~;#vsD #r_x 6BBܮu\[CT-5ܙBu vFiq̔G3jtƕ~;c̵_w_qX{&L޸>j~{J7ɸogD|As^qΈƿM !wa\;d\34"[ƈ1<'B*LNr{bJ96ˉn#_gƁ4F4Q C[g5L}!f7j:v~1xxezoJz?(qI_~vΫLJ)ʗ\}e?p㧷\L:~*]~~N]N@9hS|~]_wy+'y>՗tڝk9k5EzQoD=(%7BoqkDIQrFY([=УУУУУУУУУУЋ{888$$$$$$$$$$4444444444jЫWC^ zZE?kzP5 = = = = = = z-Z赫އH`IJ%Ցݎeћv;a+$4Z°vZ?/PyNą~;#&#'D<{zbt$z vF!O K_$Bσs2.1`h.Uh-cxNƅ~;#f,=И^n~P~pݾF=t`A{S?9-c41zR~Pzk^w>v*Bwc^ᅯ endstream endobj 897 0 obj << /Length 1540 /Filter /FlateDecode >> stream x[MsHWLfzznm6qC*P#V8ίߑ#9-Kv-AMw3_"pZNǯ42, yDSNXX na>:<,[ޯ Np6##+H|?<tx ~Ni/IfG㛂"+;=E|+r_|Zv"q(|myyζj@tt$4d0:)*:;9ڕ|xt0 0Hv뀓i)y 6/H uGnmb8EWq%wsQm2?tytM^~_\0Y(z1xn|dfɴ_K3Z&ko2o ]5P{zKrLz!؍|C2Qsi%_ t2)-AR3*#. \lvWzzZVReJ'K/iSNq8XبhHU/&÷t!A}DЙsvGA-(\jƫlU{p *7XuQ*9IM+ָп 1e+$ٶُl%1OWNB)'D$$4!Q_\ %2ya<d,ORZId|/y3?\/^o;Bmz,Zlt>?YCx}kaw!l MҼis)[^ #h׈{$3L ,}̃M}Y.QbeڟOVd[ʧE C`5-> stream xڵO)x/A$`DAc7XBi'Vaɮ.vR!犒KF)ATPjjPP{˥ A1+Cād@ڡGRT5PuFCdMáL!sáJf پլ!7`.!wC5p*qR9֚Xk,[AQ˽KP 1dzaYu؅):Up+n})c";ՠc =(bm1`ڡ9h'PR 窡dsW WH Ƈ :RKjP: a'pZpf>B/CXMH֨Zv&@R0MCvN?T =pct%tkf0uI0tU]2Lфn@duar&LjD Z0ja&(`wmgSaX$ɄT0kN//.׷-\{xx|\|y|\|_?>>wA52fDsb]x"\߄>&߄og)c4-eLu~t&Ԙt1[ą~1#b?Ǟ}O==BH nE9E\=I9+w JQpWTcIkwo2Br.f%]}z[BIX9e'{NBtρo2"p+nZP"bD &"F A[g?=BɈo@K3MZF Ut-_O'o-lIX鴾SҨR{I|9ܑ/"M6Ɣ#!swo2֎~ck6$F4ƕ~ q+&C2`\7U#:nX?.~bc &$"GVe'5vˁn' c՞T@FnV,37T9Mb}4tOIi9MFM?;Hlʋs0.V"Gfe1 +J_XqdȄbH7+ 'ejmajZDs`J'Q\iSR񜑱AXGcYL9\i8)YR,Q/&|RIY-%dKBTNtApRjx `o CŔn:(WNJ[ 樜L$J7+ 'e2cEks;2-'Q\i8)ȋr h@-tApR"k/cIS;'A\3~W9+c?Bw4n;_-AG&E~`tK^w8z?`{ir ~ΫLJ WA}U.]_?=~|sCkWsxP?vjOj?7O>ެJ?~nvt-?|Rz5k\^szu]oz>dx6PPVZCvO "+&%eMC"A,{`F'wo2Fۀi D+ :It@4xm/xVb5s`zw7+ '%m1,z(W\i8) YnKV[X,tˁo""ߵHZ[*7oml+a󤅯{ p+&#xۦ{LLOZr,0/OӖ$MJ/`Sx XDmWjoi&yֿ endstream endobj 909 0 obj << /Type /ObjStm /N 100 /First 889 /Length 1760 /Filter /FlateDecode >> stream xڵYێ7}Wcx)dY1x ϴ!㖡Y(c@]$ԩ&Y*!s|gxfK̎bgOImL nS8AH'F!J $ђK6euѓ+@N0D&oJ"yeSb"E%<[cWO0T1ؗO^J+*a ީ$RU)Ĩc U?IBUtKf#1)PQ<$8[\K`*RpI)SE%b0h)&?В)kK) ̅wх@%)0%B(MQ.L -4 q$uxHIX%ȕlE#UhLqFA# -,馺*IA# hf8\ &Ad YF^nĿ:"G4' (%j`rQ ”APf (zܲrҬʪ^ah̬Zg!Sa͋Oھô=py}=OC0 qCZ֤"gccmh́7s7  lJЄL& ^#Y6ʲ'9Ye0b59ˠ^e,{Yd,+l]uay,{, ÕBipLa*ɞx3L[3xCW@H6J'2YvA%IJV=gMU ^`LaV=g|T+|% 8}1I@X6ʲ'F'W&r̲V=,V\Y[uXA+˞({o'PPn^J, 8xtzłsSX,hepf$qDH8r̲V=glJG2t3ZYKCgԕz;3ZYYb8)(&x|0,kǃr% 8N/gQv&0+ɎxgXUHT1k+]1cO#qNCH=|6&@+ɞ3˄rRy,sI*trƬ${$5No3k2&0+ɞ3ɀw9N7.hDl̲V=g8 o Vp˞3dp<;rxEXWPƦ$OcO3G'&]o<җ'݋Q sO/\5PÁ9upp\Mt`P+#@5]g!0a8J7ZYyz[Du|~|<0NUmTNcoQw8&wtVoo_w[ھ~iҰxxxZex1a/:n4իBBݻAG>avcmĺott?t,f즊X;Mm7ʥ>|w`wa%~?_ljRzeY({Sx?-&TDplf\,VI&r endstream endobj 1001 0 obj << /Type /ObjStm /N 100 /First 957 /Length 1054 /Filter /FlateDecode >> stream xڝVn6W蹴&$!A1rEcZ:Zq>(w`QR#Ȫjye$"2IHx~iFXo'ҔxHvH+H)Ql,ZPBV'HK6 aP"(`"H V(vPU"tQRh!J>Ra4&MhŽs #$…z.efE:"5lR.x,feSX;bl-t`g q"㑦*EbIa"a,SBaKҘT|A>gILpLu(1HiD!/$AkRH 96rAС# y8Mb$d '9لAsk8CBs0@(_hN$!94'7p>!G_`ϟ y 4wٷ?>~_/c+ĝħOCW6/_N&חl(^ڮ|ʪ&DzQSoe#GUe epcvY_ʚcaf GV\@_ ib_:}ϾϪzqׂ!Vg7 )<.f,vwqۈyޜ,j#pC.ZOЭ\LedkBM[8 \9c\u ߯-cE6kyZE.79}x."_fMwcX:6[ol_iԷɁ[oZ.9f&յЇ_%m{ cx+: Dgye$ٱ|^V(*^1)5s[b3;xV;wXVoͻq~c{Eslm+srYF"!+s1" Y.ոcp>fA{X\ ~yg=gɻ]A endstream endobj 1195 0 obj << /Type /ObjStm /N 100 /First 959 /Length 956 /Filter /FlateDecode >> stream xڍVM8ϯqs = TNS7XPan_6\G}Ce+ uU*[2(mBU_bhX]Dҡ)4 K(cNJJeS()QRyVYc@4D+WGdqʕ,r1bnlJˀV+V""^y mP>fG^a4#;# GdJU53U88 K8z0߃]xAt,#L J B%inM,+v BiPSK= (mG b1 Xaˈ!!cE Pj!PVB.եeJ6S- d@]5 &b]p ,:D?o\ b}ICm 6~\O#ƲjZXPPhȍ5i`&^ 1Tj,,,-䘆 ͍op܈n `!-͍}pcKFՈ!G\}XRR ͱ}}nyڏwrzzK=~?I~7ߩr1^:&s}"9Yl_Rn`ţ?kB<ߦ"A;! V.+%o\'F勍M&J7 妮Y~WW3cW㙰mNjL2lХݖw-Biϛv,!ByƩ b hK߿3w|C_B;gf8?Mg@_ zn@MwsߧvOs g]zHIgɄuG󼱁HwG:WP 8ܽCŠP^0oŠxԷZMp_垛~h;fhq$okIE[kي endstream endobj 1396 0 obj << /Type /ObjStm /N 100 /First 952 /Length 965 /Filter /FlateDecode >> stream xڍU6 Wؽd$J,`v94޽;kq)v%i'Vf/1IɎuu)BWӂ׵IP7-I(Elz4^ dIg%3JAř]OA^Hi/ 8QIcCrrf (4sP8i>x(n0tg A!!G):cHJTxPQܳ5(/-*O-% Wb0?k$mXqUwp2b?!K'/kJF2]dLrv"*׈(ID C$vFidH\lG*ʉ B"METSQO̙֒HjIQ1I:+F5m4qhH.Ј)ĎՑh)hEyt.9Z={ΰN1){(8=KB9:'{LJ><|kxm_@}ӧ-L eFְXfxUӜ`nٖ}[晫fCV'n{b[w?v ~O?̙IG}eHӦϨemiTZ;JֳUj]4uWmvY'ؙ:,X]W/gְȱVKջ-Y]-{(/sBo-8W֗i.)D1Bůu[?C$j(v_m;׊ Ӝvձ eUesMu.wպo2 ;YNN="w_ʹFFwj#2?_ zios8 uzl? 2_ߩ珗䲚MݗC3ީ/1pVWtO \? endstream endobj 1597 0 obj << /Type /ObjStm /N 100 /First 956 /Length 970 /Filter /FlateDecode >> stream xڅVMo8W{IGR mmׅKJrRʎ-TzμhJU(WV$N"YA>4˹GE! =HJyH+ )c"LRT*(([b%lٰrՍW΁lĒB8UZly S(NgXq@+јL-6} y(!YCjU # i6*df!KjEZ+{rx^t*%hˇNPt@ ( F"!:5JLm`؄I*6"a0[- 1v`U;v%3%7Qs S6HoSJYH Ta_%(Rçc]$r Ѐ0nF:`ŌB(XMEjC X̦יeT9؉'~yA"F]q4 `0J0l2s2{iLJ<'K!4ERrZ԰g)I?'M=WO_̩6u|F2/]м4SXNw; ' Yj@&Ng(.!NW=?0}uVN{ʵ^a(bS F$?3d= #2A (~f.IX~0/tE,3w S,75MSu[(dp:lí^댮TUmui)ڪgXFS_zO5l7u3i|r=wq(^b}xqF2zsyM\<64圍Bye j3]lf\?UW#{~Og_&}o%|ݿӿ٩k_U?>lzS-,ҿ endstream endobj 1798 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1039 /Filter /FlateDecode >> stream xڍTMo6 Wؽ$e-C@Y3$j5uHKʶ_JqFJtR%8 -`AK{jT쫨) P<^VRWeƭE`n0n: gYRic8- {RED3t9f rEVe%sXX 1U"Gռd@U^ F,9,C)yAUaXJO9[e,x] YF%-rԃ=3Hy (G]H#ꡅK#A-}p4% :mAO x~FA~V9&pL3/y^ ϑ_Eԃ!^cg~mjF|r32~wA7i#au g۪{3KkCL?mj.;Sꦄ3auUᴻ|56M[5(vCէ8"{m{_^귫٣9=N fX&&!}ƛt/voÄ P\ڮQ社Ot3,n4weR@2Ȃl@46e9M^{@y_UBX $1NN&>TmL6U?G>'T~L8տH-wczQ-m12 Uا>ݦi쓋*;ZМYܒƪ9%~cniE|—똹:~??*=>;Q~$\}Ȝ\Tiq^End-j^y~9%MDۓ2{q_Һ~DlC endstream endobj 1999 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1075 /Filter /FlateDecode >> stream xڍM6 +xl.YSL&$MI8"sךEWW/xǖ7驅34Y h4BzrJ(+V(džW0%ZvVFjIm:{q+6ߗE*];m_zxJc~X)t},߆q#|*bwpO]+#DRᅦ;aǓPGS qoA#O|CL> stream xڍWݏ4b D|q|Q8T(TJ< ʃ7uUt?쥴:2όi/ߤ7u)`6MwzxۋL.$:f{yrm"}yl(ϲ<%Ye^PE%r>-ɋ,8 |S#kYŪM:XؚNúm' vXH)_*:Y~v#v`в7 眎0ZeIn:7+@䣱Kt0N0^IlJDjך S0sR޳wqG#K22҅Y"^7qPD>X}2ͣd ^{NaQr%Н3VSU# ٪,}K)GkI*YU!Uk4Аk-)iE]C漟"$whЇn[|TX2L$ alN~![FCCVX](M|"EUGTG}ZnnOAA: Ha]gz9jm,sI$H@Cd6rw8h#AR({G:gh;أ- }]4)mAɪ,m e aqz07?x+t;_-Ad x4\IUq M>fA'eNB]+ZXutG788k|ABG$fh"96\:D5{[u[q+sn y.")pSD^}NwZU U8 lo @)݁Gt/w lLa0Il h;#<0{R8ݜS,R rh>yÓJR\#ֈs/0 w~DTطڕI&l~! pOgBC+N\z]x*}<Å_?il?TĢdñ2aqL+ͱ8 .CxK)X%>Y:_rmt=ċ~LDo8 ~vD7iʊ7ѹm5m--+KT{VS<͡hO endstream endobj 2354 0 obj << /Length 852 /Filter /FlateDecode >> stream xڕUQ8~ϯ@*6>U]oBήc!-])> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2364 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xX[SF~桒d2%P2m)$LGI&$Y22$ѹ|ʻK gѷbVҷf.<7dႅ? 6ILhb2%͔ B4W$8L) I0̘ Xf2jg6$U2h4K5!9G(ǜ YBKE0(rBOI $ (Hiii 0BK:+5YrZEX ؠCЇL*JL[IBrґ)JZObe%;DwiÅXaH|H,1XCXcXB"9Azr$$J5Qf %)"@T] Ha8GPJ$!&Gv ;ŐXCPfAXNėZ3j )"n$ ISAq$Nȥ JP0M&P<%zQ H[$ C.(ѡC1 `Z~h.y=FYվN˲ʏ uyZ6U^/[[!wFy]eэыAgd K?8D7b`=zNÇw*_7[~_磱?0f؊K?⑯Ȧ?|1ʛywyY9k-}X;cM9fE a|̪e峫Z{k_tK_YYMGG>o:;ٸ{}(DGKKYU=QfRmzXµmlz7rgj֭8lhXΦef fY^Mdvpٍ,/?ReДq5l+kMM7=K' ߛj>ˇM/?0_pg!o|wh rNTlrQ6¦]:Wx<6+t{/jE㋦ӜxWC_'{Gye g[ qZE , U{\.T2_W-~rAU v.蜧t8։H Ox 8o hl1wǿ?\g)uS67+|Tv^ Q R8dmIAv6Ɏ.d`N$z)G](7F)n-D1ӨMm2 \NEV5]G)R[dߔȵ8\[qX OhÞsb]` VzJwi NJȩ~?!m`HOƫ&!Y<u37o#>s} 򘴣x'_n_;y endstream endobj 2374 0 obj << /Length 2290 /Filter /FlateDecode >> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2377 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2381 0 obj << /Length 1902 /Filter /FlateDecode >> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.Qڇ6iUj ;3`×Utavfr?EE""߿=_p t+ \Q~q1 ,b] oYdֿxF|re2JWPq4/W&VJK*(1[,A סT*aƼ4 ]Uew˕RI7ƒip,ݎ]e *^|嘕YG%| 軂jZk#J2mA]^CTIFBI*z&Pa܁LSQ}˕ax?xg$yuC!۵M#:+تU"ѩ^v]C(3([)8:t)RM WNxcI ΂?4~\M% #,zā-+!cr+[m_**+v/䜾Re95Э5 h솠KHL-*FE%+I`/!)bx C:UWﺖbNP". `A(b"tdJos[Ue}? %wxVi>B9 - UvtC `GPH nRsb|;%koC)]5: ,=8[^b EKp[;=aS%W`|9s{8vfKT*Y!z= OX3C!t.g7~tFLL!F#k߆Izrݡwsȼ9l̩RЁ6TA]Qr#;@)-0C)rfu݁_ r:kӜ,'BLsQɘmӣlȯǸ$*X*6M>[4_LM\_+GyR7>I+ xl2` =PJO> stream xڭWYo6~ϯJ@Mc߲Mb,}%:FARI_*rA79CE,("Ky}ratD ,b]pJ .uˣ#D:pARP'XЈYuqKڧ.K%;ܔm#Qݢqy0&r'6Umen]<wNA Su!\V˩~+UA:,]X{}kB4"Sc;ȋKƘ3(_0OTA]YzW BtnaIP;iԥvqR('w -Lu%fӸ8rd.4$1V꤬Ux: p<= a%EGksQ< vĽQ3w9ۈĩgvDC]E5Bce3$iVW!C*qeA$"Q Ȝ$a:H,˦he\JTm}O2@6W;lBJ3mgtYcf7d/.=AbU'4^E] )v90z1KO/\qBrʦjUU/1U$B?͵TD5~Ӑ1{ft$6f` <|gN~{.UN3V-q{[4愅|]#ߴֹS?6fHs#esHN? R(:Zʭycc,dHx. 1ugǟqCݳ%$/O6cS~ u54#MI$<2v7L^s14,NGmYUCg9k.K MqoۭNC;p0YM`z%$<}drJ8> _vYXBIq Tx/TP]kFƲaG;~gy)ҷ?b2 Sw*^u3ns~y8o !Dv)8EgMO-3.b0&iBҐ`ʟH)NrMzeiv݆mo67Z.h\^8jʁAV'YB"3l>FfrDtTzW7f 'J; [8 endstream endobj 2410 0 obj << /Length 1042 /Filter /FlateDecode >> stream xڝWMFﯠrY 拏SIY}]eĎ$$T08F!֒joiK8'Hb٧s7{ha8u[)=,ʨ\{Rbn{٧4$rIc9Y3eMR5!8rKP ߫jԾP& 13g p?;׹Vy>q`eb-R+g"“icQ15]7s)׹˛&XbEX oܳyU<Է\a=@J* ғ JfHhsZBK #Rm_v 4%HgxJz}7Tj*:%k|.-]ˇ"nX 9 =0dnٟbRa|Jзo@Dܵ+#a<7%Ӫy[V 9N/D">tAcP܏Յa۵CXE>CX R]JF^x>갮ѳkѨĂUAۛAC۸#T Y A]k>uar2YGע['KA03UOKw&&:ZTւ[wT";%//)TKe8P-N5sEm뮹|;>A/VeLP3\(XlՙtW>Oܪ]RKZmQ)R'!4,޾?ꕙU)YU;L>$^Ue%u[D*4LA1;4m1NҎA}hL|lM}T%?h9q$p{Cm;`ay>@7/400O.sB7pn\O,L; Zs$v>0XeQN#-; pa̘? >M:C' R)c$#%y$IX[ຉ}}-ww,s- endstream endobj 2428 0 obj << /Length 1116 /Filter /FlateDecode >> stream xڭWMo8W"U&`Pned&`K%jHY%'bg޼78,xU_n 0YQ|$"*WǮʕmš8&o~yB~N|ke]I?`M"BX}g90ѥ9i1}N~vZ_NNzhN4:RCda4 f*%U! s6'b#ђ90jɡ`ǝ0g_7Bkk)_5 vŐ+MU%v&9#?I f%vr1F_}0?ms?|U{!6=Q>\9EصgmZyeQnL"ĝrS"BKFwf"$X,L&ksgģŌǕL))yV*W#}a=E'f*|3F ۍ򐆱$)# 4A+js3R(Y`mDPl<5j4ֿĵftl)K1=.Q;v^ }=xΆ~:p> stream xڭWێ6}߯[)RH%ݠEQHa6QY;ɲeFji̙3?8H)s 6:>.͛{$+݈]+0m1ѻ?Jֲ\0JR1"4|v˼ɓLpf eRIJ Nb -i< "S䳔V\xi8 ?|*~;Vmfqg\p!VZ6ԚZ8!gUsÉd*g~ Р ;)j}Ä˨+9V&9ELiSuu(hw'kvRʵ3hֲFg(rEf. IU<;'Vʻyz6B/r5eJ^A@TsE_ {';h d/td<ɘ/ sEBGE†DhN]>o$ lr1ҵQ#mcO@9q:`$3X2FjoUj^y~W˧(ĺ&WNEA).-yntxf.lƝg=ʱot=k~Has0ѽjD7Y@(1n1b0sI#Q4݉VXMtnj4V&,Ed KEkX?fi^,k/?ሢbP7𢆠Rx}eHr;X̠t?].Bmuy쑝Oz$KIXSʑ V|DZg:8S.SyiQ|-fGz7*=_aZ(| u./pOJ3R|w9 '^I_&ӽܭ,'V $#Nյ@6~,d/.DǀzfvJd+uHEC endstream endobj 2468 0 obj << /Length 778 /Filter /FlateDecode >> stream xڝMs0LPЗޒ6ɤm:Kepge ]XhyYI+#N;c8gZ9݄X; |ry+C|qˮ|"}̷>'itӐc¸\u\ܥj X:ac:S0T$Eb&S_-5#/E)WVxƳ~"2 K/r`؎cF+ T==ΥZgJ@H d:"Ph3f2SFu.J,S9:8rlpP, 2X%puL?эhs T &֑L}wT":Z'^ (d)\|ѭnBukN8ۍ\t-Ҟ8(n endstream endobj 2370 0 obj << /Type /ObjStm /N 100 /First 966 /Length 2607 /Filter /FlateDecode >> stream xڽZs_GGƓu2KuzpcTvնx(!}q$)QZY^9@8VFeĬl *2Ai7F'3IE2GJ53J8b&Z8HX'Β$eMGXa[2;3&Z0_$ٓP*QS>&1ɾ\#z[!=$O H8DyS>1tlE2ӨRRVBgD*<5bq3+aŸ&%D]Od.X+#V^vC'.:-bmX+ivdVHdhE^؞sQB$MpO5;Q1>Hyj @"zJ\PAU $&QldUpH ENlk%Wp|T|БM>+J+C>+(.@Iă^*Y_''׀z#,P)]WyaJB6Y8p" }5C1^DiA>zhJEDk5? j\;xjv q8B7Ka`n`pY~=?FV~yufsz};n5u77%Swh_Wo5gH=Nc#d7򕑱>r+~qm:H'S~|UvSj joYəY_;f/Yow}P#=5jc iX}5ǫӧO͢]ͺ?U7Epi`+Ϻ55{ wf&!Ml\CLnt16vFraǻgz4;:=ЫQ?@m:@Cp|?H7l!0BRCJ6?E~HP:0F(C;O€*}Y7c;tpxv?(x!MnOH.>}I?btHt dm2|}3__ګՇnؾ_.f-aspJn)=Qí7a3hm2:hc~3MEh}-z'Wܞ—E(#&FѻYeAeʂ/l=-h9F4S#}'s]M7鑇$sBJɶVdDs]3J,x'y\VxDž]#ÅǪMh4;dikm3vb|.72F;Bcg :]ĩd*X|RhriKh1z->)p+~֛eWbmp9f65w[zDM.cT:`d>A *kI=h#dkdT/Vuy43(I`wܞ|]eyoe&e&n}]ejɦpS )ܔnJ7,nDz(h` e[(BٺZ@{q'x8M9.V"ÓFMV8 ENgAY+3pQz\rh|/ b0E)tB0`t0볗DG@.9;^V ^RЍA 8GOzwZGC>d7˯t mK)|sjAMhO `P.۞wÎq]6碕oy_ 6Sr XC5S0 'yj2ag\[Mߎat(>U=&SV2 <87SJD%"ĵJL%Ժ Mm;Gi,ݜ/2:ƕr2\l\+_YI\DtXiIφz(ˀ 5(fj1$,9AhkXHC r4P0=5_<^nwrS2v9k:#c%Lx2Z ADTc앉)+BUv2S FM9uǀ wc0辯4"R(IiߗrƲwʼn:c 6}/c7X˼m/V/wB.<}ͣqȸd\A+\ pA\s9qA\pʾP/}E+)97>hk"VМ8h<ڞ=.WcZyo$?d]^׵QB'isqԐ'㿹żo7م͖x8]e>ßI9NY =ڽZo5$@Bn \0|/FwNs#6Yq@N+nop|z ͺ<&|DUfU ;K{Рo endstream endobj 2480 0 obj << /Length 1348 /Filter /FlateDecode >> stream xWMo6WV-`1=7^VK**i㸿C%K6k>XK<{,ǂ$:w'ԍ~|p¼]ɛsFIJSoPmp˚޴HW*|{|275UnVO!S'gqM ǣ$LHkʢϚ|XEi7 ju ozt8U[f_}QW TB b1㒗Ơqv 'cTק8dKr=)ax#D⏲6ȳa{Ltx!L6*to$d$ʷW ^#0`J!Iѧ>ZqE ,\Xb: I'3Uti} \ FkO`3S=K(9?!?S~c38]"&Tb#* I46`ZÎiQEˏRl "ƷP:qfONj`2yøC4sd襘m{ Ѿ"wtKoՍ9,j$)(:Jr+wIWaߙ]/j9AtVs/xp3x?w+yt'r'~9э˽ms-hUp h endstream endobj 2487 0 obj << /Length 1567 /Filter /FlateDecode >> stream xYo6_@{ùCkl(<6mi%AͲ~w˜;+AZ)c&4򮥡KѹevRn?j2O`e»ܑhtM"@""e Q pG;6Iܼl;&~PZӫYx*}  6n  uo|݌adUe͉&?]a9ᷛ wr&RB>|"&>ARfcM&>#ZVX[E[A:Ǒ٦ˑ(O|GԼQ^v=Ft2'+Ű{a:ãfmXF*?D}Y53;ZD!l@.(Z9SxP{9(}>bA{7& ]_}mMc|t|8Xdp,u@vN)\A\N$!̏;g/y.1( O]o<O2stSY00{ҼUQp3 ˅> stream xXK6QbV|Szm h)AkӶ=Jb3)Yڥmp7Y ܘ.`*}+Sw3r|7]ZgkvcbٓZ;8z}0$q!LՙBl ԚqozXA]n*F1}:dm[g6H.:Um`$bRpKR$͑oJAЅm͇[#J7)=;1⌿<%KW ͎T&+I;5:AT%ϪVV!`s+5Im2J|IWMe|I'/I9 R1R?h!_/j[l9p_TWf)/H}NӲr׺.Q #]gnIPwaFIIut"jP`4j >ޛO:]Vf5NQ)Ma&0!>vW:Na2<=pBܕGeZqG@^Zim9W42evvs0uA7~ `.[i9':sP dԃguգ>|r.N:V< sM `ve"> stream xXK60zH)RIMdKMjd#wCђCovӠ@Ryq曏f"iDUlfr?]_}R"₏>䨈j"f !IfOEiz]?maѓ~W$pƼnˏK^48u 9l5G$Oa\תZTxUܡ";wp-1Rc°mm[ܑw˂U9.YP[s<8.'ǭ,$omu\R` ]‰k;[Apt474ʘk&\Ovp4*JSB5u׷êoZRtW;0ᐶ)ׇ?@}zBa/K(ϳ=4;m}vggʣ\__/-Z M?/7~-[Xŝ/JԽ.T9bz0iݹ7Pnyd  Gz]~Ϡ= . <:?9ee{*}{ ^>=6eݎ)S@t \Z<CKHQ0~(h;7!-ėCO),s(O DbhBR̃7ᢞ\> Ӧ`PŶi:^H LMuۨ):ÛOrլ[e 4CUY'ᄮc)#淲\u <|F:ram,AcmoYV[nS3i ~%r]k(@i֣%nvrfHCwرnhCr+.ppƆ4#9~`1燒G`.05`_'@ʺg^|]cccKRl N ڴ$ebbmjhΘ.<1 H+YmԵaPiTQxމz}3o3x9TM`oOpm-NL~3Ӄ2 D˾>Гxuxb7RaRmɘmpHp gTtVT5%~OAbF:EZ/3tD/ endstream endobj 2501 0 obj << /Length 1783 /Filter /FlateDecode >> stream xYmo6_2Pq$ۀ؆ 5ƾAڌARIn_D28xw|Q 8iS+"ս&2?]`Ka2~yՏG8E"8ZNY-ul[ [$Ҹz0/M y+;٬"!9ifK&')3QP(+”/~(Jˮ*_׶UBl XameUrvժ-rFG›3`9Q #c&@kpŹE`07[-p7N 869Ty]W.HS@b4^.o86D3=~pamR}@`]3K(9CJ!*;kĪY?e4-Ċݫh~n]5a x rR"v^٘YJc]@hkV[O)ZK'2&I=W2,HRR%,2C_ 8 LM`)f\2 0(]_ 1/peZ,#Fd~ti6}N'mRǘ@&)OC;hf|; -at(g L}<$lԢ ^?&[\8C)r?d18}mo呵I((j]0 Z&rpxX%,;{XO@4V77w)!}^FqC3&1ŗvRabkS\{bV2c@jq;zV!}<:N*J:[MkW3ȧHcB'.0~~aX)G@EV HdKi \M% i?*uYx l Kq"yr5x]V4JX%O:=y7  ʍ] շv(Mj0ύ^-)ZĮ ɼS:SjР}=Xj{ 53Lj'V]%H"7x0˘,uw 'E49#1xya @q6PhY/amhL5:Bb8mF\}xL} phj@Qfj[)> stream xYmo6_2sH ]݊ VŢcuH$JSȊ EkϽk)</XӨ(&YXG}$W5Ӱc&+:ޘءՆ3M$S JO՘P"fˮ"jp!Kz@PIXLMݙ]g%EdLX:XY؝`܅-"PrP4%B&m̝+Dn{`1ݡmu*r:mFٚJeں2wz>D 3ɣi2Z86lŠ=*aH c$kY0"boZ0#ך6ڸ `()Idv{UcE'*& ~h&'އWC,a1iIf Koh*RIoL=@>5LETyƦSarN} gƴ #2M5Uygʲzuys1iq)TCy: M7PrI {a >\BՀ/R>vyd cbC_KWɺɧKߒCӰ8Hء:Ϲ" /c34ZnD*Jf,-QrhR-jA+7]I)a!63 <9hB'H{ cts9!ğ2L "RTslNr<4A(Yink܇c"H"h,#ƕQ_Bk'@@r+͜CMQ§X!>px 6L}MXS`R;t4諻sBHj˞KB$",O΢(Ib'yUW㑮g};fSSN5Dy KbLDۃYXߺto\A3>UDXI8׍_U7i]U4I=Xr<_d XzHA7Eێ?IjKR“Zر .L1U,@c/)>~Xz~2]ob>;p LteX󮦄)MLH$<"$`1~歗 ػ.ƦnOiWІ0cr!഻΃:}/,#ޘn$oLDaIl#NdT*^1~=T=;%B˯SӥV$]~^N)A a;!dҎ|eoWņ]91SNp|Fe]Pj}M؈8M@jsК'dްҔH=\w( 8Y3StWmc؎'tc;7ѿu endstream endobj 2509 0 obj << /Length 1602 /Filter /FlateDecode >> stream xYM62f-@i)|KrڴT4-;CR$ӱEmD gy\6R: Lf v^xüo7_ԌQҔ͖z*nݷ/Q|! 4Sre 3E#o?<[6W:'%|N'0!w DF yZ|9Y.Q$ Iقk"%s^0U$gT)~u#˔$_SE꓄K UwoCXB>BYHAA>olv /XsdTmܷWnt,T'qYQQ`;r܇t.#&q3HńGNeuh+GMUomF "wAeT俠qoWx(alX4P>\5- 0Y{q(5e4k7pW˦6aLBъ܂;$0cG$wqNq ~#ص8ZwBO-2F_9~1nCjJ-s^0S.◉$4ځ]m5wQܣ#[8YܠUhQȉM6<)Ibu;̞mhL1VRBMtm^nzArJFy]E`iH)ጻ8si-π˼(a7mnv(ZpX9O >^VI.쒖#Sf_ zg,$J2^)%Lcy aH#hAd}fqBtAT$PrэGJ&T} 7J(D7b~.@HZQτ`D 7/')ÈO X`Uw%L5TmFLsetdc_e'QНΠ"$fz u]YE U)UfR I'~W5ot» vvL&i@3Cm#_Y CQUjxCqdǽב"ęqe%WKbCiJ6V_|ǺqZ =J.RGœK9׽=$mx/N$vv3)H0 48Bjrܘqt]ɯ:jRg{TNM?׮.E(4Hr|?ex02긿S+p㔜V?؟!S*&<//d >p=oFB#_d(/^xr܏vE )9]Me` xZr!LQ&Y/DQ] endstream endobj 2512 0 obj << /Length 1503 /Filter /FlateDecode >> stream xYM60z D%R-zhHEꞒ6wԖ6wF$aӱKp88E"Ks Xﮒ]؇W]Qga~.jY6DCg%"RMO>|OCn(T*P4e$ŒZWv–%>/MKx)̘m[kĤPVnlLcX ѻRjvw%SQ.RS1$ޘŌ'D'r3~EBo `0T6m5+>5SdKn-\Jխ}o(GED 4mQ~M-|"4^G2%n D26ÊD4Z{e.)tb?] jpV'u&M} hÚM<,"NP-|?w:/ T'IN?5)rwWȦf@! ]]8Tu;3i84EΣ|N(PyT.S*۽_%25tzF4rFjc$TTffJH! vk`tSpe<&NB"AbGu/ 0[Uۮwb90kԣo[]`p!Dr%Ld35(p!ǎu| w!ߒG)7s'4}GgJ!H֕=pD0]-|b< .TyU-9$4c<|1Y*h {R'H3a_= ق co| D6-'D9! MҌ.\VȒl~9 t< QJG.ƽv)ҏ.Մ|WIN\^Bs9K§{c>nGpO]3~Wa~K9{9wA#em0y_]wU'WW?զ >q2Ex oɌ(\|LUFas4V endstream endobj 2518 0 obj << /Length 2089 /Filter /FlateDecode >> stream xY[۸~ϯ0IbH,Ї`wZAcsldL{ϡnIQ"HsΕ܄OnpFl? ls/o$d|{Dζ ^5բă\RDõIB-:((Yi/AҶ/;t% f/EpN9pNԓaP- ?xbG B4Xu5 wܝs|P!3_!+,sw dY ۮHL!J{ "C뿃WYO2JDz?T$f@ږRQIk`6jr}>f5bdbe:D1@3WTѳ WR!&y-l;Ki8Xi" x ]\kaG:_̳$xYpk୮l ְ]|pBvNnŝ}iœu`)?  F,SY)G%y1q0t ~e"hc/8X}|IK*y] YfN&Jr(/?@ۙk^t'[(8]~g;/x(M~\!;^zm$$2!r:k_e  ~xy.Ӭ !I859T,R@?~1퀜'>`牆>8Ez~L-ܯ?$d<-Yjkw83~wV=M󅨆jC]c}뻼ufq\JJ08YA4Mݻ#LU/K"e:1E*l[nB endstream endobj 2522 0 obj << /Length 2019 /Filter /FlateDecode >> stream xZݏD_#5[FqڀTZ18vd;wc]Iy;Ǯg!$RDY}݌/|=ϖOzC -CVMp6 )e`>//ieLB\P_?bBRޣ熙YdRQ Ec:G :m6frQ%Luma{" &嘖MP9[)Z) nvCM"f%NU^UKsi]El%YA >2XnBnOVۢFvME=9?Ue7YF/FUnCKJnBN&H孳 n7s)/ݮxOö""!زhzg#k1- z\y|ݳm(\&]M[12mEz4bW-z%XW3MG 7^OH 2yZl^6d!xz{}/joCR2r[ l! -Rr*$eٴe #ֹ. e*C~~>pZ $Y(6{nމBrm 6#R: * @{8 :"77n0pTeΜWx%Y{,$bQQ|Q&Y[wmqo㍶bbr{ !$[ڏ !*4~t±1d28e~ dJtdf$TkȁLyی{8fhs =@oX*:yoO2.ex80/u}Ẋ~GŶ8Bq-" ˜ twB16LqDWݥ:pʒDzO_@ojHнE/SO"kM2!MNHA>Scjcı'r2AӾ䐚έK2u򮭃AK LRS  Kߘp85]Z̀F>T8XJ73B:C)hH>_d7zm*B@Q:|l])vF,ǘyḺd.>OI2S5)/j?NY$ Iue"gadxMzJ04qt0=N1gC$ty5N 6s TWӜ6L?Cq|1ctOL(1a$%z3QN.ݾGepGI3CN h9!ƃ|TgZ#X(Ƿf(M{ßܽVi@lHC#'}Ї1 ~;yԱSڛWm󔔺ڍq"1x!1GiMȇu͇ 棆{!U{Z{×??|wa#T/v_wll]ɋքE2x֣(/q.:諛"Hpv .S`x̆a4 0b]ǰ[wZ{# endstream endobj 2470 0 obj << /Type /ObjStm /N 100 /First 978 /Length 1898 /Filter /FlateDecode >> stream xYKoG W̱<#@Rý@60I Ʌ_ߏ#)Mlٻ6Av9$Y!g؇b2_R 2 6IDb2>T@IK8xSPp*?) 8ebc=@}TVsEe30XQfIՈS?8rL!vB`WXGu$R>PTP*@/*.@\39!$2 HNjޥZ\xUBSB(s5[o03އ%XU6qѷXkA3x᧠z@eȩǰRg < %%|PXT0RDX]RV0ަ* rq! O22E3ALA(cBd\O^ B,R; *g(2H)UpIR}3&*$YcFIM^,* ŔR6V,eM-BR4:;_\f|>_lF˛buݮwWv1oPZh$g#/.[=d 334f|n~6?gF;Qx$.Y4jMg0z`8j+Cj3Hqd~^<ޖ=9]M=Mb=ΓMH spjflS'͝Z{ pbQz }0v2sr -GeR-'hڧz{wbrE$0XT plco=~Qȇz+e۝&R nkblԣqhkg9e oBNF_{7½j%xi;x<ϱQ#rfIS7#jXC%,}b}#Sp@ 1}b~S(bfK(݌:Pirwb:D#H#B0E)w3Os#j'c wsUpR+1^sAo9l#x)?C?(#òF=y'Y 3z0vC?nF0?O endstream endobj 2526 0 obj << /Length 2097 /Filter /FlateDecode >> stream xYݏ6_a'R>CCEWyX][r%f8ϥݢ-Ab F.#YHPdQX_v^HQ~zo^@dA&1fѻK? C/ҏ"zM̍M6K_%RO_kJ=Q9*Q`T7$%\R:NfٟKfHbGIM`$ 35Qwlry Ϣ~(Tt4~iB{8rpei;]|:h2"է#_Fl'nA F$a T=`i˱ 6H \CJ$;}|-9' cpKi3U5MR 5hXlhHU`'@Sz Ӑ68׆tXD|[AlCSCa`/8ggfXQn@̰(׻\EUoyhb.^UMÈH|4I]Jsc2R򷴁. "|X>.8A}µ4ŽBЕK:WHÛo\8LDS0hi:ˤf[xYeyYA^N/r(MkȻPeqoR#2][] dy"}q25Hg=JI5H=f2 t]3甊K6$퀀kkZ4o& mR}O ;MHA2, hF53F, Z@vlF!`Yk Hg:cKMBNZ50].K=] Kg"7M<7Ntl0@㮆WT\ )i) da]ZTV:^/ѿۂg[tK}d:_EU=8̻u}8..Kf>؏..ž[ҙO&ub479}"0v c L=oaLuVwm|z4o/h{CT%m?yFcN?vYwuUCq R!OF$s=!*7g`9d:MkyGuĂwY($8wyя ?PфorWj\=sxPr<)phkt5ggBՓ6,3y0"x(Oz>ny#_wuӨOA~L]&] Xˎ#O" B:tT~Xv&uO] CM/ )E>5 endstream endobj 2529 0 obj << /Length 1374 /Filter /FlateDecode >> stream xKo6U"V|zhm [d})9(kkف$7,r&E My|8xx")E,?vΰ@0H8=-#k%JʃJq߻?Duӈ?caZ]SR E)) aɾ3˷jnŹȖ!o]?,S'VnL*üZZ*݃ՍN1k [S<4f7qH"+&DX l죷U}E}smxj5=0HaT}u-nq.gh hҲX[e!Lpno\ Dc7,4պXzQ^IHd)IPf[KƼFH"H/DC8NK -p38pfc/ͫMz %S(ɳ1-}g禓 } H |2҃`$g(?B8b8y؏+?3ܥ.Rֈ%yqRF|Nd@cBJZ >"x(@8-|;d3V!K]"N=Zڳ}vErWtMb~;g2׵mq_{K왳6uTxlϺ x!mjn$']ΐk j>;_ӯX<6^f~c7g>3Dm=0^ iVޕUQ2mcBMOj%b<Ŷ"[44Bz?m^FnT^?! 7bv?J7Aor )i6&6LZX_CvM,ӉH;D7e[N-[bD9uA({r$҄Ŵ '"֞r# F ;mWQy^Aqη ꇳUU5oF/614TDM]☲i֤F}YTrI;$zNk<).f8| -/{Ik3{߅v'ݲz%HJhʻR4#_?[R"(" Пۀ.Ibjԃ>BCHFE9bt18.6f輩~)۽<_b4V?eT endstream endobj 2533 0 obj << /Length 1843 /Filter /FlateDecode >> stream xXmoD_a[kC)(UJ/q}ŗ4*I3~,Hh "[r$ % MXڌUU2fBRJ>}ql;NM:_,f\/^~.3hp(&8wġF a@*, =чC. f4eyޡv$M&X= ~TW>WB5PD0xUQ h&^M? %*<`%M5ogǿ)g;ZS9jYn˪xk[]ާ:d(gc34;(͢vt!˘1Gtfq8Ns]m#4udMYdk]27aӤ뮨iaMT) unTh&Gc >!,*ճ9̿A ګp.`(F$>!&1`C9_Wޔi&Gv?p3"ngC`}Efۇ,|ZM8v+3jZo"J*4J(SSh"tVL ^6Y (\ޯ_Ac"upm܍4^gG}"`IDFOVhg+rgt%\ň͜>bKaӦvx_]d{ 2yxʗ_Tq {;_uпrmW?ΑMvCAf܊-pDGQψ(G %e<2mugN}X Ęj;r@6EU4M`,6=q2eSMcM#5@?)UbȄ&ԼCC{r=D)@mv69_E`Hq˜A}v~>MjߛK)s+3-qvo"Cܺ"m2P c .:@5wu53Ce񝪶"p5ޜR" ?_l󎈖?Gr߻A~*!R`W@&l?Hߦ۫2F> stream xMoF~2I)Т0tKr`Ā Ip}g/C |09ξ|!e b(PuWܼ">/hz}B$XNK7]oMc~8᫿ߺ5)S"T>m=)(}8@a=xie(ú?-U"i6)DFJB㰗D^inev{h;4)S+؜qѤW] ս1.}v^m4 KĖs;_I 2_KH<>%;~Z3K)T#DgTtTIS|ʙkk ;_YSq :Ou.k|>tI%>t[㶍ʨas"NuV~c-}wn;ﺠכV>iS$;~򬝘>)7궎 .K}5VEp}^cfclicI/"FB~шZZQ"U/jOyeV H#<RZb~ ${4Y9+ ɼyiUൃH^ftB,2@L9dT~뤭HEb77c6ovDz 8̊}hY$:$f@D'W1 e<ʭ8KTGAFևm\ښ*v8ϙG%Z*Ώ.#|>&fsn<:8ՀQQP@S<\x"xX^IʯC}>˪u&ǎs tYc ?})@n`wC<ĉ7|@<8C%PWG΀zMs&]K-|US>AF;/Wl endstream endobj 2539 0 obj << /Length 1501 /Filter /FlateDecode >> stream xYn6}WQF+S oyPl:K*3H"L H.4`!' cHs5op4g`w,/fg$Ą`&ٲ;l1y]wɧ1c,ROcEt;,Mns3iB~r)(=:E'! <:8";t QM4Z)AƢ.)t2D>&x)W;@i!})oagۗ~jٵ,k7F!qFrD9C%AmhBy$EI y 8T(Wҿ{+(Qp"6 7mnR_s<*W=*4ӵcB!eL6ؐ-kV5P2m9T$? P ;*5e% sKd[vue!CB*|=aݒ<r+0Jy5j;5,@6=ݭKGl8䋰a>y0T(Iʍ YF[5MFRXwu5%bb[lc,2Tuli~y`NMd\\Ѫ{-ުwgPH}x a)*8@j@Rz@R ʓ O" <ŰcRאMQ:^ȓLpyR?\,VĢτZbd=Z7՛c1+9Dwj،R6/<W ny)T j+%nώeXxK%>KVZ!Ih`ɶSFHfD϶?.I$%pޟ2O^@3DIrIxD9Iơ&> stream xYYo6~ϯ D\}H(RbvEc-dɐ\CezX1MQ7x^`S8K"PB>z:.^ 8^SQ|{Iwh>K~Z՟zXFTX$a`eհgHșɕ%d) @=]0)% (YaDa4edko~ѥK &( iI#gHv$t$8v9 F1P/^-ꉶk570Rl~]6;G|ե Ńi# _x.k(@hb^m\Lݪ%`D0[hD KE jtK+m6 *P+^tkOf.mEWNc@-=H[̦FJ<ؑJS0"Ȳ]%ں؜pr#nѽg֜!"qt i {Q)}e\cn O˽0* dR1!)_qu]]T@]~)v˺FKzN\&x٬ۤ5b׈Vx왩ҜW-ǚb|Kn1:8(S66(N))+jii+Svͅ1t.M+KdG3p}C܁ES3:bqɎ1mHX% NӑTJGMđY6`mB#` 2ROlLQMI"qxN'5pBC-μ~Ronu/{뷘TZo$:gA(SN~YC8 !|`:KԙaNMP +w~ c ҮȴN'K#rq@^v!2!Yt_:9ӟO0Җ$ uGYy*>/ԎٕE(dV%jz Qk@1>suV\T2y 4 89+PG ѦNoҮ9!J5LMژ8ό]ZT:B+=ZiÏڬ0W+>fu3b\'# _9-,:9n9#3ϙmplβpm`dl#m`VBn,Aqo= Vd ۧ#w *'a#}M#tw#Яs /ߊ?j,}g{Ա <0hiDD2[2Х .)nF&$:q8w_&. endstream endobj 2545 0 obj << /Length 2239 /Filter /FlateDecode >> stream xYKܸWm4#Jkm8@1vGbO+QK=Tz[``Z$d܅Opű(T+oB?Ӈ7 xXI͟'N ?voO2~8J#u|2Gӛ4C$ b|7=(zr(T.͕" {`j˱ڽ >01I)$p!̐LeReշ Jk֐H؉ȼ=; L?U=^;ܸ&q$-DfwL>e3UzW=lOK69>D2[)%Yqw 쇾.Jveq?PnRAx,h6]v n7l}"]`Qx2h>EBwk^>ILfXN Ri>#}uky4SL Inxz.ū\/^ p sϚ*q;ԯ۪q8iÊ3gse1.і S!,R(ePolNBRi BcYLu {3L 6hdv3 *lJIi z5`}htEX r%I& lkuܹPu2ԷÏ>DdQq7'5c5p'q(Ҁ(/%d{$A@Ip컳O(D/@ TJq~KߦƵ $Ea*"ںh$y a[ \7IvE$d~ޛqnd-G]y7>&e:]Kn!':kIu45 Bsv>:[l3 ڙ]:AkÇY05l;z*4]Yf{hdvdap >KIAS75 3IN]?#$ 5wd%.( 1/l%~X Q=Gr^/٣GI5$lldA}0Wy^C}?Bad\oVA`V<|!y=8T`ʮ_X#Ua/Xfۍ44KIPL:$:"`;J,`#U󈍉酈vq}U7!\Z_TVbќ1c*p9LcNqL7цP|M.*y.q8*u&K6v. \v]J.֟F^Էn\G{sp蛨@Xl1LB@dJB 9g\0 :&=ՐQ^* 6pʯ0Ri-#v0vj)ʬ*wRg䚂 '5DkWU7y-Mg]>G ڴ8ap|S^<"J"|K1O,u_/%R.8Dn0$30%H?aU2(\rٖخY|W(o؄%B3F;*YBz^^s7/~_ | +& vp#`˾-l6#.kb!"j yrFad|g6T3Z?-ᒼK̕z?JH-bçLT*C D_=?\?bbMښ7z-v_WݻJ{,*D?Ϝ4*x;=I1? '\M%? endstream endobj 2548 0 obj << /Length 1186 /Filter /FlateDecode >> stream xXMoFWH~,CۤA (\ݒhim1Di_ߙݡHJn!4ܝ}3 Eǃ,)Y`h77"0F-oA,3,Ǯm&߷^DR0z)o{[."pR,/y<쩅ZKE%3b\*.e_Dڈpy[T;V/"Z0_H>68R "!1;|k .V>m 4\ ,ZwȌ̈́f<67U1WycCpZ :CP7Z3əLǾ\N"SH fUr ٺmFAf"uAKKuݣub@k(?;mSy72wks_+4KZ"!C,1)3\*c& 12dp\q.7)kf;AS4}_4ݗŪ $ "uenkb8$J%RwT*ol*̊~kۮƃEi1Ju>#1]ŧ |kPSAc9!#컖ͦ "eI9fFO8Xl^ׁ4eYBe 2^]{ SB‹~8G#eh@!_O m¼$s ;#h MYF|cjx w1Wu@@QnLhS G{c[pM4$y,Toy`\`+{:'=՟?lz`pHܱ"z׆i: yM] bt) lT']"G¯lg>Tr~6$Mi@i*h?, u$ '4 U P6t`s!'«$^Ho϶Q뀛Y8Zi0i,ch޻)YVގ|]C*1rMx2(3{Ĕ+ZSK=R_u K`9i eY\OLYPޛ~Hbb:boQ[]T„F;0)#A.Rfߴb5@b),v9z*v( ,pg>>5V lP sdp>q 0LfI\'l endstream endobj 2553 0 obj << /Length 2291 /Filter /FlateDecode >> stream xYK۸WbdagM\)l84M>nu됧LŁ/7L3Õge|D{]Ɉ i"/QUƒ}f-X/ZT@eQBd!韺7 ClM ˢ\)B]Ud\*L|$ˇcb\9V`qɧco(,xPb>ÄG2_.ȶM H `{&g]\=ql1ܱPew;2+#\ eG (e;,SǶ<mYӅ}l&K0NӖ"l5ݦ&.<Q T'Wv$H j!#ym d~(556]iA2$g1"&EJ-lwB'hgˌ-D~ O ,];g>$Hkų'aY5P* n-AܾׄEOUsy*,xcף;*񚈿uX@rIN8TmsQ.,]o]*arګ3&>ZO'?,: ԮI5DKSRra?|T1_h#ꕿR@>TTo,*^_4ӧ*M+PI'y>]ODB$]_u?L67; 2X{R}=5<6O%S}- g ӽY}=> 9ؽ$'=mܹ;*oS͉PqC?Ȓ1R3fgޖU!Nj]~R!|R+;p{C'T,뢝X6 ЦCIq_Jت'*ml7@PD:JBʡdwYbBRȖkF^IkΔU= /\Y.^00vcqpN^8~ц ڈ_4DMi&@[7wZ}RV俉Bue0,#R'I<+gx7xFwe endstream endobj 2556 0 obj << /Length 1448 /Filter /FlateDecode >> stream x͙IoF:R@8})C6Ez( ׷$FYD%R'}p%b3y7o, ^(Ɛz_a?Z.oW$Kaa:ZX 6dqou^|LmV˔1)"y0pm7.S 7_z>R9vhRsD ^ۦ: $YUeKx^Mn6 !Ijg6њ J$žk&iD4V ux$͋4rAJUWݮt M)5-)a: sA]z0TpJ$/6_0j&qm698y 9@Ɲ]]k|<1yvH)cQD2&۲cd"|IQK p&/6Anm9^F"Oc$k bt]}|=DT6 A|*5{Fp _U}u$.὞+^,n߄Dz tkFCNUIgS!}SFL&CqF/vo|HC1v qڊ1 B!  ocɦ665Jb4ǬIiDŽWWgzȏc 5eZй#܌}DKi^ ۵ީ%4G,<~RI1NGcTzlΪ972 ,IN5|yXOi6#a$$e478=7'srn8fp~ 7~zf'CvxfDfx`IvQpXpo#Z )Ǵuhc0n8c NkL55P)R790ÜO]6઩K&z<0Hq p7> stream xYێF}Wy Xl؇M ™ ~-~)sJb$a[:͑MoREffzi~C/BLf~sXdq&7wb&?֑z3F?I|T*mi}wJh:6RcgԆsB ;MU%2j=e&Ji髦fkeN=z3VZ89Wy]oμ"ځCiXmo: /z+w0ȬUp+cZ =O泔2NIe؜$RocmLtFKHp)-}]OT+ ت4;䭧W+|1QN]UU.mHm"0Q PO;&*bӯq?G$z߽$Y$Mc]N8Fwrܘ'S*$1!w')\biVvN"q8:p\ YLtF$H%fTs{zCuÂnxMۯ\". -}YNgZT/aX#٢ Z9:S5_n{ >:uPiE ̡’$U+LېpWKlIN6`RwN.ɓ-,4V]jȌj sJ]F0WD>?O7=m,5pinHHduAч L-ϱZ !M6mLj20 Mvu'9/g(`l[aWU'VknBNJ}}~6FNݝ:R/$ `5q> Yg\ $5IPTTS>Kp!gJ<EQ4? ^"8=h&zڜh 3)Ћ\ c3TŸuOǶA_gH"?"ϛN14eS"=wX]ٝʮ+ɌH[g-$ʉDOdUS"$Y[kĤ7Oz!z=-}? yUq?P- S94C/fW3s~7QA#R4c_2h< ^S2Sj #Ũ*{nb1 %ui*MzEQ0 XMpM<8`ECgϚ/*7II !! endstream endobj 2564 0 obj << /Length 2182 /Filter /FlateDecode >> stream xYݏKe`ŊII^ P\rrdлN.(Rp8 ||S$,MY!&qa߽Da?~Ԇ'H y/Y=VcyM4?mc)U7iwf$Jǿ|N,+q|sx*Q+)5$Ѯ)dрñZَxmEd1}_WƊ'ՉbyfetXX>5z%Ld؛q[b")e:tSYd.rwwT]-i'y"9KZ! BgLr ΈsؕMIt>j<<[}mc d3* & dǷgRGd{3JܛL3=K;3R?n#|כCeL@VeQ0vq触{Fvx(|Ue<LJ =UыG~{7IM_V,K,)=9Bo#j((Ic|PfaZ̢q3 );:Gɟ̀;[F5욵cIgK]zܺl#-ټ a@60"ʥ)`,ס8HLDLLZ5m"j@s'sv*m(Rk<:];Kv˿o.ݠ`&M߅JJΙt]@&wt;:2) Фo%OJNHNo%H]1s?Pjr)˞YH"l$5d,q6zm;[$37XV;Nv-( Q*zF$z ;W 8αa?jޛCrܵ ̯>`6(v>G-U cl| h9=|>V=n˫z87Krx(|3[B]?vgW!v=x֍ >TڌqMSθ3X_kP̯OZwպCfb&h+d)M&,f~JTqe".}rx}s"=\v`B:j ՙ)g^,1'QZ bq]B}1ewzOvѴTuDŽ_Ky_G2zG|ޯ¸S=PWes}]A%2nh7N!~+_Yk. WHZ v Tv쬟eItpAԶeussqTCbXfP-܁{ 1l d'3K > stream xYێ6}߯0RY&R$. ɃVJlːwCɒi8͐gΐ4gq83RXY= bF'g-@quycgo3tffP7f w~P4Z BO:DJj|{S6`ZVe{Fk:ݴEaTd܎xpˊ %Z!n}K|jd `&'yCk9 *x=*ȓ59,aGz.#a25rwK]rү\yO'BH&]T\3o&Ch lD}/PwpɽUEփPeP'[t]|i'8fNaa܊lenQ`a(9&s.+}T?H!FW)8 xEj ^i_=߄> }s<;nǮ`WOcaw}WFȅGXP?}e]0cl꣒3iŵ 9bcX-Tj4SB1 e.BMI.$^UWM6/TXA{3-+oy8:' #>٣$#یpמ`:0OX1X<]^'ըF(LVDK1Kw&DvF}w1o5T^RE,u*nmT.uC?T94ﻻSgBaO;_AZbK7EZ4Se=hָ2xڐ5 kt! |z$Guayv'vs:C}0kӏ  ߡVq 56{J.QLvd[&4FY q |۠V[zt2, F.YS$&R1(:H:'7S~=BS صܗfyqCgo塻)\܇&¼a2Ot c%T;O_@g|Y"ߥ"Ds"ukjc`lZ*8ؚ`2[eEL 1)dx880YC񆇪',b #3X gJZq L_b~mװ̉{Кܮ ##[ Gӧ7vئ^;FRcRGCڛ5Kى.Wy [%d޻VY]߻J K+lT;[_=s\yL=llW\۴K/SӟdfY"5χ$\x/ G)BEDiHjS^w7GZ(i eq!lԠDyE[PBޕ utsUMQ um k "g&:G"~.NWng0*ꞂW宋oA?K^}i7ɩv/v endstream endobj 2523 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1344 /Filter /FlateDecode >> stream xXMo#7 W^dQ v^Z`ɡmC5 8NTqŠ5ǡ8ʚSH!k@ICr@T!Hrȕ\(s6vA$qm "B jyPL %ڙB%_UՅjs946WB+clpYgYǪKf ?b3nFX*ͱYaΪ-` Eof侹U%h:xHC<LL'/SU$8SAԐ6NҔY\O)aRd;;_Vdq.#͹(`91WwLd5u8@ԳK>슧TX]dh'T)b\#'6$ST$hX7$ yt*`2`s OK-WOv*%W FjsH0N/ba"6FRQe0 k(D[ KRzHIӂAP!8xT"huU^# Yq Jr> kEO8l<߬YX#/G:}W)}K{fpX=<,/W_|˯b6]U5_,?6Om_~^}y=ķ;WCGrW@P(.PZ @n- !] ŝ'Ӽ#l#DDr'N!rGÔRn Hx@QCvT8҄xQ W^U0ͯ }Tr$} XM>̽&8ҥYqJ2Ҙ0u8mcB% skR{͜9 -5Z} ƶVX@ nQ>(49 LFFb Iz4|2!9X{:uyA|֑||Jg ms*ɢwѯF@|jfXF '/udZU:0o ]m&ܟmbyzvn=b~&iƑ/[4C.& =o{^ҡS9 Kh6LĭJrL*{NvuH%֪}`!`Fmؙ S1~R~ G"F#ЎhfQ%_Bۆ߁hH0tn{),M9 C۪B}8q~URI h;EL$dy~G1Bk@>QCZ06ťyL^ endstream endobj 2571 0 obj << /Length 1769 /Filter /FlateDecode >> stream xYYo6~ϯطh,+R}HS'p $yw]&::b3Zk7 Z#W98d‡|(X"&jϸ[j$OoZp%~뫱v{O r%^}8 }+]lr%"|/׿=;[k*!iJޱ. 0sօd sd. qd'yYA)*V@xrк,dȂ:7 X0B XvhMԉJ:̤n説g'MKѠ߲Q 6en,iٻ)CژXPi]4#Ŗ"n:ƍV宂MϻiOc-!*-7YyޔŶMV(X574,ȟ7&SGmKnTx7 O`qg\&{]i(ҹzԯml&"#9:Cc{AH+]rf)N8 u T4-$TtK;G _lYCו$|Kx:B ^kqd0H(7ڹ0ݾmַgC = l- ].hu=1OݨG-0q|}iIb$aO}e[ AU ѩ] ˔oǷ:AG,Nl7m~uy]brc8ȱЙ59^ Gk& 6B) *& $QD [B6mV4>q#*yѴql0#BN9ɇ@G{]ГiHʸ/pȰ;)ɚf4uNcLډ"hw02OvUȘ^=@.dbzX6Xp/Og~d];{oO~g$G8X߮e^I/m]eo, Q@yK7Mf۸WzH]f-Cm3ٍ·$7mTs}/XD}&ku}nWRú;9EKk$PP2\bsIr']{P⡺=eo{[w( GRz-*C]sW-5X>:M"Db=0H-N/}-]Nm@lE<9=ðY%;ar0)Ԯ&|D*4 of5 endstream endobj 2575 0 obj << /Length 1048 /Filter /FlateDecode >> stream xXo6~_I@ŊafK o]TR!-~GRDYv,Gwww'/RNRZ䛋t-͛ 0LF/8_Tv|rx]OiR1wpcnMc -Y=t,0E)bS)DM.H)ڶHQbuv6%-Fsbw%m7@`D:#`+#)ON8DjaC.0Ǿ4=#_,j̚|rD5H!i>V4BC0G J[?A겏V[8n`*kѵ/ i(CUyHGDүsE[mȻr;О7}$dߪh?A,BZN֐u}nWOmw2B,|s΀wtIAy+8pWXzvw $u4KC1=W~ls7W&˭ߕfcA4 ̅AR@کgU5⒟B+obP fu 74,+XgrbG&ZO!)DDܘnTaMY m<ǯelŬ{#=bsZhjk'=6nzO P!)'HIgՁi;W/kcHIwZ@!1ݢ9&OJqHUޭZGfǩ[@S'm?cI^?~'w?r!9A&D%bBx9@NlFNUV=) @B3}TE0v]gקiP<^x?>g::b!碖Ջˆ3%)dTo|r#-=_?a/hv+CMK#^&׵ 1QUgj}:#X2{pxWgNm&ygSWEUt, ߣ endstream endobj 2578 0 obj << /Length 1136 /Filter /FlateDecode >> stream xWo6_a""E Cc/Mqؒf_#R$[h;` )~w#W ~|U*%*̿mv+z\ D;Vьe|ylWc~lRJb~$Q?ō} "劑E6]m*!%b,g'K),!W BQI~l:4Rتh6`.2Uѕuq7j0ip㰓ឺz=A'#YP4AQ)Zʀ1^PA _-'$*~G%P\QF?,W4cx;XrXP8{(۶vHi{uRL{iHRg zЯzCMTTL^qc@G(h~O8ǔwKwSf+S)BhU㳬#ɲY&̨<7殀4fpl' Rqym0'<-`4syL8`nTpXd <@ :Z0X|ucgP/6 K)7bZGp 5r Bpr|\Jv(_zr":œ4C=y1 :_H)4~L,C7 MC;BM>]#8u\/\0跁 @ y:eK ķ0\2*Ō\0E,ja%~#\CA1̃&M?(~j>k0ָ}]QΘ1sgncrT{CvrL }núk>-d3{~ahN}P7<؜#`dCdɛ7GpmgĶa[Qa2e@*(Tv8j/sΉӂcYXv8:|Ξ&$}~tC endstream endobj 2582 0 obj << /Length 2235 /Filter /FlateDecode >> stream xYK8WsYhqė ;ćY֖<ɯ*Wc7f2EEb2_EhH2Û̶ t!ʷ7?G,2:.R x;8BN8T" -D AפPu|`H<2e2 ~a~۪ލ:ƠS|5Ka<-0Up؇uSv5qmicPEU LJ 'w)~@fB &-~OYMhFuX`Wʚ^[ Q{7T!x 3 Ә!Pud@i "ݐIVE[v}OUg}bTpdv灈|g7!DP&H(#Г_S%ZTO$ip?ޣnZ#zdzwVƵ)zOԷǖue=,<2di1/W-m0$9[9RIY1爹QlHKf1$!Csa;4ӡ+y|9asg4Ӂ Ÿ~thZ;2Kêر5iXc9f2'캅(ʿ!PhOYFEE͏f%.v??fJ.md,99Yj YN\YE@3 ',Hru@ΩqP(`&L`[ Ca󨼃Saj7GKdȀ>@#M ⱁ`]fz7gjSBbi̴52a61:\ߥZ~eY:nN=?AЯ(H\nERRMX_fX&G²tTvdzBwY65|;0U5'&O`ӭquwmfψU8:߈b~v5Ns304Qq'I)ňĊ#KSy_3O1`%%R/ ,W[oKK6߱"̾(Ę.\hpcWG杄ecZ۹͢cD~, endstream endobj 2588 0 obj << /Length 2111 /Filter /FlateDecode >> stream xYݏ6_aIV%Q)hp"hS$yPl+-AM/E1E W SceT3u+5O(썧|wԷP0 ;9'KV_ CI Bca-۔O^=6ޅ`9 &'31额Z4Qd@+S|w{K ̕a޾ I9oZyy['=+'ԥg=AՠaFVu- (hp fE8 4)"[ͮGA+a7tG}* ʠ4kW DŽ4| Bg1NAG/3Uce*[r;@KX^'ShQ3p:i{5s7帲#RX_2ʣcG(^k2<Nӗg,kr^nomq릪:|-Z Ovl c"/O]ʵ2Cҩu~l ! !O⛢/kCyf 3NGчY1  y.m2^M)]Ɣ9V8vt]6\z endstream endobj 2591 0 obj << /Length 2245 /Filter /FlateDecode >> stream xڭX[s~ׯKP os9'0@`sJT;4==}o;.w~ea7-x#Fw7?DN^gbt\z*vץFߺI_ݺa9Dwz NO(r7 z.NCOCRHTmr9 zNc7Wv]\5'TʖgMsV*p- V2 SNwn&^ʻ"lO-}zh" 3c6&/ 0<ӲA<WN'OF^1XI4/{ODaCWWvJFCH0PF`@o "/9@$P:g+7>3#Vu-}/@/%}ݓEg[H:A7U!joaG+AX÷>Ϲ#K uHRnUj0{{=Uj.:dӖR&ǀW]>kX8Yί(( PYVD@8\v/J{׀'Xqɦ5-\V1 G^  Wm0e|z*avjm*xUNɿPqz0#!G$ r58EM*["l8dz{\ `ld+Mcv ZmFj ́GL邂U]ӓ>H%aAӶӹ,e|zat밑C 6&Gޞ;9VpFnT MfWMj7-M9mOYfu6V|!K҈IM8M+`}޼"#s5`~e 0@ޤֹJ ˶ eT E6| hۑ>tv؀ٱSS((QWW!ozyxS~3>uu*uCRAn5cs%} m̠e :o$`o<_P> stream xXo6 ~_qة, زذCO7`GZ9䲾rDQ)i'V _aeVw=\$Do^ nz .Ck& |( \ٝmFB@?.~R %3r%Bb"Taiz#4mw:en_h@H;-7o& eUG0Hi 75ձ%TJj&x JXh^|igŤPeI7pH,پ$SjZ8ٷuG:ki{ݰ)uq?Uh-l\(emfFH==[In&oouI D1~߹x8~qRS yFrt}̡0lY;8nmZg歳ݽ|u0ST>o* ݥǢm[[Gqqt}:9hPHy$:= 1@M2#YZDG7'~ec]6_nmom9ZP' n)28PfdD!ң}4c@t̔V3yߦ-ζ;'TJ" NJxgYER;8;U|^b M[<0:ba5)Ʊ .~]HU/bA7Z(?otWWAef`}8u+aCx ꀍ_p6$[a6u?noxM^xǁkGo.`Jm0-AT4n2xR7,wwec匁1z;,B Ku@L:WݥlC_YSp9Zt{ۇ-lԱ'f !ع>ZZě}QK5,³KE_| endstream endobj 2599 0 obj << /Length 1483 /Filter /FlateDecode >> stream xXMo6W,z$*Am)0 ^B&p}gekJԐμ!]GE9'P,5>\qF]\ДiA˛PSnS{ t{Nʭm qnd[2u:jZ}X["{3Yj" J| UݸܚL,v×`L-fJZalV>uU$d1zaiNވX@̂h HJe]ǜ\DGwșA#_N2V7= N5Lu܆n@n֙#,6M*7YL0!Nh6ILn4O IOPBD %T@ +om8|Zg48!D2e ]$j =s/eQ*YG)T80!Zт||.p!Ԋ\!ySs+SIzxK~ h_ z16f]pG{7=Ͼ6e7?j/~QCZ"EGFW|'C=n%)|'.KLA xxc7ѝエuCַ?P4ͯ)G79VƯA)iHyVe 찍531ǔ1sƦ>ZYkOzml3Rp=ܭ= R(d~TD@CBfr.EkJ( N^/nCM=J )qP;_8W$OJ4m$Ʌ>ok{&z[Ydփ:r5ha4}9ճ ݵQφ}S: ȟV嶴%^dڔ endstream endobj 2606 0 obj << /Length 2023 /Filter /FlateDecode >> stream xXY~_G uypuv`3(wDC"e;q~}yH|<ľ*\*Z&[wmWxuXf{]Xq.Wwӣ/ҹfZGW16h{WzRi$hZ>9\y]>NLd$3BjC *EӺeqvHNE2~ÿbM0$ʵZjvGUG[; {/!YʢCY= =o_}EK*5UPokqpA*ឦ.# T,(+lt(U1xσ+mV [ñ`o&A'2Hi s~ͅXZFt`& V26MT,ڕ)rkiPLwUp eAލ<%ܡA~VO}s #ջ|r\xVlHkfvYMb3{ס@c85 8Q#ԃc7D5x@*ۃpmƚ-@{3uB{#87Old}UzUIL%B}D=I^Xh}V.,쀯UAFW`#mt&Hg}=Az0 ~xqѺO0'0/q 7S;ۆ3rCx: ~G>g.YxZL:oij[}` ##M"j`EM?SX |hM@fJo[H4 ۾ ~,EN/Eٴl`EulOD BVxv&a.ئK_ S>和ǸAy^0]')0 3 r?2Ut9uf5Jv JF#˺FEw*vϗ+w`!fEXi<ӳkp\B$"tZXKN(P ϗP!%d -&> stream xXMo6WVXK (ZvZؒ!n}J%q6 $ÙᛧiFE圓B^~ p ׯhJvljWkLH8f!~yִ."a9i,Þ3s{)QNRp/x)A("HF\$2cڪ#465ΛRȣI+duQxe3%-Jª; 1 L4A߂WLѕ,RzoLA͇9KTŊ%:z(ᴈ)א.*B/K7֭.ɡ8˰S{rq6x3&F,>^8P`)g wX$F,r]YiVwMpm] E9e"a4#iVaVTĸc\iM\ox ۻ=MBX6x//uЎ8w("C5am lGvis2ՍqB>#i_zdK'C1dZR,P*%]_U' ה>)!LNy˦Mgs5 | 7eӶƆWhTl՛ ezA`a/##*<8\֭u׳9PԱw65C6x&  نrJC.L}T7pme;[꺩qkm{X#7(ʀ>nuK(S';] -LyU'xΫH>QMZ!AL6͡wdZ \OHHS\MKeZ(J>  hO[yc}Yz}AE@;y -#r?aN"Y nlh„$N49=H(j@>£&eF,&>r:2qcХFNO?99WNsN:u}AM:ΐč Dum M`@.{T=XݿW(3b$IgwB,e$ռ|OtB"ATÔ+B30jlMEQ>u|g4kӬͺB!KrluW\\bO> stream xYo6_X̊ItkEKFVl#i!JT|]!@Lxx^x& 4[b=lf3l׭`jlk8F"xZoW;yfJ$^,Wh}^,W$,hٯk'#ʩ'(v<'h!A$^'Q5~)JuI!.V$A0#ۢ`@m>8l`VجΊU!aKPh 08g1C[SDh6>g(#bXtKɹ] IJ0JU2/.} Ӊ8t$ ĄX1OL|ޙ ~]y%l}px'EYnzoorѸ+FgdfiT_o4ޛٗIn:$Ya$>yGϒ?7oL'"5t }Ҩ-`kaPv̙+)G'H%WK#|(A9JejڶFI$Z{L{D^7v.Ә0Fz16pN]Y48`tlAtT7ɮ04WRPX}PS, E~y¬z97 fR,do0pőfKNN5Qʼ0Kiè{X!1A|4w-qxg#/2@ab^.?7/Aë<,JQpVBJ4^M?;~Zr]qB6ZcT.' Tp}l0 ʰґ$۩5<"m1(0߁ X)sfoOz4hm0o3~Y沒y3ȯfwu_m̸)ھ c{Y2sSfBE^XEUDo.xlX{H:rʻ9L3ĨbI"Yt"=$gcrSlX+)pM)}/~T]e!TĽ}iL\#pN\W%+levۖ%0da8 5:Ej1fu 0#ic 2{fO~'2v;bJ!F`ܬ'MS@pA%8/дt.! , 3`(_՛a[=ϐ: TቔNo: m GY 9  9<ȦlU#h Սh¦ i>U^v0[0|pӂu_eU7K/+3=8qTtg\7V;6:SBmj A-~ M}m:@-ke)%,Ҷ)>vR xAh|r!xҨv̡e!u :zî̑8zSfQ#Dߙ Q`gSHk7Ͼ ^ uB:U99Yۮ#|ƫ01rn@IΠ9p)L~Q(uލZPZ=HƏO!ŀ^{;:*EsER?ݐCkoz[2\쏜hǯre:߀@elNnĦcm}> # sz?=q@QA.>´y4@xT3s3Ù "ݭP!@'C2~O~?SDZ: K MydJ)='5aeA'A1qKkI(NgIlJI,J^kln 4ahNt[ 6^ UM@[:Toyruk; z>=PݪI| VXprPkɒe w4ϙJBgX(>H0EYuvz}] endstream endobj 2568 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1537 /Filter /FlateDecode >> stream xXAo[7 W]d(  +6mۂbp,a34~zK7ΊIQ$%#le%Žj3'Ms1g_q)Fg_Ij:M P.h+1ZΘfa=D'0F0H4#aDu$3 aXbIe[6a:MmfҪ,Kp2GEIP֗̃%XLB2O+!bk?c(Fi0\VӒL¨:PȚmhZl1جcPKLCk#fpBFD,*QT! r1X֦WHM?Xq$AcfM#45&CNT wd;d9i^i`FZ)c5H`E@*Ԝa )[L7)dᛰ,*4 DRB+bd9_;h6K$bg4%CQ>٤,-1&_!̶Z\G''[wFp~wlfwѫWǁ!VčOʲƟBm,Zn̓ymJYπʝ񻷧n|}Z՞v0F`B7[-mFr~]L?`hh 9 k? )ͳ~ @epz/+yʼۏ ~vz6 l"ĵi7ߏ[1Hp@W~ zԥ@>e ')weGq M `@HD+C@R/C1g`psWc9s޳= ?lf7hb՞5/ZMh\b80xETgDT98?;pt~9^MVery`͍⳵U(kMinx(S~ S)h+yّQ I[ 7PK?P49~ 8sُ#hK=2@v[@k V34H7\.AVpzE DcgUT@\؝_u".Y=pf_A0R-ϩǿi7^2p "BĢ+0_u˗1=%mCҳ,,Ų.v=ݻAvm&c?/uZwlÓ =YJL#B$#Bs.="P {4 endstream endobj 2617 0 obj << /Length 2467 /Filter /FlateDecode >> stream xYYܸ~%j`)Z$YAx^?pZi%j!mO~}XS0bU򪈮8ίg[h$ acwJF yu[+>/8nqoBZxownB$ txg39wR"Js-d^l)72؛&CK=3@&A_8?m$0 XYvߞh?鋾Vg`(Dv@PXȄԠ" ڮc6'(tTge{0Ukd\zѳ]p4]շMO O@㪡SS7m0L4($1{VKD2v4( 2!&3gŸiZ$B'IԔv磣RW 0jԁtRLd ]{oG\`K~ooimSΣ,Z:k{]fچE>A7MY[.&MT=d{uY{J{J Q}H<608{sGydzʼn{5h~9wpqqP7^+fAs^BJD$sl鐤PG #^-*sO֙\Ȣ+ BBD|]B/V{(6qN .Kt^\ܶʺ Jp]RQZ!j::P^# 2?,+Ր-:s8WE( *m3 MAhx"3 'E}_nᝓu:6=]0N 7lo VP$LCDGOAVYY:]f߾σ|B}8N>, 嫹,VDZXs+aZb?v{ﯽst)Ԛ:?FRݗڍhRיS(cHw?:?dK@KRcB@njI$ݩMv^p]boQɹD}vVpaA.:t: %gcr@vk;a4ҩ],NvkN=&…~`^1@pu0> TE`gJ1m]57׈w0䡡n&$IYu(8#$k<4à> x5%:w*W2o+R #mʼnHd'P"Ɏ?Jp) 6g24cvb)m/YGr) FCSz Se#-3wY4U:k׳&TBS4Lw _PцQb$b.1!N*}]{ACw3;w=p[A7xEF/n/ǟJ\y~ endstream endobj 2620 0 obj << /Length 2065 /Filter /FlateDecode >> stream xYݏ6߿Bo'~IT{"%zt_3R4p8˓ʓRJV)ۛSmB7?c6_~:9'SQ}\=2)ejYeJ"›n]2Qr:_}qO-'*h'aJ0qH^ JJb*U<;Ͷl.`Y2LUy~t`2-t.hڶ &ɸd\]PK`ǕG"5݌Gё^&KSH0|qvPD+P˵9A-6u!٦k-q{+.R*ve/AvOgK%%\3#sO\ ǗťShapV&`K[ .w0WnOu"xoO؈ tLkk]#7 fS֚3Q< (J( S0DU`҄=⯥xZ|~u?]3 !4!LA݀^#RBB6L0 \=+aSE  ''\k!f{~]}Њ#@J>QȧISEnt'OiVTznQyۃC;Yp42W@+U`Ƌ}!f\Z1_.5-'ħ'`-TP@qzsO"J84DϐbGRۅoiR> 9lGW &Ӧ ,.!tc pra2up>(^b"O5ok"Pf9q1U& vru%%7LER9] >TSc5&cݟ|۱qAڧ_/Wx\^\4HY<4nGSvaP%v؞Z `K4Kn3,\#twY- o1GDY`1 }ocNʂ' ޡ!O60 ;3U&M(oۛ$LNBh4$4zw){xY0/w0k ED7!a NTyp CƑ[Hą%Z(BucWCP2p%L k"+^s  YCvDj:_ч cCEJXSPSϻӖ}a[_Mr$)eΒ2D`IW|= 6|,`POnشY|B %dR7 '?`1 %h!+WUgbp"LesRJ!iMz۫M}oOKJ,Bt9u_$†3]Я2ZCkZ9E뤿\@x~Ո~& h-Yw9H|oǬewqyhF&Sj:D9.e/TK`x ah6tDžxerڡ*8QBYfxj[;}cϵQ,?U1Z.2ϹYi^^(*^k/BXg7)GP<ˑ}6HR(H"JYJup-*,>154n`Tq l:,>cDۘCF?mц0έGB۸T**?Fl%!6ЄH_WМ TWYH_^Xa3|GEv# endstream endobj 2624 0 obj << /Length 1573 /Filter /FlateDecode >> stream xY[o6~ϯ[e x"AX-_sHJd%k@DSwnQٌ?6K,$2-wgΖ37|}?-~xԌQЄ뾨jvIjSC!D?RǷK6ɗf)(6^zrѝ8?<@1dԩIC9W)dT"$+B[v9fYe)u,UCK"'8FS\SB9i?=ОrL-?6-q|>QMt7 1mePɎr=W,94&+ĕ UM96e˪_2ZGtRS8LQ+j7YU "N8rwcj"(B;tl%(h? h)fɶ@4v9Յ_ۏI㮾g3ꙟĸpx?$7g${1Ēe[Ygf KZ8_L-&p u^6Ƕ1nkN.-{Dc6YƤwϺ"&yDȳ&Yj*h?я8QJL\H6Ů5)!:~OV9 #9l\XF`!xS8=>ʸӅ~CXNjD nbzT6[֭{m+;ӝSe3=140tnTT}E4j &<3/_-N kg#v^ko]PNT*cfߖBzch"etTpAI䏀][X^ٶ dV9d+U29 ]f˰Xod[~ݭjd= Gi5Ԍn75:l_,?dzӛ KFh9Z:!1,jy{wa mOn{MI))>y' y0#>Ҫ-|i߻Vp˫=H~v endstream endobj 2627 0 obj << /Length 1477 /Filter /FlateDecode >> stream xXKo6W2")Qv-R`^v@˴,4w!eIq6 \~3."$E[|k:K1Ahx_H9Y?E":sLX̆}_NiH=ewd$Mp$(?,浵ܟo58,iP! TݕM ]klQɛe`qLˣwa [`cJt0<՝-Ϳ{7.˙}pdNV!n4) Im]Hh=R|ҢCm,m̲/L  bl(+eU0"{B=2% T~d鏧rF geЭ]Y*8drG&_|,ʍޟC܍1&JSֻF.d(.3uB blܫN>Աf {ֹ`O'~"Ϗc8h7oW*n8}P;*)4FN ;u&h\iFSN:Yg CϤlwO="({@>F3rmZ[Ր$y_7xe`S7> stream xYY6~_GuC4m v$h6V!KDg[wC겜M 0|3E" ,zfAo.[jgJ-xȲ0㋫Pf2xF7˕2H,WQ/zN z]r%@.t*!>8|:S.4b\Fdp4-< MFӠJ턚MMuiv)@7FoiFFm%P̀UBi +.W=c&eFڙeA~h*Lrgp8vލSG 8u-.*Ϗ \y~^Gciy{mj ÜP8.[z;qi51PLJl㍓IxH;ޒdُbBHfe0ry% `.W*d=ILS% Bԉx6ںyM{bYZݦ룗b<=`PȒ8ZHx~ ۜmMQ͉S!|(Ϲ\$ ~[7=0@5^"dQWh&x(*{Uԃv;Fj,rSTJHȶRRb!1,N+9I)hgoi@^.;ƭ L:%+1\rQ88!(r.6E vI2DZ`<&HbPg)ڧiL Wš,ry`Yyf Co2.v'P<Y)FY2r<;/Xa}wpN#q.\熖LpI8VsS|bDw͉pS49axԥ>"fxfҞGK|+}vH )` 6 Akd߹:Kty0sX`gH]Cgn-vt&^E Ѝ߰)j B,|]Yưk:l '8acGkZikc5IL:0.+ƊȫM{l6ۣ96hk j02 Q® r[1B.|(}sD] #m޺c}Mޱ*~;j-P4D_NDjw]U?`pVS[L!]ܹ%tIՉc"ۍ6ݯ.!4:֘]9)^\؞C';㊅X)BBzEKTޔlȇF'r=C5C! ;_#fPE,L1|M7f\ j "bۥ/{h|0;bX(~hJc1 oPyt2C(Õ+{W撮%-TѹCAWE2,}vTO g^<'jbIDY&M2R!*?$9 xtq ̉QY0fi4 /|kMmo.#$x(ȱo3bv/+l>5wv[Z]$*|+Xgι'{ZnmHBYeH_֦naqWĿ@j3_`V],X^B..ļt!>'0D™ endstream endobj 2633 0 obj << /Length 1874 /Filter /FlateDecode >> stream xYo6_G9K]úiMd){QPRw4].p8'EhW_~n~rAC ]\o7wr9+!d+\[]b+ );S2vpTd(1Q,>jPNij7- _,)>-ii;\R^2M2 *Kor+Ezmn1^mKyȚFo. >/qk5:-VN Jt #Uj,LD*ZY@6DȎ ! "_֞A[nAcqdwF EHT孮LOg{ V"L"Gcu+R1X*eH"֩-+g W ârT%?G}nRq 40 Wwpń)c{,hA @LX1IF9Gn^~"DJf%pZo=aF-8E2 >SB[).L';6ŜLHt2a^JU 6+yeŌ;(jW717aXBJL*nyXsi-[ $'eliKs@yoŨ}l]M!X,nhXu88|Y(YbvJ8G-ZZ-T wX\rKH몼P-L Ix4̫+Z%Tw& xb 5a!KʛN~2 }uE7r>k#{mXku9{ө PIcew6PaJo"ɍdwf!QkHV xsEPyxa!p7-.]US`b_M1ў$n?Q[N3ࣨs|*%QgIy`|!{cjۨh)\z@WC61sNq9Jo5J:'0t[iFzP }…C13. PsA''c9𭻋עG&3qԫO/ճJ:.[7( ʜmsq̠n㞎RA OM* @ZBРK YS,Eb,c0 "gws'{YOSsP,>n7fc;Y L&h> stream xYo6_@̉_Tin肽}Pd9vKD7 ȣ>ұk7)H:eLqN2ΊYlg޾>n勫rFc]G]-g|fGB]voUٔUQLQGR?\|꪿S2v"s R6.I\ w)aD ’B&,mInJi_ycx Ӕdj`wz] i6%3JI&%3nW&ac0t^Ρ)IyGs:@0r$U-C0Ih_g2zƑIdDO fݮC:E@},;.H/+pb+1S4dU$'TR~]jOs)v_g^-q`#jut_pNHc6փ٘,qW;^)S iE9@™ #&xtq6K#ѵ;E+Y{S-XW8b.QOjp7U,]jO,& @# $cIץ(wY&뽒nY:c/E}6r;NCESAd)$(8R4c>^0q;G#0 %Iz*OzqK)Qk񻇸rNR7.L Oy h'0@q]B3`S9e/I6=8J<rn408nj h:w /a!U2^)#`RgQWfQd$TsMĒ.뼨tɓ'WiSTi~M@@ #sđ`$%Iy |Y4GqQ&1HdNʯ?FFjmBfD3k|t.fjm^ҡ[x\U%G:gfP 3Q0} wSk0vડ}k1F72 ۡ߉ΝϛVA=y/܆rd@(˻k hhۛ9\nPƹZHjm~\<@\0 (xH y!0dXmanUffЅ.*KKGtoͱw;^F '7\>SBo0x \|)@T1p |gvObUd}S*42UF?&WwesPoA57U),ۛޘLIC<1ma>/Jw/]Ґ>X^`2_RyIEѼ| ǓP[2l|fۮ*l.FIK(2"T6.Dt{ơK/@T jr`&LܩOEy{ i_۲q4hu#h?כetnxr endstream endobj 2641 0 obj << /Length 1897 /Filter /FlateDecode >> stream xYmo6_aKe 7 ؇ h1ƀ!VbIrW3uRA b<=w<=<|,*'ngx r \ $ϗ',c>[ U-׳K&5i5_H)B)vAoӛJU:_kjɫegS Hp(y.Wi O5vRWIO/VEY[OsxI%ygd>{V<i+j[˫͜ ؔz֙k(+nQLN(w'+o&j)NeY}j2sk-}R}c5C)VG@%Gx:,?*.}+&'6."ClE4v qWX 1A|sa1vJSoһ> rPv\bXp*Iר^bX,;3w4|0Bm'I-=bWCz!"IRI r׻><ŏVܪr,Tj'GV僴S$*1b1)  4'8X}WENz"g{=xѽfs5 6wH̏ݲJYq{ƽc|t&tuYx& s(BNK JOI]#+J :dz5 $<'<8w)y\Q4=4}V sFZeijH'|wKTW#\Gsfxغvԟtnlմgx,Sqᵿxl*>h'}.aЅ;W\4 EJTib3>ԓ'xΤn{[a_X6u΅Qщ5ԭ&Fx6V(i Bͬ%$SkEfvU@3PzpGC"s"{چWLU5Mv4j-Mu<к5Qs D]^ȴAMZe}&Vu o{:irX( Xwv`a g.1@|U5qOOxa;Lѭ{ [(54"`9T.r+ϊ"l{+P nd0˾[a^P+xvhH8Kn[:l;HWnw\Y"BoN endstream endobj 2646 0 obj << /Length 2028 /Filter /FlateDecode >> stream xYߏ8~_'Z 1!_f5NJ@7]F@g. ݝIr{'jiS6EGV*+9t?ݮqfDž00|yB%f7uuSߖݠu90E+4\TU0L@|3>SD'G>.V 4&]J""b:I VjYVg>G$0DJ+5-L# wdɄM8&cčhÒ1O0Cul.y(F"' # BJBaoK!$^,=C4_.I,liIUۉ NyJ g0ub‡,it Ґ1SK~ pnFiA_-9=vn#ڻ֌=jnmW~- *a,!1à"JNPM^Y9L~ƸD(YbJ7 `#cx t~{7=:|@cm,n.#~e՝%ν >>g`-6ZhuAkީ)wéܳ^?Q4NfAYwk5nU6WqB!z{/F+)' Z|ݪzkJ۩Pvf/Q>'o tr)(Df]d N?䫦PB[|} !L-$0cM"#/fpxw^Ql᎕'S}"4p~OSy^ߧyLT0euҴi:S(Sʗgs1*H??Is %3C`ӴǾqzE"aW.GM=϶jOC"ogo(5 95JAc!sXƂyz4X@pMI]8`zc<=b Fh<36S`F` ~iFhMaD &^_jpgc]o]gV<Ѡk\6@!ZFyæb.\Z1Qqܔ{o6|ȋB4H3j@1Kgi0˛u BkSW۪=^o\G9 #ՇA5=oAuu[ɜe4յ/ K^h1'H:}cۢ?\:D4 u:/0/3WDFhC;K5u06͔(՝7f: :!%f}Otq"$M>_p:<˖Űap,s/?|_Z$;-Ϣ(~ jSCXP ɽj J'$e6V̼\>Jwk ZSSU]Bq4SMX]šw}{$bnޔ lyLϫ˹ggu'ci>lou5W}?.}_jVjUje[neDtnkATCIv[oL:b5͙ CO=*m3p:ܧ. G5L d}47x/gso ,$c,WV4yiM4@>ӷmqs]ߏ1 ,>}-M?DΝ/=E;ʃ%} S=3 endstream endobj 2649 0 obj << /Length 2103 /Filter /FlateDecode >> stream xYKW9Q7 6 >pֈD>U]խ&AASw},"7aC?d>}sxӟd#EPBnGWԡ|*Go(֏-ޫU[f2^o?O{fߩr>.72 ڥy(& 87g kZdi^Am0(#!S^7)"IB.ē.OYj8iܭ @ u&GAIdX/rdar@MRhB!ap G., ;"k*A[U0c,\K ?taH{9N}y02 4z.Ө`o<)Z1Sr=ʶ#EKɷeXu07%%³ OD=yf"ʥiXVzr,ETR-{+vm`}&)=iGD1q#zS3h<-/[5pҎ˵<m0wM,A p=W׶{9 74pͪ ̂Bz4THc(NN'ă) >Px# Q!5CgBtϹBOKҫ ڗ~Ch.:ю12ʄ?#c0U+FHZy> 4=0XȔ!a@qoڏܳ ,* #`Y@̞Oy/4g 6-F<ՐewYʤjnz:zPji]5{\˨ڡ;n'H dܪژL#r<(W,v, \ P'a0T,\ UwਲpTIm'a mG+aN@Dgm. 9ncocaiI]R{M70262 c]Xv4-9T.hc!wv>m4s:՛58Z5a'!* PWV;ګ`|F"[JZsM-bW;$&~pH]p/ &C pWv;n3,a&y" 8cXJ9|.|zmSw`nM ^3pxQ|N/l_ ,q=:zqP͠q0vְ~F.eOё뜴^,xgAq@&|q~ nԗ @lXU9+B =DV|_^7BɅyTpD?oXu7RHjbqa wی52k{0,T] @Lڥ{zM,1@OHo'Kb_Kb8{;.z(g{s%-]qeơpS#%g[y< uI_EUZVcb~xbVt]pԃ`f`kFϯ&=Q{é5#S}":C땯X9*Z}:[eZ}ban`dI_9]f L̀wbq.!uĔM#4j<;>1ǩp"ᨈ֬]{:ߒ$9 D&H 8]yqUu@C\7g-(u .]d3_HOƨ]e>Ϩ^ y&ތ]8dVO;3Moԥ}9J}p2z]IayfD?ӓA@(a3L $3.q>kK՝d> stream xY[o~Dֆ{E4AӤOp$4RJRQ3Rl(^涳3ߌ̇?:Y9E4K33z}Al\ vx3؏f5$u}^n]sE_BHwߛ+R*R5_JߓͿ/^t<%cwItA$HF 2`^抬rsݡ0c y8-'LpClJP"`F)dxhaOvក0hwfH=Aj&oLjmE!'_S:?v &Z/IUOQQjz&yZO))}((Ino$AnA%5ˊH-omY_aL-&1Ĝ^Soߙ_}6YYXMi_RzI!%tȚr%(0(7l^Yj,~˩V"3{{) ׳W?zycNBWo̽Э=2$MҨ*Pkyxir^0< OjE 7Uy^7%(C@췪R}0izR.1Mgy  |DBs. ˑ, 8QcT6,0ќ6rp8@Q'}HX5i.J+uD|H&1B ~`Q0pOےɍTRG>GfJz' !C>l %皔`tϥ.DVj>Euu^ sm^@ho/'/ хvI=Yp0MWW+Hfq@7Y=&Q5).ɢ.B-GPkc o&On^=tbRC$-C_1q WG8 C(~@OU R̩zNv]Q{QIļgOЭ{A x,$ؑ\bD[ - VwVoKaqkWȑ¼}+ \oG Ned 4ꭏyu@W$uUD{urhoN:@ JpT&LZK 5?l}yo{ukgA8o T+vHΡIHx?'X+_lKȆ2FkL[  97b\^f[G=`Edq[?魳c`NՐIDr:B y)PNވmj$|^t9-!0_{|]ue/b^?%cOqwp -**i'*[gEe |<;4hu+JoJ0 ʭ5-iB&Kq$0=w'aOnS--1C} Vw)|$'$d5耜Z>bΩ-7`~gfmqQE@#ÞDР" c4-z:{CI3hݵV5_v'qZ~tԉi K}P ]7"]M FiSݖs!)ZVbnhmTaY ;)v@jt^Z)8gmTŁ@{  b!XWZdÄ/U´wd)Xu$O{C/#qa \ualjt‘qXq(O`ز}@%'Kz2 7`j |{i > stream xYKo6WQ dY-a4E -\$9CUܕCI,YLj4qp"?0BsN?-s V 4n^|FMI ]BS7qssd+!d- C~]\1Met?tߔ=rrVsfvf$[LN:o.~e &Tm+^%HVe~i6S]U.Y,O(ۜN^.eϕ\J %M5Mjߝ;AQ^<3WdI*B5k](6nRk?CP_lPMKsT9 VƦ:`۷ƓùtΪk_Ƹ$ε jY{o#~\~p\ &4 08=]`3:Ϡm=F0k;ˈ6ZHwbF\IӏN؂ukYFv+9l)u uaZ 7jt6^ـőMuO=vLbd=6EPa3MR@?C*ӱ)D7WD3r56̅- pE[t.% \Q0|n. n =mw$ NT#p l^;/E˶?TKl]y|m 6cv#*;c!9c;_׫p>@/vޅ81g*EO,%b!Ky)s$1z 765߆|nHݑS.9- acNQ{Ao CX};vxmYi $tYU4[Fcֱ},xx=g<>C ]QFC~C[9b!7s,{"sK}Ҍ1oY5!mf\iVklZ=tvzGխՀ\ Gb@2\xXt |? 85Re)QL&г{wr;7$ÙD"繎3Y=˓1IaHc9U2}v ^6 `t.imxEޕCx65QCf`y nԹ$t@c_!8v)ե?e`(SԵ ,L2DҌm:&!n=WcbڬV#npgz>pfG*yS:<,yG3 H endstream endobj 2613 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1394 /Filter /FlateDecode >> stream xXMo7W^(rHF{i ɡ@*dH}PArivq,-8p䐳B Y ),;8,,[` CX ȅjXCs`%A'$\&h%1֍U8uFFGXI!du.@KqNjHWKY$_8¥Xa܄/SEZr-!PHup"F.ĸ,x@SX59,1){ D0!$!G $=@$6#{P>,1\H\Z)x*MB[WPS!\ V4nX[AdqňDp*Tg J^@ 4x,JNjuy-U@]*=lefq_R[ALa6MAcM Jxja/ b@A@J:UzHjB+A*=[QA՞ u+FvaO l6.&2_8>=yr}"x8Y5f$yxZnY^)OO} GPGއի&\azq>}߿ <| ƇS=\ܬnW~_|.nZ4zCkFOE;r@uvl_vg6Z[ gpA@Ok6/biO߫0uzn6X^-~lbSfD.Qc gT Ű,N,ҁbӊ@]E1JoK$>LLc,iLqiȚ@5`ߎC 6N1sQc:0IO)$c}3 Hi;eHc`RGt0)xdcK6 q=e#nV q>! 01T ZbSޫ;[e;@@N!LScDe ma}YLDQxy?oO-"a%G P9xh\bz%7O7| ^%"c43=r/OIg ]Lrwfab#CHȁ)(w H]eȤ?(zyةSHsNccUuΕ\9)_%J,c 10k&Qؑ)c2*NIlH>+e Sktj3دS?BFO endstream endobj 2658 0 obj << /Length 2150 /Filter /FlateDecode >> stream x˒_L ʇMM6US>p$hkTӍn>lMMFHnb#bC^2%!:<ֶ :,bR5Hrg7XfqT\7**/M24Z/A|e0׀5\ܿ#y8-*@8o(1p1֚6ѸeήBTT*Gdk8W m!KI[ppbFbB|ﺾːN=XmQ4M%6`L2z)uG &D 0KT&10р6'P+j…OA|´h}yDwC+1@\~bu5j<0ԆYrM}P7/B5Mkϼهa!AT[24{vߕuѿM\=,㴙辤[rJ 4O21h4 xϫ ב6R>S:Aˣ}}:AI 2F~, D[{wz *U+*&k`Vu_0beL j\ez U㗘e'?OzMfgr~P9^o2ɤ9:v=!Z&S,dB@2̼hU!|8@Ip9 ztƵ@^2GGXGˉYUY)c|o4\Χ&UTOXI)Tb _Q  endstream endobj 2662 0 obj << /Length 2505 /Filter /FlateDecode >> stream xYK6W |fDR9dpYoFrp D͞Vz~XW;m1HMb=zH^'h-(noI[zFͳ^ Efjo]}^SgZk_Q- {jkWkedZ}xf#CʇesIDt:"}3/BC ;;k`<΂çyK9=~}[J@7|N]M _ɠ4SoV+e>nA^ {fR !U:IƃjG:M@$[Kz mEM^vG4i7X-GViPFe MI|aBwF; ooXqRPc`-%s-c#<*b±&v/mYV]>=3~=&ZiPhLs,=Z&ܟْtd )2QQ1  Z߀ʓUe,8LڙŒ47 JOvS{ɼdE{unV~~& vveG ^x=}F=hQpO]QWd;WZL%LDF G'dU)\NG|+m]NJHPPvDJ[ԩH:/Ǜ9[eLvwYPWg"Yh|`0oOҤB䑢'K;tؼ9CQ@ l2P l΢F_C=49zR :2x i uk0*gv^ullPZf.`|oWmwԲ\)ȼbm9hoCǤ$^A(%H īliݠ"=Vmf\fX4ܺڍEnw-W_0sd+?^Ggx LtM ^VcQCV45璗%%<|v~?"OǒC%Vf3yVJ d ˁ *\?7АX2~N m:5 𼳟HKgab  ]fgm[XW4探;Y!HLFR|*Zi$+8TqyNl Te `81^3x.2D0̨EG#."1dx`4e}[lP*K1ۭTJhGULL .4u<}釾8eU{Lhzf|RU zڛ3T 9JK*/-/)F-Z"y hş319;ERtdYWSƋ y}=s]-AɆrZ|y&yݔE{./ꗼ4RC/ZhZ%y7UNHFov?rz,%1i?AmOk4H7}w9n<=8C[RB' `ƿ%.*!19˥%EGɷ:6^/`@bN0XT?b1YX4乷ҬfoZ|ˍLary,\M?ONDЕÌ2<4 |?/4{\{ endstream endobj 2666 0 obj << /Length 2016 /Filter /FlateDecode >> stream xXY6~haud xq,,FehHT_*VQ-hۢbXA]?]E"]پaG?LwÂ/}N"s]vɚa(ȾX/# 5f0]iJIӋ=R)NLd$b/E{jn ɒ^e"Ajɜ>^=l4x_O+r2R`; ugiBfC].FNW-op乿v2_ _M?oޚȅZ)WZ9lXd$AA}i{!ŚnVvʀ,qg*Ѽ=%7mIUn҈Y 5LZ4c@fcG/yLHJF2J}&б(Mvi(D+zcgA%mϫB'{Ji!12XY$\J"M_>*V76GG< 3 8mgBm$2١Xoc#Z7 FӘ"LG: *ZYvV'@ygܭ-N@;+OmHLEхYYMLRLsgZcGpG;(Ai 4wYTi}SQãb FXi-uʾ!N^8刭 0*g(NLAB-:sMHMsamǺD}slj7 ,S {7^6 Eg~/馪QѦs@U" q~tV =C?<@:6w@Ѣ Lŋ2r.#@9mC߭s.:e,l#P ƝȒz"PO5Ji@ձWrvT$n:}]7ͻ})z2[ʅ!r4~ePN4-B&],4LSWZ(a`C9:s-(4eUtx/JEOD5aO79 U$T-q<ޝU刺#'p1tii1E3)v{V:d{i m|'ٲ`['g xO_g7 `+Gf`4 NS7N_!RvݔK ۏI4ǙScW 㪊2ݷ5y%vkOA3L ɩ v0ۂ ϬbTJ>VjE^xVq-`_L Նh"P#]]d' /7Idu'nSǖ6 t"A&MfQ<\ZY_0AOB:jl7 Y}eZY~9z]~)~U -ax|)e|UemL'h6%gj%j&F؝z1ReiFs5U4u7X{$yjum7OJ FlɕWYeesM@ 0<dX{~ybkmz!˒pXj };?V>q.8N S'X#H}ٲ441Ù~%E0F&z|vžpX8LQ?#rɬ02"PH  endstream endobj 2669 0 obj << /Length 1180 /Filter /FlateDecode >> stream xWn8}W)0Cjgfk C阈,?-9J``lDF0$*SlrQ8f0H0Wmi'$ywI'.a^ <"{^M2 L%e S ƲM=쿲We{b1e7{;]iQ8%KM g Bolf,P?0qh#%⿁- 4. (ޙePNؗq#tar/8p).%b3-x#Cpd˪S9!FF¹_2ТăYW 3pT=â͔6CUM2X(s*,S'I,h2&/8A%gO/OB9"h J)gn4egjU`۞fuM~[Cí!r+w}YBiñnm5$Mٳ5Ji]o-bw hC16XѬkˮ47SZ-/ ܔ< ޥM$$Hw_ endstream endobj 2672 0 obj << /Length 1250 /Filter /FlateDecode >> stream xڕVn8}Wy7⊺YJч\bhM "eR*K.E}H2nR᜙áȂh8$tQ>\E?ϳ7 fPM1Zg? Gp;D[ϔ'/ =] 7l+wj\9(N^[ĵ>%mi]U=ujxՖ9 `Y} A m2B ƙicDMآzyYǃ'ia"S? CLA՞PӤPPk’aiRosX Yt ET2 c4 rń(V(_ϓ o0'5gtDuվāWѵ<~~$ 'GKD)(4T>Ҹ>sD!w+'?i*b֬yBb]h,3Բh B-smy:\SnqCu<!$kl*L6U3`_{3dbMaoH^c@4[|ݽ^lLExo_{? {qk-ugv_ z.,8Rk/,Do3Q3O`R91T =gWW'-F])ooXTXs\45jQBތƦJԟOE,BrʦFJl/.iib5wUfC녦"OdG/'}G,j2^a/.N,ZhuGb帏+V/8(6 endstream endobj 2676 0 obj << /Length 1327 /Filter /FlateDecode >> stream xڝWmo6_!d&+J$%e؇i[$ư- Z#bRrc~Ge[zC"{2B^zI^< ]surLϞܣ!Œzš{?+Ufq짗1?} 7nBUjD /'Yȣ1 C'DHD!D'M.")\Q-UILЎ㍭:g^ń2f߶9jKG %瑵&BT׭s$"Nh(zq}8sDxL@p4><:C S`:^KӪ־0^WsUYy\R쯺R4D4)|^&7zՂ~ q/&i YOx&VyōƝ@`/P(;mP~eInhQfeʴZ5ܟ'oQE2 !$23.̼d@YPxZ(̾p(VW]SVx${6Y筍n*gϞpeRʹ <_eY[r_C) zf @_&\\-jmݖ:ۓu9Z)_/Z6=Lb4K3;$dvig5vU=bmCAڶHFVUNP{ǀW+eP"""Jݬ(WϦF]فsJO.愜?bU1ΙĘqvb 9!+Yn݌eqTt `*{TZC3g+%:J.04rv?H{+4c$ɲaq\]{5ނġƾCw: Wwu=U vݵhgڦ.Ve6ËQ{ l>4KoGG!^c+[6-^HI4hmu}hfw{p\ѣպ=r[5BnYx#kU f#xW9D/Yq i@քuFٰ[j1۫!jsRY_QJk8u142oyw710nB=W|Jd,xFykb0(Hcx5<\_lotu{b,4^{zȱ8$q`GE)g;mVFWbq~~C}e}4{hec7Nu|t-rDUs]Bj endstream endobj 2679 0 obj << /Length 1447 /Filter /FlateDecode >> stream xWKo8WE"V[]!idc Vbl6RTt9-5np87㘔IUrCur#ˋ4hHʰvjQ{+\͂8,H?~~o+> OwG狭4tH>.{Gee9]|1!Hz^9֦);c9Ƅ6~ p:?4bD4F{Tg5 iĿv-vɪ7\`;r@24٨#X1 {}fvD`gWX5-Il͖ٻ18 Hk~NUyliGM$jgU| il@.fv,0{Lhcv}צUFmn-YonD(}/_FYX`7ڎX$F[\^ƍf] + ,u .ykrd3u&CtҮK 0Kz1:x$ONbQ %*8F̥ljC݉|yJ.icPP;=<+aυ s.lrp&EpmEA<'knߗ(*!۱jGoQV ӓ?p2׶&R\Tv^C칼N[[0ǔ Pݰ ߷e^ KhCn뻔M7;(D$s/ sC.OJSHw{ǯp7-3 o!Qb4d6}׽r:D?Bܺ}q$ 6!QC%11jdꗾs;g/m>~ȳ)>k |%d:O 5 )G?Y._2$ ?c1^!X}ĵ> nпXY A鉮%Gp@ W-Y+H7/E^ " endstream endobj 2682 0 obj << /Length 1204 /Filter /FlateDecode >> stream xڭVmo6_!`_$D=>$K@,6V m1kՋKIwǣb qc}{!wN8i<ʜe}S}3n|$/g?^DZ9wCU^i=?bܩҪY*)7ɼgo6c!NOe! (H܏niҢ]#3ᴃ>AP"L-ro(d_Nh ; FAȹ ;`^wPD<:<3-*5+dU3\ 10ZQeMmd;R{䶠?朶WengqlT'(6E2Zm7jaw}/ n eO]j5j6@wVhB$´<fǸXiLeL0,&Ij'Y82u}aT[ +iH ca}Ta;v/&bƃabKh, %p5<Ⱦ.18%= ,RVE2h7C%M{WAK8>5XaIjW #,h:_aV;\鶦xmM08qGpJPY|m#uKtN~]tJ@=`O-SRp Q{f#u*|N)IwT&U`܋8j%Va@\IĽ-a;wV®Y1~٘w䩅U P,Xeo(pg` ?xoZӨ(O3ԊySa'{?:F[UU? endstream endobj 2687 0 obj << /Length 1273 /Filter /FlateDecode >> stream xڵWMo8W݋T\Q$-$i1Xt{-:*K)E'1;PUa"@D:Q' 1EXU=8ؘ;G9s$ 2̖P^ģcnzQ7ߣa*Rj!=?L(8>ϮϮf5yx]:t$u4"EEK٘ua3q3aJ,s|1,?eѬH.h&bhƄ!{,k;߀0AVޠM -F&ec CX| /./r̫ۺҫWn=ݲ}/]Rޘ'C?FQ'DIeD厒쯱3E$&1%! Ia8< ])<1J@ "D<Ta?kt2o^ՠ?cPQq~"Fw 9A9Y̥x>Fao6|m}p yy)s5J%Fy{ jX/6{Fxޓ&{g K,T񨋺؛CJ,e6`8uEnB% =ݷض@lYmF'sWԴFsm8^S`B^نCQU0<Ͳ&0Irm9z(K{fmג 9*f}<~54Q~KO3D6b->3> wlk5TYɝ  pʋb}*L##0oh@y_aB䃒` lMsJ{BO@b!tGBGh; hs,\w&[+SOыgQ/}Q yBh5ؽߩVu73zYՂ(o$QrtvwHځH|xH1ޫrұk֮ew4nʢ>)R!HRYe7碮ndwp]QxBVv5- WyC( e+%et1^orD;=Oz Zͧ4wC&cu1.JiՉ5\]?>M3< ه綹*lIJuU}65w}ж"LEİ"싢u#{ҟA`y P υ^k ޯo/,6(!ew%F8)aWVv~jUC1qVu;6$ݯaB endstream endobj 2690 0 obj << /Length 1514 /Filter /FlateDecode >> stream xڭW[o6~ϯ00E] !ۮAbXMDzh #qK p|@7Z֕E7)Pof^ 8#ȑ owe,30'~B5HRoPhJќSYٖ݌@#1MJ@S|4aSGu\žD $K5a]XMja ؁JGND1(lj%Fl劗x:[8.;o/(j@kjЫ'p>$ Bn1`EZmnGm`s[hǶRpږ{I&\%Q~+#~ۓ0 ~aL'c.b-zV^NIQZ+zBɵKfIS;窹i$=Lm oXsRFƇ3DdNA-l@aі"=}k/[dՂd[U|<iZvzmٴX Wfs%]rep9/dczX88jßjQO/~F{/={WColo7j}yJ˺oN":=Qew.2ѼDii!Ԓ$`l h=X7[VW<*vqõZWv>CjU88z6]J0hGq endstream endobj 2693 0 obj << /Length 844 /Filter /FlateDecode >> stream xVo0~篈K"5ĐtCWکCi.1`5Qⶰ~vRևLH>l>ȉ3 3z-1?󕣿i{I abj8S|Es N=? {vwe6قl=g@wKb$8yP]!D!@Ah EFά (Y2g,~-dʹrMjϊH`Ԃ~ DK4R9_/MA+! -C18PGr* r9KOLkװJ[sA@k&WR)) X\Kbm4zU~ !@! b{o> stream xXKoH W=@5;#^8Iݢ.ƋbHc[%y%NCJR^vQp(cȪ?jE""+Ϥ6->~Fwj}ӛ X()z3]zLt}w⟗ցs~>iLE*N-ߝ^ QN;Ft-i8G=o3uS#Af)> X*5[u5VT[:vu4;r{:<ًcpea["%zLZ]g Pi++4 c j9dS7/g@ 6Rǁ{CL^i:(aGVArT9fg 1Ic2Sv{#Nxt>6lQ.% * 4-KA$tJ9$s#Ox9}[tf~4UʤX9ͱxj( H鼯ϊmB)pdrhmPXߦ=䫠> 2wiy4bTbT ,+faBr8hע0^5o{njS>u  AeLj=.h@7T 1flXp Gp]Iy; p Xh钙V̄_wsS%rUܙ5ʺdID6G\WSCD6O fd! ʺCvFF<{MAUC/QpV3G}23m{ /t07A+YKZE^so@G~ П'>'>NԵO&?L24{l:`5ZLbx"!F}3(Yp殑힋3ҴYSZsO`LO`&slǭm෤6\P<=g8L5w+mExp1+[sm(WAPOCҩs9KQҎYe]4j5M]"S])6 vmq &V8j&YWv/,i+im 2Q2[Gkj5y:8D,+&-nz+ F"miQۃ3-򾦹B0lrqj&mxyr$HЦ$@SM+G?Y endstream endobj 2701 0 obj << /Length 1490 /Filter /FlateDecode >> stream xڍWYo8~ϯ0/2P3"uXbMvlbi$j)9Q r~9e> Gy8FlTTG;->u='{fG'odC9͖fZ6IEAr<$8xNRYUj<S4]t&B"8|.#!:3,f< XZ)KOkSEl+i 0 9h/3"SҦR$ !`Q/HIE35q:(!Ν[x_|P-NBH9b^vVuXkbkJ̷]Yiz&ԫU c5{a Z/Z's+*Zw=(e1yB'i2E~" G+F¼h$])窼g$n|q@ohquBIǏ{6N?i[l;K!o!OPNJZZWf<އˇ_>Qk^ s#&e2e XB}ք׍Ut-xOiuu~I M鹗/-dkqO$5zd]n޸(C=8@q/ڷVFA wRG0-L,DmǺKQ&T쩊>L xWf-`1Tr"E/pq5Q@G꒖Zx(9_(?{¿z3qҌ _/kch/?2xui漆 HrYSSG/soVwwy-K Wk'w\>?SEGP@xUMs&шtrOK!)x5/ONSIT> stream xڕXY6~ϯ0RUS!gE-6ITuA|g8#(m9q.XO`G٪Wx|`ܜq>y8^σ\nvn՟޳jݭ7az&b+";LExixYg,XɕCld/ˆ MQ}w_I7]ӕjG>~#ڧ D>Le )}!l'GUٓjPKdGtG(# @';Jw>>뱮@t߳1l~İ$I/n eyθ0&+}me__P)? ]j+2X Ј#p?K?DҐy0瓀_~K:1fvGwca' S(J\Dt6)<|a{Mʔ p؞0<Ԫj}E)(B:[Ӊ"V{(=@{תxn]U Sck ೫1<>[G9=wLOPhjb 0'RZ01Uk4 Gˋ ՕT$-BxwCns2gmΓqΎCuޕ/uQ%i t X <ǟt )`as.f`C1gE0{!> >k\/DB 08 ň _E(l4K}D4 `hq0$ !Zz1dU3JE8q;}z[4p/vD`n@ia+=?ָħ`s#]q))0B;ƒ7:\ /B`ADSxI3DcsM/c;N.p~Y l9}{ģ%vS465<ٕa}?v ! endstream endobj 2710 0 obj << /Length 1997 /Filter /FlateDecode >> stream xXmoܸ_hQ"(%qi] ˖fc ]0 e8y8p|_d"eQ(W՛5n߿NADwR.x rcoK_᥯~I4pJPK?L D.yaO8|:S.4b\Dd}e7O=׬&^QZ|dBS#Jit>uߩȀgA_0>tnjqIf[k/Dں,ێ6>4ۘj 2L=6hhmo=SFRUfwZ)sYwNWj~*e)af_4B_5Exۥd瞆mu=UE:ጽ~eXnu`N kMZz;cvT(IuGe484>] 4|WԄ,S@QAǰ?ML[9~g\sbt.IF SA`|vӎ*+u;憾Lh@GhEZ}w6ؑPl;$;EhAGTf&D(0ĉ041Fi( P3tG9pv+yĒ{D,]Ӌ܉m+c//a7}Z_^})5\nho^f9Vei G^(Hd+7*u(c\4~t8Xţb%.hKпޭFvt(9g PW2Ma$+FWH01^Z ~(j86pO$}-uIZaD" ;+K`VH-ME$,K,o57/DRB %>hM]fg*Z8;m8N8? gep 1~A"1Ƴ;+9 2jW>u45 @9[raH τpp%!!K ֊d;i`| !VUnT8l muֽmoǫ)\KgţSB9KpzҮO_15(rͦ'`t55鵡kغ5<0u22(d ªmP,2yeXPKY -Y:^HÂp¢m(l,2*X(9X!gB0Ű4 OjM˵s.~3ם5=MmwM,4w#" ?^[A-ok@ztAu>mn z"9%<2p4d;:Aj<Ͻ&/f!h 47]z$s8صb\G];˲6s|O>/Ut~BrxRgΙ+^ç*VMƱoȥmIs@lBq=?ԛ~;$,ѭTxT9<@AD K^uJz&@ endstream endobj 2714 0 obj << /Length 1264 /Filter /FlateDecode >> stream xWOo6S9@ő(Q+vHd[(ȒGi}=-ZC|z{$G(OxPϰe7wHc4|3?c(9 拡y|߮H=(!y% /~;ZօEqFte|oY#x0g## ij-yթFo6KhA&Ab`0 i'c<+CiJ{8aH@F{M=B+Zom`=[%euv/k)fVfki*:P푒I4CYzX%( gLНeqb2D20/PhfjQPА$y͟0er#ͪakHc✱jz]›9\ʁ-fg|8s.p~9.KZmj)qW|Y,k7Z Cq/tVfhn[hKh售$v~_,xjJgµU]q`3jz[5& endstream endobj 2718 0 obj << /Length 1403 /Filter /FlateDecode >> stream xڽWmo6_ad #J^Z X']&l#3PYDm0Gr6) @<=`FlP,4??NA'lzp|.Ā,r>UMgB6j~E^dDZN/hanUB 0"t~l)PKtII3u6_D,VZTj<WjʮnK-Nbiӝ/x. DPϏL8swڔC`/4V+ YUҀh>œK#&/jwqo 8N!/_O9g!KRRQ0}?$I Ҵe=Wv\67X @vA*͂ 6 'IX8?^m4S)SkUxUop|j AxmxỴA |]cg6h%;NWi o+Tz1JlYA+p&bI;7k6&!K3?a$bf/m"8FwַZARu ICh8˅- yzmb+ Ʒ%BVa9M2㳮 ٓIU腮胺 T3-JS }D)ڲ1 5@ij;4>D)1 V]Fus!iw{EU)_uα޵x%.$<긔ݾ"3w˲Sˇ\yW͖ mmͣ{aYAGղYwL=_ψ|N> stream xڝWo8 ~_^`,{֤zm V%'Ҡ8)"?RiO<̛$A0Ovn/NsA88 Xe|XZΗU*M  9[h 1uG_Nfgw0aQMҐ 1v7S$ a7 m-.UՓT5Yo8]>$?be6-40m(ixo|+Tf/-dk<ŞǼrE,2L`NL'M`8WPFz#C  r#2 ,YR3=~\PL $S `K׏XS?T0HkV?u_d!0eQk0քG堌xW s/JR[T*f*"~~LAȳ}2}n J Q%=g@/~: 4njg y8}UBP!q<ϽΰPQU*i;yWɡ=p;;|ֹ:= eHtT"PLV =xB ^9G;,1bG}Dg7n- W(IRfh>ld!4@QT-9;\9P4Oɾ3:N!c_\iNQ61\qgny*x l7a?fMHKd{]X#g_l-lz5g/lh[۵Z;Tf1(Axt.T^;ڀ1LSSI(Ak&A]K&04>:"M]c6@3!ژŸtl I s6v*{QK<Zнhh( b>C=#&` $ ^;XS;g4twH糨 idn 6 ݬ9tλGJܹkލ4}Yxvw^jhQw/ɢaWٺUneu>YB~9@xS^<s2 WóX1p9t4{5,\ U]&}ټ)IФ&0`ΐY_ %b,ff4ZPx@q4).]x{=. +Bf4LO )Xf =I%ó,B,ЂW(uIBUMJP8huhOeJA!6D8@ћ Ug%J@<26Z^Y=T\wNxG<6R[6"HY'{$vsnkAsI7D4r 4A4$J #`1p{$^!PZEM|suns OY7d* n-~px-#37 ߵU Ce%^]%ݧPs#=6¦* ,TRq2I3Ǿ p endstream endobj 2724 0 obj << /Length 1529 /Filter /FlateDecode >> stream xڽWo6~_al/2q"0[d[Ѯvmh9ےKɲ~G)K{XgH}ǻN`!ɣlR/4޿Grqë8ЀAN'UE9]ojae/~ջ[\x/VBS44~Zr1[t{&8MhHg%YDh!0ѩ'k;lH[ވ'Jٴ8Fq4YH0oy+ h7p˼J8fߝޓXLh8,=, fn =D$fDcnXYi0{BBT8LhۥkJy*{3ySz a@l,"%F4VՉS LS$;v` lߡYb[j؟x\ ] ;eD0j6(޺TgǮWZH@]Nyn $- y1MS£4WHسqnNSn+Xä@Vm/u&sf%l-2UҎ[A_a놾'g~KFРR~QWď>GG;KHXڿǍ)mxal7Zc@ce= ]?VnyEbhR}~>})*$Ir&Ib %&s2sRKiNX\aY(v!EǢ=0WvDiKYI/u endstream endobj 2727 0 obj << /Length 1135 /Filter /FlateDecode >> stream xڍVYo6~ϯ0/13En۠Hcm!Rt>wxȑ Xhd8 '9<&5R՗4OgGq< )iNfY1~^s/;(˯Vp PX˨;l3ApZ-.R$IQEb>O!a<}TB<BAa0.{-<*F.eJhB⮂ 7 ˕aoAXۍ,5:Rv^GpziC-6zOB:7kی iI0A]r0jznN+XB]r^ *qիɧm[кz޷JzlZgl[wFu`FA9"avE D ,DVme {YG2"f7P{7[!A@!@ jrIHNUYBTu(S!#{,[UX~ƽ.|W1aڹ,7l1:)I6.dY/5q5՝a>K=~5XN=QWصZ9b+`y>w.E#N' Fѿ_IeETU?*\T{7'~8 OOH?k$p(}eo$=Xpwg;4e@Mߓ$ף{HQ 2UÓAv($f[:[[}8G)zS{ U!-ץ=L6"J2 &hyl''l MqKdc1OǓQu"+0⸣ƌ4sG-}AsZW{clSvh+3O3)NLMsNѴplfSF9^Zl'sߎu3H~j(`Mm1z݅@>lT~{mtoFY5{Z7X endstream endobj 2731 0 obj << /Length 1286 /Filter /FlateDecode >> stream xڵWKo6WE."F[!mdX,{%:"E%q}"iKܤ"pHo^ %0v]U5:y;RG IfFs:EE /6C'}JdPδge.s%S(/%Yr/zu`~9=SXX1tC o:}8#])`"y[(.>#c>ާD5+1= ja=\CA:?%*D#vߨDk"]o3{)ߊ1=hC؝-VvX;P$B-F.uׇӡkuY9T<,ơe4{4j| R?4T]'_B7 !0J3::C17@LB.;Bgtysw2{&8 v̩ro;Ƒ,ئP0B!3i "g>ǖ^pVU5ҔVEJJB_>CMr[ /ViC8. 3%vI4J1l.UDndm\!(20ƈDpHTHL\J܅uN^S+ޞj$HB%eL8%Y_CN vN7%U2)+~2"jچdW.ҩ VIw UqP;#^T4e<" Tn-o!*9=cE)_J 4QdkT҈o *,hW}$ܳ5L)A*Hּ MEDzIC NBx}8yQrRh`/e iN_m`G5to< {]g]18'0F!RYw*P[Qҭ\,[Ciߑ/ -JN9;1KתPNRx17#?av1q|g]]>G"z\84W/NH, #F0G? endstream endobj 2659 0 obj << /Type /ObjStm /N 100 /First 961 /Length 1568 /Filter /FlateDecode >> stream xXKo7WҢ=p 'E@hk KĨ8~j$;KQl椬ʲ1RR.EX>TA AUN FGbKfb|ΆDH*ΨY ߭e%#A"QыVtL$Z$|ueaV`Y=cP,=~,߰X b-tBV9^t/G B2V,h$ 8rb(M &1s4A, &85}AyeVf\ 0D6S>A`rB B9X|b!! b$ؔFbt %$ `aUtH. 2#$ 퀤qu#G*!jzC[W T" J֊mǘЗ%"񜌡a^D1640!1ADN9u!-]<דr.@۳SU(o㲟Sn@>&"P0Q$VQ3Qz J6jaY9¿F%NEw ]tw Ee HӐY\y9:Ж5{ž"@R: u=G$ ɫ( ہ~Ҷ7'ʛ|!{yMl2AL=4hJChJ#նw]LÎMy7>lP,Fz>-t,:mrfDBNh㖒6pe3ϯWߘ\|f(޽{覜/j<ӗE957xU}5Wŋg qk!۴(+ Ӌf8?=( <r VTfᦎHpY\ rT7^5ec]'\Lu=fuY]H=~4džF[61j Ǝg/\ȃXR6db7W nM레knM5=݈$Qi^[=s!Z=.p*.zsy5ӫռ8+uU墘̯ d%GkKp9] S׳)y}S7z^o5t,g(%-8dirʶC;c}!Wt;t@瘭@- R< Y'6~3>Co:^Bo5ݳ8 9t@(?C; =ݐr]93.^?M.A!:m_iCr 8IĄ endstream endobj 2734 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڝWmoF _ad&Ewɒ%+:BMGOʱWO<ɓxφ?ދ^,ެ8T.z(4&gcqv{Ib}X&+%dຮ<Ϸw^̅LN}ۊɧ홾5D^8!" γZ < ˸i%Jmf#bJ e MnGi9LSZ$gHJE<6*`T&JEڼrR,1(LmZL{g+Y$y*JZN\xJ^E"7Pj]z1^\>wC:*bmXjgaصPl.(.6.zIX_TPG"+JYԸɸZX;5g)L }\ςoԑن |8$k淺iZ  O]uN( #QdY](H zַu" `dzVR+^VyR&F{߇ΕY2s [5;!q?,sefhV57%BFtBR|q"VD{ (\ @''&G׃ޤb^%ˠ)zsjAyXD$klL^75 dw: %R&OYg*uZ?fefm;BKQSwGS0$mibJK: ϱM}m%M5ئ)ݍ oA< HY$Gڼt)*VJVS(sV9Wwq$쟇޴:(mD(ׇkoCc丛:?}*n9KJf3Xt%ZۓλwCuc(723۳D$B=34!07`b0B7,7x[oRׅ!aVRm2umޔP^,- ^rxҷBsV@V uWN1/ 7lEǕhr~ dxdP=Y*10śײ!cQ@ȕ0A([H)F;j Hԫr1B,jFJFAj)Nܤo%=_'bDuDmEqn*!a yN@?~%F$VOŇ*" endstream endobj 2740 0 obj << /Length 1594 /Filter /FlateDecode >> stream xڍWo6>L*ZoKmǰC}ꊍ.I1Gɒ4A<C"pQu"esX.hE|`'/Votpq};u]->yw|oZq{$D(nm)~.7(zrvycz],_dy8!ywljLuQ,pͲ8&~RW17;Vqõ0V ~AYe,"@pHp}ݙ\*}D݉;>~ڈg(~"^pֵlWnJԴmE`{r> stream xWKo7W+ KO=(~$.؈^--],)??!+l9!( ␚(|(TG٨XQw-GH|p<_hr#FINs6UJFuPd0`z}խT]qS ͷwƜ8ue$%YDq&Tށq . ) 1ey% 8 >t], 44J,464jt Hb󡍂Ƅ1땳o6gQ L4lj{-ऩw!uJ-zEQKRf[ <v+>Ie+\OF0 @>~ X#aMng`7] M@]-ݴbpRNd\!^n!ɚsfVmm&-[ ?ad?8i?8~a hV endstream endobj 2749 0 obj << /Length 1570 /Filter /FlateDecode >> stream xڭWmo6_a`&+R^2CӤM_ah ,۟ߑG:40EH>w܋$?:)IǤHI>^Nur!ɓWOhDE5\M/48ȏa\R˦ӐeGAΧ_o79cOg$.gt$yBh SٕZmz6C}@a4QNl`! ֢7kY{{9eyjvJQr/Cɥ1]ַL _h*ܕjpE%wL(0c\en{WeN~K5KND2[E\G+7?b A Ȃ˳נ9Z˦X[} +CZ:=Nf,M!n< V2QIMVugZwgSS%)Q(`gNngDMH) 43¢t߳vKxr=9ޏ_""KaU<gwJZkJ/x5́ejB|Ԩ/)MVr++<|V)䏙\I`yckŜP}j\NJ0W0#*V g$yJd݉pm,'YQ컡U"E'{^ 鯞Q,%q-`x?/Z5[33Cg3~9"nĠ[FNuV{TZBqc 1Gy_ugp+ސ J ΙpLht/.C5Y J06!L!6X7HPC]>yפݵI(U_rgx/T=g[1F&'Ytqv溇`Cҧ辻5۲[<8RlΒڨser[ܬC8..<ςw`$9P칛T63<0^ V,#Pv%7rt=YwCi&*NJ=]߂9M56VXG_88QKrkG<;fꐸ8q UYӲeuh& l!yZ=\r趂?gYC@Bk|UwpݺK2襃2j:JvD+ڪ3X(WJHi~xQ׮2:wàrxoeѐ]{PJ*>3Z[bA;rP8;'t6gn4@XE7E yvgU(ĘeCuHO7g$>ޤFu}Cߎ? <30 endstream endobj 2752 0 obj << /Length 1235 /Filter /FlateDecode >> stream xڵWn8}W $E6-RM) FmhPTw~Ҷg"Hp̜pBg1Yϊ4%UVY< _?Q'`t f~{f4&U\|qj̾oW|c4MUe ο\WZt,<>xv1dIr"8+]hJbeFh!$$ÈI`n[ٯH !tze 2͢$!r~6=$JWe|G 9 b,""jC^5LXp+q1FyKy10R@ :QO3 TE*JSAL&B#kV 9f7r Rx|)2|)КRpOAX5PkiY~̉SJĊI g;J4oQbaґrϥúhCR1=7MV4?0q Ombo{Z*YqCqAjL5PҢX? \Z;Ӵpk 8W'X:4F4< j)a%<;SB9WjrOxƹ)hU䶯QZ w / >T< n{\59f1yՖ+$yY|<] eNsqכVǒ;)IQUl\uEK&x7<0zw _e-9l):y+ܰ Z5CX8D Wwkì[)1U%j x߻v6Ô>>>xУvUJ$;.+ |z.nb~y7"tf F8} !6׶G>[qm,8PKCkm;Ž{\ WIT٠7ePQ#ǘhwЛѱI /__ endstream endobj 2758 0 obj << /Length 977 /Filter /FlateDecode >> stream xڭVMo8W Ĵ,zHȢmZآh{Pd:&*KH1/+A45yP$Y$ጧA:>7gMde~6" ΢bU>WbmdNc(' t6>ʅle]pB""&.Dp?R# ϡ#$iuqԴ¸6x?/F-nHpl;|)!;m.7m@ x4E0eEt.l69ֲ4p0$(fZD<kݓRUud HƩ}l -Ҟ.϶Z5O=)?YJ֎$ӬWeQ׈pYͽͣc>[g49)f%M"F(4;JR1=,v'u}RU>o# f 'V+;!t\ȶ(zpk+O4CuQmED()ys?0umw'Uɭh(׏j]8ɲ!'Vӂ Rz6- \{?Ǯsc[c,u՘1=d|y7,}#LSlgcП`v|fOq;TIS23sJ(;iM7[8gBNׯͷ'3*0vs*Qq=dNNc',ÜdOsVn\nsrB[|ҭv $}@Eah7d;Zh +Vt9e>*K4qTϺfkY2z7i?4Ci?7Ub>VOfr]Toe}o1mj͑vN{]db~Oj~@}F+n}s}/~./!_yIffɓ-|.Y_LE[.ՃĪxS*,骚?Gj endstream endobj 2761 0 obj << /Length 1497 /Filter /FlateDecode >> stream xWYoF~PsG>ȱ:cIɆBRq,%QCa{ oFlBM: IO~ߡ:X" Ib~D\gu5>Խq(ݱ0` m*xJix5F9)IKݴue".ly|qe*]J*rV*wo]:4>B߮ 5<$ߤ,r\+\e` Ԅ0nKs.Xe029Bt*J@$. g_T `էyLĔbDJ,N6bv]f0;\p%nFF Z1Cu`41N-_Fo-Ke=rAF)էg[sd\FÞW4pXHw Ӏ&]ma%@#'Wl M%%ޟu?@0%BNu6#s'%(:R`W[{ښimV=@az[!`B3TIE xbR|Z# #O41 l@ 1`}S. 6fmh0bO"2&ѷ]xR ÉvC.Bd |לZ&cX9>iYQJ(vLs{[j{nUi7 ,H&{ }]:WlV@q{2} ?%(No_QAcIJ.݀k_ o Y( n GDt@zB/})C!-kI3iR5Wi>ܐӐ*ű S0ךv(F%I-,b1DW$TcԽ7d_6> stream xڽWo6_!d/4sH#C&YdK{AUfb!Itt<ʖS{vm`;0AʂX$G6wq7alrRg4e)&&y;F7$nƝ~Ѝr=1W$bҩ@p;tIpA8OhD\Hx9H%yff0'(Fifg۰Z4^36Yc<(x3H.mJ!O)^Κ}/:>dnMHv5GsXG' ԇq\/|!̝;dz\AR/D*;F$16Gƅn$qW :dP%d!|1)ߠBH|i R^|(<3E]m6Oc*E)q@dBCwk{Ŵ7R8 tgE>/fE铆b.Tq$@v[nۈd y\Bf6Um]YkET0oO(799Ex e]?!y=YYzMH.ڴۺ1{&7ٳޙʚ&"v1HhHa_(6dmu4w{oRIaՙ9F7 J~"  2jl E-TaKcØc~"~eb u; zR@,u7&cTUed%]6zj^5QI΄<(<dSo\['uY)f }m˷ΕK wM.0%,j{:me[ TD%ܵ d endstream endobj 2767 0 obj << /Length 1408 /Filter /FlateDecode >> stream xڵWo6_aI*ND}CڴC -2}&?;؎6{1u u98?;[]k,%.uv\|kh)BP9lޭpߖ㽊p'th%Rʝ>0/N]ޡ݁jfc A2vN'K5H]2H~z5> WG,뵛3$.;~Fun]Zo@WS &ʃ= {2;TJp.|q>%Blִv-ٙ~~>/8BHӱq1le[E1Kñ-[61DcI/c14]en4  . NΆ>p 4ɨq~){`u{YGϬyrq͆OG ;Huƚ 0QI.2N4W2;ugOi6|4tv:jP}O=O ;)f..fdQO)4 endstream endobj 2770 0 obj << /Length 1367 /Filter /FlateDecode >> stream xڭWKo8W D\R3Eyv& vQmڒAM;á\ubἿDA.RX b)O" 26)l= ÌADolQzBwYT۹^3ŎjFWE? _9 S/X<Ú;!2E1R7 ]#h^Sb"iJ]fiJ}b\|{S vb }A,r^U;ì8b#DU빮-|Ummʮ&ދ#DỸ^f㛫ga,e+8e'bY.Uⱆ'ga [ui $5Ln۪IyUL/"EO 餝1S?XEi/?*TcX7x",>֕hUu\PH0JD?N΋f=)eQw졲3:]5v:T;{R)1`( xȁ2MŸ"n|އ -|lkv`7R?q:: 0Rl ucv,d `=c- !H"Qޘp/:Ƣ.1dJ>\м`YsJ3]Mgv_00>ydwK#:0v g{T;(0k L4ߞx3\}/}0TABUKEe@dlu]]xn- IO_M|_!^."A)jt*,$v}re~R艆ƬȲ(+IA퍡NV!2w';hξbNf\Q*lԡ]>Bq]\V ' m@im(N,[V;G"TMUC- {痃3U"fխg:Bv?]k7^X~/ endstream endobj 2773 0 obj << /Length 1245 /Filter /FlateDecode >> stream xڥWmo6_ad&+R, 4h<C[DB$Qf<ʱg6Hs CGI0!Ix<ʪRboq^ 1IfmU|;^M'Ћߌ}΅7 \jYgr lcS0swѶwOHQsBC.Nc@3-%~.eXvW~Cq 4$TJRݕ,H.SZx]'9[[7YU|xcU5N>1۔{P,f#+15&=4Eʢ]c+;RzQ5j"$).8x. O7] {?$B0O"@a꜡h aǢ`۱D9M :ϜB %\?/r"x0dY}m9j?Ҫ171-} :e㒧7!{lp0U[udQ]O,>@hRbY& @v2aN\˴S/ hY!> 3s%*bmH_ϵjjRDUkZBdj Se\*;CۄPtx-}J_ϔߥ;KYBZAx7VZ52}ٟ+Uu  W)C?{E28e2LF7cqRn' Rf 1q0➢Ӹ !*[7$bFlU7*mm2x)ӶoTk`/tZ0תB:B HŸn[).vھFd d^xg&cֻM,M+,u`tf֋L['JVs P:bJLbNwWłᰞݣG23h|B" Kme8su ȽN.\p[=1Z)q=e` ',UF keZ/Vx;8{A@dP6vv8^vP*n3H㦦Ǫ<ߧ5&Ĭ{U{|>|=W*\J5ݜ(qNM endstream endobj 2777 0 obj << /Length 1601 /Filter /FlateDecode >> stream xnH=_a0e`mizFMUŖLb 3 m>̹߉x#'7@*,'67zzw"Dj~mN'R/u<|qW٦ I~J? pu~,CIɛAfOT1icD (.cF-ʢ]2M%@t+{ YÐ'[)4c.-rRϳ9%4QNVM_8Fv*nY/==6Pa@55\7݊`3m_ץ 0AB/ ( e$WEуfS`Yas9gt36wtO !ɾĩ{  &̊.M=M - A,lţJRAXxByD#48C}xaFX~z.x<ľ\"Rͼ Yۢ͹,*[Ӻ9Ώc.D{ܣ^-q`uݔP[庯pCEkh&i,.,Lt1%lj*7+>\/[EβZk @!|I37ZgkM#qm==F&qo! #n%0jf<Rgi= > ^@n֨#IuǛ>%4QvqA:.G#ug{ᓄ+,l78nn[x[J$!Ă9ypE/ąG7Ee E-f?PvLч+?M=~]Zv:,6ݯ} <;N<7KLyshP6 endstream endobj 2780 0 obj << /Length 1645 /Filter /FlateDecode >> stream xڝXo9_^61^Nԣj)ۨH=2p *t{7ķ5AVݲq[| eP=sp3VgM{,^z+ma$X8cd!piU: +٧M]1xf]^,8>UZgv(@dN9VIO[CцR :g9oyR410d럮 3( Y8}B.a~aY0r8jiغjg,{ ϶㙢-YE䜗Qp.Gp<4G8VWGviwnlE-8ҧX딑5-2x+(-4t\ϖDЫIh嫃ңЏbL{k3XG*{a3:܏q4;6wfފ ` iZщcȳJ: Qv%h׍ԣTT_i :ii0WÔҰyj,OΟ3pU[( ^'e/z9ږDvdf67mCRWgARg@4b)A߀ƶjJ׽t7)DlZ2rcAvii˝ݘ&%~R召|M2r$=/N>P[^NKha@ 3V 8dik%=Ko[FTrj]m\VC|55y+htPZ'9$R!v>=(ὭDO'agsÃ_ O}(o4FCO%%z?<>miwW}HĎ_+lenֶjk*DG5n鉸q3; endstream endobj 2783 0 obj << /Length 1420 /Filter /FlateDecode >> stream xڥWKo8WJ@V=4IiEjtQ490c%;ál+Q Doh> 'E0ɢq>)p7$A'}Qj;^ڟFQi'Op)oM)i$Ŀ}8x7L!S}8Y>I(&Rhؑ$c)ȵ< X{3-~c>0 vN; 9 R2-Mk X&@VbkVH0("3TRwmM'Z.; 9/'].evbQ ޶֝4h=1-P%m9 +*QwVjD>Y'"ѢJ]*)mJ.\eg^Eb!ƯYHZl@c\Чj0-7؎ ÄB kC'!XHϯCk^5IQV}8F۲زܣ`HБ?4SXBTJv$E9ORV]qprH ZTAX^(mvVtUTP RZPx+Tm7q)*9{e`+-TSԛc:-vv .'}}҃Q!eϘ?M;Zj,RkVh9ײs+uYwD=@(TΜcwI>RRn";(;F!5*Ϙs6[tuwb k(Çɐx'_S Bu$6]98MP5,d@#U`05 ?j,@^Lb+/-BFsi{5IH"Ί$ Evmvٱ|lbٕā9iҳcYp` Xd|HoKJW?=PWv?{M,Z[pqT ˅'"~}D" wRVob#sFCpsjg7 ̐Ѻ*j MXʵ9(N /xHqg)x+ Cs10c]J7/e@ڛN;?1`/|=0mPhcƄrQ@ 6exռM>%@}Ÿn[}`}z+2H;cp,Gh[g^P6 >4ǛrC #HF9~pvۛԋ}6z> kÌ3qgdz@hPF;۝;Ck) endstream endobj 2787 0 obj << /Length 1479 /Filter /FlateDecode >> stream xWo6~_al/21$Jb=$M[]0 m2kCwǣ9SlbOeqTϊjF/_ oa8<[O7zkM78'0Idp% 7kә00ʄJ-{(zdphh&b!<]'L EɌ%fY3B4+|$Bd[ 5\j%K31(kC+/MW6˞fέY4dtՅ_;~*H$,Qj6 Ι+WXA=_f*Aϒ,R3X#s*v fE[^5غHccg=xb 1Ń( JĄ0ܚ–YT\L;XG71I(O_WFW//>eE_Hhϊi᮹2C%D,^ e"5o r8 jf@є ZBJ1X3Sps] Yӷ)x|V%M'/0׷QZҶ> $U>#;U$)KվԜ-VW^e [M d*_Tz4$-<>Ӻg_twXԡY|;4ѳ4dP^} ILֻ +αwΰyNO]y_`L܏(lU'$%HVb ;DZSq\,+N6ooZj{615]0R9z сmt=x(]u"3νr{d'0 >]6˰T}gˎVX4eûLim#) 2W!bh+@ژ҃EЌ8 ܺt׳GC^6+O%A~p_Xmz]MWmQuۛw endstream endobj 2790 0 obj << /Length 1397 /Filter /FlateDecode >> stream xWKo8WCi fD\iH-F-mlQ&Pu|h8bO2ot<,F4sO8 N6${gQ4ϼLMU3;.dݪf< oǓ0;ڸQsը*W㉟cY2:}w:|Gp({ t!AHoA@L5FW`C+N1d_Y(Sm~S?Vݴ\)pRrX) }ՌitriڲZ8ai8c?e/+vw[e]7Z(^l9 xFg]tbwn!A7maLgD?>Et\Kex$\\~C#6:zKc~ٺl )N\ܬۊ0Jx7a}a gcw|&[iT˫~<VƤm+2̿Pm!S6Jb"xEҩpGb~ąd_*b,+6`9^Jc\.ɀ} 8 '2ouSvҧ5d*Lv[av(7eݖY8„8? '*F/Vu$QKCʜ38ެdO3[JEy Mhmw5g`abčrw\B`H9F0 FgA_Ԑa VtW׿h]A5̰,_E_l&vuS׀~B[n 5+Jsk` _zaN\?~b R->W8#.mGq(m1l›Cy_\JA0"c9 cLD 7nJOݓ{I8IL$iE> stream xڝW[o6~ϯ06`E2!MnEah@KMԒ Jn o!XEÏ߹"<Ydlc6fn,(M=k_u#J?zgkL}1@cBCHYND;)(]*bUlֲM-WV(9,QN붓¶6Zj✞eDj$MN!Bbzԯu!f ^wgx9# KI1p-/4!@,Iʂ+}܏94OsiLt^)ܾR`b Ơяνj⧅Fbݪi6t&p)I-5WxsJ)!8KܿZֳF|g:< 0-p)"<$ӭ"i,LKY/YӾ>HKpe y? ŋR(m8bh[IvM%D5 <93#1 qV]RvU1^ *uye-@U5CI"cͦ{X v>qqqN Bެ)t0|p(±gVܦymShleG@iKyG{sEq:sF| tL]ŵvƪ'ϐL۫&äD@D=G &;;)O }nCcmcm ^5^ujE'il& mp2 endstream endobj 2798 0 obj << /Length 1566 /Filter /FlateDecode >> stream xڽXKo8 WԪ[!}n$,bʌkjM%Ec7n3EQXCQLJH*|?*UEU? ,ۮhq;> 7I+67SQz{+Ftk?"/8/R܈NXaƓ+כQg'Cp#<.cƣ,dIb'iFKSja]+Е׈G#+? ٟLidE~fܫqV$IAD@Uot&`xi0I3I~:]1p:p@u # 殇 cy%tɃ]Z.ryeeI ׾1Bm~wg߬ؗ& XeܩۃZc]*PQE|+#R _߷5;p58~G_$})-Ġaew˰XZ v! jB]g51[` te ?n:p<} im9nOHp`+(l#MYib$ HH0 $굍0z43) >vFYJَUE@QCaz¡3L/&ڍBgX`09@sow:'Z]#HC~c6c 4h -IJr`d} Nm9ʶ&"oiELk*WXHMFpے[i:Rz"Ͽun,v{på,a[L+iJ#(qݨQy-Z ;|NhC4*"1(2pb&wNQ4GNP#ʼp .CDy%f 7jekp'~"D1&TF0_avc+FC3/ iS<.]#ԵtM-{-lhp8>{]w,g {n:> ̍˙ٯY'wteDC# |ǽCr=n$ܴ:i_vS6[vM k^ߕC3:f6o9ˊy'r=z>ieFĶѿg3ZEi1{&>T#)[|-^PEo6 j~fvS6=:9ʇz.#Vv^y endstream endobj 2801 0 obj << /Length 1197 /Filter /FlateDecode >> stream xWo6_a`/2Ps{Țk4>2 %ru2lJdywfD3& 8H2?Mg9h/GWkZm)eO(Χ`WI$1g{q>J>#!|Oe$!]a֖M:%RLwv7 VNMC"0czf%YېllZe4}Jv%켁/<7Zu[d1+;/MIQpvtyۋfEbmFj꜓LĂkV5le8 "&ye-q:X_\[ $\QCWӛq>UT,C'|cm{,1|,t1 KD1ۧ BÃL2u4(00@߾ڛE/N W+3{ (zk/ (,Xn 8wŎ"Vٲe*:ºrG,Ͻ1Qdq䩛.v4.1&J|(<1%%^LqUރ\|wqE~*+ã %!PmY6~VO# ®\K x/QYgQ29>߷@)V;_xm 'G1o8Ztagi>o y endstream endobj 2804 0 obj << /Length 1234 /Filter /FlateDecode >> stream xڥWmo6 _ffYco؇.mpn$F8^G[2 `HCR~|{,2Lhq[)(N{,.~x+{,b>YggMZTD? ܫ*nܩs/_/,Zό5 /'\08X4 qP7Z^]Ng,[Ux˓^ߗGK'Zerwp@+C'HZ&:mh.JZ]tvMXKZw4PLЂq)uY8mσNN.ژŸ'I[t1!,4}:s0tlto8p,O+8X$t0-ʮ6cJHtd cj $ɍ3pEFN wȝQ>d7J'iVנW?6Op;IiERI5bgן94C%XM!sYGm@ǫeoU}_#<"h'`+:9|z(rήePaUl]ZöB0rz:"@z\q"DjTϸ1F׻$;Thh禲5LV8W2aa>ٮ)E,!4o^| Jʏ,@?t~~jːlo~j(⇝uK5F}VX0v]wb~eMC#l3rr2dɣzuyXi3FԴi'TggClyHL,>YP.@((CP0$U6|3YqnKbtBLXc,dR{CS%^ۀ-^?bա2<4 Ap# M+xoxe]H%Hh+-ZwKsZ 0P=ū}̛MsIǸ' HX*KlTF][il7_MQK('~jԦ9`.(JkV1Bg5`FQ|1|yeiCV]m`;NsOA( xp50.eo 8yQVʐ/d +093HfpQx`|t:]g*xت<4_ pqEBü\Y®晢ٛ!=J憨S}z0m)m& endstream endobj 2808 0 obj << /Length 1432 /Filter /FlateDecode >> stream xWKo6W,|($ z+EI 4 4()l%5z. 3|R|Rw>KdgUu~?FAg"|s~+Mjs3U٭>Y/餲Ah={&TʤxQw=d4GCo}>y’U!of ZQwnt0VWǙDZ2/)YBZE)Op>w??.m[,݇A`x]Qx+C 4vIC8KӨd}7(慌 dYEZ H 'vY8;+ȋv[ Gx%k0շc9ҳp")m1mf^.qdQ~bKoi۶4jgIanZaZ9q E{bj4W- v޵*@SVaj6ԣEo!#X~i|YBPe!O A{Ə==‹ X'n%y)8x:fzr51~h="޿$2'*Y(c 9U&uW {X3Bv"/<.Gj Ba;BF{ԤdDxvTodmqH ( d j9,ސ^GVK z9f&UR8.y%vy={Vexu4s7sdFaLR[Cˤ#M_ Z`Riق饲T`J; SaIzA39Zs$!rQ6.k^`Jib 1:N '5(0ј1FK as6 Z8i)*12%5b$Ɗ>늎5Ie6`d $" U&qkI_lLM"U4MFLw4ײO MDDg9V`z݀`w GK.u\MUB ݉/]s*[>~;;4}{*5C5O[m l۷2Y x]D~8VRTśⓔ,Mxt? endstream endobj 2735 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1667 /Filter /FlateDecode >> stream xYn7}W}rx)M AS Sy %C+KgMZŀ^!u8SFŔTN EG BVKOPz@U /$@~3}&*KlE zT F`H'HIdЕmX9$Ma͢9X$0XL <>e ,4D Mr\h͑ń&XHegHe@p2 ($P,\p2u.,zm"tTah"eI#& 7`HFRd!GHlE>d(>2/!/'V)<}ƒpƶH1PEvQaYh!KdcCʣd-! : leYI) VW`Y:TY ^E=7wFݚsGe|wtG>x+NU1@gz/LR}D^<Ӫ]~?6>oX\_=t{lktK@ AY by ߈UmUuYJm+T A6GY-%A)3?wd~ޯ|||Q;!RK` HӷO}OAۦ)ڞ4EES4m1s_ҘOn\ܻ=ɋYҴG>YL:Q>h:23혙i[%yMI@Gg?jgw}hO7Rgogԧ< .BkH!iԐ gҁU ;kn;\rk yRx%t̃Ҵ Fqv8ؔқ|7|>|I84M0P'}thY endstream endobj 2812 0 obj << /Length 1629 /Filter /FlateDecode >> stream xڕXmo6_a`_d`DYjIM$ފFfl5rN:M<{rh$LQ܋<ٓcy08F2eTf[t6YU8L$(^4͂w4qomaY(M7J8~uyE<>4OBHLRpcC͏' 1N_I3TvD^E{`9aQɲ(`ۊdH6uznsi{UXnʠv̀wcժCT`!!3Ij*Ձ̝'24q޲G?֍)^EY f~MR$an.:ՍQxH(NҧQ:ϑLtƋ51U'QUg}Y: 4-'Di#_ݡG.}A)hSL:@ =a$=fcImI\IYrsZtcȧ,BTpt'$sD_hƲ ;Z[g#0*rE5w\H\esx\bXnjqj6\ 7\ҭgzX@.Md,ƴgLsJ=W xܾfӰT^x˩'Jq_ORE{aDEtۡ6Bt[C۹x;ԝj`1m8PDH_@7CU#V3Od{xRu]Ec9Iec>\*)f#5Mn+5|$ԶqbVJ@|!sN[  F;>/ui&Rvk(vff2Ywe}%9̪P2cKvލ? ʬm_8"Pc5 - f4qq,|Kr34|48gvSCז)s h^'=ܷEK}@D-¬> oD~oxJl[27 | rj!}`0Ӈh SXUf=7}Դ^jxmӿY&+:ȏ 5~0H +x&ix`~nZG̼#pGŨdKӨEZCq'?R# =I9le#!E:Ɇѳ+3O˫Ok6jΏTRK{1Z endstream endobj 2815 0 obj << /Length 1317 /Filter /FlateDecode >> stream xڵWO6__qq}pw*PrCHy9 {P+23kϊ#I[Y]8G ϋ?rnQ$^Br[""]B:.c̎9npc8K!E Ð{6zއŤ3xoQFM>-nt:VA+He-BTUÝ7_en(.(#vWX/ש3aNAo3)\bnN3$(4$N,m0y2?0l*SH!n݈Pi0qK.̍<>h5Q2Fq`Bt:&*8C*ՁQlTâ I|z)s02;mnJgڍwy˹`1QlZȏFzwYBI?iV/ 4hw->&ڋÞ8صjFh3kBXlAk*:elU#M9h/e./ >[qȹi(Tw \T?0e{S 3y EKh֑.GPuPQ۴ٯ+y&5zz57 &$L6 %FH}o: 㱓,;$M&#YEx8IA)lMRڮ'39t GQVFo(t53 ]bK;ͧmmP ?jex 7@}k6zHNi7R^z-7Oqov+d$Bxpb`J endstream endobj 2819 0 obj << /Length 1197 /Filter /FlateDecode >> stream xڕWmo6_aĬ(Qa%]x(hţٯߑGZV*Dx<ǻ""-,IdnNӛH|y*Mg4"ETrslj}~*'I?s nF(є"YFixF>Ҝ,g& ^ ZUsm<2J> 9tA2жZg1(umylds2ʨYU'cfײm:N< u>("*CuS'Z㳪 /7NzIA{@mP|,04Уi>\HOҎ (m 2d3ʏBVA7-IXh3PѬ6zxDEN ogGe"ڪ{Wd%h<4q$JzW3H8'FG*mwBLn8.˫ǪPWi >jDž&Z0F3Mn*ټfe,S$I uDr#H)AŸI`/K fbVCٹj ` d "-mZGuՖTb9xe>"C ..l窷A>6yj+PƋJq6 !&ޅJ%wMM)obc9>K@doTsP@1`%l5 L*2ɴ2W [*w;^ ע NEtd 4/+C $cB %3DZ=6Y׽!oo6n{ܛ''z_JC{z*9ઔb{!H˯A؎ʮ>CΖBFf}zw(GʙFk|`(*UuNS3F%\A#G 7YPg/_;p<|C{ϙ ȩ<Q <Qtc eB \vפw>pe&%JLiJ~~Z$֍U>U#mu7m#]Syɟn>cSx1_wNCEɵӄ 8ui $Do}ڼS7i}W-j?6{5߼Ο;S/=/C,vo endstream endobj 2822 0 obj << /Length 1318 /Filter /FlateDecode >> stream xڽWo6~_a`Q2!m-hLLD JnߑGr40 E*:fYEgs!Hz}@ìo,e`,_-~~+QRъWcWSz6vi&H4s}nkf($M-/woM%D-+ B_W9a"Gx%DΉL˸ yzScd~e!2Y~Aa{bF،K FJ.ae5X %)*9ˀ&.8Kݦaa+1)IǺƶS5bgf|Γ4c*e 00 xnHƁLuF*~FSDg7~Xg`A^m;\)2m4?ݺpA"%rz -2X6!NѴ#mZV#)4˩\w:ExrLgaa@mRkg81ko's\N=dIi1O4g8@$ǭ+t9ZL N*!,区l|zWzߙf K7Q7ω\ԹYo8V'dOCUS;ZxHWq FQ^lm㹷QA6Y<^5+lM&K|F1DW JnCZVHW.>uNL(u=t~Ҷnd(vTT,ҳpxHiBNi Ð8<__wm ʻll $QiJ)X*{^&ziwW/D]U.4;:@Y`SW]Sf 7?{:$m{޹ӁwæA%?Zg m. VJ:5 Ȧo%!D&`M)R<ɋp_8o kڲ]9 Jfi ;=1cќREPY0cci9` |ɷqh A:(hM_LF%hm:6C7TBCV1(gˢ3j]qu E=wc;:.H0 jD"FUAT(LqzöbY$UpeFN)c NO X۰FkPM1 Ӥ)P+̝fD-_'[* OE7XFoh"҉/B}?MOk5)Ei\z: VxJH$ fpaNW(,1օqxOsB :'ZJX6׬EKLv+a+}=\uq!…Oׇ.OQ2 w}Aȳ]]-/`"cbAEjy?=8[ G[ H2cYr&,sPobO4j:d+ E I,wE.I:4RܐDMwj+n=lg!X4Мi4u X$HT2LX >2<ιNnuG%&]!Gv2x8Hk#fNX3V(7 ࡀ3z]UbJ+;#@Q&t:]MbPH gPTh}w#ѝDfkrՙ`<ߝ+jy#wb~Ž͛&WG7> stream xڭWn8}W%%궋}H˦hnm`lWr P8,$ Y&٢<ڬfp~>8#ϓˣoh&8x&fPWt6F7s? C/mKyI_FW =8'x:~0i{Cϧ1^HZͦA2#hUhG[jxE`mh_$,B]j?bm< 3=lFtLዐȹ#oO섺5S-Yk4"^EdI/jQ[TL-& (z)g]ⳢȡP99- lbTS_-6Z^jLM/؈;SG Yk竫ke= '0L%S!u^XFր4m ~Xiz`sr$v1l{He?5`Ed(&)=.}{zd=% zuf`!Xq*8OYcR'n"%,Β 1O*Ljnh=D[Ѹͤ N&İw c Y^:;(se _w:vN}Tb;MnɂL+Ĕa"\{U:ڹXdJrD2)kW6-'_O>iӺ;ç)y}M1$d"Aʒ,fO ?sU-ZmX=?c0x| 6(^Waզ3tXA Vw>[H+,gIS18.Sx!#ƊZޙEDFL}lkwÜe5$hЗ3$l݂ >Sb/ X=G1YfQ޺p=KːuSLdFOop =nMYH+&%> stream xVmO6ίHq;,RqJ®LۅJgy3s(1'N9Ię,h[?8fqr>[ !FIJSg۪S󥖵s燡pO>_9&(e4?FEJ~/  |$N T[ 8bqn?Uv}.9:e2Ѣ'9> stream xڕWmo6_a"wK-!k52Ma h$ Q8kE=|g"-I>+~; כ/tpvf~^z'IOb%hK1,K/ OߌQBth^˜aY',Bxc` J] bCgzۊxrO3>wFWoa t( "7˂;'oU]H{jYV CӐ^v0tRU[)wbf#hpmLltĥ -=O۹Q<CVS?<лulBokf|AQAEdPr( wNb/0ZV!°~2,h$X8JWrbXʹg655+Ӡ%yDFNNOغk4%?Bpf.z(Bπ4bhӇ$xt邥x4I9Lg)|EOf'b&I;W HWlM 9KȊ4,Sښ1=E) l0rʂ)*+΋ԃ~HńZIJMAl (U=.J(cg;0މԲUo++M ͌;f\3ɾ> stream xڕXYoF~ϯZf>u6H V4&’ uL€w9ͱ3,gizyV3RfFOo s=^Ige.\{q(HQρ'𝢮a#S-WLFmT[㳗1 NNf1hO/JjŬgr/H=z@0^ܮ=G7޳ƀ 3Ƈ3axIΡCrJtu%"^+Ǎ7" hS7j3':gҖL`, TH%!H4~aV58K4@YAD ;eY0Bwv/8Rq "D{[O¬*M^mz{UWtXae wd?Ex6qvL`UGpԫJS%`h  8H,wʋc/;6Oجh+}h%8 F!}p)r-mɻCmAR|򰼇K P'M1rZsᔴ껁%Ǿȳ V& miG=IwEف{,>&/}O!ho;y͆ #( 0]w%A`nYhq;/kUN^<ُĿpm?jòjB͢}KYlMU_|SP<2e+y$`!Lo`&J[H}/ֹ%t+IH@H8:>aG LS0 Q.6Os} + 3K:2E 6|,Pc.r7[^e˖<H5i+l9#2/Xo&K*u0{ /07jI ֐4>[ nt|Kút3bN1ć6E)Iȩ.e1\Q|RK=+#+ %rúXkZ 5bc07}(|YMuTx9>LiZɧ\g9A40 'Nm` |(-F ]5J| E+{BJۜkop vxYV=єp 2/c>@k Z^wd=/=L>axj}N7J8/Ӯ-?%lw#Fnml~W>v~(LO?=5Cs#계}:UuA@EW 7[3ֈuTz$I{C=̷QU;Y 4_mQo\'3S[uX Xc+}j l%'c*m6"eKyE&?.#L H+3=h1]&T0ypK*U|%}F8-%c6&̞FGqȏv -65a%OP|g7t5ǥ%iwma, g$&ixE,RÛ}臚Љt^p4'@h׮&)8k^Gܣ7\ endstream endobj 2846 0 obj << /Length 1917 /Filter /FlateDecode >> stream xڍXmo8_a]Q>I۽E{bwe,:U RJbpF:8"yy83D*I",o"?k'D|F2_Y6JN]QzkpR^i$IPM4͂'Vw = <Ϣ@x7C8Nx"~('y Smce!$! L;snւc<^ sVが=$ 6K`2koO$[4AJ̅ RR䇦n%*vxVo鑏(ɭMBe1Z&W> AGU V5>Ms͇bfNxJjAz-5Cjv}c% iFKޓHmE7$J9MH;m:0֜Xd4`$ނ 3^5hIEыU"|Iס- Xnq7Mfٱ2y{e~dX(7m{m}aPW7Ot5E\>=w'{RMMs~*EU7]gh2:{lVC"b09#lZաX| 6KCzm .qcl?sՃ>ZBdhjR(a"0юMfq474K׿zѵWIB*IQep?|]b 31zf3!|d)G5f3PM3p4H{p ZHꪥ|LnrN#4֩=cp6G^MRNDlQt}jLRe0^Q$Im^ʎm/mA VpVw򝟡2Sݣc$W;S\aо{GT kej0A8 Sgz0D'GnO'z!T6aA|Gy?:tsףGPiH53򊵊 X:f8nhո^qIZ7w;9|L96rW|[m~۳2;< l_53nZ({$Ϟg/L¾@Dm* @qWswR$\X-z)t ~zkꓝOaUl~MŪik>| |倏px^yT5vG*_QN|5QрZce~~¬>w]A |f8Z/7m?+̩XY 5ZuGaۆ_:x= ZAsiAJx5|xaXF0} %k)N.Y^`yH_ۙY|EԠyo,?z:dHJRWG9Z~W4V_ab0e^T%|%RF'i FH4m_(CvoZO1Y_Nmc^ۑ&G E ر endstream endobj 2850 0 obj << /Length 1950 /Filter /FlateDecode >> stream xڍn6}}HӢ$bG μ$BK7jWoԇYhźX"\"cQ$ܽ =.{'nʫZPa!)u5~0rq_.WI?lLo,WQ02^v};C7ԓ2"!4\ƁXAM2Pv]oMBkS2>js7˕ :/ew06t^Ioٖ(` vW!x%c!1خEF1C ζv+ f9 5hm;*ݾ1m]n vVҸ3%iᚰar w(f)Dqţ\H޸r4K tnMr7#U2^- W^EQHܹflh[(fGk;֖?2*,CNUFϴѴ"uƇpٳ[",9l S$EVe1xVA#Pb ^Gf$89n 9·1J J?6y苮e׌0YӚb`cd54col1r*d5x[(Qx*(Bꄜ QzZ^3a./.)B1pENrݰ=z5x//@9 h\C DDȲ|ŷD:U W׵n2 ;N8L8YwPmYZ%kp/n ݽ[ 7͓`>U+%dM~[m9àCjs[v)E*xU(槤38zpIyqti$ MŚC 魙bycd! Iƀ#*T#Χ6vwTL 3~COe8~IJo6x_;S$Ñ1š#x'"աԠ+ 5Ӗ [r7ָ-^5ϡ'RNBIQk$ IzT! =@م WR=A aHQx({.0q~kH4+|PȳxۯЯ-vܓISHFhKi40Lgl3L ϋWscg(YQ׾3),T!ߠD*XtIgo/Bi~S9'}G=3j* CؑӜ:k?- A7wPzMNIW_KzPsk8@!RJE^1N0=?ص)xP. O3&6V*rH%u{ clJ~ʚ8Ѵ|[_D:ʚ;jϴh[ݺȃ{V{5*±3u+ 060*z Du#|}Zqgrtt:/<6,;u"Z3mn;yMxM {ct TؔO0]kLjt"TՑr ]"+s&CpP(,iH>Qgz\E^T~J{aSOWIK64GAc<1aK@m91iFG+mEZI > vIO3YM #׳\=Y֌3> stream xWKo7W+K>`[ /B" PJWK*;z*t;73땴' )Ӣ7<<ΫW!z7z5>E3p$I.?Ճ2~̳LЈyfQ*8?:ƼXB(؇1V)aI-`Q?0I$䝪soFIeeHV c iVثϋ#'zFZyCyzm1HNئ;BiS}U5bPD8y4)htbf~p4\DSZZ֪TVqJu2 k&7b*f4^(ϕ*^[S.73*l-ǣ4!y:0|L^pW-AcԣȢSI' (y$|?&YFJ!-?xqN<wIlϡe"/n\WvFV92n_v r˞]d1wSmՋnSfCbߗs_x6ARzЪy ^h8-9D@e^[A8?3 T7kH[$@/ӝ J峗AB֠NDt[l\FmϲZS. &c>YJaAI"%Mnpߩ zgQJc y:TJ{rzthסȪ^Y\5oZUS7 &eZUcAa&~Z6կ;\ ISIdѪUd¹Q`a=PC ğr})eA`:%-GWmM!G^^P6u,!Q'NіU c})\ }Ц)AweNiDuOM'j)FE }/Q aw@hk̹`Z2!%cD9l.\RF(j"t.nfp,>%&wm}u})KhQ@b/hfɴk G&34 7g8A7pp8(eI:xnB7YN4Y6Pq&C'-vƀ d]#&<BcJZlc6&'Iǣ5rQ? {lHKICF*`+ + 7U=^6SOW^^ S3ebJQv endstream endobj 2862 0 obj << /Length 1386 /Filter /FlateDecode >> stream xڝWKo8W݋ \Qd=$H^bA۴M J3ʯHRR:`u^ f4Pr@W\+; !pEr nBYpe&/&G,;r>We.X e3.rB\>V4cV AܓvΒw"qicaV%wztUkvA~0rLO,i^:͜.!5Z k7O}AĴA0m0m!mIo>fTb`(O:6"BKԯH:7l0\%-g<.23?n^2`K9r{J{^6E`)~O;]nf[F{;#wykNٻ! %OTN 0.Oa q4ZCJK֘02)=SI endstream endobj 2867 0 obj << /Length 1913 /Filter /FlateDecode >> stream xڭXKs8WjkwL|fkd';3NŞ 8>&%؇-h4ЍH.|E/D~;_+r+\H^ݽxE n{]Ż}orUFl5Mn #ߓ2^v՛Qi/%'e*EB,,GGGdr ^7ѱr W)LZ48%?ʰTyƳ*-^ݯ7ye`T‡NJq4(uYusz)/6RнF*:2ok,G;tֲxUls[m}m‰B*CWe LE<2#tq+!/$ޥ3 )0;;|Pĥc#i42_ʂ#FeW"6mˆvŮ+ۆ{M'&_`/A(GAIdD*sMRg[kk0Fx0_9sZ1lpj>g,}(( =!㐞G<-mHEQB|iNj4Ǧ'/N>`S|0.zQ!*[":IOTa`E ag`F-vHWu۱PpS/J#48-` *{;00G툃Ln}HhGJr[g*=cϸjWUmY+2U<1hf'/~@k8PqJwmxE qE=nx$܆MA|MWRQMIS8CU cehG9Ȥш`9HP00]1WS; "UL_1w9?`P!EHuP=,@0ԋppTHg]Yu>)%Qޝ)GݶU"v"e>^4}ޛ3KϹ0Du"fձ19L箬5vv=jNy$)B/0iՉ\t3dPvu%65 0AvMQv(,KdP1ޞ^98}LC-^0_G7<{9Rwm@~N2+ΚR C)5ARmqυޘ:c: %B?+cxFn&"o5sE=F<$T&R4M }%1%_$APY 9 ҫ ozA[+Z{(IA=כ\DeQ*NBC nGRd*!>0@+~P>__f}퉂@ZbM/[}|XCP"OXO Bjصn6a NnmNiciRdQP|?(DB#LZJ9T]몪^R:N`iY۱=1˘?C58J  No> stream xڥWmo6_al_d fH+0-A4vZfl-z1H:i?#r%W= "=wF($H:vW.GĜ'w(1J2{l1䝯Z 9A१IFݟq/u.?#1̮~mF :## 8 BD8\E1NVPGi>/<z+)1󚱟zQqYUuL N Kb\55wc?Z$̓r 袩ɰus N Y< W1LX@X\ֹt &G0 4)\ $LV5zt_.p=` 7 >HgABp9NO NAdk;t uQF/(R68;R@]\ 󌱥]IaVdHXE4 GZ6,ःg%z_T_XC4կv7?ӈ~NW˕%,j'BU'c]K/ck!MG s?o*}E LY rlݞjo(GS :Mfk*FgZ @?>60Xeifbچ-u؏z"JõΛjFO_(\`bt: Y4;׼p{,Jsa$ 8 &W&sY,ⴳ=LǺ=QR̝J kwlIJo,Oݽ}>6N+b&5k{Z_+zS+lMn|JI#'n4ۨj^B᛹sJi M=9y~~&J=@DIT'y< &s΍ _OC}BD;wOKH]c$f̛\ > OwSjn,6/YeJ;9 |' ](;Y:5)nyM= ^ 1ζWJo/4}яKy}hL4!Q b9XfiK+u{سl7H>Kq)sPB8d9h1gsXKoAz+֥&$ 㘞:Ie(ȏ_s'hيB `?wԸ1LҒ,e!6IvgF&t.%P IЎ%N6 ntdYc;- ǀEl})NoAŴِufg)3 pMd;ka%ܨ﹛ΛZmm}F^ˢ#Lclm |TV~`ӱiCxܝBI3#dN]3PCf|H;B,]gt~||1v-oםqs v0'mh' endstream endobj 2877 0 obj << /Length 1121 /Filter /FlateDecode >> stream xڵVn8}W~&uWnI )̓,Ӗ] N;P/]0`Q̙!Anj l2pӸ1;ɍF̘-wMƣW%8fg^‰/|k^&۾Qz^|uN=>3:< /  > ?t s\x= lw^oyV^BA`kB ghV"FLh>bQڔ2x2FY?Piβ^g\2D&o%cve-.m7ZM`إp~{ECW`ًe&E&u@jBÄڡM9~<Ѩ:o&hS)&W"x&IULz 1FB1q( 䈺CPK6.9o=@/JIkNZ Vrg"%XƂKn?4m8e+MOHe+u]j,ZN42KH:<|:J?ߒb-?O:ޔEpg/ {:CH>\]XRÌP|TŔ%zB >Hy6Bʩ6WB=h'/|PAvgYSq%4ziKR;k.Y iDV,$FWPR~5\s?ڪfz\00%6<xd*j@15Scܘk13Q)d&Tk|iT1B)LwXkVuˡ~je[C,:)uY`%Fe/盱J r;n | v/N̮ ,ﴄM<Qh-~]- 8Ρ[nI[U"zJAc(Q1{UBu=隟PYnPKTa۔YE'sqٲ#Ȏol+lPX)-L*FrG>Q{j1{Xyv͒§i: 7=VW\M9F:T?oD/j`L endstream endobj 2880 0 obj << /Length 1227 /Filter /FlateDecode >> stream xW_o6ϧ2 XR")iܦV A`;Beː;(EJ86`0`<`A΂4Ih.`9cZv=_рg4g9wCQU|\]k0Jd?Ln~Gܙl&b$#O^7Zg9_qR@K0e%Ivݼ5ּ'+$($JRfd4@O%Q1ieѬJ1-MKQKঐ"bA!.(ˬmH]v]A2i.elD0\[H bI9Sӯ cQD&AAt2,oui"R ebk_]B[懢S0;xs!]%1S4f}7ͱUL22_~|{C˕*,$e` j؜Z_eAf*oO?fWPEM->rlk<_N#n @&gVo[ϕK\Ͼka~ʆ !#+nm*o)3ngd ySS;S *X$N+hА IgDλ?vjym'OGZu3 7iW)ai>Ƈ.X>s$@CX#XB/Jg6W]c B,Y¬CydѴ^PQj_p endstream endobj 2884 0 obj << /Length 1441 /Filter /FlateDecode >> stream xڥWmo6_al*c#,eMN -36WY(zYw;Qj?<=x'?A/K{I'[:4~wo(A;MSi7˥U !z7:#SFaGàedvѡ8OX҉GZ#*3ziuY@|<1hz<䲘s뉝KKم9IW*P$ M{hJnxy\0Qf+_SdĸShg\@#YhD;',$ZgkKG= ԿrdT=bF›o ,Aƨ>C*. bi6Bvoled@fڬD! !D`ZS؂Ja(L,yv -XB ʙ-ODz\z<DY n"Sr:CN᤿u,WBByGnEܳxڏR 446Zi>BVWVg2GR`RAfN104(-N1.VNCD.[0q@KɂLSpeUI@* EԹDqжO(Tt~FP'BS﹵pR_+6+YX6zz-O|0xrv|5 F~ZEx6 Tל_}b"Tw#Ff4Ǎ].$ ϨI7tGJ%*9KhPdw|ugG"`PҜVmd&;亚)$S)no~i81sU 8h%b[U]G[c)WG#ULsc!֌/GG4%eM8Y'AӚp;Hn }D7qA삃.px,[]swG}~ .` D>߰L]V X \ @~sCXQRK:>Q-FًvbЖDlj{T\;uUS=ruAz孻ܬcW mۼ`-G~P=Ɂi7EzZH.A}Mˋq}lvb'.zЖj'9精^۹+X _Hz<;(CgZևhlrzZ(YfFgv0ҹ!EktxzX9Hyq7E`e9veҒtTnj)J>wMXo.󝹜Z.`SdV5MzaX4pOB\)Z r endstream endobj 2887 0 obj << /Length 1341 /Filter /FlateDecode >> stream xWo8 _^lYЭib VGw-v(RE!$ &I,J'(rB#8|7?B Xd|2_슚taz?"\L/t\S2|P*8r/ޅyIF!]QkKdbkynmUtٖZ̝ZSP!r+U7+_skrUuoJ"4U6;? H'6fԕS YvEQ<8hQ ÁGHj.zҴ4y$Gw_v թVwX0WޢL/fa,wn۔uF%]htNʼn o 3]_ν# D%,cxL0XOR?nںRUa:gd A^$#[P5RFb@Y&H{.m6!x_aDK菣O_<7h f0>ش']d N]=Og { NSD6DA명K&se:]na %lj>2PJJGQjZH`BDebwH<Ĥ|g^W߫Ps<aV{Jg ʺZFaj=_3rNpN98GUQob\`kU9%z0nxV]w{iw> stream xZMW)Hd $A;\hɈa8ݯ rh czVTWUzU3\6YE["6Q%_kID!(Hh:򙔨\ld)b,VJp% /w l&xPI {$#eI [ e )E #ʊM.B 6؉5o9YL Q錄KKH cB j?D0gLODM4H(9M5V;0We|ص!E Z0!c.R6H]FfȞŃnV =I C _rC,j|,!|",^` $9ЃIjad!EE-= *0(y!1Q vntI|EP+D̈H$0*E݇鐢eL' }Ue`HxO=DhJI .>Co۳l6ltQѺϰFms6hExSMEK bEKE]%-ʤYr5[LY&u,ݬ9k#r>i<^'00&MV{4n!u;rjYf1뛇4v*xQ|q=%ONԍϞ`$OO66⥄Zyd,LTDz׋ɇɼYfx1u,IGy!q,0 ZL1YPmW ,4pBC 'ҹC!kyEBh"R*c&g!E]PΡuŹnp"+FoR.Wd5>V+>b!ee:e ӦkzϏțjl%R~McX<DsSsvSšK}L'L1?jvc~+ѧY8nO>n&(+$*Λ"}-kV/f^W6U{|Ͷ'+5cUla?DWF2XL:0QQ\Wpkr>O'#{J䌦NqOTFO.RS'_״|9> stream xڝWKo8W=@!걋=dv[IEȌ-leKR2g<-'$DkE$_ϭ".ߝ 7YOLz>,utfoYv=1.ݭ:wәc#TjFzOKDj.?tOʔ8yx.6mQecIzY4{lܶ5%֢KYٖ֛궓J.Z7ֶˆ"[e JI UteOo\Io z]?#Ͷ*,G suQX&, "4XUl$W"!ᝳX< d̷iyW<}=|̫)Um$0<%U~!g?\Ql^rd$ 㳾2)RC_Ej6$0)< gk[$D-icG쓻'%# )JC8$J &TT}M隱@'Y6D(MY4K ʷ ,T ]- ;҇4E9RrqQopsһ_Ͻ.;AXDJ\fv*@W )H#X_l;.Gzd"2I)u>v:O_g(W"Ou:,}bx1+#27 C!0$3f_zQ@\$~_8o'~G?^L_Ro?C^Mjj15+h(?MafC0gWu| lw*f,؅#bQW 0 Kuupd1wjQp&TfBD0:{b_e_S!h#֎x+ghYsbӖIgG~o<oklZ#Sy]5,/m?H ;$ D+P>/^SOu@C^;tI=1fMd8bFMt43f?MvbG,68 t"IG|:AG7{<`܂k-_ /ȸʳGRصRs2:8 lłqW̻bf"+ݣ qXoa=n|ir?hd^UnlG _8Ha<09\U BZZ|n>2!1g}54źv.#, 4$w),(4C_~][ ?k pLK 6zE;/Kb_%0R<̱Uv e2L\ |o{ endstream endobj 2895 0 obj << /Length 1569 /Filter /FlateDecode >> stream xWo6~_a`#EIH%F#іY(NG%2Gxx,&~bI,%Kdϸ]5 7 7@0Rb94'WtLgRJ/y1A߽Fי( '|9:X<ޡ%DH?tO%( yC'ERuFO91n?4aKOX`{]OtT֕;5t,ca} aP3J&k6v5+6@-6ZTؒNWM?0&zׯd8~}d9i4 oifB$h̚j[hA(r5]CieO|X.ͪ o\QͶZIh ˞V`98ԕ6#δ#-q1>Y.m5>!ʿ-z- Ӭihl+Vznׅ jR JmlV F#ϕLe֨NiAҖU½0`.n| Tt}_R)Ʃש9}7"7#o¢\kyM5z j9d8W TG_HxjSq@7nUM%x¨:+۬q=;WT صqc(c3g|&B! =ԁU| 3> Wnt=:ĝoœ=!"MיZOƈNB>ociBi[CevO|Ɠqnt^ w1kmfq]J}Dpʅ5eM}Q( nT-؎>ϴjv`s `|MQTMGD1\I?,MY'˳?ܟR" E8\Ky8{,)u[(a-]3țgT`VQ5(6 uA192XtiQGD2{ = endstream endobj 2898 0 obj << /Length 1411 /Filter /FlateDecode >> stream xڕWo8 _ܽ8@,p]7[(\GM:v +͊eNk:ir0/GB2yB$,EI 4j j?YK6p;Yg6y .%"?\oG=9;qi:`X=2 ͨ)MΔR=Se2ىMc]';+^mZe[}٬{L`BC@S$cynV*k6ZTMCTrQx)-%#;~,kKwVt›⧣tL!ve}yJӫvsqj<4C}F}I90ނq[o4YvYj jwp w+/ҐE _@"=EVuY/<+It.@!^"$1E~0eD$0,Em?#ywErF I(_-!,xt ]jq<2E3ޱ]i/z纬ufjL3nZesSOD K+*kwt>ϋ&w6VR0?+"&O/(] 3xs *lDX,7Ӹ> dghMüO𖃗eD#[.Utf *ܗEdspQm`P- >"R٬V"a<;̾}GZ;ն:}ѳjNwvdO :PCtV  #IBc2} xa8I7[(rטYRG %X5_oz}~Lʗ vgVf{8n C}&AȢ4֝)eJυ*]- NKAޯZZxw&o;WMyet/cUӛĎ6 (HdHay 䲞r7ퟒyZOIB9!+c/M}h `*F&W9GfŮͫSS6LQ} ; ^vO`@ed=qb,cF"]hgZ}#-kya}&,on6.6E9{\gũ~ZG ]^] ?V5u/ucAOYu;Ӭ3=-~n~TQAfK߹`CZa`"xi>梢Z` jPDȡg,g@qEY5+l ܿ/[ٻMPk?xFWӘQ0儬?^H endstream endobj 2901 0 obj << /Length 1083 /Filter /FlateDecode >> stream xWo6~_!t&1'Du؃פ]4 RAi[,':Z,Ȇ>~t?H G4HʥWl^ۮ=n?Qk7Bx4$iR/[CeKnjc̗oŸ|DŭZVՅ fQЧf]fCREDg,G G$ҋ%'qD8`Lz`14T\:G<KP4MxRb`4KA` >7€1ΫǮ|(4=F#[_3oڿ-狲RFeMyE,$,d ĄF |ȷj &g$IԲcŇnCPL494[UbBR! #t[}_+roΰF>ȡ5O)?T{s(kO'S_KE+5wC[[ՖEn?lZK,OM$De`){$%qt e/ͦ JFY,p_~Rz+F%Qnf&rf)8 yr1:re$#Lf%,<ԡ"3 U(pz<.TWNMR'SQ ѿ5~DmV!ww}s0L;a$c1zٍZՋRL~EsH%q[>9ޠ6Gt ͋ooieΩѴ:ڵTc&hܴeմϜ^}]c@؎sޗ%P cС h$dux"݂$$i b5`b$mvQUV3J(p0O%B`6_%/Ll=%Y\G۴PamfTs 2bD AN|.BjC~S?.4qJs2a?7 (ko߈ozdA5Qγ8(AUg|^:Wy 34M]CZZ}~!js[as"">p9*6 endstream endobj 2905 0 obj << /Length 1613 /Filter /FlateDecode >> stream xڭWo6@ňz>IȚ%]CLDdI:N~dJ <$G(FI,LGijf9ɇ7'\`t8_MON_GHz"29.EMJ՝nnNraݾ#Ѝ.s=v8%1sugZDA $p>.m:πۇrXxGĒ̲I,"B4:Wmg%D1H#?vx +|]4>@EzKL:.;Z.@ Q8~9ӛ4=0pi|2pI:-jγP(v74t´+1Wju'C HX3 eh Ɯko\xʔUQ)ϛM.UQwvڭN}fd@f6z0:amzkPqfm`sgl4mQܞ>gεi[׵-G1Z+wj7 voAu4/U`85Yf~ 94%g:V ⠨gF^`(|V}FƑ=dΖ4ƍRM n!JD&VueChrpO1b+CB{MR;#.ȅW<`22,hL\=nokB@I (oqE!㏆rbSvTE$9>fj~ICRᯁ ұ_"l ,|-zi`o(Y.sTaBIw%"/ !He PÈەq6J>,Jbjג5[fkn@D6z/ 3ea\m#k%GL'Cސ%LJ͏{;'uAs2g;ZHڦ_w%!'' endstream endobj 2908 0 obj << /Length 1788 /Filter /FlateDecode >> stream xXY6~_!QT>ih<(w-D\IwCn"ba|sŃxFA"%K ȭ={u=#ʟ6gO^q#F)6cV<>e֫24?J^;{nk{ZhG!^h,!mxz ih0~qy[U,=f5=ܖ~߷6K#.Y2Q:&kY'$0bGOeXYcۆxL"xN,Fó2k>Na&Xjs::KK~GE۪,- Df1nR "GruN=w>Aޯvwv6+ m1ۮ ?c(-N幎]xKG+F,;EbXW++u"vܓW5=8\Kv@Ye9r o l\1+C#5$O#%%䈊,߷Y[l) .|oAOWG! L:=.1QǮ,Wˇ_K_N uೲd8vH!yw|y"+b|>TPW8E8TsɩcZ[x;4=$S:UN?-eԐHN UXf =*o Es,3Lћf OS?`RV|тUY] hblo=c.=n]VMS|*ohi_T6T CXOf_d3Jr1m2a:6j{HQ-$] {_ XPNkL9>K"1(1n0ڒn"l>2ݼ. ]К)Nftٖ<ܜ00ECMD@x,w2.Hb]*Om Z,Y9yx&/&0)6#h[&I@!,&X3-dyXU-̈́7Zaq^U=i㤟OhHP]~*V%<^Z?C T[78i[KCŨt _^۬8Р kGP̰[k[Ӝ qwX!>cOZGNW p =^^d m~UMJ'_{&*u2*@I6܍/6yxG.=VaMk4ߣ}{r^%LS, t>AlIGi.: ~~)8#nW˴naLfܴ[p m2lp(扺mYP gsTmmwp^"t&Nn\ķc RD~oX,Hٗ )`P5N.̰\Gw׿Ϫ"pRA2%w =`~r@2 2x P_`М)xN"#Y"2?0:W}3s:i =Xt)GnnUƞO(;В7T endstream endobj 2912 0 obj << /Length 2199 /Filter /FlateDecode >> stream xY[~_aI.lFD](m-@``2hؒ*;3ȟ9VI./~CY,gi!ÜnCR]^ԭl(|U|(\Te]\Fx ]<0Y~aT9b~?/W'1Nh%Bv  FqX/p bȱ~KBN,QզuFJrQeݪk?Q&-Y 5*C#?]m/-O1g?eMΔo0 d BJ hlNk &`=G"eF/  ןrc4m kɪ' RjepF FʌT+3Jn0$Jj,A*3 hqZ8*jX1;r)s{ԄȬ8N%kшւkuZ _6׺).C!Ӛ޼ t \C@v26zH%DTHh8#2wtƂ"+^5yTpHp)SuQ-̑'e 5a;z(A(@>X`w6,k#Gr l A)q߾0ixN!>9Crsas0)V0}̞7NGƁqklsNr"g|,hƔCeBRi:6\QU|Pm@oV;] b`h(.;di`]p$Y!Gсb \ f׷V,5U+;hUf(ƕB+N)I$JD QFcHg, -ꩵ(Ji^ʊ g6ދl!_A}zB)Pԧy5`֪ rM4.ftDm } y.}BqHN[,`kM"/O2ak`ljg9Cc%F f$j GSEg/܅.  G>eE2v(rz7 4"sC.ᗷuX(g4<ŏjwlzqx:>|c>9cfV$E7?]5ez9KNWg.P)?X\eо#&Z_|J B]%W_vҬOq%192v HW~OwG6u6sVL\*2}mE؝ *$ endstream endobj 2916 0 obj << /Length 2905 /Filter /FlateDecode >> stream xڵZMܸ WtbM͈HI[My{j/^-bu#=v~}pqRsh@ɑ䦈7RH,v݆oL3ɿ>Zod,\myx,/nJ(f:zxk罽&8Iqg?ݎ$yu(мbn7&OT)YXCcgh!4;u GK Ltl>߭WeWo[4 nZ@:N7[7I}!x$XAmGmoYZHaJN /֎ O?t=m*-Df+*h37=G=N6=gE얪),,ϴ\Xyy qG|?țzg+i2K, vO(pqdZ7_x()?m)(jM{X^T=)x7Ef9/O kiD 1B}{L0r &hK3LM/ziD)h5w4*ϝT&./W(=XrSa3poz5k gP.=<4ADp-WYCym#J4&xX UH^"+M6IĩJw#Q7Weg9w+5$ʡQ>@ܿȽtˌ CvY@8mƋgä㲬Gb-/!ՅPFy _pgo&pxu$KF{1Ζź]Av/yyPVu\@ 19xNf@2 VPk@~&!xwy VhU Es=q5@R^JQhкӗM7) `&3rmD ̔:v1 (Ldij"C5}H J:^tH(zLcJw(Z2y?[ 2t6zOz4e7pгA\Cޥ!g2:X"~'QИU_Kll UTS9ƾ=LE[K6s$&nR=8;GFĤ"zU$öI tI iM,KhkwDg0*^i7]8]u[H]if K?Sвo~Sl? _gԋ4i)S^JK?{,J*:coN]K!"ĝ[l;?) &H"f0 V4e@lHEsHтY<^x^].>>+`yo#;"N͇-yiz`AF{=TWnUo.C9L粁6&];ѻpmQCr 'bzBi5tVK?w ;\.\UWK;ftB^P 1{83 *XKn&5DnXRUЩ$ 4<*X  Wez.uI>Xx\Vo(-ND".tk4Y|A~*oUb-5d[W+d)샞NcY(6fPK @>}D8G{VӖ}Nv[ &+LĆDO,hW24H\Z6֩l:w3`PN|0-Fwm,u Є{<[5󿳇wӖ:3i<{cw>F. [Puq!V;UOV8e%J:À xr.vub[8<ȾQZ< G1ޞn!kj;R<_?ŞuAM~l}qʑ"'.cy-tA\^rTf*8}whD?fV^>- ?IC鏴/x #7ݭJʠ luӌ-?Mk{h8K8^Up:L5o\%mxS vFHAYCKBpػf:%{}S_ۚe 99XGņGdE_R'q@뷽+x7?|Wk [(!9$ ўY:#pXr։mP n;Hb> stream xYIsܸWHU0S+ewf 61bYy6eyrJ#W>ܿJPQvUDmWvG%k홖%Q{I4qcK sZSz}}XŵK<4zW 1-||{ vqi SddW(m/xk`ƪ囎S V+ZAf1lw7+⪶,>ϽƸU&hnP0ʈtZ>Z硓}\qpHY,O)qu_L8k 0z𡸕̈# ?Bǯ o[Og#LRP4 @T"* "EI TAz$ݕ=ܕVsȗ@3e)mGR>B I(&PT _J|`$$*H$`  }{(lM&Ѱo~쯉 'mtx3d\gbZ G-\cįLg~1MuJ7nx 9x;\րk;WHߍ>bg3YZT+DBp5׷Gl){ïeJ.+ӹ'K7 bJ'WYAurV7DP>/%}n8pqȿ/i 8 J~}9Ҿsci* YCTCp4rt x!!ARXLqDQQ뎓0ޡ\cs?h~0/̆(1Ky& Qdzarイ$+8k(״,z@L,( 5~ >OzA0jBiR ѡ nw@x`ja( ̈Bk\1"?N+4J 8 G;̬"$/*d@< B0 x7Υ귩xB4RQ<Pu4Px ѓE'dW;7r3Opc;ٯuewp]Gccjn\ Dghjx{J&9E.<^ItK#m2~bЗkН ~}O_cNPǫQ8qt\^n&k&8V,jsД@?=&EW7Ok ܁ a T W*U[#SزU`CHb,? ևƜcؚE@p8i4t<~: &\Jsd+Yz%g\; J#f^d]%֧R_rS&ٛ<=T endstream endobj 2923 0 obj << /Length 2443 /Filter /FlateDecode >> stream xڽn>_a2j{6 &.Yf@fRGTT%׳ 0`IbIOMqU7Mb^>`= =̿ܽ<I\'{In>F}TI}Qney~УˢȓHbo~7K!+ QMQeH35ȍ)#ӷ^M헝,#Mi >^:5&='^jL㥙ֿ#'ipe?Q ^ȉYऊhڡ' vñm5D]Fkv2=lR2_ϧ,S_GeZF'3~jpШѴT16{AE?SBe0ƒjt neǶiWu~P1 T3A࿾hpb=ْq6 @̓uA /+ -oȶv Q&z}yY7Q^٤xB@M/FtkL!a\0=foRю@5X8^q>zZ1ւ0Bagة6d{D5vnJ>(%VD76zNM6ܬȭ1m4  #[2, $Ok+QV?KYyԆĄ(fe\3UÈ 7H(8PEYf˸(1%+S㴃MG舸rt>s K>8qr;2-.X2ER8?cȣ/)fc& rAFj}M|Uuvwm7 B؞l4gWmբ@+b=Ot 0l%MsIpR/J{0|+EAGZ;@.7 POb@"BsV:6 =X:7X96yMD1&3ң,ՙ`4'Ow-AEd"Kh J)gh# ) Nj;yA"otA`ނ7 w$;˃9%|sdIb5"kfkOZW{pVhz8/4sI[0Lve(0謌A:&G4cUU8BxMI⬚O!T""Lm ;S*AA_0W^*z7BQsԼtmSJ)~!\%lߟ϶]s*M0uf?jR=};j䕹,h4@i>޳e0tE<-OXYԅ ^N|60;TǸYNҺL@ѣvq)VG|w}HyuKi/lcsw2u' {S$YŸK pcK-KwǔX\lH ȚJ!/ZUVZeq7gI%^XoD~וbzX<ڔEu׮nVb> _|XeWIj8Of60c%JX8 glcq]C+x^2a8]ԧ+Cg^-itO6-{ 7wC1AZQ@E?ۊF,腌STt vJag ?/\+`:4>bBV _ pdkq 9aP/ =m2jWӃCL'@f}S!#0!ȻE?/GiʐiK_bbVA8czņءo'>o`Nq҇}#^#S4~:Դs_TE%r=tP[i%+D|5 P򛴑5=论t?hL|ҕL$ɿ:r5Zwx-eH`k^Iݘ+`MaT&] 9; OYoLXcՙy 1o+b~"SU}O3Oz-?9NO> stream xڕW[o:~ϯGV ccڴթړUՑEή"0όg ,:EZƃ=o<Ox2*T*kW1|z!MW"*(doWL>]M$>q^lGtJERe \T*Cc[҆%fd7PiPt $HCvmٷ FỸv捳5/ st4>Xx :۔ǡ2ʷsJh:G8ˊVc bv8u7(>XD/PzoN=ܧPf =|{Gs|ғQƦomiQ_eysv5Xezdž2_O`JamKygH d.ԽqcݻKdǑȧʠDG[dތ@ iTU Hٰ\gGK~/ǮG6QZ$ n=݁u4x|pk CQ?Pon޸9/`;#m]I$3BI0#ޯ~>&0Zkڌ8뉬63A(>!,&U=\őPIQgju(X„J/%0(&(8$N5DEʛO?_ey~Z-qsm{XŹJś`sQZPk6Wue{ه  \N}#_N}擏๣al+O$EA#G1]T¿oZL2y_ϏLg;ӛ2b>!SwtAV <`,ۧM݆ v endstream endobj 2942 0 obj << /Length1 1626 /Length2 9213 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 2946 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 2948 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 2952 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 2956 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 2958 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 2960 0 obj << /Length1 1457 /Length2 6520 /Length3 0 /Length 7517 /Filter /FlateDecode >> stream xڍxT6"U{Dj LBHAz7i MzG@s=w=dYϐO h>A~@Q\@!B66#(NfA0[4Ʀdp ( B@DRd8EȦpBBј}~pb.$d hۢ!.A0!SvuA#2\(`AA0W[_?!a00.np0 0TBZ /py v.p/(`A*ZhO4/E[w[(C-@E^`P $GAajsp"GEB@sp=UU}QW1AD⢢"(k#/WoS+`)`>}PO+BAA B P8ΰc?kLPO#?A_Op׿[,`fW>!q( ((( 3-Q ?Kuꉂ p|y/9AKijh,5# `øXza>GUXE]G@9s:V>k93 z1YE5Sh܅BG W5̡ jֈVS`NLhFa++&/؈-}.oOvktQ ?VY:^6*@|%)ʑ6Uu>qX# ťbw}=(-0~"lyޥMlVe4 z0Fa{WR Z6 =uf_A+͘g[-o;z" SA fYovEߑp+4\yyz]'XMI 猴62tnKNP83x_%:L:E:a %x=_oZ%!49ڔph$@v̧f~XS?ηe0L>,*{*`C8W{jq(T%XBaM"m)-m:Z=#Mg_-.$Zm5~xC1&.V.KiDbۉ`Y8?}:LV=UӖhoG)4A8* /~0}%;ݴ4}B݊i`4<~fLOHZhZvuk9B-ՇPsGwo;ArI~fk4w OZ/UKx"`Ċ=3{9ڻL~0YzR$AUAg uwP 8f1/_~߼ŀ5zT2{8cM~{bߵ/_l7T`8]=qIje=իM&~+ 1AԧpoKOaLɩ^ _+zR)5z`b|1n#! ɴ5opiX;{ئvE}BE X}Pۙt!=1z0hpXOGs|EFt0j^Q/:~ܢq_B7]"5pXͣ+7Z$_-ĂOwԊߵi.6qe|3d7^}Z{$چOx,gnmX6XD XgFKbYǴվʼԖ_}ڶs^e}3VBld@l=v1mKb^6\ Lwyߤ(7޽\Iߝ>gEχ\Au6YTEJ, ^Ťnr/GUĂ5Lz/!pT<7pvM ?XoZ}tkS4#o-+UoWh[SZ_wa]ucjXFA1B0(gHy|}I{j\beP؉`V ^Yh;Qާ|e?bzM\><)qPI8㤓Cj¼s·'(pI/í,r?q\KTarہy"9 kS;>AţՈ}c]s(Hg#szv눴Lt! #dRb^nBJ@/q-oC?53}Q>V9XP3йr$c@e!M]aITsm6w=fE=hu/,1(W~Z]Yn); oO؋pI|ڔȒ]bObMralFx/[ɽdك{<{[3F)余 ƖI4vOe%G(K|}1 ݵ4ywq5+3& {GDWo %~\緾M*[ZשRH\q0X, QaZMc<=YJ`00 mB!r& |Yuq=9Ј@4֭>ڑ .]էV`49g=W.lJp&|j) YcM*"|Qr0] W!sk={OJ瓗GäL˯&4G3F%LгV)a_ZMgȢRďm>u4}>PeOZ3W:v{$zqKe43T[,}=3 & ~>1c~ 9Qd2QTۺ}Ιz&em NqYgI!6ZM$L%Ye%i@ai FX<2n8D++A_屾.I;?w*xR@$ՁMR^.{(L qWf.R_9JtUWnfȐ`rl?6(]Pֹ i'fyBmg)ò{is%b5kxCziYHI@ ~棜D9T#hf%deӑsj`dR𭆬]4Mdpy+LY(\2J荒tL>ĵ1#O ߥE3·[Rj;/d*62NհY Zn&D@\ȅ+oxf?ue>Z { :R} ;jٳ~SjPy=AW>V97֗wi?A\di$;33Xl~jy+74wUiɺ#Aa(t*Ū6W.js9LY\u3߲okk6և?wgoP\jz0sIBu^=˭./0~^R]s,QQ$v3jrEHYI" h/p ;E.+Nt<tWzuz| VnH^2M}-d,dvEԴᣫ/!I*,@M<3EMP tn1j{i?a2W0DHqG ,'2:RN?|!XM1OJҏ(v@.hSb_'{F(fCnyVQO&)\LQU `_F_S۵7(S7gK7h@<H"d2M9R}'1.4(4Oͱ0y \)ζ33助"q#_=f~퐬3ַww&`[,[p}yYdg.;B W6~|o7!ywjo09XFuߺnߩM%CTZEh(ו+bNT^&F4λㅄ[Zc,*13T sX-OJE|m=bcG°\x& L݉'Ӹ\{1$]衳[o bY[赞RF3k. GM XmL~uxCXg)"c4ǟڟQ ZxAkROr(b"Gm]!w/3N*j&PyfxUҲ}؟%t]9Yf4ܷI;%#},a0;E5ݘ)v/+9#Or{e}%kpyX'Q5QdJ4#9<,KL2{,vwcUn3Z WXvoNDmèe0p]7,ƓfXq!UgD{6}ar> 7Le"e%lz}j_ j #)/;r3g|Mw|n;zF?d\p R2|lxn5"L&On|k7!2RϷ[L}g ׆y,slsoֺ us7_D"˜z 쯞 fzІ߰1sm  \.-`'F IyP*}tAKpKƧMHgG;N}Zo|w,U6~ M:w C7.wy &BS |AOES B-2soYHM۞^L|rJ4gZ^ۑb~/|H}Y%:U Gj$:sߠ#CqMx*0؉Ұͩ"n >Uj2& :֩~-k gˮ|}攍+h܈"-yOs ؏ቧ?|PvyF|JXZNhZ,<-*e| nt@,}(5 8hԏeY)U/@Ǩ$A%VGP,Ln5۳؁Dw~n >O-@U)6B O\! . ~u8y򱸨*D,T=LYg^2Y_ hǥH\p(-Brwi'^E&ێEW%\^"<+z':wh־]~mZ_po<[ݠ>XֆtzȕVI,*?5> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 2964 0 obj << /Length1 2881 /Length2 20706 /Length3 0 /Length 22335 /Filter /FlateDecode >> stream xڌP- ~pwwww$n5C  I*`ݽGE$fhvtpcbcfH(ijXY9YYّ4m@#Qi\\mp2IP n`qYYczX W$* G'o+k7p 50ؘJ@7k=89hnrnnN,,@{WfG+a:F5@ rY~ Pڃ) imBv6 WАS86VۀOsllW N@o+":X2ڹ:@;/@\]l\]m~+ R 7W_$m\@{sA6ʰpwbrqvIc!Y\3en+/%/1_'G'% %}T7BbcXؘ@V6H ˿1]lc?#Y8:y6Yt$e)_pq;*x9X:& {3c);=憬\_lߌe$ngohocxn;5J wʹ `eo#m\m@6nb_{fgRutuXYG^.s[ ɿT wF)sG_K Xeo!0;8].H "K7F<߈"_ `,2;E7FE7sQ\~#0E_ F`.ohF`.ڿo\#_;wׅ _9;? 7; пrN_bڸ>_A~g2f@s[W;0s@na[l r/{>  a>@x2GZw4yu['Fɴ3!4CN~6;xZ~-)+%'&dGDNoSCŇbĈDL~O~om!{yT _z~j>6[˭X)V+m,UYkr87&bz3/٫RD$X_u9jMv^|J|WXԾx 1kB tkヤ~c=drXxv.|2,ouPw4L^3XzzJ~2 GpaPWX;R8?ӧ{k6!~A,j李9r>PU;k=7&OKc+CgZgpw>a -2켪Npe#`tRorL] fs,}ݵ2r^ʰ/Ikٓ'*✦¥ ra%<Cї4W#tc,SZS?oRܤ&N5H2Ϲ/u 7&{gc-d)k49f#Aʼqv6Z+Xc+BmT䝃҇rK#AsRZߊ14Ϫg] P 4f#D?ɍtM\LlG+cw}i'ypȇ/4j U|#Y:#on'VUfGF}VFqI_rk!z QmT'ݨgUJHr=Q;`?[;Mj/աexDgrI,{?g"h]G8Q%E~޹~_az*9mlJDf>Y]asF83[j]U_i7JC]M0o]lW7&U4.uaŃ]0s|Qӗ2ӚJ|p&V_<6Pƻ\?Q# m_Ǚ(f3e>ftES3^A6dR%"f kz~mz )b VJ}*2_gHVʔ7 ?đ/AWR^&\$;QYlqј83^3Ty7n?\;!iWJǬ 43qT= l۱f$G #S_1)W-bS&Jn?>E6Vץ2ڇ%<%Hoboȴa.r  Qgِ,z^ᕿ 󐨍VlIԯ0~)B[3T06mNL![AaiޗOMi7x=.~Hc<"AgͷVisFƾ2ǻ MG NV:N>->ʼY|K릎o@L˶#]=gv1zdxpdE+WUhDzdWEE5h:ǃbEGG*V(p6e ̽Rաgetew8%tNhot5Q5>h*&)~D>ŻD[HW>ޭ@^;f" {8!_>dE,oy˧$} _+Bedԏ;4a/7D6*gW : r.bMK="İ|wL|Ѫ$8 ͶFMVGp͎&Gzd]S#`Bqc@]m߱BܟYivKct +srOm*n;Q9/AFxXݟq!{?fL!I~{e&791]f2wuPCahΜ=b֋Tw;Lg=u׍d`W}UHF'3"0fMv/y>!ӑJǕ{q;AD&SX.{DhrGpXK&˜oQ44,`Bѣ< 5+z6 =:єM[7Vf̴H}UD1SPiTN=?qx1.'}17rv~U0Z&,4x"0ֈۻU µ7KRǼ3!K&K\=x֢ 2jՇgg#T! }MHD&Y6\oסԤc=[{\G)np .̨}`35u_y1 $m.I/"1p!8LY9z")_ƶʛnkK M: ) 9h˾uJs=,ަ^'8 yE6\WJM#"ЈN?[N4u" ZĞ%r*L 97:@(2皓u]~Z:`&ZqߵLy*?{?#zWc"΃5` d%aA8=mLMFNM/~YsɌB[oH_|fjBP5ߵEWR0CmJk~TBԺ>L1{ݦ4\tH!Rb1}kN@ar[])Ѱ40d\.8I{zx%Ӌ0IN# Z1Uipיxh|- CLK ~fŒYP<}<4.ra%q _O^ n0̍X8)&NrqiۄJDPx/!&||X֔4'gųݦzԥ;2܎0-KB(ʴ=Z.Fl.'IKuVs!UתﺉϙSAjj>eh$Շ(Fz{nLjvz;+Ю2#7!hwQg⓾2 q=M+t%z\M`DDpD^$%N֬U^in [ [;\߯Rb`&jt+ C!?D =koDe?^ z0UDp=ڇjDsuv>qBBZD+tgU$?p]ñpQrJ4# 8O˃o&6/DQwV{ʔtr)*FJ˸Ai6ިy2ej φ2hwge(+I9$ /]JƹRP)@qzk"uA{vXo+V>&rdž5j Wr1sXRDN[;J#Vgn$5/i-{ wgsxqPMzH6M- ~ .pdg@Ҏ)W_]2 ]&4$>B Ey0}5$c*eRLYUĔc~ƝK;` ƒ;ΐLZŭwcB2,K8X)OgBxdX)r;~r\&*k|2? :oX_x[<-+FPRZE#YL&6@߻!Ҳ|(]0po^1BuIDGA@^GEꙖʛ׮X:xŋB&brSM^YOJ~Q!KnaZ+ısΊ#o./Q3Y}.ܼ'F6V#ѱ&k&Goˆ>=pז(z+EP3H{ E@TVn$Kp&PLQn'@f6ŒFʳ8vc@S%VCJqBGw/yy4Лo*9J-ّ9$$T0F=qGDzfÁI3G|:ZwsJ_p~6_g`.4 5;(tJ`;`nX]%(qtܶ;33\ yT ߸ fn-?* F: lBb^'K|ʊR=xx#h<1R5ɟ'2avw/MNC/H{XT`6|DZdt,-RB>-53L'RO~TTF7@x4z+MYzdQ3΅{1%clz :B׫Zufaq-XZ? ^xfڨ`OヷG`7imik(GX9hs9z8g4. YnO=l|8S n|`[Zmgb[ M\P;!\@Ҙkj"'d!}7aΊ 7%+NhH;rBbd,g8QZg>p4ZM4M:T@JEHW_;4Vb=tD˗rj zWoc1K'EҸܪHJV .^X0k ?@fUQw5lxAP3Tp(i)x⟢6=ҧf&5(N֜~1=i2˥T(I[­FWZfURxQ$ 4ϭ+"HAcr|.qvRO| g mW[$]@[5;5arb5ҨH$ٺIDzr=!5nZ*(8_[#4&w&Q7AQ?p4B׼řcr2.6H(+&j(' h vUcLߪ|޴%£GфƍhW -'\նR|ͻص\Ɵ˼){EV2VFvgZ6ԨY$a5tҽJt?v' _u4pbWq] Nyv},Z*VObwS 7!kJ9tV%p0+tOl~\]+Ir=ԡ{aA65Jը .x)5,CN_@Ta 3mڇ.vۏc#WhY Mx&||4zlI6Sߓ q +=\&/sѣ/2!KLL4P { ֥SJ4auئŋ|MEL,[ZEW}bF@I cbh׍IqD\^v%L!~DąfNi ުl;q EYl3RhaFBqd5,zH됺(U{Ȼ36ive}C rd=l.dFk9mr@] ,z6k#oo0(6[_T3_Ue8ؘ.(>abS!~Nx!D ײkB񴑯X^R=w ͨT M$*A\xv,֮2q AwxcGCOz"KU~KqxW!Z̬=*=~~YIrv~_ʟĊX"lq#K?_ua[ Q@_ cD69:Qi-8x_i۳2*jDm.cܡ!UsN|\`EьiTaՔyhr# .쀡ON{,(7̔; 7h(:-~A) WpqM04kl8iǣ/f4]o>b׌>Kd=ewo DBiq/K?1L/$N1wFeG>_;倢D.{d|:@p2Gf G:. 0adؙ),yL*0uޑlo_#,Z dOyq~vb&@ _H}J<5,'(ZW2c'4=MsTtݩ~J|+z 3mc&rX{Ǫ 2jsFJPvwޜ;jάa= } g 8N|ўnRB9&\? r }BfGxQ h~ rǤW<'Yɛ~Kp.WB>GXK{7m"%GKj])1ߔj?ILK-݊ZV.S+izTh= ./]}&,wFFͽbWoV{_^zzJdu;X>D c037]]4OӑqtvbԢ>Xi솱.mq |6.5& |P *h 61Æ%8we~tiljnSOFhZL䶅8\>.--/lp*'/fF"zDZu"1m&ErW0zG"n= TiI(t|a yW)b_!ٍϗ2Ů[c`ƋAB,z4NTdiXX`Xzq;njGZ!ZfV b#\:ϔvWLԿ- BMz\,yrBa5Sh C_e~R377%rlލ7#0 %{+H[Si!*/\وHhXRw@_NoةVߔol-pM-Ye<ǖ{ Q"Pz8A>GͽYj+.w:W[4AK e:0`! +hh?Ia&%b$CؘjMBΧ!/e9ɠG3d4l+c8+u t)e]"q ϣg9c_R2Pu{kS Z]RX'Ӟ$Me^`I"[&o/T iLaiF^ρR{$Fm[G͹ga^aIz&WEx7e4B(c:2>rE-j-9xzdzr_~o#4w NLBrm3նKA ]K1K1{_%3<:0X7#.>ft`Po!Npc7 O GûeKhjd">6CcStőh5wMKd 몹>j9I (fo80.Yx9>*@&Mu9zX͇rskP'ܮTIǟa Ld_?D5:zgu h9^_5DEñf  u}[beJ0TI*rw}Hnۓ]"m7g{rݧ%לOh! q4u Vݳɴ~a79q!c3ZaOeW:WzgkmA6- GB~zgO p\^`,A#(!ҩGTtUG_]xXJFvgJa6AFʿ:kq+-[{d-h^)Զհ-IۡwU_[B.)4fN)\I=0mk\2l%;oo1D+D wL` %{~z4J!H2 Fa͕ CF=j8d^wI6)e;Kq ߍȜ pwXƯ^06K1tO[@'Nb!uR*b4Kw.2_<^FIlE@懡ۇ _``~e3jw4 - P<q&- 8T=oB&_/e1 {Q-NK0-c`Ay}.zn(gW@獪[bJmLF*TMqSB7嬍dE |Q(xfGo};" [^kQn'ƕ- aJ3;#Z =rw{'NY_XhM㺡*NO(R!RZatG?*1nIb$"Z|y͏dyXĩn9=.vWF]Nņ_%qP2/B'28pc|i%ކXf!_n1DTl6>Zch'c'?A}Ι|k>LIr%x5%ˢvI:?:(!0M!֗4NdHoOW'j8ܜB&ajap/!sh†PlO˪6&۽3C$c%}LO#6ogBnUylR"dqvyl\Rf'~Ն B'Mc LȆvڮ~빁|uK%^(r VZK?ُ[ L-yd XT46U#­p\V; G˾Hoڟ)'~p@WB`RCe"`_J;1N2F^- MCqnlq$Yh}"]&58JK[OMr*|RݤFPeJuD8_0t n}m^A-p0:EI1ves]֐NdCfZϐQ`B2wXTߙgjWpУ4&-uji#JΐyHÎEw}j񁲾 7J6)׎ DNzuǟWs;v&=l>wuSpdNO9cTȱvPʦCj׭5nTRGan.]mAnM` @w: Z)"&]#8K9rF6`b9H74] iɲKk]Z샇`}ٰ<(MC vV8I'(U\Qw]g2HوȲQ_[^~|OK, \\-za# N$ rdaB㥟p 0WYUwÌV# =~|Q`y[`fb^nΑ'-"p˝2UDURt)Qːu5P.-R}?OSXkKS86B?~,~k){Tg^iuj_(' RO6UFYɜLZBhE|,'RAg"O(puSz6zu38CA f ۤwxfgGQi=G<%B|O|ruY BJ1m1Sm[1e5!NXa.J$|Q]nIJ]"mXSSyEVmwGdt[ 'ƈ\+2?bR׀Ͽh'mXsmbC`8>s 7}hBD+13AMBKߥ$'犴CʇZ·)PB~vi|tKhe)B@BVl!נG {9Tѭ5e(^}2hfgj_U᪽-$ D_wD^Oq Do<:g(-ȊC'aOIJ".xo% ȯ<ڍb.A7,gwdL[~rMqG.c$:$|!?w ($Ky=sǠJM цOG}99s'屎i A-~<5}:f)Lּw+lCwxB.9'h[uh9z+ozG;5ZIl=2`- 8٪ߗI;08GQfKv7-y^ [n=zL0g)l* pfX72vXgM&bYxY۫K?"9d}Al+{薈OκRr8JrfYI+:j H1tˉ1Nd?>Eto䐑 둘U{% qBHNcvVbeN`zK`kzʵS'-@et(XjN Fy搡PA۵Ye95fO`-pkb猿wK&vA.n؞b #0٧e,㇗.}[E{  uUT4#'`MpE"PCM!K)^>br͓o$_]PJP~7^bsG";ph0'`3+B/0f rQڮT;)1R8FM|02UK.D&d{ }(b6;tM\Ï za讣G0-sP1f.Ks^'Y8<O5~فq{Z{CߛARëJYJu;(vHHG \% $\(yqzGS0sKn_4ا 0k3- <|ra Dd^0O($js9PQA:A F!۟uZ*C\4 xwzz/JC «cdNv%/=H8gSYX)a4 idϪ56\ ͏\4eM3jGG淎 w&Jn߯?QyV&nyFYŶ0^c}FT^Id>GU2m(iSN 3p W]U>,Λ8ʤ_ly4~9۟vW醴+~&d X=,r+ok1V2MtT)jOďV3 @IoH{^w7K*e+5 t|.M9vWf5{llU54ؼrY2-$SɧE:h0{l`-a2|&Xӻ!IgDueZ96V3±{;3uB~`;9YQ@4EeMgFvk J!^13jCVqI&kzx\Z^oTV73 OvN [FWU-r Ds>Wa 䑓k+ρ:!iW]:'P#{q"-`י n׮U]mUF]˄@c*ى䲠$`PoZWfIuv=Vg& Y@baOec $AW0Zx.ydPWM}jDxs /Sqa|n筭^]slқֺvk(8{I{hl'Xbz[Þ|gOwˮFH {ǫ=jWȎ?VIA<Yo 8lrk6J(K A|F@'% Ԙ¼tWgM-l"hJrP?ZtвJ*!?f$ pXli= (:X.8?.\,:Lo;Z͍4_]]g!-0X: :$򆢵[/+ UFRҷv{&WԖ(P.+|c%g8S@^(WI˙76OtNZ 6jw֧ѹ9knN]$1ݝ@da2=n8lvNR@&/<끚#d<0fJŞژ/ B%G>Hv R./v .0!rU6yco,@i -㑹 MrLFGᏯZ:;=.V~'*>?ZrV>#0 HUVH%c&'+Ǎ9I˾~jњn-( ;sr2OL<%4\OzUx[ڎQH; ^v("lRgmWAnCz g4kȱiq!\WSqVxg"!FbՑf+A{EkOq\--diJTԔajoc#IO3Tԓ憵D݊62~//@RbjN zȩڽ %FlARr)e ˬQ <"6X81C 2}=Rn(9J Gxll&δr%rQ8n 3W ޯ !7#7Qd]z#6lTn]FiC=!l JW ݭCHub tXy{ٌxh U|RёWs4em8V d>8J$GTޖjdԔދ|q=(> ƏǰݚnçsI"X@}F(p[:"A4AU<|!hJM_M=Ɲ搌$MU`W01> Ä.lZ4ze"&(GaձOo&T-d_OhÿCR,&G(,#nZ8AO.2.3V[ȗscMfk )-.7lr_tׯ wG>nCI MqZ,iLBIH5G]Zw/嶺U+Qu VwMe";!2V${c*i %Tl }Tj!CEYa/! E?+K&JE ´s̀RٔLf 4Z{@y]Z4j[(wv.M![vq2-}HW\vULؚo@a-RK\Uȗן7a`6E4;v߾ۜ>!ޱ`7"/ ѯE{@3'N}sW6w~j39j_M/ d~":mm_[pWB~ϰYOAutRNy̢E_0`}M5?P5b "hC!퉶,d3|DuI®Ă\jZNV/4 j5 7ě*?Ă1԰E֑b\D'L~5PdT].Azپ\64=|v]sv}fMeܦ|tF"<&wh;NL)S驮k+N7eTiM(sտB^Pl9&J WgrnmT lA# C9Z)Ő몯d\,}l𼾶f]!\^Ncre/HW=ے6eyr|h嬣Z@aQsK/L*h"N+u' 9Zc$$rۯ-˙h'Sa?ZvxK590/*k'r0ONDF`^DV f<Ԉ-$L{܂]6B[Bo|˙l:"^`=bѮ9iJ8Njfߞ$㮻AB48 =wt"Nx n4xQGyaDZk A>|Ltn.ږ 7V ﻯm2^[05/4m2C3(n_@#ʊĭ QjXu|r0SJq"u'i&&셨Y ̆Gl!3t{N &:&+MSCUxGxVXq''llo!0ݭ|oexL5Ă]\?ݯ7‹7-'cTY- )13PJ&M Zød/ b+->Q wE[|2)v endstream endobj 2966 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 2968 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 2888 0 obj << /Type /ObjStm /N 100 /First 977 /Length 3323 /Filter /FlateDecode >> stream x[[O~WVߎ@B. Ey0f>16ǹ?_ueX):J75U_]z0R*LJ-3-2ɼπN. 1L)K!St`Q-Ub άa˼YPYq =v<B:0L\VB l-L :*g<6:hj*G6 ;sIr8,č# 2 > ((,OxH%qLhhtJ$0kQs$4 8IBi59(@iKVv 36"6-4@ +Cq ULy2AQ5]@*(AȒjDć-pƈv>D(V&D -a :72,(YB)84d]ⱆ̤dP$?b9"fo yQa?es{^=~='= f$V=UUs* k7~(q&-0XlP!{[ A^v[va 6j 0&XG IK`cR!23ա ,„0u`e2Ռ l 3x%x{sIY{3]K3xtR\ <!7+fsʻ?Tl'{yHm#.AZM%̍8 ǹ5N c\G2r}Z=Hoeyƾ~Wݿa.OwBgJz2i-rnOmJĔցi"hDsQbBQru4V 35Ǭ!ugH/-d#&g)Dչ­r+Y{*s?5g~+["ri !(5d*啌Ȥ䢉f&A,>n%riNxkx%x{sPVRp[͈ \ư7fR-.ŏg*! 52vijߋ`\昌qjF\sjF~d&$3yd&If6Xz׷FeuPŨY곸iVO*؆0cQNhh>ӧ4:ϡ^Iuq`JW[x9ɦTPIKc~kgHIGZcDZ;Ԧ}Eu2VFoiǸB(SV=tzfaB9(ZbY洫*1FSDz{lM!IU6)4'A0r{')wбUQ`Eoc䈾67%Zjgv|&s>=΢g\A <q$s2LZ>VphM E?aGwMkd&Mc YʚS=-<8$2cju55}~2w\N'L~4QtAG:#(6Htw_-#ǟ(5*i8~W}"ۤ68o=sNHBRFrg8pim\46{M{j̓{32NOrXPDI|*![ilDӚN gz7y!V-Ilܧӎ;S.u„[ujŚdQ%礫Czc=1rd__$E30L:)A*`M*58c} L%JOJoX#$$lhg8eg1*ZQY z5,bj*nqUAqionZN1($eŷvuSUwi^Ft5G"`2E*I i~ò?eqyэ3iR|74҇]Rex7|O?<}f;zRSl\HGM8%Z,3]2bF˧)WB{0I 1Uh栺Ockot<}W4q$ME@q0YLbR&m7;~Ndjeߣ%j?(Aw4QWGhtބfW5҄k.;ٜvvOvgn`R4 z+4ot`:9-.F8Cpun~h!7(~>T?n.$釪|*?O]ќvw?{A5ƻNnԽ_jQ!'$t/i*rB IU۵ I=5WAυn1Nt>6*nj*Qɴ,%.9RFG_OP>QZw^F;Xsodh, 2Qth"ҟwP[M3y]zN%g^ ߁ +}\;VUC ["~?d |X:aIJeU=z(2Ozp"mw@O$2&iͿcX݉n oo Ad ЂV Y]H?D V8Rr^&LUD ~L5D"=cf?K; endstream endobj 2970 0 obj << /Type /ObjStm /N 100 /First 984 /Length 2124 /Filter /FlateDecode >> stream xڭoo7H'K4>ý5Fk 9}#gW/sGӈ; )ĀR!p`aJ 9T; Bs@UvQ'-*L1%IG,:u>rrY@D sE4Z#%Vzq"GaMX !MT= BzK!-I=f5NJAEtZ Y=@ mRQѤ5JD8P.ŢH%܂FT4*"2[!E -,;*m2*MV fDdQgdM\E:C4!tFbC8F!U#-0p 5*-\"Ma3,CqAS&Qmrѕv!C2]y|5RL`LFuy83ytWe lRn$b̕E$jBRtۖ%("ը tYy0n-jQZ3lI%$KЏ%VX@1]PB HYA r桖<ȊB!{򢮼TEΨv_};9ߟ뫻O[>E؝8p8{@-ϻۺ]cY.onN?zwCR~{v_?7^~Ӿ@pMW^^}xw-qF|"ʹ- gDOo^fd?x^/xը(YrS|.~KyRݝ^TͅFˉ}6sbXP>-nr׳ x0=v_eՌR~[o W(+mhL+Au ҡ} xUԓ{=X5[qL.<ز`+VyU٭حr@*JAAvP<}(XCA^pE[n#CyPp%5 pXA: Xd(PyD)ISv9XvW%莮ף3>sn=>uO>7@2O H `_< .`)BPH @I(C(&PPR&Pv 6iz(4tu J'P&&MG@<<6Mao8l4y c1NMM&qo8l4y@-C}& ޟL ĉ`l=}Ax`ɽ` zZD{8F0''( @ P"(C!i C!@("C('PP(CC(@  7PJJj C!@I(CIC(͋< P 5Phz(ß(8=B N`P(C!h Pp(0=BJ@=B 8{(0(07zOMFF r#J648ioqcǾLJF* endstream endobj 2977 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1655 /Filter /FlateDecode >> stream xڅϊG>ż@pWcB!/ yTiW*-kk/:R; o:@v _ } r 1X}>`{^tɸX[`>:#|+A@g0kFtAG~ 8<cQb;^F(Dԩ 08<o|55g0q>c  X|a>X}e>+#>| ~y%=)<\>+GE y(_` 8ϵb3O>s>?#CWB8yKϰM> _}Xcۡ@_l;c)  Xc Xc :5OqT ]Ը}D_/{z䷼ǯw?x_/7?|˯_??.>@=o*C r C*[@H]n4" WiQ8EZN(p@]&Pk E(ڢhBE*(Pd@"-$PH (ҢpB* (Ph@- %PPB (Ԣ`B+ (Pp@[L({(ׄVa'}iǿ|zy䛥[/H^Y%w^o ;\= hPZkX?5MaUau JKYR |`-}KoC RXP-}Ko:ҷ-RKҷTJ-}kKR (-}Ko2ҷ-RKҷTJ-}kKR(-}Ko4ҷ-рRKҷTJ-}kKR(-}Ko8ҷ->X `+nQR (٭mvKn0@EiR* (m(zEom[*zj[[^oK`@w 6SzhK y 46SW 4k8PR E5p E(ڢHBE*(Pd@"-$PH (ҢpB* (Ph@- %PPB (Ԣ`B+ (Pp@[P+ (;eWݢ Tݢ@B*nQ * (+eUhQVBYʪ(EY79H-k5a ofj}-ێ/2}Kr~ wKGGi$=3[,oW endstream endobj 2978 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1706 /Filter /FlateDecode >> stream xڅ$7 am킰9B^`{v7!ikZhZLjG;X'a:lLA;D2a:dL`O8&O:h30+42q&6lgc^J]t< ߴb Zɩeu鏹L6':AM)uOg?AuD-#㩋hDQ"Z!lZ1 ui˧l7< CQLgUxi:Jӊ ԊgOvyJB?e]AgΧu9?uѬ+Mt `6eˮ: B'H3DzņCtЙKa#>tZڮUuS}[:suYg.ӜC9׹ȜnI99믺S`G7f'.FMGAxC粑Vv0: Xi 늡ӺR?X:iGZq>w[Y7uMG]g7Lgc6G_T7zlש)ݺ&mVi;=Z1mKQ:ҊSG}jŹ`#:VO~۟loO~^ƿ~o/_>x}RvZrZ"otH3.Qd>ie>%܀i…<CҐ y!u;0<Ґ y!Mp!b# yRb# yRb# yRb# yRb# y'FHS.Q:v4f|\<~k(1?\Gp"i?H.>Cħ8 -Kk=ٷRgjxWG> stream xڅKSxwLa  CمY.f|TٖX]:I.RX,dR#煄͠IHuHf"5KE Kj-W3aVf K+LIMm18ڰ-bCIv [@l*U@]`mjU*U3MTUJ'X- s[hu9l6B\HBZ"鉮`+DWds+LUlFf0@3+,f…M3O-eJͲF r*V+E94fY+ZU XT c̅a&P-+,Hi(IVhVhR P*̥V4 Vh =fx2Olu-IY:V]f Tt5,sUך.l)-M?͖fX2jUeֲ6̬[֋%[zq0f3%8MsR4RYl7eC:jSC?M oMNaRGKIF-NZbRje=NZev2??~4?7o_}Ƕ}w;׏,i(6/A\,wA<s} J$7SP&!ASu{4@I(C!4@I(CI!4@ PRE(2"J E&PC Px= 'PC Ph<&PC Ph= 'PC Pp= &PC P`< XW!턂-O R(( > 6 p 2L^#A ){+R` ]CBP1(p?z!~N8gW.מW yW扠C^yڣ \xWx Ca09Wg&Pp e")@Ax")HHA ܞSxB!'PC Ph<&PC Pp= 'PC Pp< &PC P`< 3{#( & `((3M|<@-#(04}<tP l04}(tomSmnG[-hAO*84}^> MnMGɡí_vy<ܺUG84}5o6}>ܚUПA&|Ӈ'P|Ӈ_A !O΂ǐݣrF֛:4zz=5Tjn7OۀC{/RoY>|=Ѓ^k>=nk/냝Z9KnHF>ۏӑkO7~S+.:F{xYNE}8QdV.7U+9ǫ7%*v>/;keVi't9:)8k-M{HcA0rV]rԥn-DA Gq19ާ8Vlɱī%:|B9x^M:AWNm9M?>/ߗ-gz_W:w}^UZ}k'4|emmC})T}[[>YToumNUɛ?mPPa#QQ_lFG+%DՐö[Цݮ--Y ۨgb#d f(:8tf^vXLb;NQu跪{}%K{Rd)U'K:YGR/YSsllRĎ-Ş[SdK9MQ[UtM&N-f\ z 4{~k1 endstream endobj 3083 0 obj << /Producer (pdfTeX-1.40.25) /Creator (TeX) /CreationDate (D:20240207095055Z) /ModDate (D:20240207095055Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 2990 0 obj << /Type /ObjStm /N 93 /First 959 /Length 4911 /Filter /FlateDecode >> stream xڥ\_sܶϧcp4LMӜ:Mg9+ۺJ[I$Rܗ5I~ dgy&2E"‚LXPR :цxLb,:qˈ'K( A_!-yÀ64B 18;$ :W MK6 :6 tCQXf"h3J MӬ 6cSfcJ@hD-htp͎hb,6+ L.a"h:C{h<@,bm6 +:`2L`1G3pϾً7š|%牄&&_I++WVh8_1XɰdzC5\o -羳{" *jXcOe"-P{|JbS +Xǧ,V|(iBFc Z]H" iB-߃*b5V<(mAie&J"-T!A `TQ=X#6:@Qx ى” +>PaHˀ: xVb +@@ic;r򽡆e,r~8-Z(iF<@G2!uhrB@ d`rsXaJVcCe8~,ŞOxNXX)xrGP.B( 2DQ QXr7w: iy$)(r{9@R?`Ɗx+?Q.B +RcCzB>>P튺~|Y^0Zޕ]I.G}U }="V$jUsO; tS=xOmE?C9}ʾlb9W۪uyW5BM#SG- _X9N 0 E7{ J<~hݟv~xa)^=Ǽ( UŦ%xGr\W܎}_ $e#Č#5Rsr=LO2yGQhN싎iJi䐺繊 ?{d2[LUr`$d0ǡjN>:#܀a964ig;m3aZ`Uibݏ ZxؓE&lWLEƫyIsrfټSd9_W$-iW2k\4uОF ᜳ{EdW`=԰%IVYPug&puȕǮ8V-PⶋO |yɎgr\+m֡If̹C6Sȋ* * kk-6Ν5_ A#͗?tiisfC$]DQcj醖vM8ǫ|Is "7,̌ 0}Z+x/Evp6l%q^ }W^N@)K]HN,é*2XNq"g]7<T\XH?U{J,h0YiXopE(W/mc|Q2o2i !%?EMm֫o&jW1-ߌyv> fhw~.vLu}_><1@2 tK*U[cА)Al j7r)\?4P⤓)߆,;[cm % /9uשM]qW#B[zL.7t)E/]p xO .9m ?a2Zl$$ϋw"]gc~{=􎔔mS w_tU ˂@OOM b7/wazF<*/-?Om ȋy [#ԕdHg:?-.i7Xڮ޿}_8@:T~c_'b"`{yqOH俢w-Pr1b[ `~Y wmY|邉;}O+Kk".d'zu'wYa:@CqND[; ͿۖqRp?˸5)s$7{4jx;Քţ]W m{FAHyCWѾ~~U?iLlu%^|&rpƥ"&,2.yJ9UqW4-D%2q4QP,b|{f(2+wՑR|eC{Ps?ڏ;H!RmDli'QvJL/]#o־.KŔ&.7_=E@X>'|)6[b#6c-_brAGㅻi<# %i|k:#e7zW4˥o_xەRc;'8 n|q'E QkFXԿfCNC̗x}ڬ=wn\9rQ%xk C#4Cq|oXў́V|,HM|We+5juaT#s~~O+(.H.(.h.m2"r'Dž /3NŋiYpfl`$ڈ/de?NrG_ ₎}xQ1/8.d\`kS'?`mQF! |~ ї' G0p$;WYR~[/ܱBɈ$#H%%rL:b!(b;3ՕجMWlb*H-o <83AEB2BF8210E89487C3ABC2B859B2E1>] /Length 7299 /Filter /FlateDecode >> stream x%y}3ھo}}Up@-* m<1cqh(}FE>) (hD;,G)P¼~g<=RT*T~ey7*Je~I8&3x*w;[j̟xcfa,ERXaU0* Z^j<`5l>]`# `3lw`+l.쀝 v `?pރpBq8'ę3p>spf\|M W*\pn- w.܃#x O)W11*i=uPṡ 09iXWNdVYIf%dVYIf%dVYIf%dVYIf%dVZ+RJI*%RYJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%R>_R)C9/ReO@U1EaCR\Ip%HPL<|X a,%rX+aa u6Fx6fV];a=~8pN)xN8 98p.‡p >&\+pu7܆;p}x O)M8q.W^AzRKA/RLR_Ũi:̇bXKa,V[ZXalal-lmޅvn{ap{pQh18'$40 "|#heW\p= s?UmѺeʽ硍H/hxՠRx 6n8qY<'sx/| ^2gKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/KF/dKF/dKF/dKF/dKF/dKv n,s'Un{.6&@i-v8hFftUFW]etUFW]etUFW]e]VW Aj0`fa,ERXaU5zma [alwa]^C#pp 8 }8 g,|<%p dv3U}= Ӻ 44}BOʏ1JXoV @1`}`KhpD4 ƾ~<uX a5p=!<3x/%5i}iiNtڦ6Mm:miNtڦ6Mm:miNtڦ6Mm:miNtڦ6MmMm:miNtڦ6Mm:miNtڦ6Mm:miNtڦ6Mm:mDʧ{q7<^ 2.'Kcc[VSPŰ_n8q~g4M&_H٥}9h3Nc9hP9i3SCrfGrȬ`r U=7پ\msc9RneBwo;t_y_'Pνz@YMFܜrk \n\\k_SFLҎ{rqҎWsFynFI]qϨ&TF,4'tG|4*d#fGn(x#EoZ^SG\6Z.JF6Z)QN=q-xă5rȩ#n*G#ESg/8tua6˽+=##CF;&SG_zD1vYrȩ4'ũM.y9ipFC.ɩfr- h5ԿQz\ΐGrT.EݔScG3b[r17brkGLLTPz->.{-<>%0Яi00pKQ{!<>Txzυ'ه~5zτه~5zOهc9`{$f/Pxh/}a}h ]5`ջ#>Tzه T/0Maه T/*Nه T0.ه T/N#nUaXf*Pf*P0Ջ1$}vbW ?%a>NA4wQ8 avwAX0 כ.0KEf;'\avpX-zg+"^;#\"uwZS*\}ZX'N ׃q]qn˛ZpX@qxGNqnmr[!fuŭwT,[phnz{ĺnv{OO A9ŭwPo'#G~aPCNq[/W7⤜Iy/N-n%@]qDRqeYNa |48^ܒ93޻܇rfZ!֏̴zۄM,1 Xԣ0#)(17\[`Zw-V6(x!P!AE =rQ ex=VX.g_z\H5.M2}fb/ݜ>cE_7V&lp ][!r˅u5eTjTQ͖fa(Fgq0{80{8j2 B\zG1n0{Mfb4O(nV`Fp;0{#Q(FI (g0{C鶄 O0{C~,<03fou_ 7VȽfo( ţLx xt O7Y`},<P< ˴CE`} PN7L Sab B 7Ty"`"='\st?.fo(2ݳ E{F bCfo(2k=S ӞIF` &{\ Op+nCfAݣfWxG ̮t @]'av{Hxy݃x[ O7>_-_'-˴n|}\ ۺ{q#%N-n"d12e1{LS-3nܒ d Cp2 2{+6aE! D;;k0v `%Ow0{+k}[x׾y | #,G ݐ `Bw0{+t On`b(ĦOg>`nhw ۀ /2[!`^0 BK>`~f ?^BZ-Ɖ3{?tn_Bwmʼnu޷ v) .HT2``7n  sq){Qѓ+7pԀ r%p~>`_6>`5g祐'] }}B<2ԡXv }[8yf+Bf.e_>`V硐W:|4`ͪ:>`Q>m]!}l}@un }c3Naf+P8PlPt$}lҹ. dӉӈcUaXfQtbPbLsYc}tbbbR+fkTt. cUScĝi`q!6Acţ3+\> Es Ep 08>6_A *P1𧅫!6}b>o?)pM`Yڌ?.ƭLԈ"i_Ql:PpΔ9,fM'F/X#9(7ė 6Zu ԗubK;{q#Ԝ_NZDfn0UڴG Y/]'nIİiyW ŝ FUU S!kp*ဨR3^=~1^T-/lc%^?Z|Gfuff%0*٥ȭYٕ*ByC[`}|ɳ[A[xv;h-];{g=p:;{ax'Up]|1Ш=ڳ;Ք= ZgAvh%w!C-) R<{Jܽ|%}^ti{%_FܦǍLS*>R"͈)G^¾>$B"MD貆'S|+ imچksQ\ۗ>ut d8(b<7_G'J3>r`2/WE7j#,OWE|$ڮoF0Ie0Sc9UXUJoTșJR7bu7?&rXrnE-K{:]F+eRmLJc%6";RUko!GR@dяT;HbNWb\57Gпj$r}J[!'Y3eT]^?NZh݋TEWS퇿9߉j?#L}8)c(~[c9^j_#oT.uj0ޞj3q c1/w/܈0(c~| ~92慱8 FN-cqL㓩k3ލGԗ1 }|!_wX}jbw؉cŧya|#H,l?J T7PJ"gk9}*nI,=t3i*hm4_P,M-+j7cVZ4rYƼX\lMSoңiܕv.qs:7" nH:'r1?3Z51nl ^;vܦzSiDhکnͫi]KSLǫi꫿nxu3M}|xny?[Nǫizזxu/M_?~7Ճ4x(M43 x,bKX[Ū|kY4+Z<ă6d7oɚxƳ3϶?W-Psr5"i#I͵Ns+Ҝ@rͮ^LnE[椒[ T[֡96Prˉ!w]ozsכk;4kldNRVn[A斌9]Vܒ1F- s2˭9s ˭4s+R0˩.׺ʭ%skrZi-rZi-rZi-rZmzUn0S{!ר-sMrTkrğYٶw2 endstream endobj startxref 473030 %%EOF apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/000077500000000000000000000000001515050116100223335ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/000077500000000000000000000000001515050116100244045ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/000077500000000000000000000000001515050116100253505ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/API-Alphabetically.html000066400000000000000000000134711515050116100315710ustar00rootroot00000000000000 API Alphabetically (Tablicious v0.4.1) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/API-Reference.html000066400000000000000000000047241515050116100305520ustar00rootroot00000000000000 API Reference (Tablicious v0.4.1) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/API-by-Category.html000066400000000000000000000351341515050116100310400ustar00rootroot00000000000000 API by Category (Tablicious v0.4.1)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Copying.html000066400000000000000000000077421515050116100276600ustar00rootroot00000000000000 Copying (Tablicious v0.4.1)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056631515050116100311750ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.1)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    Date-and-Time-Representation.html000066400000000000000000000060461515050116100334760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html Date and Time Representation (Tablicious v0.4.1)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074541515050116100324540ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.1)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060021515050116100315620ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.1)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Durations.html000066400000000000000000000046361515050116100302170ustar00rootroot00000000000000 Durations (Tablicious v0.4.1) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Example-Data-Sets.html000066400000000000000000000102121515050116100314100ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.1)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Getting-Started.html000066400000000000000000000064041515050116100312470ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.1)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.1/tablicious-0.4.1.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Introduction.html000066400000000000000000000072321515050116100307230ustar00rootroot00000000000000 Introduction (Tablicious v0.4.1)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.1 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Missing-Functionality.html000066400000000000000000000105251515050116100325000ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.1)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/NaC.html000066400000000000000000000075701515050116100267100ustar00rootroot00000000000000 NaC (Tablicious v0.4.1)

    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/NaS.html000066400000000000000000000074551515050116100267320ustar00rootroot00000000000000 NaS (Tablicious v0.4.1)

    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/NaT.html000066400000000000000000000075211515050116100267250ustar00rootroot00000000000000 NaT (Tablicious v0.4.1)

    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Table-Construction.html000066400000000000000000000070261515050116100317620ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.1)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Table-Representation.html000066400000000000000000000100161515050116100322630ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.1)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113521515050116100305350ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.1)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Time-Zones.html000066400000000000000000000141161515050116100302330ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.1)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/Validation-Functions.html000066400000000000000000000117371515050116100323070ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.1)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/array2table.html000066400000000000000000000102671515050116100304540ustar00rootroot00000000000000 array2table (Tablicious v0.4.1)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/calendarDuration-Class.html000066400000000000000000000063021515050116100325610ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.1)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/calendarDuration.html000066400000000000000000000205171515050116100315220ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.1)

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    calendarDuration_002ecalendarDuration.html000066400000000000000000000076761515050116100354040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.calendarDuration (Tablicious v0.4.1)

    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    calendarDuration_002edispstrs.html000066400000000000000000000061121515050116100337600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.dispstrs (Tablicious v0.4.1)

    8.2.2.6 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    calendarDuration_002eismissing.html000066400000000000000000000056751515050116100341270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.ismissing (Tablicious v0.4.1)

    8.2.2.8 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    calendarDuration_002eisnan.html000066400000000000000000000062661515050116100332270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.isnan (Tablicious v0.4.1)

    8.2.2.7 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    calendarDuration_002eminus.html000066400000000000000000000061361515050116100332460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.minus (Tablicious v0.4.1)

    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000066061515050116100331570ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.1)

    8.2.2.3 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.

    calendarDuration_002etimes.html000066400000000000000000000061251515050116100332320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.times (Tablicious v0.4.1)

    8.2.2.4 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.

    calendarDuration_002euminus.html000066400000000000000000000060221515050116100334250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html calendarDuration.uminus (Tablicious v0.4.1)

    8.2.2.2 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/calmonths.html000066400000000000000000000064571515050116100302420ustar00rootroot00000000000000 calmonths (Tablicious v0.4.1)

    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/calyears.html000066400000000000000000000057651515050116100300560ustar00rootroot00000000000000 calyears (Tablicious v0.4.1)

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical.html000066400000000000000000000174631515050116100305260ustar00rootroot00000000000000 categorical (Tablicious v0.4.1)

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002eaddcats.html000066400000000000000000000062341515050116100325720ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.1)

    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002ecategorical.html000066400000000000000000000135751515050116100333730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.categorical (Tablicious v0.4.1)

    8.2.5.3 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    categorical_002ecategories.html000066400000000000000000000061611515050116100332340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.categories (Tablicious v0.4.1)

    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062041515050116100326340ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.1)

    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062371515050116100330450ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.1)

    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    categorical_002eiscategory.html000066400000000000000000000063041515050116100332570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.iscategory (Tablicious v0.4.1)

    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002eismissing.html000066400000000000000000000061241515050116100331720ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.1)

    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062331515050116100326450ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.1)

    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061151515050116100331510ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.1)

    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    categorical_002eisundefined.html000066400000000000000000000064301515050116100334030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.isundefined (Tablicious v0.4.1)

    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002emergecats.html000066400000000000000000000075721515050116100331470ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.1)

    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002emissing.html000066400000000000000000000074421515050116100326420ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.1)

    8.2.5.2 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    categorical_002eremovecats.html000066400000000000000000000074331515050116100332620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.removecats (Tablicious v0.4.1)

    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002erenamecats.html000066400000000000000000000067551515050116100332420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.renamecats (Tablicious v0.4.1)

    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    categorical_002ereordercats.html000066400000000000000000000072131515050116100334230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.reordercats (Tablicious v0.4.1)

    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002esetcats.html000066400000000000000000000062361515050116100326370ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.1)

    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    categorical_002esqueezecats.html000066400000000000000000000056211515050116100334430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html categorical.squeezecats (Tablicious v0.4.1)

    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002estring.html000066400000000000000000000062231515050116100324730ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.1)

    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002esummary.html000066400000000000000000000060261515050116100326630ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.1)

    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/categorical_002eundefined.html000066400000000000000000000066241515050116100331330ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.1)

    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/cell2table.html000066400000000000000000000101551515050116100302510ustar00rootroot00000000000000 cell2table (Tablicious v0.4.1)

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/colvecfun.html000066400000000000000000000065311515050116100302270ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.1)

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/contains.html000066400000000000000000000074131515050116100300610ustar00rootroot00000000000000 contains (Tablicious v0.4.1)

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datasets_002edescription.html000066400000000000000000000064721515050116100330510ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.1)

    8.2.58.3 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datasets_002elist.html000066400000000000000000000062071515050116100314750ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.1)

    8.2.58.1 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datasets_002eload.html000066400000000000000000000065061515050116100314430ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.1)

    8.2.58.2 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime-Class.html000066400000000000000000000063571515050116100311100ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.1)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime.html000066400000000000000000000176271515050116100300470ustar00rootroot00000000000000 datetime (Tablicious v0.4.1)

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eNaT.html000066400000000000000000000076171515050116100311760ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.1)

    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    datetime_002econvertDatenumTimeZone.html000066400000000000000000000065201515050116100350760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html datetime.convertDatenumTimeZone (Tablicious v0.4.1)

    8.2.9.34 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002edatenum.html000066400000000000000000000056521515050116100321460ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.1)

    8.2.9.18 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.

    datetime_002edatenum2posix.html000066400000000000000000000061221515050116100332250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html datetime.datenum2posix (Tablicious v0.4.1)

    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002edatestr.html000066400000000000000000000065461515050116100321620ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.1)

    8.2.9.14 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002edatestrs.html000066400000000000000000000066441515050116100323440ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.1)

    8.2.9.15 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066441515050116100326750ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.1)

    8.2.9.16 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002edatetime.html000066400000000000000000000132261515050116100323010ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.1)

    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002ediff.html000066400000000000000000000060521515050116100314140ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.1)

    8.2.9.31 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002edispstrs.html000066400000000000000000000057031515050116100323610ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.1)

    8.2.9.13 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eeq.html000066400000000000000000000061561515050116100311160ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.1)

    8.2.9.26 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002ege.html000066400000000000000000000062011515050116100310730ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.1)

    8.2.9.27 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002egmtime.html000066400000000000000000000061151515050116100317660ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.1)

    8.2.9.19 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002egt.html000066400000000000000000000061741515050116100311230ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.1)

    8.2.9.28 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002ehms.html000066400000000000000000000060731515050116100312760ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.1)

    8.2.9.9 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063251515050116100324740ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.1)

    8.2.9.32 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eisnan.html000066400000000000000000000057501515050116100316200ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.1)

    8.2.9.22 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eisnat.html000066400000000000000000000056201515050116100316220ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.1)

    8.2.9.21 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002ele.html000066400000000000000000000061751515050116100311120ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.1)

    8.2.9.24 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002elinspace.html000066400000000000000000000070151515050116100323020ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.1)

    8.2.9.33 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002elocaltime.html000066400000000000000000000066771515050116100324720ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.1)

    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002elt.html000066400000000000000000000061751515050116100311310ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.1)

    8.2.9.23 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eminus.html000066400000000000000000000067751515050116100316530ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.1)

    8.2.9.30 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002ene.html000066400000000000000000000061621515050116100311100ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.1)

    8.2.9.25 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060351515050116100324270ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.1)

    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000062361515050116100331570ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.1)

    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eplus.html000066400000000000000000000065351515050116100314750ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.1)

    8.2.9.29 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.

    datetime_002eposix2datenum.html000066400000000000000000000061721515050116100332320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html datetime.posix2datenum (Tablicious v0.4.1)

    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062121515050116100325230ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.1)

    8.2.9.17 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000064421515050116100325240ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.1)

    8.2.9.7 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061051515050116100324640ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.1)

    8.2.9.11 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eweek.html000066400000000000000000000055501515050116100314410ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.1)

    8.2.9.12 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eymd.html000066400000000000000000000061011515050116100312700ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.1)

    8.2.9.8 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/datetime_002eymdhms.html000066400000000000000000000063041515050116100320050ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.1)

    8.2.9.10 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/days.html000066400000000000000000000062101515050116100271750ustar00rootroot00000000000000 days (Tablicious v0.4.1)

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/discretize.html000066400000000000000000000121151515050116100304030ustar00rootroot00000000000000 discretize (Tablicious v0.4.1)

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/dispstrs.html000066400000000000000000000065521515050116100301210ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.1)

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration-Class.html000066400000000000000000000057511515050116100311360ustar00rootroot00000000000000 duration Class (Tablicious v0.4.1)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration.html000066400000000000000000000122201515050116100300600ustar00rootroot00000000000000 duration (Tablicious v0.4.1)

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002echar.html000066400000000000000000000061141515050116100314510ustar00rootroot00000000000000 duration.char (Tablicious v0.4.1)

    8.2.13.8 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002edispstrs.html000066400000000000000000000057231515050116100324140ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.1)

    8.2.13.7 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002ehours.html000066400000000000000000000057401515050116100317000ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.1)

    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002elinspace.html000066400000000000000000000064401515050116100323340ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.1)

    8.2.13.9 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002emilliseconds.html000066400000000000000000000060421515050116100332210ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.1)

    8.2.13.6 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002eminutes.html000066400000000000000000000057661515050116100322340ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.1)

    8.2.13.4 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002eofDays.html000066400000000000000000000057211515050116100317640ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.1)

    8.2.13.1 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002eseconds.html000066400000000000000000000057731515050116100322040ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.1)

    8.2.13.5 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/duration_002eyears.html000066400000000000000000000057371515050116100316710ustar00rootroot00000000000000 duration.years (Tablicious v0.4.1)

    8.2.13.2 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/eqn.html000066400000000000000000000074221515050116100270260ustar00rootroot00000000000000 eqn (Tablicious v0.4.1)

    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/head.html000066400000000000000000000074401515050116100271440ustar00rootroot00000000000000 head (Tablicious v0.4.1) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/hours.html000066400000000000000000000062531515050116100274040ustar00rootroot00000000000000 hours (Tablicious v0.4.1)

    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/index.html000066400000000000000000001316611515050116100273550ustar00rootroot00000000000000 Top (Tablicious v0.4.1)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.1.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/iscalendarduration.html000066400000000000000000000062131515050116100321130ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.1)

    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/iscategorical.html000066400000000000000000000061671515050116100310610ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.1)

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/isdatetime.html000066400000000000000000000060771515050116100304000ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.1)

    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/isduration.html000066400000000000000000000060431515050116100304220ustar00rootroot00000000000000 isduration (Tablicious v0.4.1)

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/isfile.html000066400000000000000000000044441515050116100275170ustar00rootroot00000000000000 isfile (Tablicious v0.4.1)

    8.2.21 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/isfolder.html000066400000000000000000000044341515050116100300520ustar00rootroot00000000000000 isfolder (Tablicious v0.4.1)

    8.2.22 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/isnanny.html000066400000000000000000000073751515050116100277310ustar00rootroot00000000000000 isnanny (Tablicious v0.4.1)

    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/istable.html000066400000000000000000000064501515050116100276660ustar00rootroot00000000000000 istable (Tablicious v0.4.1)

    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/istabular.html000066400000000000000000000061701515050116100302300ustar00rootroot00000000000000 istabular (Tablicious v0.4.1)

    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/istimetable.html000066400000000000000000000065441515050116100305510ustar00rootroot00000000000000 istimetable (Tablicious v0.4.1)

    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate.html000066400000000000000000000122021515050116100301630ustar00rootroot00000000000000 localdate (Tablicious v0.4.1)

    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002eNaT.html000066400000000000000000000100531515050116100313160ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.1)

    8.2.27.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002edatenum.html000066400000000000000000000057311515050116100323000ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.1)

    8.2.27.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002edatestr.html000066400000000000000000000065741515050116100323170ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.1)

    8.2.27.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002edatestrs.html000066400000000000000000000066721515050116100325010ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.1)

    8.2.27.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002edatestruct.html000066400000000000000000000071011515050116100330160ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.1)

    8.2.27.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002edispstrs.html000066400000000000000000000057211515050116100325150ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.1)

    8.2.27.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002eisnan.html000066400000000000000000000055461515050116100317570ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.1)

    8.2.27.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002eisnat.html000066400000000000000000000056371515050116100317660ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.1)

    8.2.27.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002elocaldate.html000066400000000000000000000105661515050116100325750ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.1)

    8.2.27.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002eposixtime.html000066400000000000000000000063501515050116100326620ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.1)

    8.2.27.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/localdate_002eymd.html000066400000000000000000000057461515050116100314420ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.1)

    8.2.27.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/milliseconds.html000066400000000000000000000063561515050116100307350ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.1)

    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/minutes.html000066400000000000000000000055671515050116100277370ustar00rootroot00000000000000 minutes (Tablicious v0.4.1)

    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/missing.html000066400000000000000000000074771515050116100277260ustar00rootroot00000000000000 missing (Tablicious v0.4.1)

    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/missing_002edispstrs.html000066400000000000000000000061321515050116100322330ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.1)

    8.2.30.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/missing_002eismissing.html000066400000000000000000000060271515050116100323700ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.1)

    8.2.30.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/missing_002eisnan.html000066400000000000000000000057601515050116100314760ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.1)

    8.2.30.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/missing_002eisnanny.html000066400000000000000000000055301515050116100320400ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.1)

    8.2.30.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/missing_002emissing.html000066400000000000000000000054321515050116100320330ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.1)

    8.2.30.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeA.html000066400000000000000000000044621515050116100276040ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.1)

    8.2.31 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeCellstr.html000066400000000000000000000045261515050116100310350ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.1)

    8.2.32 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeCharvec.html000066400000000000000000000045521515050116100307770ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.1)

    8.2.33 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeFinite.html000066400000000000000000000045501515050116100306400ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.1)

    8.2.34 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeInteger.html000066400000000000000000000045461515050116100310240ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.1)

    8.2.35 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeMember.html000066400000000000000000000045541515050116100306350ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.1)

    8.2.36 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeNonempty.html000066400000000000000000000045601515050116100312340ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.1)

    8.2.37 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeNumeric.html000066400000000000000000000045461515050116100310310ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.1)

    8.2.38 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeReal.html000066400000000000000000000045401515050116100303040ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.1)

    8.2.39 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeSameSize.html000066400000000000000000000045441515050116100311450ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.1)

    8.2.40 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeScalar.html000066400000000000000000000046041515050116100306270ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.1)

    8.2.41 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeScalarLogical.html000066400000000000000000000046121515050116100321210ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.1)

    8.2.42 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/mustBeVector.html000066400000000000000000000045301515050116100306620ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.1)

    8.2.43 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/pp.html000066400000000000000000000077051515050116100266660ustar00rootroot00000000000000 pp (Tablicious v0.4.1)

    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/scalarexpand.html000066400000000000000000000072301515050116100307050ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.1)

    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/seconds.html000066400000000000000000000062751515050116100277060ustar00rootroot00000000000000 seconds (Tablicious v0.4.1)

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/size2str.html000066400000000000000000000064731515050116100300350ustar00rootroot00000000000000 size2str (Tablicious v0.4.1)

    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/splitapply.html000066400000000000000000000113441515050116100304420ustar00rootroot00000000000000 splitapply (Tablicious v0.4.1)

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string.html000066400000000000000000000160431515050116100275500ustar00rootroot00000000000000 string (Tablicious v0.4.1)

    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002ecell.html000066400000000000000000000061311515050116100311330ustar00rootroot00000000000000 string.cell (Tablicious v0.4.1)

    8.2.52.9 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002ecellstr.html000066400000000000000000000057471515050116100317000ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.1)

    8.2.52.8 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002echar.html000066400000000000000000000061771515050116100311430ustar00rootroot00000000000000 string.char (Tablicious v0.4.1)

    8.2.52.10 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002ecmp.html000066400000000000000000000075111515050116100307760ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.1)

    8.2.52.25 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002edecode.html000066400000000000000000000057231515050116100314450ustar00rootroot00000000000000 string.decode (Tablicious v0.4.1)

    8.2.52.26 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002edispstrs.html000066400000000000000000000064641515050116100321000ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.1)

    8.2.52.5 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eempty.html000066400000000000000000000056601515050116100313600ustar00rootroot00000000000000 string.empty (Tablicious v0.4.1)

    8.2.52.1 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eencode.html000066400000000000000000000063511515050116100314550ustar00rootroot00000000000000 string.encode (Tablicious v0.4.1)

    8.2.52.11 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eerase.html000066400000000000000000000057551515050116100313260ustar00rootroot00000000000000 string.erase (Tablicious v0.4.1)

    8.2.52.20 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eismissing.html000066400000000000000000000061411515050116100322220ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.1)

    8.2.52.6 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eisnanny.html000066400000000000000000000057471515050116100317070ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.1)

    8.2.52.7 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eisstring.html000066400000000000000000000057061515050116100320650ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.1)

    8.2.52.4 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002elower.html000066400000000000000000000061431515050116100313470ustar00rootroot00000000000000 string.lower (Tablicious v0.4.1)

    8.2.52.18 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002emissing.html000066400000000000000000000061211515050116100316640ustar00rootroot00000000000000 string.missing (Tablicious v0.4.1)

    8.2.52.2 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eplus.html000066400000000000000000000062131515050116100312000ustar00rootroot00000000000000 string.plus (Tablicious v0.4.1)

    8.2.52.17 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eregexprep.html000066400000000000000000000067551515050116100322310ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.1)

    8.2.52.23 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002ereverse.html000066400000000000000000000061451515050116100316740ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.1)

    8.2.52.15 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    string_002ereverse_005fbytes.html000066400000000000000000000067111515050116100334150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html string.reverse_bytes (Tablicious v0.4.1)

    8.2.52.14 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002estrcat.html000066400000000000000000000061631515050116100315210ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.1)

    8.2.52.16 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002estrcmp.html000066400000000000000000000065151515050116100315320ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.1)

    8.2.52.24 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002estrfind.html000066400000000000000000000067501515050116100316740ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.1)

    8.2.52.22 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002estring.html000066400000000000000000000070541515050116100315270ustar00rootroot00000000000000 string.string (Tablicious v0.4.1)

    8.2.52.3 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002estrlength.html000066400000000000000000000072471515050116100322370ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.1)

    8.2.52.13 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    string_002estrlength_005fbytes.html000066400000000000000000000066401515050116100337550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html string.strlength_bytes (Tablicious v0.4.1)

    8.2.52.12 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002estrrep.html000066400000000000000000000071411515050116100315350ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.1)

    8.2.52.21 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/string_002eupper.html000066400000000000000000000061471515050116100313560ustar00rootroot00000000000000 string.upper (Tablicious v0.4.1)

    8.2.52.19 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/struct2table.html000066400000000000000000000067201515050116100306610ustar00rootroot00000000000000 struct2table (Tablicious v0.4.1)

    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table.html000066400000000000000000000225461515050116100273360ustar00rootroot00000000000000 table (Tablicious v0.4.1)

    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/tableOuterFillValue.html000066400000000000000000000045161515050116100321560ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.1)

    8.2.55 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eaddvars.html000066400000000000000000000101421515050116100314160ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.1)

    8.2.54.29 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eantijoin.html000066400000000000000000000070201515050116100316060ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.1)

    8.2.54.40 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002ecartesian.html000066400000000000000000000076241515050116100317560ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.1)

    8.2.54.41 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002econvertvars.html000066400000000000000000000072731515050116100323610ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.1)

    8.2.54.30 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eend.html000066400000000000000000000054511515050116100305470ustar00rootroot00000000000000 table.end (Tablicious v0.4.1)

    8.2.54.10 table.end

    Method: out = end (obj, k, n)

    Last index for given dimension of a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002efindgroups.html000066400000000000000000000063451515050116100321640ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.1)

    8.2.54.53 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002egetvar.html000066400000000000000000000062321515050116100312670ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.1)

    8.2.54.26 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002egetvars.html000066400000000000000000000061311515050116100314500ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.1)

    8.2.54.27 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002egroupby.html000066400000000000000000000075051515050116100314720ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.1)

    8.2.54.42 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eheight.html000066400000000000000000000057151515050116100312540ustar00rootroot00000000000000 table.height (Tablicious v0.4.1)

    8.2.54.13 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002ehorzcat.html000066400000000000000000000062551515050116100314560ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.1)

    8.2.54.18 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002einnerjoin.html000066400000000000000000000072521515050116100317750ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.1)

    8.2.54.35 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eintersect.html000066400000000000000000000064361515050116100320050ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.1)

    8.2.54.46 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eisempty.html000066400000000000000000000056211515050116100314720ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.1)

    8.2.54.16 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eismember.html000066400000000000000000000060771515050116100316110ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.1)

    8.2.54.49 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eismissing.html000066400000000000000000000072161515050116100320070ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.1)

    8.2.54.50 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eistable.html000066400000000000000000000054261515050116100314260ustar00rootroot00000000000000 table.istable (Tablicious v0.4.1)

    8.2.54.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002ejoin.html000066400000000000000000000074061515050116100307420ustar00rootroot00000000000000 table.join (Tablicious v0.4.1)

    8.2.54.34 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002emergevars.html000066400000000000000000000073071515050116100317760ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.1)

    8.2.54.31 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002emovevars.html000066400000000000000000000070201515050116100316350ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.1)

    8.2.54.25 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002endims.html000066400000000000000000000055621515050116100311160ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.1)

    8.2.54.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002enumel.html000066400000000000000000000060321515050116100311150ustar00rootroot00000000000000 table.numel (Tablicious v0.4.1)

    8.2.54.15 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060231515050116100326700ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.1)

    8.2.54.38 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eouterjoin.html000066400000000000000000000075161515050116100320230ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.1)

    8.2.54.37 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eprettyprint.html000066400000000000000000000060061515050116100324020ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.1)

    8.2.54.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erealjoin.html000066400000000000000000000077441515050116100316130ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.1)

    8.2.54.36 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eremovevars.html000066400000000000000000000060761515050116100321760ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.1)

    8.2.54.24 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erenamevars.html000066400000000000000000000064151515050116100321450ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.1)

    8.2.54.55 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erepelem.html000066400000000000000000000066611515050116100314360ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.1)

    8.2.54.20 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erepmat.html000066400000000000000000000064501515050116100312710ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.1)

    8.2.54.19 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erestrict.html000066400000000000000000000105741515050116100316420ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.1)

    8.2.54.54 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erowfun.html000066400000000000000000000156341515050116100313250ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.1)

    8.2.54.52 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002erows2vars.html000066400000000000000000000106571515050116100317550ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.1)

    8.2.54.44 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esemijoin.html000066400000000000000000000072161515050116100316170ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.1)

    8.2.54.39 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    table_002esetDimensionNames.html000066400000000000000000000100151515050116100333370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html table.setDimensionNames (Tablicious v0.4.1)

    8.2.54.22 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esetRowNames.html000066400000000000000000000061421515050116100322460ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.1)

    8.2.54.23 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    table_002esetVariableNames.html000066400000000000000000000076471515050116100331600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html table.setVariableNames (Tablicious v0.4.1)

    8.2.54.21 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esetdiff.html000066400000000000000000000062531515050116100314260ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.1)

    8.2.54.48 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esetvar.html000066400000000000000000000070571515050116100313110ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.1)

    8.2.54.28 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esetxor.html000066400000000000000000000064711515050116100313300ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.1)

    8.2.54.47 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esize.html000066400000000000000000000071601515050116100307520ustar00rootroot00000000000000 table.size (Tablicious v0.4.1)

    8.2.54.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esplitapply.html000066400000000000000000000070771515050116100322100ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.1)

    8.2.54.43 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esplitvars.html000066400000000000000000000075171515050116100320350ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.1)

    8.2.54.32 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esqueeze.html000066400000000000000000000056741515050116100314710ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.1)

    8.2.54.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002estack.html000066400000000000000000000072121515050116100311030ustar00rootroot00000000000000 table.stack (Tablicious v0.4.1)

    8.2.54.33 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002esummary.html000066400000000000000000000055571515050116100315050ustar00rootroot00000000000000 table.summary (Tablicious v0.4.1)

    8.2.54.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002etable.html000066400000000000000000000122231515050116100310630ustar00rootroot00000000000000 table.table (Tablicious v0.4.1)

    8.2.54.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002etable2array.html000066400000000000000000000055761515050116100322210ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.1)

    8.2.54.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002etable2cell.html000066400000000000000000000062151515050116100320110ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.1)

    8.2.54.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002etable2struct.html000066400000000000000000000071731515050116100324220ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.1)

    8.2.54.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002eunion.html000066400000000000000000000063751515050116100311370ustar00rootroot00000000000000 table.union (Tablicious v0.4.1)

    8.2.54.45 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002evarfun.html000066400000000000000000000102661515050116100313020ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.1)

    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002evarnames.html000066400000000000000000000064411515050116100316150ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.1)

    8.2.54.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002evertcat.html000066400000000000000000000063771515050116100314610ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.1)

    8.2.54.17 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/table_002ewidth.html000066400000000000000000000055671515050116100311300ustar00rootroot00000000000000 table.width (Tablicious v0.4.1)

    8.2.54.14 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/tail.html000066400000000000000000000076111515050116100271740ustar00rootroot00000000000000 tail (Tablicious v0.4.1)

    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/tblish_002edataset.html000066400000000000000000000243741515050116100316310ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.1)

    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    tblish_002edataset_002eAirPassengers.html000066400000000000000000000075561515050116100347720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.AirPassengers (Tablicious v0.4.1)

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    tblish_002edataset_002eBJsales.html000066400000000000000000000110401515050116100335260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.BJsales (Tablicious v0.4.1)

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eBOD.html000066400000000000000000000102621515050116100326140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.BOD (Tablicious v0.4.1)

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eChickWeight.html000066400000000000000000000113051515050116100344000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.ChickWeight (Tablicious v0.4.1)

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    tblish_002edataset_002eDNase.html000066400000000000000000000111721515050116100332030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.DNase (Tablicious v0.4.1)

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111331515050116100351120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.EuStockMarkets (Tablicious v0.4.1)

    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114171515050116100346160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Formaldehyde (Tablicious v0.4.1)

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151041515050116100345350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.HairEyeColor (Tablicious v0.4.1)

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eHarman23cor.html000066400000000000000000000102721515050116100342700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Harman23cor (Tablicious v0.4.1)

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eHarman74cor.html000066400000000000000000000103471515050116100343010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Harman74cor (Tablicious v0.4.1)

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eIndometh.html000066400000000000000000000110051515050116100337530ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Indometh (Tablicious v0.4.1)

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    tblish_002edataset_002eInsectSprays.html000066400000000000000000000104441515050116100346410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.InsectSprays (Tablicious v0.4.1)

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000102561515050116100351700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.JohnsonJohnson (Tablicious v0.4.1)

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    tblish_002edataset_002eLakeHuron.html000066400000000000000000000104741515050116100341050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.LakeHuron (Tablicious v0.4.1)

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126261515050116100354100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.LifeCycleSavings (Tablicious v0.4.1)

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    tblish_002edataset_002eLoblolly.html000066400000000000000000000111021515050116100337720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Loblolly (Tablicious v0.4.1)

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    tblish_002edataset_002eNile.html000066400000000000000000000112151515050116100330760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Nile (Tablicious v0.4.1)

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    tblish_002edataset_002eOrange.html000066400000000000000000000115221515050116100334230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Orange (Tablicious v0.4.1)

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    tblish_002edataset_002eOrchardSprays.html000066400000000000000000000124741515050116100350030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.OrchardSprays (Tablicious v0.4.1)

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    
    tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102161515050116100344600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.PlantGrowth (Tablicious v0.4.1)

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    tblish_002edataset_002ePuromycin.html000066400000000000000000000124711515050116100342010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Puromycin (Tablicious v0.4.1)

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    tblish_002edataset_002eTheoph.html000066400000000000000000000142601515050116100334410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Theoph (Tablicious v0.4.1)

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    tblish_002edataset_002eTitanic.html000066400000000000000000000146031515050116100336060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.Titanic (Tablicious v0.4.1)

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    tblish_002edataset_002eToothGrowth.html000066400000000000000000000115311515050116100345000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.ToothGrowth (Tablicious v0.4.1)

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000140771515050116100346630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.UCBAdmissions (Tablicious v0.4.1)

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000147431515050116100350440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.UKDriverDeaths (Tablicious v0.4.1)

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000110761515050116100345120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.UKLungDeaths (Tablicious v0.4.1)

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    tblish_002edataset_002eUKgas.html000066400000000000000000000103671515050116100332300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.UKgas (Tablicious v0.4.1)

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000100531515050116100342750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.USAccDeaths (Tablicious v0.4.1)

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    tblish_002edataset_002eUSArrests.html000066400000000000000000000137551515050116100341150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.USArrests (Tablicious v0.4.1)

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116231515050116100350500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.USJudgeRatings (Tablicious v0.4.1)

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111061515050116100364560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.USPersonalExpenditure (Tablicious v0.4.1)

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    tblish_002edataset_002eVADeaths.html000066400000000000000000000113251515050116100336500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.VADeaths (Tablicious v0.4.1)

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002eWWWusage.html000066400000000000000000000103531515050116100337220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.WWWusage (Tablicious v0.4.1)

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eWorldPhones.html000066400000000000000000000105141515050116100344540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.WorldPhones (Tablicious v0.4.1)

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    tblish_002edataset_002eairmiles.html000066400000000000000000000072301515050116100340160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.airmiles (Tablicious v0.4.1)

    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    tblish_002edataset_002eairquality.html000066400000000000000000000125521515050116100344000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.airquality (Tablicious v0.4.1)

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    tblish_002edataset_002eanscombe.html000066400000000000000000000121451515050116100340010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.anscombe (Tablicious v0.4.1)

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    tblish_002edataset_002eattenu.html000066400000000000000000000114501515050116100335100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.attenu (Tablicious v0.4.1)

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    tblish_002edataset_002eattitude.html000066400000000000000000000111021515050116100340250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.attitude (Tablicious v0.4.1)

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    tblish_002edataset_002eaustres.html000066400000000000000000000102211515050116100336710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.austres (Tablicious v0.4.1)

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    tblish_002edataset_002ebeavers.html000066400000000000000000000106431515050116100336420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.beavers (Tablicious v0.4.1)

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    tblish_002edataset_002ecars.html000066400000000000000000000116711515050116100331450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.cars (Tablicious v0.4.1)

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    tblish_002edataset_002echickwts.html000066400000000000000000000114221515050116100340260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.chickwts (Tablicious v0.4.1)

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    tblish_002edataset_002eco2.html000066400000000000000000000116651515050116100327030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.co2 (Tablicious v0.4.1)

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    tblish_002edataset_002ecrimtab.html000066400000000000000000000164001515050116100336310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.crimtab (Tablicious v0.4.1)

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    tblish_002edataset_002ecupcake.html000066400000000000000000000104731515050116100336270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.cupcake (Tablicious v0.4.1)

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    tblish_002edataset_002ediscoveries.html000066400000000000000000000106211515050116100345260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.discoveries (Tablicious v0.4.1)

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    tblish_002edataset_002eesoph.html000066400000000000000000000106631515050116100333330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.esoph (Tablicious v0.4.1)

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    tblish_002edataset_002eeuro.html000066400000000000000000000116561515050116100331720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.euro (Tablicious v0.4.1)

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    tblish_002edataset_002eeurodist.html000066400000000000000000000101131515050116100340410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.eurodist (Tablicious v0.4.1)

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    tblish_002edataset_002efaithful.html000066400000000000000000000121121515050116100340060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.faithful (Tablicious v0.4.1)

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002efreeny.html000066400000000000000000000121051515050116100334760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.freeny (Tablicious v0.4.1)

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    tblish_002edataset_002einfert.html000066400000000000000000000116021515050116100334760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.infert (Tablicious v0.4.1)

    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    tblish_002edataset_002eiris.html000066400000000000000000000121551515050116100331610ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.iris (Tablicious v0.4.1)

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eislands.html000066400000000000000000000104001515050116100336370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.islands (Tablicious v0.4.1)

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/tblish_002edataset_002elh.html000066400000000000000000000101731515050116100326730ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.1)

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    tblish_002edataset_002elongley.html000066400000000000000000000115411515050116100336620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.longley (Tablicious v0.4.1)

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    tblish_002edataset_002elynx.html000066400000000000000000000113351515050116100332040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.lynx (Tablicious v0.4.1)

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    tblish_002edataset_002emorley.html000066400000000000000000000121341515050116100335170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.morley (Tablicious v0.4.1)

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002emtcars.html000066400000000000000000000124261515050116100335050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.mtcars (Tablicious v0.4.1)

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    tblish_002edataset_002enhtemp.html000066400000000000000000000104771515050116100335130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.nhtemp (Tablicious v0.4.1)

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    tblish_002edataset_002enottem.html000066400000000000000000000101411515050116100335120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.nottem (Tablicious v0.4.1)

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002enpk.html000066400000000000000000000113041515050116100327760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.npk (Tablicious v0.4.1)

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000103631515050116100360770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.occupationalStatus (Tablicious v0.4.1)

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eprecip.html000066400000000000000000000103651515050116100334760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.precip (Tablicious v0.4.1)

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    tblish_002edataset_002epresidents.html000066400000000000000000000111711515050116100343700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.presidents (Tablicious v0.4.1)

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    tblish_002edataset_002epressure.html000066400000000000000000000112301515050116100340540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.pressure (Tablicious v0.4.1)

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    tblish_002edataset_002equakes.html000066400000000000000000000120511515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.quakes (Tablicious v0.4.1)

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002erandu.html000066400000000000000000000111311515050116100333150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.randu (Tablicious v0.4.1)

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    tblish_002edataset_002erivers.html000066400000000000000000000102631515050116100335230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.rivers (Tablicious v0.4.1)

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    tblish_002edataset_002erock.html000066400000000000000000000110441515050116100331450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.rock (Tablicious v0.4.1)

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    tblish_002edataset_002esleep.html000066400000000000000000000113051515050116100333170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.sleep (Tablicious v0.4.1)

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002estackloss.html000066400000000000000000000141741515050116100342240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.stackloss (Tablicious v0.4.1)

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    tblish_002edataset_002estate.html000066400000000000000000000130011515050116100333220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.state (Tablicious v0.4.1)

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000104521515050116100355240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.sunspot_month (Tablicious v0.4.1)

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102121515050116100353310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.sunspot_year (Tablicious v0.4.1)

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    tblish_002edataset_002esunspots.html000066400000000000000000000105111515050116100341030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.sunspots (Tablicious v0.4.1)

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    tblish_002edataset_002eswiss.html000066400000000000000000000140711515050116100333620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.swiss (Tablicious v0.4.1)

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    tblish_002edataset_002etreering.html000066400000000000000000000111731515050116100340310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.treering (Tablicious v0.4.1)

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    tblish_002edataset_002etrees.html000066400000000000000000000113431515050116100333330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.trees (Tablicious v0.4.1)

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    tblish_002edataset_002euspop.html000066400000000000000000000102441515050116100333560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.uspop (Tablicious v0.4.1)

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    tblish_002edataset_002evolcano.html000066400000000000000000000112131515050116100336460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.volcano (Tablicious v0.4.1)

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    tblish_002edataset_002ewarpbreaks.html000066400000000000000000000111751515050116100343550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.warpbreaks (Tablicious v0.4.1)

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    tblish_002edataset_002ewomen.html000066400000000000000000000113451515050116100333400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.women (Tablicious v0.4.1)

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    tblish_002edataset_002ezCO2.html000066400000000000000000000104511515050116100327650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.dataset.zCO2 (Tablicious v0.4.1)

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/tblish_002edatasets.html000066400000000000000000000064301515050116100320050ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.1)

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    tblish_002eevalWithTableVars.html000066400000000000000000000075651515050116100335170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.evalWithTableVars (Tablicious v0.4.1)

    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    tblish_002eexamples_002eSpDb.html000066400000000000000000000077521515050116100332430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.examples.SpDb (Tablicious v0.4.1)

    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    tblish_002eexamples_002ecoplot.html000066400000000000000000000150401515050116100337000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.examples.coplot (Tablicious v0.4.1)

    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000117551515050116100351600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.examples.plot_pairs (Tablicious v0.4.1)

    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/tblish_002esizeof2.html000066400000000000000000000124271515050116100315610ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.1)

    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    tblish_002etable_002egrpstats.html000066400000000000000000000104751515050116100335270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html tblish.table.grpstats (Tablicious v0.4.1)

    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/timezones.html000066400000000000000000000077701515050116100302660ustar00rootroot00000000000000 timezones (Tablicious v0.4.1)

    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/todatetime.html000066400000000000000000000070061515050116100304000ustar00rootroot00000000000000 todatetime (Tablicious v0.4.1)

    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/vartype.html000066400000000000000000000064671515050116100277450ustar00rootroot00000000000000 vartype (Tablicious v0.4.1)

    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/vecfun.html000066400000000000000000000066261515050116100275360ustar00rootroot00000000000000 vecfun (Tablicious v0.4.1)

    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/html/years.html000066400000000000000000000064271515050116100273720ustar00rootroot00000000000000 years (Tablicious v0.4.1)

    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/tablicious.html000066400000000000000000026641271515050116100274520ustar00rootroot00000000000000 Tablicious v0.4.1

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.1.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.1 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.1/tablicious-0.4.1.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.2.2 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.


    8.2.2.3 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.


    8.2.2.4 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.


    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.2.6 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.2.7 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.2.8 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.5.1 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.5.2 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.5.3 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.5.4 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.5.5 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.5.6 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.5.7 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.5.8 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.9 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.10 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.5.11 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.12 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.13 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.5.17 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.5.18 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.5.19 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.5.20 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.9.1 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.9.2 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.9.3 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.9.4 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.9.5 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.9.6 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.9.7 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.9.8 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.9 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.10 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.11 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.9.12 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.9.13 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.9.14 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.9.15 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.9.16 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.9.17 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.9.18 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.


    8.2.9.19 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.9.21 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.9.22 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.9.23 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.24 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.25 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.26 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.27 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.28 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.29 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.


    8.2.9.30 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.9.31 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.9.32 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.9.33 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.9.34 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.13.1 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.13.2 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.4 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.5 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.6 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.7 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.13.8 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.13.9 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isfile

    Not documented


    8.2.22 isfolder

    Not documented


    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.27.1 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.27.2 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.27.3 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.27.4 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.27.5 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.27.6 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.27.7 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.27.8 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.27.9 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.27.10 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.27.11 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.30.1 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.30.2 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.30.3 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.4 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.5 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31 mustBeA

    Not documented


    8.2.32 mustBeCellstr

    Not documented


    8.2.33 mustBeCharvec

    Not documented


    8.2.34 mustBeFinite

    Not documented


    8.2.35 mustBeInteger

    Not documented


    8.2.36 mustBeMember

    Not documented


    8.2.37 mustBeNonempty

    Not documented


    8.2.38 mustBeNumeric

    Not documented


    8.2.39 mustBeReal

    Not documented


    8.2.40 mustBeSameSize

    Not documented


    8.2.41 mustBeScalar

    Not documented


    8.2.42 mustBeScalarLogical

    Not documented


    8.2.43 mustBeVector

    Not documented


    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.52.1 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.52.2 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.52.3 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.52.4 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.52.5 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.52.6 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.52.7 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.52.8 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.52.9 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.52.10 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.52.11 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.52.12 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.52.13 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.52.14 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.52.15 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.52.16 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.52.17 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat


    8.2.52.18 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.52.19 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.52.20 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.52.21 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.52.22 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.52.23 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.52.24 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.52.25 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.52.26 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    8.2.54.1 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.54.2 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.


    8.2.54.3 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.54.4 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.54.5 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.54.6 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.54.7 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.54.8 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.54.9 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.54.10 table.end

    Method: out = end (obj, k, n)

    Last index for given dimension of a table.


    8.2.54.11 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.54.12 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.54.13 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.54.14 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.54.15 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.54.16 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.54.17 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.54.18 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.54.19 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.54.20 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.54.21 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.22 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.23 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.54.24 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.54.25 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.54.26 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.54.27 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.54.28 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.54.29 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.54.30 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.54.31 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.54.32 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.54.33 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.54.34 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.54.35 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.54.36 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.54.37 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.54.38 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.54.39 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.40 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.41 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.42 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.43 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.54.44 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.54.45 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.46 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.47 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.48 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.54.49 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.54.50 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.54.52 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.54.53 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.54.54 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.54.55 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.55 tableOuterFillValue

    Not documented


    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.58.1 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.58.2 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.58.3 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.1/user-guide/tablicious.pdf000066400000000000000000016532171515050116100272540ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 268 /Filter /FlateDecode >> stream xڍAO  0QdM=ۚFm# x{N yм&`=^^^/ΒI5 aRwްKoP9x3d&W!fE#؍n+N s, {+ >o|hao<2oM),qtB&CKE> stream x}TIo0ϯHűrlRNUŭ2ce#cL%|oa KjZTI;lh]SLy}k6wR&,i \ RVEtɟiqAۼLgu@~?DxfvfD%0<2Vk yY႑$/yB ϣ] B8ܗKD R>z)c9y _H?2Cf/H]UX@ozŠP"P  *z ӓqvQJZs}nP†Ua ڜ0 ^aCE~4N{fi46;~ hebA1<]Y{lt>@5gI# @2}C.u'hJ~р?]o":;%(bqqV⢟WU zDB/m];OPwHc e 6#^6{ y.҄bw=<^x-yodyiT-[*ȽoXT:ujMSS3n֤<>ڃwlYe"*0Qgz6nGر# endstream endobj 35 0 obj << /Length 565 /Filter /FlateDecode >> stream xMo@{^<ܠUPjqAL-'r{^۴DFBU"ήg>`9]\ΌIY=mY_Ϡ0{dRS YqXnhv*sR_btr--20AvK:qo&0*ԩ$x0 ^ ՐfAY/EG@{ &#8LM \S˫jtJ-&uv"8>0҆+Ҹi^>)և=ڃZsWU;&;>T`G?%Fhɏ=9=&+:hNWMޫ.-G'n{|o|*;s%NNuV%8Jq$lPoaTŹUAd-O endstream endobj 124 0 obj << /Length 1476 /Filter /FlateDecode >> stream x[nF+;.u E E Z]z];m9dΙssg'mo!8ܸJc{BNzѤg:=Ө^Iq~G{ZC{ҷV  '׳t0F7|ixY ~)}AVd>-i!O*>n~9Aq0Dm‹nuŧ~.%3 aBOo(i4* xsm`*O<V'@ e +(E@#x.i~z+Z*'~N|G Ec# ➦ hc+*w»*6-EՐvWK_7B  B=4DŠAbp(|-?"1ɱ%ڦIgl;0$dŏI^a7rZ#dǴƘ1Gnp3WXެH^{Մ`=Ne%F|V1p tHڢ i : \Vit敲pۿ]S0ΦC4іNuN20%E%%#U 6ED\QJw9%d0Y[);^.\uź:rF7%@4`M(ϊ =&t$}%vC5[! Iy-Ltfmt,p'k]K8I}AS O'N6>Lp*2\V̩P}-z\ r2__7zV>~+VZiw uR m4߆{]hc:N/F]M&jd˲ȺfxL7]5'UXT-q%$t~UzQ+fUn@JzRL-ZSEV-}zq7i.i, 2𧏆D}lDߘcʒ>׾<{ܓՃ+?"T61pS94%b] nñ߂|_, 0Yi.ϻ$fO!- Z.)$, endstream endobj 228 0 obj << /Length 1354 /Filter /FlateDecode >> stream xKsFfgz96*nID`/m@JV$V*AF*{,sb 6=?_c܉ƙ߯}2`XjY~ $: ~OOw?KI,)2M %VM(p2OҸ(wdDr}w+x5~n@4L+Ni&V&mhxpٲ&\%bl#uW})p&IO)'x 0^iRIv܈`r]drw-vƘNڹ.pڔⷵRT646 h UxfPVV *+]8âK8y]h;|IXzE,а$an_]oA€ xcrj)1x8GX[ʢAB(1oFjm%@#ԕϯ>7WNܨoqM ˣ$7D9?-&xFh@: 0c'p7Lۭc5y?//ۇ ny6^]\Sb%/=4JمCaȬ 9"s,^<]W-cPCuISqYϦ",S̻8ڟ_tb9q~΄ RnYWG3^ / JBxq*K&; _"Os)TQ($`p:y3όsY9A5,F9 ӶqI$N X!M,e3t㫎h>sH<~!JkWX|"tQu3 7A4#ajԚem5VPW=Ye^H 8բJ:9yg*<7|.o4㜋}~q̆p2ϷWQ]:oV!䠛˶>? D֔<όцPIB x:xj~ r9>6X="Ƴ 9716c799t@P}c^߮ujf)CQ?mj/#6gD,bb4`qZo(Qг0=; rsC ?i O2:%/oNo٢wjU?6M8\BO u!m{` endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2397 /Filter /FlateDecode >> stream xڵ[Mϯ1pXE?A$aDac7X1DZNtǏb$!F ā\BG E UP*n7#OGȁ;duT) qPHS隆5*d@3nB2|q.x&$ @T:>pCn=CP} JjP[JࢢP) JCk%PZJ aW@e|YUJTM-*Qh*'4 RUh065Ok(Qϣ =A|HHHz cP I};@I7{F@<*蝁*h*t840qE`%KGe`:HGЉt$" I:RIm<+u|C#/6Oчrbcdx'\N/^opN?=??}}ܚ_6ዊ*Nxϡ󶯾ȯ^Wڗ >q>>}ޢ/__»Ś->Z9u;*t~)@9ir=;}T#(" +؊l`CaCaCaCaCɆ %'*gN4ϧ7?=NEGcaU)Ѩqlr2p׳_<R"jQI;T\}1bGȈE68ѩ81a!ajh k9dH+w ZM=6H&Ѷml*cȓ[k,"[6TmT3#"#}/7帑8ѩ80fi䊑4B —Wz##YSF>x`4$01Jls)o#ä.$š7u4f̖d>ex-'81BJ-~i暟qߟ!I4F,KcdHLX2$ CCR J5j(PTCR J3f(P4Ci J3n(PtC J7n(P C2 e0a(P Cѽ%{,^zښD(.LgBiGk4U9}tD,.QOb~.z *_NRn[}Xh$S';A9r6\o)}tGbz ӮȈ//MFq v`IU$X{VN9;z0KL/9񾆼{:TPȘH ֍*tʩp<8v_66n)+dتqPV8&y T:B7iRI߶֌ifn:aC fq} ddǿʦS68ĝkꞐ͓`}m-iݤS5:PwՂu2W3f95n;4b  l[o{%TPlcfāX7hSFC g}HXQ$:ԸoiѢ`9 [`,lո8ƍ|ƮϥCm&cҬFR%;$"iuW8FsjwhFmhhzjzM4:ԸogjGɼWsN~fM]P|,fsjwhDU$6:AitΩq#e [4{T ^ID-؅σ7^_yn#UF5 R(Q5W3f{ sxU:?WM_Ÿl -ͤ\\HG$~6F̳/RKsG%ܓ@nJ w%} rg5ܛ@nN w' ru<7)m >rSܪ@U 7+P[fTsaܱ@nY ,] rnu<.{ r@` 0XvuìM &vnb`71nb`}Wϻ >^=?ծY=t(Fhk[Pؒn ƢɶԽ r*Gw(D0x<5R# endstream endobj 336 0 obj << /Length 1359 /Filter /FlateDecode >> stream xrH~ -͂_$UYN,mUqq@d [U>>g|LLR l ھ-C,hy)/|.U RiOʆ1 \gCґq0$v*/r T?]l\8=CҢo,z `Gr5jkl>~@<~]}oT Q yAˋݟ5r#@+b[S߇QehT# q4n}_`LThZd*q^yd@qupuó!R[mTCNNDx<[OoSYNNyk:GZ\VQY~+y{@Y"qk.ĕ[(@ZܧV&,ei!o׳ H0#&J57r`ۿǒ}t ;h8  (=6u*nIkOET$Oi[GhOe&]E@%HíHGݮd3Z]\Yl=C 4I$}w8?thvĚYrH[-9g.SjKJnMeQE>B֩A}IM0ãљeiP``Z\' "z&q>-|E"!4-NTbY41;˙, .B@8=<m2@ (2Cdugݱ6kf;Ҹ;Z*A-VXJUްmF{x *f )4>׷ YX)'NZ֖$93>OjL9=GST\v1smra΀4nxQ 1g("SD4xn?Dv:W|*U4 endstream endobj 230 0 obj << /Type /ObjStm /N 100 /First 901 /Length 2062 /Filter /FlateDecode >> stream xڵA+xL.b;r!"/#nZο+NML $fMYi:QGJUgkeDLneQyj>8`ýR]= Pw?+kӋx:|o?tǻQmO>>w~Rw59TJxQooeW_#u1u#՟)vY)cxnD[@1qԒs3&Y]>$ЪZj_\7b ͘w06#Uø:f.cxnD+,aUbV1&2^=1oez.cxnDq4Q;T`쭪P.cxnD+0E(|:[.s3&k ưQ"#&J"&s]U,rs#&Կ(;XLad41fL;TƲۑGQV.cxnD{=_YAu EXnDl}<}ixtgzlXb%JRe\܌~WF6LMm?jDtO@bHf Og;bKWŴk6rs3&ˆ/5FeRjss3&w/EVՒs3&+oEy9z.cxnDW*m[VL:왩?߈1<7c[_Z呋1J1rOd2DP (ynF1ٷ09@d܀~_ls]s܈1<7c(}Vd܌~#kmɸ^J\܌~#5i{$3FƶG?qIf ͘we$7ᯌmS1`2h7{q\L81yc LIɌFB9cO1Ms=7b ͘w0ma1}'~W1`8CK^ɌFӏD G\İ܈~bqޢg 1,7bݕкo?frG0t<+7DfUTpt?]!]9?ZӖy.e_Zoί>͔뗯/O2ϻ/P_S|z/˥o~7\P'y8}DyuQ/v>&K:"K:ZiQ~Dq-?#HWvI%$$$$$$$$$fЛ7Co z3f[Bo z+V[BBBBBBBBBB.zZi#J3RtEzzzzzzzzzzz=zEr> stream xKo6:s[w-=l^TGMYH2cSȆ,fpp㉑9dv7>>$ۃO?߈y#:qT:ݭRq'?ɟÿƿ4~x-h Ñ`NU>WzweJ0',yslʫo_62I{^$G%#!P ҏ>A"V apbXxaH`ĵnS]t_Wv,W}ծ~E|(~ࡗ 9RK?tCouʣb(YtZE^+3XU>B :P.тK\鍧?\J^5-|8҇<AC'>GHEBI&I1}ӽ%U; .ӏݪ?˧Ӽ&׼8,K}c414C+Sd~| 2S,<%,|e>x h7VFD*kvW;|..ڵ bUE)p,,^y>BȋPͬWÐf+c]}mlGM0P5%QyȵY1}O}K÷Ic$NC6>(.9͉ńʹJWğ1_PXgts:N]Ɇ5i#SudlAC̅WSK8RriyK.uhgtlo(j)|Z(c1}\̳r@MUݱ,O1IE"j\ϧ,z-9re8ߒ@9׹ݥ.)mǸ.z%<^Q|ކЮ\-zWY)65Lޭt*9j+ָUZv5KurA K KУ7E'pS,*].EˠmjQDP@5IC ~FAҍ`ݝu˚#z.!3/HlGU$ c*Mۚ#I~ b뛆VPHd\aU UeѼ03fAиD]a=0u[0ڣ@i[fE endstream endobj 339 0 obj << /Type /ObjStm /N 100 /First 900 /Length 2057 /Filter /FlateDecode >> stream xڽ_ScRI%C;%Lǰ9!g VnZ-;Uj}D* bZ7/Fi !.EhU+5DM&^|"vj<M=jPO>ݦTO.akm&yHmw wG ѐ62*AHl/ex$.DSo`4;d`0`JvrQ e̞|U a1  ` aP^BXp:YŶ&{-EX*O*p?Y=Jh*;A=j\H.uVʏwr#u8{r=~eLO E~ (uMdՓ#J&;Qlxr4 (iL523G Z MZ"iJZDAz}e* ?PhhZd5O' qϡ_03A3=cIVAu)CDw/^]t_~|O?w=|ޱb.C;>ed}K/^ ]~./7MK|s?gvEzvNF"(oSe" Ci7b ͘w2QP}zK˭X&Lb/>еUl*sT°tLP }/c6˨ɈNF3a ujNQQs3iZZ\܌~'(}^g<׍s3&f@}rs3&(GcfZ0e ͘w2Z*vǵYs3&];nخǾz#j鈉v'!Fnδl\6!FL;|#8!ɌNFbOaZ1ť/ V _w.5܄v'a[L,{Cs3&XW=ٿcxnD+`6vF W͘wqDq3U3o+i7b Og;D9،:1db4cJ.cxnDƾ7nG=-+1<7c໷uD&!-1<7cɈ{}>4\܌~'#8o3e Z$y ˍgw%l{c[Z܆j鄉v'v׍z1:iFֲ?yÑ\܌~'㨅g,*2fL;EKeԣʎ3k~#܌~'#mf.]f.cxnD^76s3&]ysVhXױTƫfL;1vꌾ?gr3NF岏Vc>g1dZlոcxnD{9~6VNFVQ6|%3fL;1vO?fi 2fL;1viub ĕg 1,q)JZG‚Zys!9~G펰E(Gxns#gEz3fЛ7Co z3fiiiiiiiiiiYYYYYYYYYY[Bo z+V[> stream xMs6pЙIK&wp6|adYdXNϫ?|YDsۥv?qϵ|bJȻG$:aOD8 K$؉)AA(XPA >*g&PGqܤWk? 4d涆zq酠)Ґ-_b1Gzu}he?U>$ Q/m2)fggBـæŬ쯫$r5vczg=ZJAY$.<z "|ߞӸIf'sDjb=n^ԊxWZDbS}~;rֆћ(ukf ұÄY&PR9h4@9*X6ul?.>E!֜`vY}%Aix O=6Jz)>!Y N;\hc穸P 1 jS#p 䋻2ɺ1bt1qJ*:K#.dG6Y2I͎$ݦl.2źkt@9S ch.h|ֈ&+9.KE\hVg9tDiE"+:#Q)BIC1zt`D HMy ?^hXo8/yaVU~ SZ'/|L,?oHvY,"唕Rr1 Ekm0܆*t'mnѵe-C} S>ш;|'W/Z endstream endobj 449 0 obj << /Type /ObjStm /N 100 /First 903 /Length 2049 /Filter /FlateDecode >> stream xڵы]_EW3F`I҂6uvz ot瞐MC6#}I#it:J+]g!bV *]ъc2 F/s J)j̧JD ~ vKRo=l41tg/_MpS ӠSy+ܬ6o B+kgQa\U^z~ țxik9t۾Z)S,.Ҝb"ES,-"]N} >o>ᗬWV41I ◤` iQ|4a^y:VtW^e4 ``+!*19zb~IP2&@Cg$ 9pdt0{'TfD`$e2M$k7KVvU7VS1=Z z1C$HbI`SYmྗk`@QAԻLmBھ}AHPAPEAP3z \|XÆ_~c)ULtx ৉i%>I&^8ǻrt~_O~˷ ;TAmAV=K'|Y^(7?/8.З~\0Z)cxnD+.Y[m 3iu!2YaTU[2bxnDqh{Ն3Urs3&j ׁ2Fz.cxnD7PXұ9s3&,G"9+V\܌~|D6EnT;Ge_^Ff]MKNu\īFL;MDjئ`/F.a8:a8 giȦ`krs#&7vīfL;nvz.ޑ˱h.cx:c8FZ 19"z.cxnDQ#LmO>s.cxnDQ0hs.Ε<F6Q~Je ͘w0b^c*+1<7c0EsjO:r#] +,=xtLqc7cQdk'g?s|>wcxnDQ8D%3fL; !7O,N\ċ&L;̎kPG.bxnD e^Kr&] {ɽ5i\S1`4du,\tLqJ}—Ug<s3&]8N8ːK}K'Nr#܌~#N81GRs+s3&8 8Hf ͘w0Nn]8X*rs3& yȭ^"F̳bgt`ſxf]&lgHUmⅣnhst+ߔOtQ~xwi˼R-vO  endstream endobj 663 0 obj << /Length 1421 /Filter /FlateDecode >> stream x\n6+)0)hPlVSItآCEHAsx+C$'RJ+;[,?_u3{qջHc cP"}hW?|f}eC2(IbA!"3J -q$-Yvm_ ޓ=.yɯ5Ag8/Jf[ԹNf@p $<.äoyj'\ftth7CȠI|5yeEm2@d ``yO򀢰3mzUVccBz ݲʄwDA7@̑NQW-4Phu+J!=O*+M *r' Ё$8:{Ylw]| y&L7. LLE#}xȿM|,Wd#{MmKZe,B@XA,8zy6, )"*3a! ܃V1vISVټ $&ݕXd;.m&2H =mbÇi{a!J{ %Gy׋Gbrjou70N'$4ewƝ곑پm ܑOOu;ź`$^r09 GGvׅbW H>92xKOf5\* 1HT TUGd9eLHA@m}x[p7&*6Im"A+D4war&<3e $'~.妼GJjMikl2&_!;f BDV X9شbYfroyQ{Bwo`}U{cV!i7tG8#,9)q/`sBX;'x߯8UtnƋԻoCr6~% g?W+/vқ<\[vC.@Z$ :Hc7s?I* պ$̹@{[=& endstream endobj 557 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2055 /Filter /FlateDecode >> stream xڵA+xL.VH;|I!,/#ƮZο+NM@`O^{|,ݭnm"+}h/N宜x:|i<k_7b ͘w0զ}G:̲貔1P]FlZEZnDq:0c0F~ JhwB+eo{]E ύw0* |ne:u#İ܈~b*tmU{]k2fL N9:XgFvJ{\܌~#cF6g1Rs'Xu|Rۍ/0J(ъpԹSWYx܌~X7l†Z'݈1<1`Y # rDss3&(nfuy$1<7cfa竎1`dHU1`D^A΅٧e ͘w0"v#۞;k.bXn<+!#r֨ϱ//oCxtDq\TG$#FL;P|`W>k䯍buH2cxnDQvS<͙#1<7c>ZjE ˍw 6,=OLLf ͘we$Dn瘝bz܆Fᮮs3F[hDZ>i2cxnD[#tUU1`D^q=FH<7b ͘w0"vfX#~Ad܌~#{  sYF?W"m"F̳.#Z7 ?3 ,'_siug7zptey_m]9ߗV?5+ym_?>||sʔ뗯ݯO3ϻ/PT̶S|zOc&-Q.r&ku*S*~y/gI%g> stream x]SF/^6 M]&,Yr$+2sZ FHû{{. "b h~w`}39obOtͅ`C@` nC$7g77+aiF9jDO#& M*, ExB( %ͅd;1Bc4eȕe?Ia00e@ӤCH+F^(V?JB@.Q }r')7!v|ş׀|2_` qw%FʴSw^,r2>Qe%Mvl\dHMݒ5d)H|y]h(o:0g24gzpb 0f W?gB|1n?5f-Z=AcGy1iLU3-ӼeIV"RPr:,rCǘ,9m4Р! ߳i>+HY!ABS dI۸mNeo@_CF{XuF-㨺^a[ɣ&zp^"WI6<$ [Ll Sᓦ&]G2eem^\[Iu,Dٹ48/ !e9v wfH˰`/)1׮c<*m BWmvuQb3IG76G*irxͰ -?a_]\У,;~r$gHЦUGFi{TLN{exka`a5cQ#z6G%f)5x1:KsG~CƮq?T/pxeyeU l{2N}b؏e{X6%┱>GĒPQ[!"< 1Ua<1@75k8l,.v.j`Rעͮ< V8Fu0 iO_c#щ3UiجfͪoDz~x`((Y(Mh1m?55iaYR28VIq gcdNpnPB KoCEA0 ;"o *JrUSp61f[|·K4_n!Nt3J tTMFt ?3wF\ߚC)ܥ_&kjMEt}%ށFwwji[N l4 endstream endobj 667 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2108 /Filter /FlateDecode >> stream xڽQW1yѨT* nY!㽄%˽6>3˒t$uJK*uJDeMvXwIJԤ8ֺ%{OHT*_(ڀbm84j"!I5( Mԫl`T#URh)4Rej6T©*!IP]k4ա,q1‡<1.JA­UChk~HwfR$eɖBL''$vZp2DU&14VNZZ!4eTM2./ûDZHrQFkR8yCUYa.^}?1? EWL\p q)F$YhbcMPM-ғ٬>u2$lxu ^ pM+am87 Gu.0\AҡlizXFc^|i@R=yT0I|Z h@[ Qߨx?+F7c 9w2\G8!C{8U>I0G9C 4[9Y@Uzu?ǧ׿wO?<<~_1chKV3 mz*]ߥ?fM|sΏXr٫fσ1<'BcNVG.^q߁_#O|G?JFxYqXJ.xHXd`-cxNƅ~;tA;b:#=+&e2$˝H>A-qAhX'A1 [qȍd$3b FDnL2&Jyz|2o|3v$m v}.&]߾~~~I=\˗ۗP)<}}?~wO?oʆQ_lfW;wrlD٢(~=ꏨe7BoY)QR5JRlQje2((((((((((jЫWC^ VC^ =========== = = = = = = = = = z-ZkB^7f1,ƛiezzzzzzzzz}\ s!vhDCBЊK$v;㳓rr;C{Pvc-bxNą~`K!f}w.&Hn{Dq t%OHxDqHdϷ{bts F̠%VݶbyZr.;va]Ϡ7WIeXνs  A^,mםNvy6^ۮ/YP endstream endobj 898 0 obj << /Length 1583 /Filter /FlateDecode >> stream x[MsHWLfzznm6qC*P#V8ίߑ#$rٖABMw3/8X)S .Nxy6˃7/Oj\WF>9=yB@p@ @N^5x4@[#[)b(!0?^0map'|̆Q,|) 2DyAi\qy0|plpYZ&ۓXoWqeŝ0`F+ra_ej'; œ)a CQA|OZO/(D9=eQ0-W";;Gbgq%QSxk+67Sh6""OW+H=}xx ~Ni/IfᾴJ?eɗRg(7-dc+lePhMiivjҿML0Ȓ뤨<J޽}<7BC1+ [S&l}OzP6OD Z G(*$"nHF!x#Zli4yut$_ddʓcKlfdZZ/ͥ-E J>d)JjP`ʈt i>Bߐ=^o[7:v|)T 6/uH~C ,pyGivXhl/M-:abc#oG0zi6ӆ r?E|Cgٍ2viqvVGcsu.+Ƌm(=hգz$J VM Hh:^= }g)[a1l%1OWNC߳pfiBj|6i4{-.8Qu"Cn11,IJk:Ѹg8UwY˵|/ƻPLu ֦ބFIR>SgRqkNi [)*]u҄V\."܅}7B1 Ry#?W<;nzOY(EzKX}1VKoNu Zy} I> SrMzH C{Ūd_JY2O^eh\TP'% {Lg (-8D2^zuhZP&:l;tr fn?@ endstream endobj 789 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2118 /Filter /FlateDecode >> stream xڵQW1yѨT* nY!㽄%˽Ϳ)Mu/ ^4>GF)TDP$ϓԵĹd~ 8Z D>DMq2q"1PKDZPOd C6ASΗA ypԚjQ9~~yTMPO\#1\\ hXrPf˙C-)VV2xijeyziU`#ɒIX- &,I7aQ JTNriWwPv!z3wA7^R7|̻{V׈yMZkZ|(i%P2Ffq|%E+U=2j$p4ydRjEL1ǔ|fU;gs|b:ҺazQ,胋bQQbEs ID4U|W*Cp.xP3+#S3zyr}=뷏Oϗ/?/>)+;]Wd,b>]zɵ06xoOoe7\y6\<~;#|c˘\qߎX{%dCdVZİ vDLV뷙ZKuSNb ɸog,%zK~cxNƅ~cӖ}a*Wf-7YY:BppD\}qbxNą~;#mZwج{I9Xwjt-bXNą~;"ʊ l&Tm>s2.+e1pv[qXhdE$#i$ 6F~DZv[VKlrs7ɸog~t6Y+'13;dgu\sNvc vFa#U\sZ vVs-0m'Q\iSbG[9Xtx3+ wʆӼo6$*QorNX{;r؉NJ7Ip$El{P*orNoCWOn> stream xڵoFSexpC (Z }*q;jñ$ d%jHJX5eTS d۹,8@E+ɕbIfQkDf%Q,L)żqJ9T,T(%' !aтq01 !8WH!oTbmӕGjE3*֝SÚ(go\*ք@ZBx1‚dC hZrBxRLE *bTl U1]$!ځ)Xqn#"Y0=R &IVDM8<3Ka5 c!DDgIQ)Cr.f[wCgIQ"wR:x!IQ)gt3[٩t!IQ)St螒g |3Q!ԛcp}$vZ]%M { ΐx+df˂fQ1;1&d}C{O.i ym=gJ~tDeOңJA M=]臞bCw" x B$ @#dOQ3e4hWRΎv"=rm)8Sb\3E|L96/U_?P=;>^diq< L_8oo/ijs a7wvk+&f>06f85剋g^m60< qq.,Xv~0>%yl\8}fwֽ}vƟa8~ptyn~rw8{o0M2wä\yx a~2y깟Ci|z_tf>yvw/yys]?n?Y{6҈3WsMa\;]TWþ%\ <}x7I̾8?pvI5٥o>l?w^7 endstream endobj 1000 0 obj << /Type /ObjStm /N 100 /First 957 /Length 1040 /Filter /FlateDecode >> stream xڝVMoFWѹ~A nZS.E;$ҡ(zgͼR1F)eZQӪ) &p29 !VQe+"2q`ȋMTh)cĤ\PPV&*kcxq*Xƫ2d3GVΈ*E+&(o9.9'$ܨ`=*fl2s*zپH~)M#s:7HGsI"D % Pd߀F-x+`Kt n99bxr$ܑ8.!Ï迬^bGCzj IܜKH`; #FFgBE2YŜ2AcDg!IVwP|2FsJFAV|1n弬2 \*)QƈNX0srb8u r}Z=Or?ڪ~3YQoFsMQcK1~8l bb[mjjzYN13suRfyo?m[ 6/ͦyx*; CѶő:N7VLAR֛}8қe귾h?|':vC ,bK/n[+T}ќLվ.cp7pgS\~\*9SDzܟvf0(ׇzSTuEwmKob/{9p wc]hMUj@ {zLO.ֆ]'`@3?vEy]l68&w[4[}@Wlg ֤lH.,.0WxVWXfoŻqlN=܃wfcpʂeGbt6[,a ˺+zHf8M_jow>ڭ<Yv\/k]3Q<tV endstream endobj 1193 0 obj << /Type /ObjStm /N 100 /First 959 /Length 960 /Filter /FlateDecode >> stream xڍVr6+p^ @U[{rU%>H͊DzHVtC z/ИWQ6LPcXjn-~N<7=mHeG!Jeiݞ2 /s3Z4. ^V&3'D0ܴ&Iv&,6ox6o[ 3a)> stream xڍUMF W\A| AvwV7dɰ"__Xxs7 9|#M4Mt lJC@&=4Ht8@@6X(6,Q5LZڃ10UFRSv6ā9oDpҘk !igg!H$ K B$Bx iQD8@RfJD#Ur@j84Es!#6"Z@+(l4rjsQj/T.L64gt&!%1Z87C!G39~"?My 0EYKbPtGbئdj ?Vg#1f$2o'SnIyZɬmx+Gvk%5oО@QƳ"5pYQ9s|?jQ s-#ϵsZ3A0S\s!5&p9]65O <|Zwf8Mu(Vxu^/#OVX]d.U~I,| XfWiMi~̟nu Q (e{js{+{Zzg!෕mB+U/.;SӖ?[q4w|-zMF˪*bԇa3d__hb#OVXm[#OR{j~ hRW^;isbF݂Kե>$Xޣ9Rbe]^ws1i?`@Ǧ.Z1a)XٹG(ȫk .?ٔ&,w2z@hBBwYY=ݸ[[}WWmN~~kyh,w%T]~:UÝʗ<}68^_  endstream endobj 1595 0 obj << /Type /ObjStm /N 100 /First 956 /Length 974 /Filter /FlateDecode >> stream xڅTnF+3=O=-[Ik&6RHʎS=,I͚~ՈUiWyA~+rW|_CZ>^YҜO"$Ě%`b7x(r]xVdؐ%ؒY-ddY&0R<9+y :Rݢe%dkیX^86PP1dȃ:%s0=O1*VbnXK2&r-k JRZ2+ r" RuјҦlJ[9(s98l IUQl%/^X-MjIl95Tm m Dd }ȶ,&sQ8 ,&W3FNpu܍)D1;ceAƏQ2e]X6*wu&(NRR%YkV" 06,[N7k(d,"> stream xڍTɎ6WtML2H\&əi7eITQ򢅭>zUU^X2ƍ5[,cJ/g/~dP9J4!d@~dO{†k}0o1|79!YUhެvi `lY_pjb>GvS7:aVX۾HdBy,}=%XSu |EqvE3c^9i+ڡqXj\&C]u= [Nu>=tn`Օݨ4~ێ7_߅~BP?qҜ4Ⴆbk).5_l\ji.U_q.q{G=˿>( h\*, ʭMClU;mK?R5 endstream endobj 1997 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1084 /Filter /FlateDecode >> stream xڍW˒6W_ċ \؎Jh b"OϐW@Af3=(}) !BNѷ6 +RȒ]<>JB(EH-TɆNhMβ$%l(a& S92Ja%xaYz6(5Aڈ:0k'\A̺S\Q(ƊVd NS֠SAsY8G9R0YR-'Pb&yѾTY܎ӰQ0i<6Vaa 9J#GYR9\r8#>tL MYd!W"'f )aA}HUPB{ RCJQU #ҖHdMK(2 RK*0VS$tF\)V% /*KJ ŕ\9͕sB%K:Ci8ÙsްyB(M \llNQOmn3)=˄[ϡsYi< atpM+?'\(ǀ؞3oj` xKҫ1#n]-~yq-9E:vmtŌ~ksf$u~4_ endstream endobj 2353 0 obj << /Length 1393 /Filter /FlateDecode >> stream xڍWݏ4b D|qO R Dyf}n󱊝3qV']o>ĦN6ΪM$;6DF 7?F$NjorQ<_LDo_=3OD'GVF<yGʸ|Z)`nqf5&I,lMAKJf,~3nɂY_Ҋd]Hx8:M,$c}>LVYR۫ή፳!B%dw h:'~$Q%ڵ1̜]L{d#@&_ůbȀB%zsϒ kds cůk.nٵ4MIxPV`[ʐ77N bAe!!{y ʋ"oƕ ,.(N>U^k}p/ .n*/K1hZJ^gdila4 4Z{ˢI"DZQW9ǐ9 :aglV:45v4,. L@06S{?㐝y[!|G+.&>ZhٟQ7Q}hSq3jp`iי^iAZq|1Ĩ\R( 9%(>h7H 6`h@Z m{Tðf6!ۣT9i@ A 8,.^fqw%,v24YZ+)t*.|'E`tl_$Ե\;⼁Y : ('1C#ɡ״!;. _N{O\.x?k^Qu?Xkd ,sHA۝"*gxN=: #&CVkUbj6'W0&FwY&&"t9н8 11 $q0̗ I4hvsNj.%/|:>' zG?^`~wo+!͸N,eΓBW*>J qz/6Jv;uz p5vV  K}@I(Y"%se/ 묄cZh]ATp;?$0K+?Rx  0iGɿzKp;ٯooVӎCކRҲЁ0@eױm%?5* #P endstream endobj 2360 0 obj << /Length 852 /Filter /FlateDecode >> stream xڕUQ8~ϯT 6>U]oBήc!-])PϡXߠs赧vaG-%o7)Օ\oN֎4=t9z8zP$vs O}7&}((+$"W&HqAs.q Z Gwe$DLdɄ>&BIl34;KƅĉS 20Ğ 6;?M.,pFʛ݋>=)41=6!xpງ0,W.N!d]d]x!7A-ތЩܵl!6&+ DFR?ԶD'/7:Oms[JFXDݾP~}ûjf^:p\wCo+@7R^e7'ֽ Yu\պH͙rմyo ^x6j/THЬ endstream endobj 2365 0 obj << /Length 2845 /Filter /FlateDecode >> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2370 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xXMs6WJdum2Nth X'oAّ-ʔӋľ}X/Y4ۼqmtOfi*<'v.9gnlM:{5u"Fj?-tb jnQ.d\3ÅzZi|K۷2?v=arO|]wsr?$ƥD NjO=7=o}Eϟjj܏ endstream endobj 2374 0 obj << /Length 2524 /Filter /FlateDecode >> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2383 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2387 0 obj << /Length 1902 /Filter /FlateDecode >> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.Qڇ6iUj ;3`×Utavfr?EE""߿=_p t+ \Q~q1 ,b] oYdֿxF|re2JWPq4/W&VJK*(1[,A סT*aƼ4 ]Uew˕RI7ƒip,ݎ]e *^|嘕YG%| 軂jZk#J2mA]^CTIFBI*z&Pa܁LSQ}˕ax?xg$yuC!۵M#:+تU"ѩ^v]C(3([)8:t)RM WNxcI ΂?4~\M% #,zā-+!cr+[m_**+v/䜾Re95Э5 h솠KHL-*FE%+I`/!)bx C:UWﺖbNP". `A(b"tdJos[Ue}? %wxVi>B9 - UvtC `GPH nRsb|;%koC)]5: ,=8[^b EKp[;=aS%W`|9s{8vfKT*Y!z= OX3C!t.g7~tFLL!F#k߆Izrݡwsȼ9l̩RЁ6TA]Qr#;@)-0C)rfu݁_ r:kӜ,'BLsQɘmӣlȯǸ$*X*6M>[4_LM\_+GyR7>I+ xl2` =PJO> stream xڭWYo6~ϯJ@Mc߲Mb,}%:FARI_*rA79CE,("Ky}ratD ,b]pJ .uˣ#D:pARP'XЈYuqKڧ.K%;ܔm#Qݢqy0&r'6Umen]<wNA Su!\V˩~+UA:,]X{}kB4"Sc;ȋKƘ3(_0OTA]YzW BtnaIP;iԥvqR('w -Lu%fӸ8rd.4$1V꤬Ux: p<= a%EGksQ< vĽQ3w9ۈĩgvDC]E5Bce3$iVW!C*qeA$"Q Ȝ$a:H,˦he\JTm}O2@6W;lBJ3mgtYcf7d/.=AbU'4^E] )v90z1KO/\qBrʦjUU/1U$B?͵TD5~Ӑ1{ft$6f` <|gN~{.UN3V-q{[4愅|]#ߴֹS?6fHs#esHN? R(:Zʭycc,dHx. 1ugǟqCݳ%$/O6cS~ u54#MI$<2v7L^s14,NGmYUCg9k.K MqoۭNC;p0YM`z%$<}drJ8> _vYXBIq Tx/TP]kFƲaG;~gy)ҷ?b2 Sw*^u3ns~y8o !Dv)8EgMO-3.b0&iBҐ`ʟH)NrMzeiv݆mo67Z.h\^8jʁAV'YB"3l>FfrDtTzW7f 'J; [8 endstream endobj 2416 0 obj << /Length 1042 /Filter /FlateDecode >> stream xڝWMFﯠrY 拏SIY}]eĎ$$T08F!֒joiK8'Hb٧s7{ha8u[)=,ʨ\{Rbn{٧4$rIc9Y3eMR5!8rKP ߫jԾP& 13g p?;׹Vy>q`eb-R+g"“icQ15]7s)׹˛&XbEX oܳyU<Է\a=@J* ғ JfHhsZBK #Rm_v 4%HgxJz}7Tj*:%k|.-]ˇ"nX 9 =0dnٟbRa|Jзo@Dܵ+#a<7%Ӫy[V 9N/D">tAcP܏Յa۵CXE>CX R]JF^x>갮ѳkѨĂUAۛAC۸#T Y A]k>uar2YGע['KA03UOKw&&:ZTւ[wT";%//)TKe8P-N5sEm뮹|;>A/VeLP3\(XlՙtW>Oܪ]RKZmQ)R'!4,޾?ꕙU)YU;L>$^Ue%u[D*4LA1;4m1NҎA}hL|lM}T%?h9q$p{Cm;`ay>@7/400O.sB7pn\O,L; Zs$v>0XeQN#-; pa̘? >M:C' R)c$#%y$IX[ຉ}}-ww,s- endstream endobj 2434 0 obj << /Length 1116 /Filter /FlateDecode >> stream xڭWMo8W"U&`Pned&`K%jHY%'bg޼78,xU_n 0YQ|$"*WǮʕmš8&o~yB~N|ke]I?`M"BX}g90ѥ9i1}N~vZ_NNzhN4:RCda4 f*%U! s6'b#ђ90jɡ`ǝ0g_7Bkk)_5 vŐ+MU%v&9#?I f%vr1F_}0?ms?|U{!6=Q>\9EصgmZyeQnL"ĝrS"BKFwf"$X,L&ksgģŌǕL))yV*W#}a=E'f*|3F ۍ򐆱$)# 4A+js3R(Y`mDPl<5j4ֿĵftl)K1=.Q;v^ }=xΆ~:p> stream xڭWێ6}߯[)RH%ݠEQHa6QY;ɲeFji̙3?8H)s 6:>.͛{$+݈]+0m1ѻ?Jֲ\0JR1"4|v˼ɓLpf eRIJ Nb -i< "S䳔V\xi8 ?|*~;Vmfqg\p!VZ6ԚZ8!gUsÉd*g~ Р ;)j}Ä˨+9V&9ELiSuu(hw'kvRʵ3hֲFg(rEf. IU<;'Vʻyz6B/r5eJ^A@TsE_ {';h d/td<ɘ/ sEBGE†DhN]>o$ lr1ҵQ#mcO@9q:`$3X2FjoUj^y~W˧(ĺ&WNEA).-yntxf.lƝg=ʱot=k~Has0ѽjD7Y@(1n1b0sI#Q4݉VXMtnj4V&,Ed KEkX?fi^,k/?ሢbP7𢆠Rx}eHr;X̠t?].Bmuy쑝Oz$KIXSʑ V|DZg:8S.SyiQ|-fGz7*=_aZ(| u./pOJ3R|w9 '^I_&ӽܭ,'V $#Nյ@6~,d/.DǀzfvJd+uHEC endstream endobj 2474 0 obj << /Length 778 /Filter /FlateDecode >> stream xڝMs0LPЗޒ6ɤm:Kepge ]XhyYI+#N;c8gZ9݄X; |ry+C|qˮ|"}̷>'itӐc¸\u\ܥj X:ac:S0T$Eb&S_-5#/E)WVxƳ~"2 K/r`؎cF+ T==ΥZgJ@H d:"Ph3f2SFu.J,S9:8rlpP, 2X%puL?эhs T &֑L}wT":Z'^ (d)\|ѭnBukN8ۍ\t-Ҟ8(n endstream endobj 2376 0 obj << /Type /ObjStm /N 100 /First 961 /Length 2536 /Filter /FlateDecode >> stream xڽZmo7_YC_A&"^| [,vWI_g(mbbIqĥș>`VT*9V2>2SlY<;$e9*CQ9XKyETlH<TT{@U;<`h0?c+I 봖]XD."U:s΁ae㒈A,JQDxeN+2F($Lf"ry_&-gH,"Ԋ"CvažDwB6KQֲ?Èu1Ye)X aoyW6K4d7xi.)g'ù12y 8sq\ۦl,(U؉LXQPH&PFIя#8`q)UB9)e(g:sLAy2|yOZ` _'BY("c0< =sd*$1IEC3lkEE<4$b%c [b'A I3d$-B| FKY(w6w}E՘p؍~3W-m3k5s Z6廓qL _\Pk8z\Ρ],K*Пha@lC_tz e:W7/z3wh9~aA:] "TD*A;H%oV5V'W|?gc~/֛aC7Rމnaf/B#b~3:xxJ2'hθ_:Ҙ l22e }:~~P(Yz[MBȢl4թh5&=04S:h Kɶ*2wt"5^%d>˪]HFMD/F ;ycUAcՐ\Plv$$V"CiH8C J31t"bv+XiCìN1FQ9S ӧ,۾k imYSjm5yn_(?oD?PGt:Tl#$}d 4W-T2֒zF0meD4UCT$;o/>r~"}{;=RM)pS 8NSTSTh@2T([] x/dRvDZiuUV&H Qygwŀ8U|`uZ09A^Dn^E>"`sh"3A`#;GOzwZGC>d7,xH жJ H7܄TIVNp%`n1랗"p.fw*Y¾kv^)Wكz i2ag[]Mߎa(o>ia2le+0~@&}3T.A\wg2kj Px@-`a X,l@WY\,@W(BʮPv*RaөTHwQJNEZ78QrG!Kn7kL-pnsjsr8ٸV>2*fInJ"Nb&/T}6SWX@oI!'zĚ'&ڇK i-`E{k .xB2ws~OY2aa֎ˍLQ(/B2Uvʍ#Ye'iRʩ >dslEM-$e[J%)[.XV⮣8-c Ԕh eއŧ;c!9q{ꏫ\G d.h ZV _ BʾPbC2s3./ BkKΣ}59qnF=JxW %zH0rqԐ'㿹żݑ^8M.L^lٿ]߱~{.?Yv/ڛ=NME=ڽjbQ endstream endobj 2486 0 obj << /Length 1348 /Filter /FlateDecode >> stream xWMo6WV-`1=7^VK**i㸿C%K6k>XK<{,ǂ$:w'ԍ~|p¼]ɛsFIJSoPmp˚޴HW*|{|275UnVO!S'gqM ǣ$LHkʢϚ|XEi7 ju ozt8U[f_}QW TB b1㒗Ơqv 'cTק8dKr=)ax#D⏲6ȳa{Ltx!L6*to$d$ʷW ^#0`J!Iѧ>ZqE ,\Xb: I'3Uti} \ FkO`3S=K(9?!?S~c38]"&Tb#* I46`ZÎiQEˏRl "ƷP:qfONj`2yøC4sd襘m{ Ѿ"wtKoՍ9,j$)(:Jr+wIWaߙ]/j9AtVs/xp3x?w+yt'r'~9э˽ms-hUp h endstream endobj 2493 0 obj << /Length 1567 /Filter /FlateDecode >> stream xYo6_@{ùCkl(<6mi%AͲ~w˜;+AZ)c&4򮥡KѹevRn?j2O`e»ܑhtM"@""e Q pG;6Iܼl;&~PZӫYx*}  6n  uo|݌adUe͉&?]a9ᷛ wr&RB>|"&>ARfcM&>#ZVX[E[A:Ǒ٦ˑ(O|GԼQ^v=Ft2'+Ű{a:ãfmXF*?D}Y53;ZD!l@.(Z9SxP{9(}>bA{7& ]_}mMc|t|8Xdp,u@vN)\A\N$!̏;g/y.1( O]o<O2stSY00{ҼUQp3 ˅> stream xXK6QbV|Szm h)AkӶ=Jb3)Yڥmp7Y ܘ.`*}+Sw3r|7]ZgkvcbٓZ;8z}0$q!LՙBl ԚqozXA]n*F1}:dm[g6H.:Um`$bRpKR$͑oJAЅm͇[#J7)=;1⌿<%KW ͎T&+I;5:AT%ϪVV!`s+5Im2J|IWMe|I'/I9 R1R?h!_/j[l9p_TWf)/H}NӲr׺.Q #]gnIPwaFIIut"jP`4j >ޛO:]Vf5NQ)Ma&0!>vW:Na2<=pBܕGeZqG@^Zim9W42evvs0uA7~ `.[i9':sP dԃguգ>|r.N:V< sM `ve"> stream xXK60zH)RIMdKMjd#wCђCovӠ@Ryq曏f"iDUlfr?]_}R"₏>䨈j"f !IfOEiz]?maѓ~W$pƼnˏK^48u 9l5G$Oa\תZTxUܡ";wp-1Rc°mm[ܑw˂U9.YP[s<8.'ǭ,$omu\R` ]‰k;[Apt474ʘk&\Ovp4*JSB5u׷êoZRtW;0ᐶ)ׇ?@}zBa/K(ϳ=4;m}vggʣ\__/-Z M?/7~-[Xŝ/JԽ.T9bz0iݹ7Pnyd  Gz]~Ϡ= . <:?9ee{*}{ ^>=6eݎ)S@t \Z<CKHQ0~(h;7!-ėCO),s(O DbhBR̃7ᢞ\> Ӧ`PŶi:^H LMuۨ):ÛOrլ[e 4CUY'ᄮc)#淲\u <|F:ram,AcmoYV[nS3i ~%r]k(@i֣%nvrfHCwرnhCr+.ppƆ4#9~`1燒G`.05`_'@ʺg^|]cccKRl N ڴ$ebbmjhΘ.<1 H+YmԵaPiTQxމz}3o3x9TM`oOpm-NL~3Ӄ2 D˾>Гxuxb7RaRmɘmpHp gTtVT5%~OAbF:EZ/3tD/ endstream endobj 2507 0 obj << /Length 1783 /Filter /FlateDecode >> stream xYmo6_2Pq$ۀ؆ 5ƾAڌARIn_D28xw|Q 8iS+"ս&2?]`Ka2~yՏG8E"8ZNY-ul[ [$Ҹz0/M y+;٬"!9ifK&')3QP(+”/~(Jˮ*_׶UBl XameUrvժ-rFG›3`9Q #c&@kpŹE`07[-p7N 869Ty]W.HS@b4^.o86D3=~pamR}@`]3K(9CJ!*;kĪY?e4-Ċݫh~n]5a x rR"v^٘YJc]@hkV[O)ZK'2&I=W2,HRR%,2C_ 8 LM`)f\2 0(]_ 1/peZ,#Fd~ti6}N'mRǘ@&)OC;hf|; -at(g L}<$lԢ ^?&[\8C)r?d18}mo呵I((j]0 Z&rpxX%,;{XO@4V77w)!}^FqC3&1ŗvRabkS\{bV2c@jq;zV!}<:N*J:[MkW3ȧHcB'.0~~aX)G@EV HdKi \M% i?*uYx l Kq"yr5x]V4JX%O:=y7  ʍ] շv(Mj0ύ^-)ZĮ ɼS:SjР}=Xj{ 53Lj'V]%H"7x0˘,uw 'E49#1xya @q6PhY/amhL5:Bb8mF\}xL} phj@Qfj[)> stream xYmo6_2sH ]݊ VŢcuH$JSȊ EkϽk)</XӨ(&YXG}$W5Ӱc&+:ޘءՆ3M$S JO՘P"fˮ"jp!Kz@PIXLMݙ]g%EdLX:XY؝`܅-"PrP4%B&m̝+Dn{`1ݡmu*r:mFٚJeں2wz>D 3ɣi2Z86lŠ=*aH c$kY0"boZ0#ך6ڸ `()Idv{UcE'*& ~h&'އWC,a1iIf Koh*RIoL=@>5LETyƦSarN} gƴ #2M5Uygʲzuys1iq)TCy: M7PrI {a >\BՀ/R>vyd cbC_KWɺɧKߒCӰ8Hء:Ϲ" /c34ZnD*Jf,-QrhR-jA+7]I)a!63 <9hB'H{ cts9!ğ2L "RTslNr<4A(Yink܇c"H"h,#ƕQ_Bk'@@r+͜CMQ§X!>px 6L}MXS`R;t4諻sBHj˞KB$",O΢(Ib'yUW㑮g};fSSN5Dy KbLDۃYXߺto\A3>UDXI8׍_U7i]U4I=Xr<_d XzHA7Eێ?IjKR“Zر .L1U,@c/)>~Xz~2]ob>;p LteX󮦄)MLH$<"$`1~歗 ػ.ƦnOiWІ0cr!഻΃:}/,#ޘn$oLDaIl#NdT*^1~=T=;%B˯SӥV$]~^N)A a;!dҎ|eoWņ]91SNp|Fe]Pj}M؈8M@jsК'dްҔH=\w( 8Y3StWmc؎'tc;7ѿu endstream endobj 2515 0 obj << /Length 1602 /Filter /FlateDecode >> stream xYM62f-@i)|KrڴT4-;CR$ӱEmD gy\6R: Lf v^xüo7_ԌQҔ͖z*nݷ/Q|! 4Sre 3E#o?<[6W:'%|N'0!w DF yZ|9Y.Q$ Iقk"%s^0U$gT)~u#˔$_SE꓄K UwoCXB>BYHAA>olv /XsdTmܷWnt,T'qYQQ`;r܇t.#&q3HńGNeuh+GMUomF "wAeT俠qoWx(alX4P>\5- 0Y{q(5e4k7pW˦6aLBъ܂;$0cG$wqNq ~#ص8ZwBO-2F_9~1nCjJ-s^0S.◉$4ځ]m5wQܣ#[8YܠUhQȉM6<)Ibu;̞mhL1VRBMtm^nzArJFy]E`iH)ጻ8si-π˼(a7mnv(ZpX9O >^VI.쒖#Sf_ zg,$J2^)%Lcy aH#hAd}fqBtAT$PrэGJ&T} 7J(D7b~.@HZQτ`D 7/')ÈO X`Uw%L5TmFLsetdc_e'QНΠ"$fz u]YE U)UfR I'~W5ot» vvL&i@3Cm#_Y CQUjxCqdǽב"ęqe%WKbCiJ6V_|ǺqZ =J.RGœK9׽=$mx/N$vv3)H0 48Bjrܘqt]ɯ:jRg{TNM?׮.E(4Hr|?ex02긿S+p㔜V?؟!S*&<//d >p=oFB#_d(/^xr܏vE )9]Me` xZr!LQ&Y/DQ] endstream endobj 2518 0 obj << /Length 1503 /Filter /FlateDecode >> stream xYM60z D%R-zhHEꞒ6wԖ6wF$aӱKp88E"Ks Xﮒ]؇W]Qga~.jY6DCg%"RMO>|OCn(T*P4e$ŒZWv–%>/MKx)̘m[kĤPVnlLcX ѻRjvw%SQ.RS1$ޘŌ'D'r3~EBo `0T6m5+>5SdKn-\Jխ}o(GED 4mQ~M-|"4^G2%n D26ÊD4Z{e.)tb?] jpV'u&M} hÚM<,"NP-|?w:/ T'IN?5)rwWȦf@! ]]8Tu;3i84EΣ|N(PyT.S*۽_%25tzF4rFjc$TTffJH! vk`tSpe<&NB"AbGu/ 0[Uۮwb90kԣo[]`p!Dr%Ld35(p!ǎu| w!ߒG)7s'4}GgJ!H֕=pD0]-|b< .TyU-9$4c<|1Y*h {R'H3a_= ق co| D6-'D9! MҌ.\VȒl~9 t< QJG.ƽv)ҏ.Մ|WIN\^Bs9K§{c>nGpO]3~Wa~K9{9wA#em0y_]wU'WW?զ >q2Ex oɌ(\|LUFas4V endstream endobj 2524 0 obj << /Length 2089 /Filter /FlateDecode >> stream xY[۸~ϯ0IbH,Ї`wZAcsldL{ϡnIQ"HsΕ܄OnpFl? ls/o$d|{Dζ ^5բă\RDõIB-:((Yi/AҶ/;t% f/EpN9pNԓaP- ?xbG B4Xu5 wܝs|P!3_!+,sw dY ۮHL!J{ "C뿃WYO2JDz?T$f@ږRQIk`6jr}>f5bdbe:D1@3WTѳ WR!&y-l;Ki8Xi" x ]\kaG:_̳$xYpk୮l ְ]|pBvNnŝ}iœu`)?  F,SY)G%y1q0t ~e"hc/8X}|IK*y] YfN&Jr(/?@ۙk^t'[(8]~g;/x(M~\!;^zm$$2!r:k_e  ~xy.Ӭ !I859T,R@?~1퀜'>`牆>8Ez~L-ܯ?$d<-Yjkw83~wV=M󅨆jC]c}뻼ufq\JJ08YA4Mݻ#LU/K"e:1E*l[nB endstream endobj 2528 0 obj << /Length 2019 /Filter /FlateDecode >> stream xZݏD_#5[FqڀTZ18vd;wc]Iy;Ǯg!$RDY}݌/|=ϖOzC -CVMp6 )e`>//ieLB\P_?bBRޣ熙YdRQ Ec:G :m6frQ%Luma{" &嘖MP9[)Z) nvCM"f%NU^UKsi]El%YA >2XnBnOVۢFvME=9?Ue7YF/FUnCKJnBN&H孳 n7s)/ݮxOö""!زhzg#k1- z\y|ݳm(\&]M[12mEz4bW-z%XW3MG 7^OH 2yZl^6d!xz{}/joCR2r[ l! -Rr*$eٴe #ֹ. e*C~~>pZ $Y(6{nމBrm 6#R: * @{8 :"77n0pTeΜWx%Y{,$bQQ|Q&Y[wmqo㍶bbr{ !$[ڏ !*4~t±1d28e~ dJtdf$TkȁLyی{8fhs =@oX*:yoO2.ex80/u}Ẋ~GŶ8Bq-" ˜ twB16LqDWݥ:pʒDzO_@ojHнE/SO"kM2!MNHA>Scjcı'r2AӾ䐚έK2u򮭃AK LRS  Kߘp85]Z̀F>T8XJ73B:C)hH>_d7zm*B@Q:|l])vF,ǘyḺd.>OI2S5)/j?NY$ Iue"gadxMzJ04qt0=N1gC$ty5N 6s TWӜ6L?Cq|1ctOL(1a$%z3QN.ݾGepGI3CN h9!ƃ|TgZ#X(Ƿf(M{ßܽVi@lHC#'}Ї1 ~;yԱSڛWm󔔺ڍq"1x!1GiMȇu͇ 棆{!U{Z{×??|wa#T/v_wll]ɋքE2x֣(/q.:諛"Hpv .S`x̆a4 0b]ǰ[wZ{# endstream endobj 2476 0 obj << /Type /ObjStm /N 100 /First 979 /Length 1969 /Filter /FlateDecode >> stream xYoG_1ח̐ (a#oRT I8^kek0`jCrMn37H`dP W_>&qzc6%Sxx)QR(*z0 ϜB`YEH$Il|N*&8T2PP7T^ !!.zrhb%A)eh.\6(T ϊ3r†x ­h)%J  ep6 *NذsJj+ }U?8o8 'Wa@x] ,RqxCQ, ŕlH]e#J/ᢄv(PИD_ Q{xA3 ~z5cWbt LL!Ls@N=A.ƋKԠKjW9B}VLq;p@ޤ`z)h%JGTpT-@=;[Ģil˦5뮟o>fݚwlc;aJ꺶 򙳅Jyo̯?~ۛEj?t1~;߅B8prěP{L n; sbO!!<z".ڜ,'2]6~32zYm@쭤8+eAu:ф&Q2u\DQpkrnR1jQSE}kGedI3J +yj,7z"h9Ul[x^w4~AIȠ[5\(qQR47-27Wfܛ/߃Vw D=uwEٿeֽT3(@f#V<*Ox@: :_nzDf-0zalV˾lV_MN kDu (aQg|.,SuA^/hZRDl} 6$fEzm7MUϋm#iUV>CͯUn&"dGƞuL,9TndP(47T:KՇGI:$=)#zh#?#ϯx+7PC>|,X _aMm5"0 bzkѮVo>\uiCޑ74gN𞀭8=:Qt%ZE?ŅeM(u1?qΈH5U[QDBW &@\ޝ9|:q> stream xYݏ6_a'R>CCEWyX][r%f8ϥݢ-Ab F.#YHPdQX_v^HQ~zo^@dA&1fѻK? C/ҏ"zM̍M6K_%RO_kJ=Q9*Q`T7$%\R:NfٟKfHbGIM`$ 35Qwlry Ϣ~(Tt4~iB{8rpei;]|:h2"է#_Fl'nA F$a T=`i˱ 6H \CJ$;}|-9' cpKi3U5MR 5hXlhHU`'@Sz Ӑ68׆tXD|[AlCSCa`/8ggfXQn@̰(׻\EUoyhb.^UMÈH|4I]Jsc2R򷴁. "|X>.8A}µ4ŽBЕK:WHÛo\8LDS0hi:ˤf[xYeyYA^N/r(MkȻPeqoR#2][] dy"}q25Hg=JI5H=f2 t]3甊K6$퀀kkZ4o& mR}O ;MHA2, hF53F, Z@vlF!`Yk Hg:cKMBNZ50].K=] Kg"7M<7Ntl0@㮆WT\ )i) da]ZTV:^/ѿۂg[tK}d:_EU=8̻u}8..Kf>؏..ž[ҙO&ub479}"0v c L=oaLuVwm|z4o/h{CT%m?yFcN?vYwuUCq R!OF$s=!*7g`9d:MkyGuĂwY($8wyя ?PфorWj\=sxPr<)phkt5ggBՓ6,3y0"x(Oz>ny#_wuӨOA~L]&] Xˎ#O" B:tT~Xv&uO] CM/ )E>5 endstream endobj 2535 0 obj << /Length 1374 /Filter /FlateDecode >> stream xKo6U"V|zhm [d})9(kkف$7,r&E My|8xx")E,?vΰ@0H8=-#k%JʃJq߻?Duӈ?caZ]SR E)) aɾ3˷jnŹȖ!o]?,S'VnL*üZZ*݃ՍN1k [S<4f7qH"+&DX l죷U}E}smxj5=0HaT}u-nq.gh hҲX[e!Lpno\ Dc7,4պXzQ^IHd)IPf[KƼFH"H/DC8NK -p38pfc/ͫMz %S(ɳ1-}g禓 } H |2҃`$g(?B8b8y؏+?3ܥ.Rֈ%yqRF|Nd@cBJZ >"x(@8-|;d3V!K]"N=Zڳ}vErWtMb~;g2׵mq_{K왳6uTxlϺ x!mjn$']ΐk j>;_ӯX<6^f~c7g>3Dm=0^ iVޕUQ2mcBMOj%b<Ŷ"[44Bz?m^FnT^?! 7bv?J7Aor )i6&6LZX_CvM,ӉH;D7e[N-[bD9uA({r$҄Ŵ '"֞r# F ;mWQy^Aqη ꇳUU5oF/614TDM]☲i֤F}YTrI;$zNk<).f8| -/{Ik3{߅v'ݲz%HJhʻR4#_?[R"(" Пۀ.Ibjԃ>BCHFE9bt18.6f輩~)۽<_b4V?eT endstream endobj 2539 0 obj << /Length 1843 /Filter /FlateDecode >> stream xXmoD_a[kC)(UJ/q}ŗ4*I3~,Hh "[r$ % MXڌUU2fBRJ>}ql;NM:_,f\/^~.3hp(&8wġF a@*, =чC. f4eyޡv$M&X= ~TW>WB5PD0xUQ h&^M? %*<`%M5ogǿ)g;ZS9jYn˪xk[]ާ:d(gc34;(͢vt!˘1Gtfq8Ns]m#4udMYdk]27aӤ뮨iaMT) unTh&Gc >!,*ճ9̿A ګp.`(F$>!&1`C9_Wޔi&Gv?p3"ngC`}Efۇ,|ZM8v+3jZo"J*4J(SSh"tVL ^6Y (\ޯ_Ac"upm܍4^gG}"`IDFOVhg+rgt%\ň͜>bKaӦvx_]d{ 2yxʗ_Tq {;_uпrmW?ΑMvCAf܊-pDGQψ(G %e<2mugN}X Ęj;r@6EU4M`,6=q2eSMcM#5@?)UbȄ&ԼCC{r=D)@mv69_E`Hq˜A}v~>MjߛK)s+3-qvo"Cܺ"m2P c .:@5wu53Ce񝪶"p5ޜR" ?_l󎈖?Gr߻A~*!R`W@&l?Hߦ۫2F> stream xMoF~2I)Т0tKr`Ā Ip}g/C |09ξ|!e b(PuWܼ">/hz}B$XNK7]oMc~8᫿ߺ5)S"T>m=)(}8@a=xie(ú?-U"i6)DFJB㰗D^inev{h;4)S+؜qѤW] ս1.}v^m4 KĖs;_I 2_KH<>%;~Z3K)T#DgTtTIS|ʙkk ;_YSq :Ou.k|>tI%>t[㶍ʨas"NuV~c-}wn;ﺠכV>iS$;~򬝘>)7궎 .K}5VEp}^cfclicI/"FB~шZZQ"U/jOyeV H#<RZb~ ${4Y9+ ɼyiUൃH^ftB,2@L9dT~뤭HEb77c6ovDz 8̊}hY$:$f@D'W1 e<ʭ8KTGAFևm\ښ*v8ϙG%Z*Ώ.#|>&fsn<:8ՀQQP@S<\x"xX^IʯC}>˪u&ǎs tYc ?})@n`wC<ĉ7|@<8C%PWG΀zMs&]K-|US>AF;/Wl endstream endobj 2545 0 obj << /Length 1501 /Filter /FlateDecode >> stream xYn6}WQF+S oyPl:K*3H"L H.4`!' cHs5op4g`w,/fg$Ą`&ٲ;l1y]wɧ1c,ROcEt;,Mns3iB~r)(=:E'! <:8";t QM4Z)AƢ.)t2D>&x)W;@i!})oagۗ~jٵ,k7F!qFrD9C%AmhBy$EI y 8T(Wҿ{+(Qp"6 7mnR_s<*W=*4ӵcB!eL6ؐ-kV5P2m9T$? P ;*5e% sKd[vue!CB*|=aݒ<r+0Jy5j;5,@6=ݭKGl8䋰a>y0T(Iʍ YF[5MFRXwu5%bb[lc,2Tuli~y`NMd\\Ѫ{-ުwgPH}x a)*8@j@Rz@R ʓ O" <ŰcRאMQ:^ȓLpyR?\,VĢτZbd=Z7՛c1+9Dwj،R6/<W ny)T j+%nώeXxK%>KVZ!Ih`ɶSFHfD϶?.I$%pޟ2O^@3DIrIxD9Iơ&> stream xYYo6~ϯ D\}H(RbvEc-dɐ\CezX1MQ7x^`S8K"PB>z:.^ 8^SQ|{Iwh>K~Z՟zXFTX$a`eհgHșɕ%d) @=]0)% (YaDa4edko~ѥK &( iI#gHv$t$8v9 F1P/^-ꉶk570Rl~]6;G|ե Ńi# _x.k(@hb^m\Lݪ%`D0[hD KE jtK+m6 *P+^tkOf.mEWNc@-=H[̦FJ<ؑJS0"Ȳ]%ں؜pr#nѽg֜!"qt i {Q)}e\cn O˽0* dR1!)_qu]]T@]~)v˺FKzN\&x٬ۤ5b׈Vx왩ҜW-ǚb|Kn1:8(S66(N))+jii+Svͅ1t.M+KdG3p}C܁ES3:bqɎ1mHX% NӑTJGMđY6`mB#` 2ROlLQMI"qxN'5pBC-μ~Ronu/{뷘TZo$:gA(SN~YC8 !|`:KԙaNMP +w~ c ҮȴN'K#rq@^v!2!Yt_:9ӟO0Җ$ uGYy*>/ԎٕE(dV%jz Qk@1>suV\T2y 4 89+PG ѦNoҮ9!J5LMژ8ό]ZT:B+=ZiÏڬ0W+>fu3b\'# _9-,:9n9#3ϙmplβpm`dl#m`VBn,Aqo= Vd ۧ#w *'a#}M#tw#Яs /ߊ?j,}g{Ա <0hiDD2[2Х .)nF&$:q8w_&. endstream endobj 2551 0 obj << /Length 2239 /Filter /FlateDecode >> stream xYKܸWm4#Jkm8@1vGbO+QK=Tz[``Z$d܅Opű(T+oB?Ӈ7 xXI͟'N ?voO2~8J#u|2Gӛ4C$ b|7=(zr(T.͕" {`j˱ڽ >01I)$p!̐LeReշ Jk֐H؉ȼ=; L?U=^;ܸ&q$-DfwL>e3UzW=lOK69>D2[)%Yqw 쇾.Jveq?PnRAx,h6]v n7l}"]`Qx2h>EBwk^>ILfXN Ri>#}uky4SL Inxz.ū\/^ p sϚ*q;ԯ۪q8iÊ3gse1.і S!,R(ePolNBRi BcYLu {3L 6hdv3 *lJIi z5`}htEX r%I& lkuܹPu2ԷÏ>DdQq7'5c5p'q(Ҁ(/%d{$A@Ip컳O(D/@ TJq~KߦƵ $Ea*"ںh$y a[ \7IvE$d~ޛqnd-G]y7>&e:]Kn!':kIu45 Bsv>:[l3 ڙ]:AkÇY05l;z*4]Yf{hdvdap >KIAS75 3IN]?#$ 5wd%.( 1/l%~X Q=Gr^/٣GI5$lldA}0Wy^C}?Bad\oVA`V<|!y=8T`ʮ_X#Ua/Xfۍ44KIPL:$:"`;J,`#U󈍉酈vq}U7!\Z_TVbќ1c*p9LcNqL7цP|M.*y.q8*u&K6v. \v]J.֟F^Էn\G{sp蛨@Xl1LB@dJB 9g\0 :&=ՐQ^* 6pʯ0Ri-#v0vj)ʬ*wRg䚂 '5DkWU7y-Mg]>G ڴ8ap|S^<"J"|K1O,u_/%R.8Dn0$30%H?aU2(\rٖخY|W(o؄%B3F;*YBz^^s7/~_ | +& vp#`˾-l6#.kb!"j yrFad|g6T3Z?-ᒼK̕z?JH-bçLT*C D_=?\?bbMښ7z-v_WݻJ{,*D?Ϝ4*x;=I1? '\M%? endstream endobj 2554 0 obj << /Length 1186 /Filter /FlateDecode >> stream xXMoFWH~,CۤA (\ݒhim1Di_ߙݡHJn!4ܝ}3 Eǃ,)Y`h77"0F-oA,3,Ǯm&߷^DR0z)o{[."pR,/y<쩅ZKE%3b\*.e_Dڈpy[T;V/"Z0_H>68R "!1;|k .V>m 4\ ,ZwȌ̈́f<67U1WycCpZ :CP7Z3əLǾ\N"SH fUr ٺmFAf"uAKKuݣub@k(?;mSy72wks_+4KZ"!C,1)3\*c& 12dp\q.7)kf;AS4}_4ݗŪ $ "uenkb8$J%RwT*ol*̊~kۮƃEi1Ju>#1]ŧ |kPSAc9!#컖ͦ "eI9fFO8Xl^ׁ4eYBe 2^]{ SB‹~8G#eh@!_O m¼$s ;#h MYF|cjx w1Wu@@QnLhS G{c[pM4$y,Toy`\`+{:'=՟?lz`pHܱ"z׆i: yM] bt) lT']"G¯lg>Tr~6$Mi@i*h?, u$ '4 U P6t`s!'«$^Ho϶Q뀛Y8Zi0i,ch޻)YVގ|]C*1rMx2(3{Ĕ+ZSK=R_u K`9i eY\OLYPޛ~Hbb:boQ[]T„F;0)#A.Rfߴb5@b),v9z*v( ,pg>>5V lP sdp>q 0LfI\'l endstream endobj 2559 0 obj << /Length 2291 /Filter /FlateDecode >> stream xYK۸WbdagM\)l84M>nu됧LŁ/7L3Õge|D{]Ɉ i"/QUƒ}f-X/ZT@eQBd!韺7 ClM ˢ\)B]Ud\*L|$ˇcb\9V`qɧco(,xPb>ÄG2_.ȶM H `{&g]\=ql1ܱPew;2+#\ eG (e;,SǶ<mYӅ}l&K0NӖ"l5ݦ&.<Q T'Wv$H j!#ym d~(556]iA2$g1"&EJ-lwB'hgˌ-D~ O ,];g>$Hkų'aY5P* n-AܾׄEOUsy*,xcף;*񚈿uX@rIN8TmsQ.,]o]*arګ3&>ZO'?,: ԮI5DKSRra?|T1_h#ꕿR@>TTo,*^_4ӧ*M+PI'y>]ODB$]_u?L67; 2X{R}=5<6O%S}- g ӽY}=> 9ؽ$'=mܹ;*oS͉PqC?Ȓ1R3fgޖU!Nj]~R!|R+;p{C'T,뢝X6 ЦCIq_Jت'*ml7@PD:JBʡdwYbBRȖkF^IkΔU= /\Y.^00vcqpN^8~ц ڈ_4DMi&@[7wZ}RV俉Bue0,#R'I<+gx7xFwe endstream endobj 2562 0 obj << /Length 1448 /Filter /FlateDecode >> stream x͙IoF:R@8})C6Ez( ׷$FYD%R'}p%b3y7o, ^(Ɛz_a?Z.oW$Kaa:ZX 6dqou^|LmV˔1)"y0pm7.S 7_z>R9vhRsD ^ۦ: $YUeKx^Mn6 !Ijg6њ J$žk&iD4V ux$͋4rAJUWݮt M)5-)a: sA]z0TpJ$/6_0j&qm698y 9@Ɲ]]k|<1yvH)cQD2&۲cd"|IQK p&/6Anm9^F"Oc$k bt]}|=DT6 A|*5{Fp _U}u$.὞+^,n߄Dz tkFCNUIgS!}SFL&CqF/vo|HC1v qڊ1 B!  ocɦ665Jb4ǬIiDŽWWgzȏc 5eZй#܌}DKi^ ۵ީ%4G,<~RI1NGcTzlΪ972 ,IN5|yXOi6#a$$e478=7'srn8fp~ 7~zf'CvxfDfx`IvQpXpo#Z )Ǵuhc0n8c NkL55P)R790ÜO]6઩K&z<0Hq p7> stream xYێF}Wy Xl؇M ™ ~-~)sJb$a[:͑MoREffzi~C/BLf~sXdq&7wb&?֑z3F?I|T*mi}wJh:6RcgԆsB ;MU%2j=e&Ji髦fkeN=z3VZ89Wy]oμ"ځCiXmo: /z+w0ȬUp+cZ =O泔2NIe؜$RocmLtFKHp)-}]OT+ ت4;䭧W+|1QN]UU.mHm"0Q PO;&*bӯq?G$z߽$Y$Mc]N8Fwrܘ'S*$1!w')\biVvN"q8:p\ YLtF$H%fTs{zCuÂnxMۯ\". -}YNgZT/aX#٢ Z9:S5_n{ >:uPiE ̡’$U+LېpWKlIN6`RwN.ɓ-,4V]jȌj sJ]F0WD>?O7=m,5pinHHduAч L-ϱZ !M6mLj20 Mvu'9/g(`l[aWU'VknBNJ}}~6FNݝ:R/$ `5q> Yg\ $5IPTTS>Kp!gJ<EQ4? ^"8=h&zڜh 3)Ћ\ c3TŸuOǶA_gH"?"ϛN14eS"=wX]ٝʮ+ɌH[g-$ʉDOdUS"$Y[kĤ7Oz!z=-}? yUq?P- S94C/fW3s~7QA#R4c_2h< ^S2Sj #Ũ*{nb1 %ui*MzEQ0 XMpM<8`ECgϚ/*7II !! endstream endobj 2570 0 obj << /Length 2182 /Filter /FlateDecode >> stream xYݏKe`ŊII^ P\rrdлN.(Rp8 ||S$,MY!&qa߽Da?~Ԇ'H y/Y=VcyM4?mc)U7iwf$Jǿ|N,+q|sx*Q+)5$Ѯ)dрñZَxmEd1}_WƊ'ՉbyfetXX>5z%Ld؛q[b")e:tSYd.rwwT]-i'y"9KZ! BgLr ΈsؕMIt>j<<[}mc d3* & dǷgRGd{3JܛL3=K;3R?n#|כCeL@VeQ0vq触{Fvx(|Ue<LJ =UыG~{7IM_V,K,)=9Bo#j((Ic|PfaZ̢q3 );:Gɟ̀;[F5욵cIgK]zܺl#-ټ a@60"ʥ)`,ס8HLDLLZ5m"j@s'sv*m(Rk<:];Kv˿o.ݠ`&M߅JJΙt]@&wt;:2) Фo%OJNHNo%H]1s?Pjr)˞YH"l$5d,q6zm;[$37XV;Nv-( Q*zF$z ;W 8αa?jޛCrܵ ̯>`6(v>G-U cl| h9=|>V=n˫z87Krx(|3[B]?vgW!v=x֍ >TڌqMSθ3X_kP̯OZwպCfb&h+d)M&,f~JTqe".}rx}s"=\v`B:j ՙ)g^,1'QZ bq]B}1ewzOvѴTuDŽ_Ky_G2zG|ޯ¸S=PWes}]A%2nh7N!~+_Yk. WHZ v Tv쬟eItpAԶeussqTCbXfP-܁{ 1l d'3K > stream xXKoF W̱yF{i Ρ, n~V1|RڏCJ *͸Y 5,i8I0S ŵSȉ]PB삅ą6Khş0\K /($, d:qAU \%Vܪ[bE9KmEfiES[azt5M Vnf(4 Zv KqK Z"2 {&+Tdo!HN:%Q4"My^sx8g9k HwLøs H0lFarvɓ%Hpc!N ѢƸhW'ObyP!9n$Kq>4*7,6kIU* yR@d HNg^2HAfu0xࢅ= %{Edh #Z'`Fp,$ F qC4`HS0CIm6iYnIΌBE+Նa|αW}//1l?}^O֎b/GTst;mIOAnO]UW݅wXZw7]8㻷a|]×60E7ۻ[o ~s[7dP_`hH{!~@Y)V*} J)zvhHnj wsoBt{8"mHYH$Έ'D"Wrh}Qބ@%lF} hޮ@*hAU<(GTE9*Wp^G2+ڲb96Z`GH,dϣ1sIiԙ.i=Kep|w)&n}j ,b>"vT)$izD3%}z cV̥#>Pc``z44.c׀HPbrɱd `}4hiC xIKF~ty@||/̧|ʒ|Yѿ)ԸT,(lfL,s|ʋ63Zy^a￈?NaP1P^`QFk lq0ϟs*` (GV@[,,FjS$.J-f̀*!v'"%ѶR(>?%@>ڞA,TL=#:J[BcP Mi endstream endobj 2574 0 obj << /Length 1808 /Filter /FlateDecode >> stream xYێ6}߯0RY&R$. ɃVJlːwCɒi8͐gΐ4gq83RXY= bF'g-@quycgo3tffP7f w~P4Z BO:DJj|{S6`ZVe{Fk:ݴEaTd܎xpˊ %Z!n}K|jd `&'yCk9 *x=*ȓ59,aGz.#a25rwK]rү\yO'BH&]T\3o&Ch lD}/PwpɽUEփPeP'[t]|i'8fNaa܊lenQ`a(9&s.+}T?H!FW)8 xEj ^i_=߄> }s<;nǮ`WOcaw}WFȅGXP?}e]0cl꣒3iŵ 9bcX-Tj4SB1 e.BMI.$^UWM6/TXA{3-+oy8:' #>٣$#یpמ`:0OX1X<]^'ըF(LVDK1Kw&DvF}w1o5T^RE,u*nmT.uC?T94ﻻSgBaO;_AZbK7EZ4Se=hָ2xڐ5 kt! |z$Guayv'vs:C}0kӏ  ߡVq 56{J.QLvd[&4FY q |۠V[zt2, F.YS$&R1(:H:'7S~=BS صܗfyqCgo塻)\܇&¼a2Ot c%T;O_@g|Y"ߥ"Ds"ukjc`lZ*8ؚ`2[eEL 1)dx880YC񆇪',b #3X gJZq L_b~mװ̉{Кܮ ##[ Gӧ7vئ^;FRcRGCڛ5Kى.Wy [%d޻VY]߻J K+lT;[_=s\yL=llW\۴K/SӟdfY"5χ$\x/ G)BEDiHjS^w7GZ(i eq!lԠDyE[PBޕ utsUMQ um k "g&:G"~.NWng0*ꞂW宋oA?K^}i7ɩv/v endstream endobj 2577 0 obj << /Length 1769 /Filter /FlateDecode >> stream xYYo6~ϯطh,+R}HS'p $yw]&::b3Zk7 Z#W98d‡|(X"&jϸ[j$OoZp%~뫱v{O r%^}8 }+]lr%"|/׿=;[k*!iJޱ. 0sօd sd. qd'yYA)*V@xrк,dȂ:7 X0B XvhMԉJ:̤n説g'MKѠ߲Q 6en,iٻ)CژXPi]4#Ŗ"n:ƍV宂MϻiOc-!*-7YyޔŶMV(X574,ȟ7&SGmKnTx7 O`qg\&{]i(ҹzԯml&"#9:Cc{AH+]rf)N8 u T4-$TtK;G _lYCו$|Kx:B ^kqd0H(7ڹ0ݾmַgC = l- ].hu=1OݨG-0q|}iIb$aO}e[ AU ѩ] ˔oǷ:AG,Nl7m~uy]brc8ȱЙ59^ Gk& 6B) *& $QD [B6mV4>q#*yѴql0#BN9ɇ@G{]ГiHʸ/pȰ;)ɚf4uNcLډ"hw02OvUȘ^=@.dbzX6Xp/Og~d];{oO~g$G8X߮e^I/m]eo, Q@yK7Mf۸WzH]f-Cm3ٍ·$7mTs}/XD}&ku}nWRú;9EKk$PP2\bsIr']{P⡺=eo{[w( GRz-*C]sW-5X>:M"Db=0H-N/}-]Nm@lE<9=ðY%;ar0)Ԯ&|D*4 of5 endstream endobj 2581 0 obj << /Length 1048 /Filter /FlateDecode >> stream xXo6~_I@ŊafK o]TR!-~GRDYv,Gwww'/RNRZ䛋t-͛ 0LF/8_Tv|rx]OiR1wpcnMc -Y=t,0E)bS)DM.H)ڶHQbuv6%-Fsbw%m7@`D:#`+#)ON8DjaC.0Ǿ4=#_,j̚|rD5H!i>V4BC0G J[?A겏V[8n`*kѵ/ i(CUyHGDүsE[mȻr;О7}$dߪh?A,BZN֐u}nWOmw2B,|s΀wtIAy+8pWXzvw $u4KC1=W~ls7W&˭ߕfcA4 ̅AR@کgU5⒟B+obP fu 74,+XgrbG&ZO!)DDܘnTaMY m<ǯelŬ{#=bsZhjk'=6nzO P!)'HIgՁi;W/kcHIwZ@!1ݢ9&OJqHUޭZGfǩ[@S'm?cI^?~'w?r!9A&D%bBx9@NlFNUV=) @B3}TE0v]gקiP<^x?>g::b!碖Ջˆ3%)dTo|r#-=_?a/hv+CMK#^&׵ 1QUgj}:#X2{pxWgNm&ygSWEUt, ߣ endstream endobj 2584 0 obj << /Length 1136 /Filter /FlateDecode >> stream xWo6_a""E Cc/Mqؒf_#R$[h;` )~w#W ~|U*%*̿mv+z\ D;Vьe|ylWc~lRJb~$Q?ō} "劑E6]m*!%b,g'K),!W BQI~l:4Rتh6`.2Uѕuq7j0ip㰓ឺz=A'#YP4AQ)Zʀ1^PA _-'$*~G%P\QF?,W4cx;XrXP8{(۶vHi{uRL{iHRg zЯzCMTTL^qc@G(h~O8ǔwKwSf+S)BhU㳬#ɲY&̨<7殀4fpl' Rqym0'<-`4syL8`nTpXd <@ :Z0X|ucgP/6 K)7bZGp 5r Bpr|\Jv(_zr":œ4C=y1 :_H)4~L,C7 MC;BM>]#8u\/\0跁 @ y:eK ķ0\2*Ō\0E,ja%~#\CA1̃&M?(~j>k0ָ}]QΘ1sgncrT{CvrL }núk>-d3{~ahN}P7<؜#`dCdɛ7GpmgĶa[Qa2e@*(Tv8j/sΉӂcYXv8:|Ξ&$}~tC endstream endobj 2588 0 obj << /Length 2235 /Filter /FlateDecode >> stream xYK8WsYhqė ;ćY֖<ɯ*Wc7f2EEb2_EhH2Û̶ t!ʷ7?G,2:.R x;8BN8T" -D AפPu|`H<2e2 ~a~۪ލ:ƠS|5Ka<-0Up؇uSv5qmicPEU LJ 'w)~@fB &-~OYMhFuX`Wʚ^[ Q{7T!x 3 Ә!Pud@i "ݐIVE[v}OUg}bTpdv灈|g7!DP&H(#Г_S%ZTO$ip?ޣnZ#zdzwVƵ)zOԷǖue=,<2di1/W-m0$9[9RIY1爹QlHKf1$!Csa;4ӡ+y|9asg4Ӂ Ÿ~thZ;2Kêر5iXc9f2'캅(ʿ!PhOYFEE͏f%.v??fJ.md,99Yj YN\YE@3 ',Hru@ΩqP(`&L`[ Ca󨼃Saj7GKdȀ>@#M ⱁ`]fz7gjSBbi̴52a61:\ߥZ~eY:nN=?AЯ(H\nERRMX_fX&G²tTvdzBwY65|;0U5'&O`ӭquwmfψU8:߈b~v5Ns304Qq'I)ňĊ#KSy_3O1`%%R/ ,W[oKK6߱"̾(Ę.\hpcWG杄ecZ۹͢cD~, endstream endobj 2594 0 obj << /Length 2111 /Filter /FlateDecode >> stream xYݏ6_aIV%Q)hp"hS$yPl+-AM/E1E W SceT3u+5O(썧|wԷP0 ;9'KV_ CI Bca-۔O^=6ޅ`9 &'31额Z4Qd@+S|w{K ̕a޾ I9oZyy['=+'ԥg=AՠaFVu- (hp fE8 4)"[ͮGA+a7tG}* ʠ4kW DŽ4| Bg1NAG/3Uce*[r;@KX^'ShQ3p:i{5s7帲#RX_2ʣcG(^k2<Nӗg,kr^nomq릪:|-Z Ovl c"/O]ʵ2Cҩu~l ! !O⛢/kCyf 3NGчY1  y.m2^M)]Ɣ9V8vt]6\z endstream endobj 2597 0 obj << /Length 2245 /Filter /FlateDecode >> stream xڭX[s~ׯKP os9'0@`sJT;4==}o;.w~ea7-x#Fw7?DN^gbt\z*vץFߺI_ݺa9Dwz NO(r7 z.NCOCRHTmr9 zNc7Wv]\5'TʖgMsV*p- V2 SNwn&^ʻ"lO-}zh" 3c6&/ 0<ӲA<WN'OF^1XI4/{ODaCWWvJFCH0PF`@o "/9@$P:g+7>3#Vu-}/@/%}ݓEg[H:A7U!joaG+AX÷>Ϲ#K uHRnUj0{{=Uj.:dӖR&ǀW]>kX8Yί(( PYVD@8\v/J{׀'Xqɦ5-\V1 G^  Wm0e|z*avjm*xUNɿPqz0#!G$ r58EM*["l8dz{\ `ld+Mcv ZmFj ́GL邂U]ӓ>H%aAӶӹ,e|zat밑C 6&Gޞ;9VpFnT MfWMj7-M9mOYfu6V|!K҈IM8M+`}޼"#s5`~e 0@ޤֹJ ˶ eT E6| hۑ>tv؀ٱSS((QWW!ozyxS~3>uu*uCRAn5cs%} m̠e :o$`o<_P> stream xXo6 ~_qة, زذCO7`GZ9䲾rDQ)i'V _aeVw=\$Do^ nz .Ck& |( \ٝmFB@?.~R %3r%Bb"Taiz#4mw:en_h@H;-7o& eUG0Hi 75ձ%TJj&x JXh^|igŤPeI7pH,پ$SjZ8ٷuG:ki{ݰ)uq?Uh-l\(emfFH==[In&oouI D1~߹x8~qRS yFrt}̡0lY;8nmZg歳ݽ|u0ST>o* ݥǢm[[Gqqt}:9hPHy$:= 1@M2#YZDG7'~ec]6_nmom9ZP' n)28PfdD!ң}4c@t̔V3yߦ-ζ;'TJ" NJxgYER;8;U|^b M[<0:ba5)Ʊ .~]HU/bA7Z(?otWWAef`}8u+aCx ꀍ_p6$[a6u?noxM^xǁkGo.`Jm0-AT4n2xR7,wwec匁1z;,B Ku@L:WݥlC_YSp9Zt{ۇ-lԱ'f !ع>ZZě}QK5,³KE_| endstream endobj 2605 0 obj << /Length 1483 /Filter /FlateDecode >> stream xXMo6W,z$*Am)0 ^B&p}gekJԐμ!]GE9'P,5>\qF]\ДiA˛PSnS{ t{Nʭm qnd[2u:jZ}X["{3Yj" J| UݸܚL,v×`L-fJZalV>uU$d1zaiNވX@̂h HJe]ǜ\DGwșA#_N2V7= N5Lu܆n@n֙#,6M*7YL0!Nh6ILn4O IOPBD %T@ +om8|Zg48!D2e ]$j =s/eQ*YG)T80!Zт||.p!Ԋ\!ySs+SIzxK~ h_ z16f]pG{7=Ͼ6e7?j/~QCZ"EGFW|'C=n%)|'.KLA xxc7ѝエuCַ?P4ͯ)G79VƯA)iHyVe 찍531ǔ1sƦ>ZYkOzml3Rp=ܭ= R(d~TD@CBfr.EkJ( N^/nCM=J )qP;_8W$OJ4m$Ʌ>ok{&z[Ydփ:r5ha4}9ճ ݵQφ}S: ȟV嶴%^dڔ endstream endobj 2612 0 obj << /Length 2023 /Filter /FlateDecode >> stream xXY~_G uypuv`3(wDC"e;q~}yH|<ľ*\*Z&[wmWxuXf{]Xq.Wwӣ/ҹfZGW16h{WzRi$hZ>9\y]>NLd$3BjC *EӺeqvHNE2~ÿbM0$ʵZjvGUG[; {/!YʢCY= =o_}EK*5UP uT=M]G ?XQVؘR76Q,cW۬c>īL"O~ye(( Ydoݭ~L$d.l; Y+:R*o ӠF-H'aџA F$yJCF(3,w?-Q$$*)%ِ&"ء9gxC#pkpF; 4o2,j<恢U觥I+5a%Z@SgGGpn~ɨ9 u W(K|5x{,a(|] !9X:_yB`^i9bwusEo_7k/f5 #Nwވ/0O12Q8ޫ ɀ"$ځ'mѹE0Uk랆xtO8ULuEIG\g4Zڽ M@p18YX<Űj;WGQPSM܈tp-8ZrtFh)8E,^2^8m1$#G)( c J?4 dPt^7MHRcr)~ȵRy1bqYte&>u}dF`2“M"#" ޶h0h}DXt^i'RӉZՅ^L\]M-ڥܧh}P%=q`'lNR`=g-41W~e(r%_ݵkz7 A [ Guy/Tw/EW2:BDH9x gy 4BmHFm_H#AKܺ{zu& Xm x7D5YC' y6apa" Ħ@3F\@VyqKKxak2EJگMi͟ƣS3+p7h x6+7<|_,<#{xͳt `9"Ubcs#-oޛudo} endstream endobj 2615 0 obj << /Length 1420 /Filter /FlateDecode >> stream xXo6~_@ʼnkb:`ؐO]22%Cux'Yr-M~:ċ\O.`tȷWm4J2?B~U-d jxܘ]g~~}M6WO'w~X {FJ"y Ewq 5y %"%dXym՝h2mZȒBY4gmj"v""/V@z߱xRA܃T;W`J j`no-T|$SldI΅R2[SI_C n#4#qmc -N GFZx1nci0EEOkh~8ֈq*q}UFB #ҏU6EK;mۘfTE\X(fg_z.̄ ZӬaVD=ڱѵxHdxUĹ|4_8hixԒIkk؃}>/!_,fOɎi-x훪%1kxi~cO3A,*Qs2 u BEES't ucȴأHqtl r$i:2YVє濍N=+pV+j7/90릱-H&:liXn-=MYlST@Z^YH'|,bNb5U <6D"E1e67vHγ*v2C'lHo6q+ OPv^-Ma.TGT6@Ķh>݆ޮ?ۘu4sCiIk -*:@SBO XMiZLNfayH)qBF+M5$hȮܷ 7dI3)`2bΆDN7w 0<+>q*8I顩@}9H^id~&4J+zaN\`DrH\:ޭą3YRh9%V'D W{=-~?LTk%i'h3HG68q) زIS5W37(QYc'@(RY?~IR&4RPiz"Ѵ };rK ёz+c&}!u%;Fd9%).ϙЇk8؄}(.iK{HSkݱOM"_jmRڿ+Yk!}aĺDaa ! M'sҴL_պd90/z=ش_BHHnTD<*ydTD;it 5-,CK!n߿P0p sY-rrdQߖ-n=[wQg endstream endobj 2571 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1543 /Filter /FlateDecode >> stream xXMo7W^(pfHF{iXF ɐ"}S[V+5rҬ38C. KHkXJ-9pJAn!guB. xQq4(( JsZ`X ܃IhQC[mnX T<Š!,\e +\d(l K$es /FЂ( -H};*9"g9:1%>\/00t+j3t RͭfB `# ʹ sE1ĭIoalN*cJ/ XI?q I@`;Јqh4i\媓m8m̿oZ#f^]}zEKc| az OȽiPe#0L"K\E/[) E/&[??XSl4]@6q*I|dGa 0<30r"/4FFݷzP-1z]!Aq-q޸'W]XoO W{v}s}u<ۻ~N_,De]xk+ *$H_-[T#oxv4MuF ȥF5`*9(')1lB2 Vpx-#{ WFIpn ' ߔAep'{`ȿ _[q4qis)Y..g;w5{R,2N80կU7X<pD@Wqyzn' \!%oH* nqӭC@?@ٖ 4<@k|rͺ8ř]@^h(#\yP!) endstream endobj 2619 0 obj << /Length 1788 /Filter /FlateDecode >> stream xYKo6WZ bE9m@[whq_CxӦ(j8|3ūG4*?\Dz٭t!3/[fj] ~ًc'uq=]ĕrIYlaŋ͸'#L=21@<+]QcjA C횢!وV*9Yx In_Y`%'F1vUd뾳9aG@ !, DsA(Gq|;SD(g('>.LF6{H1L$`] T03/!5I}QqS4hk{2%lbx6_ݚ^.H`"D >1G4ջ fnFjj얁xnHht,cC N_ɮo*۩j;Zk8haZ֧Jf N!F"CFcHhnu@%nDb'"cɹ$n01IA{@R ΧcQDq8bg2u!䵓kϢn@Ŧ/~ eQ 1Sm<"[&z(:ȫy-:=5Du3/f}{kLd)RsQ\V(iՙPvY 4A,]X0wɕ@QB)ܪ1 DYktW)0׍; Ff'bSDҹUujlm<)NE'M&Go8Tk-dZkE@ۼSCƤkC`5{ C>J#O㏗` XwLb#L#c7 a)%Gq9`ⅲ>f*!&dVzwN=g _*E:MrY\̢R2$se @:ev.g1 o@OYMB D,ЏF͂Oz4e]owʐ3}YYW/fȶ/;CakHhnGʣ5a˲s %0[S!F/fhS[43$6Cx~Ƌx'0|SLqpl`Ncf-DIRD9^MmwA\z/a#(<}?` JyǸU!9߻ނĵһmZt΂dq: =`FyK3{ny2vc2!BܢMqh> >smiW:I(Blg0TjC=s~x,?$o[p4,֞s&'!k?fׇhV5H߬3V711,}+``a`x$Vt_DޕwS/J3Խ7YeT:3+]܎Z*t4e?\GUۨΡ-PRy} 1~.%C;-k5OMa(]4pNi!=3]zc(Bx~G၃k]260V/us9Rd%uF }Wb}Ps7 8g#U.1gzS82!]D,bk8@ȫ|,?j~pcl B x|#vɄݭg7R Aݛ["F7v4= (pץtoUu:'D=0KPe+r4&>Ju`lEdK4 Y*& endstream endobj 2623 0 obj << /Length 2341 /Filter /FlateDecode >> stream xYoܸbOZ4bD༊+zkl|%V+I$_!guSap?M|G4Y.Mn7]͋WQ775j)xs_Fo8m( ~ >u[m(R@7yfS L #21@<.$D2&Lm c_wYtB!O?鳠L%Y0UDH5MDLq楏 Unas#QrQb,#5Q}  /hm@8W" 9kU+ ^dqlpCI'pWhC+mn(zڗط^!ZZQd6>qݬ8gd"J4fC.ʭH{zj^[m7"P. LRL.Tc8r+eSe`Y)s Ծs9(C:ZyXIU-0[T񙩑]qXnH5z0\H1@; Qu M"gz]J`e:m!\Ⱥ2f elOAۉ5YF/oAHd/F|0jket(q6T fbֿl2 o}#;\ݱ~1t'Y,薾0@EǛc7ZG̓ /e*nvdž>}QX:^ }W:./͈uׂv=ǻ."#/u\Dqgyql+bk ?nA' ½qE΃C:$U58H<5?~zX!m)KV w1][aa2F\$J)h0 s=oI}_Y!h}c7[^P*qQ;``sd?} ;ƒT\:cOF'pn9U5џ_PяB|D'Ͻ>j&ӹiѢ5feB,ݡ֖ 9W2ZfOە8.2/+,[R!H$<*^G38A%h:遼"Ap kM;pGy NNkIL[JFAjI76Rb=k;X<ݶ"$[9K'as0 !3=~0`k( :yzؓ2<-TToOIo@sZ>bjO~1U")d7C@/R< MpXU dEeju-ՙڑIEBSҵw漍ҕ wL{{`R6&Z=Hb +>4c4N*kd(}X|) e\r9)9韈ʅ ŝƽz=XbYxe/@t1DIpn^fjcKdY+̭!:w:2&ƙi+Y|=ant aj}p4%b@q1's1Hk:o\!'Z+NFnL$d&g>USR>2Rgy,Vl`MS Mϐ;s;=QRcqyk{aǢnYc}ҴɝٍA)k#عyrQX@=G4qVHE@?\ܕ]yML&PMYs_Q$-Tz %0kU"Gb5h'}>4h{L+-ۆtP!!!YⓝDAnhcc k_ np(ĉf< l;jݺ+* %XzqVwG vv ֲp]=^qť)Ҍuc6|zj v b%=?> stream xYY~Л)eInx8GN(R!)TuUp2^#q0쮮㫫%W1U2Ea"aEw~!yn&+}͟d%cQą\nwG{vZG1I74ܗmYoFe2$^o3>9\ wR"_Rb5p"MT7}Inˮs^msF.]=EtvXZ&?wUfLi%TemZJ'w^:Ml\+r,ѨoFF ڨX Fj!zOٻ*N%ixŰt`o7[zKڪkht<;ז۾z7ړoH9ͱA.?.f$;h,'ɄFۈ4:HL?,YKDqv6dfZd\"LeaXo)ۣ{WU4:Ok)=ู榺#k%L,r-b@kO^,{įk޵Ч.L-2qNhz V0>h$ܞ hFѣ0{ђ *t#*Ԉ64=@iآjb{cLt>>1^CMq;`\=)ĝ ;%S"yS2uGU!m߽b$yA\~mZ=!wA0UJAB:Qt*.BX!5GJ;I.XT @ljJ[0k|A :2w$o6REk4xl!Xn>V|U.{h~2j޷aW{bh<̿iJs7~!ͷ Œt\b΅Ð邛^K [g6m[vʛz `L=Ʌ%cA ؈,˾}}W@29mEozs3x Þ2@"x@! \PiEzC(q|FxZzimS]Nu2T@oH8J-7WP@R%ED9HX%'Μ)7D!͹}i/[5U3mlKr~OVSV TOfdy {z/Og.<ҏgݡ9 i3E.M@jeWGt amZ#jRCK X$i>o$vI9'"s)2t{3%(stmN=L:׫IK t]>v̀ϗSn47240Eܪm,q7 k cc6qh[k/}sڪzXbrWKoYuX jyQܣxW &N IoQ*z2zhbS|+f5 *bjxiC[.'ƠA,"Ԅ0JRQݏ;7 yı|h.%Ϳ .nSEJh2gS>|W; JsTn^mF!PXQ d~P# dr,pAqnU;J5TY 9A_4ߖM.nCQ%tYrۈ&B붮A:LHs q$q\̔I=|\}Wc֤;ؕ{{Ɯr|otIkU4#r_Vu1sIwUV U0Ok2MZ GKQfHIX%yWQf쭕83^G{|e}?{ X:U6FFжnG?C){:ceT\i[}5mdۇf?w1^/e[]!0yFr{ygadRl`{X_r. ?\ao9Nys`RP>2@e:"g)Y6Z@ozحwAGWc fB^tT6$ǗX G endstream endobj 2630 0 obj << /Length 1657 /Filter /FlateDecode >> stream xYKoFW 徘 6MhB/IHwfgE4)Am4Ep574xfVS-ߜEOqgM_r={fW$I"lRE?n*W|! WqWL%ĉ!Š^N[x"I;S%"jcWky£*/pѠNcCkYjf I?\-?=z9Kg6Ot?H&Su`8pLɄӔ$nMzA m`+N̿.E7:o\8+V^yk`W\ܚmJnAAM[ Wwܑ7dYOLT-۔7q[wC^[1#zY8Fr0Pm +&ebvu-a o5U4Q]ƺ ~J&'TH5Lz˗T!>*L$ч˒=1DPڐ GDN.P,+&ai(L)Sq 3*.]ᠲ羬eU}Q4IKHms6!oN+־(W)!yg"HWS1糆Vc$6/VKx /7[Z }Xy`i=>]g"GPgE'43) 3yezq,*r>1#O b'Ok)&Mg6FF(KT#]lWCATf-)#䣍B, ?kPzSmM-˿V ~::5iݠzj7NY,Qʰ _$w~J$T*P&|VL ҈<%ҵ*"K?yZ"/VvC§&XDA;Ih`<-Qr ۻMVޏu356fkP@K?q%vgxgЫ]sӍTdz7gF5 zKNB/4]UV5n}>5vMI$)\ȸ9#-%aCBwU :,$5ɤCC)NN&/iOR˴6S 7<}̸L̢Qr_^•m}݉} ]LE#=eV:=P{P d.vpx7ޔ#>*]~PR1usKFW75Yw{<4O|)AiPo!''/[=-.]"{B'H%_g kIMF½]GA>U2U,܅Ҽj93!]B#|+0 &dP~4Z7~˚uvbbS_,0sЗÓNjJ' U})5CϢ:>Wsq1G w5Ч4#ԏp#ipпQCЏ Sӵ? endstream endobj 2633 0 obj << /Length 1570 /Filter /FlateDecode >> stream xXKo6W-`")RRJy ؛wR\=8ClA, go8\ npsN(O:/ۋ^ !IÔnǩasV~9 W8^u˽Sz^l ƾ9#w&$$"GK?^Fypʹ^qAgם}x;=tTǠMҟQ}!=UGfy375zn$؛ RC9uBVOfNEc 7tZA򽐼^Vl]Y trB _l3m,; X.pe:> stream xXK6Q"HJ C4m K4Z^%Ww[wCem-Ò3yq|2J8d6+Z\{ŝ\H/Zqe,~j[^Sguq>_R૟_McY"*^|ͦDP»Tx1pySXwi$"d*-.)Mty`nw<8M,YBG:ILw!4ؽC (SJНb$_j=*L{/)+]pT /)d[Fb˛-%uECE05$+NҿVlv[Wඩ򮨫5g̋iCEh}7R>\nqjPWܡ^MZT$T 팛ẠSw%xfvx10XKr%[R]a`)', TPak|n;rܒD6?UeزO8T;'N'Z)HVac~O+/6EC B|.; 7ZDՊx#(qwC W<͖37!^A&0%R'A;iX7gcFt.;7JjWQX$Η I@-{ ;Nz;WKmk5$hs!,=7߸dl5nv@{3bNZb1_ru)-{䞸!7 W7cm{7nʖEWr f>Bqc LE{^#=%rj7u}:Y"|rӂONGS!bpCa4ZAB/M>b 9rNCH>$ þ'> stream xYKoFWH^ȡm"EK--h>HjU,7/( jv8of]Y?xV3I)*g]mgge I|qop}Uey&(1Os}4#<,}ٯ;9!'g$Sd)HJ rՙG}5V#Տ9((z7*h(a7>uQBEڠTlc#'H>#p>ԝQQ7X_>ik*w *).d.zBL % 3gV1ѕQJ' F АoJWu< _1 _Yt!+_OQJlŌ[0Bi$Tf $cg2f@\@\:f9HW@t4\EYB#Hc'*8vKT@^v~!+=I1$żMK…b_WWthHY|lTT2&†KmUj0 YmlNnKE=@<(.C-ʿ$zfr$(QbHjϵ22!2ZQZfv*9kCu^'Ә&JVs9Pqd7kVxogp{TГNK"c(wE""\ǰ.)*ɳx5yڮ7ُt_[N釶 }Շg/Ã,xi)@:N٤}k~Ac0GQƲ[};X3I˵1\5~nҰO'7H^ws+g@;=ʀk{.L/);c,`1Nk!9'?nros#wtυ?8Y0'A+ ֍W/߻k`ct`+rNP.dk8w6GaD4?a( . 8> stream xYo6_Ẻ}HnȰuCbˉ:[2$i~wNt؆E->E/ og p&n˫o7f!}\\m[]monCUU^|x^ělUYΖ+I{,]x;(@>wɐ;)c/X hbv?p|&/ <,6N_5ӄ0Z?|i^f۲p4N[䖁B=b ~R p_H P8ZD;%BEyɁ6Ry)>W.Kcɦ扴/ۖ"nO8z9h@g^'".V T)>H]nD^2|VYH ga0:@l@{KKٱؗHeg4 z I $#U22";,A{?eii+MKyNAZ^c)&/m;$@j%eSj7YsHYdfr0Tګ{NIpҏV|-mDG4jUڱBaHd%B /E KxK)>8F D۟"rG*)c=bM4!Dbi 9u4L*6'H;HXoE!K&=P99TrZNVrSA$B3dJNY \+ ])94 mvyA14xNHLM*L 5rH*Љ|GLՖ : ˆ>ا  +^V{fw,'S{C5ةESՑzǸh$B(}/LoZ"B;띒7@E`-QZts%ܑ&N|73ʞK, +b%n|pYKRs:!S"}#(z* ӘKiu ,6rь Oy!h'v /LF Uq4,V4RV0b<xjtxӢExg<df$d6dNTG++vL6F%IkXr(֪]v:_Uq*( *n&gT"~"͍̔`. gk&cDG5k&w+?)$~9V(Leffc?/v&+[#Gv:&H7g)tVKG^a]f:dS&zTڧ +08`X[H%$Ioc[A,uw#;ᝲнv1=y.f`@(S^+)X {5Z|3 uJW'0sIuZpocBŶ,ub#ՙC՟V)‡CZ8Z͑SIhkM9T?8}]K}o˺I{o8:o\5MA(RaFq!?88@1O$Z|)Ò׸řp^\'k#Q2I0#ι?|3? e}<ʨ.ŽGB 91'qgm>ai ACR]ZѸgKm"-rM[0JUkԕ7Y$TmqHgP,59}ӆ6n-bmf-^.]s ?x'1W2,|OzٙiB9-15f))T$#;jevqwubUdu[!p\ԤH?CXǗ2VU~l[YJ굛?AMi‹KNmjf3/ q~a e{[H27[ endstream endobj 2647 0 obj << /Length 2061 /Filter /FlateDecode >> stream xZYF~ z`XL G8~HE"$Z7: fuUu"tNjsl9Fc ed+<$"DB 1b[a{C?GrSSQnW!{CDPkE%I !;KLؓPȮda{ !iND::(l­R<$H]6Z`3NXYJ2nM3KArEjIIxЅs`a "pٸ*BޔuZ AJӡ쪍 rڠ k}ռуw{ L *na6L\NR( ~J D,*6Pߔ-8:0 8eٗzA+-z͠49auPS17`W ~:cJ{kI27U9ߘEc+r8uy#w9R*LvY^}Oػ)P$RNmD'AP <[6&S%z~ΉI*8mKf< HN@M.VBwb)ا||#.5de$} !O5gX'N~CaB.ϦTag"zSĄG?7_ grٕ,ŸsJIXmBMIۀ}BP-zhUBs.A PI c] Pi>P|/IBX~KYtN'$`:c" 03j3j֧Cs֯yl3< pA-0,W 2&h;=Ql1[ w/jYSNr9FWm3@{LDcmrU(0Ї#!.H|TAh^2 v4zvy}C"?;<)1_A&Jq@ްG9 ʤ_)H9?0=V7Xjkr J70*6=S`Ͻޫ^1j๘d;/B~DZWuM݋ PO]FQkTk//wOo м*Y9<[b{}p%UQWk=J> stream xYQo6~ϯ0$1CJ(uCC)2cAH,4~G)Kl'mP;ӅM(cN' fOY7k'Fl2_uU͓443fLj1'BL6,Ss2No%n}Ik\(ʫR43:+npⓒ;L+!mz ׈ւ Zŕ;M*qPBP ZEʛ4nPXź͎4[O_ [\)4ɢ%*;4dMm<|yW۳ܮ'mF* }%mUɊ'ϣRBv n " J}5j#R3[zr00Q6:'.T~>f EIDl;<…?0Hilw2;J8 !n D`llHwL4_Yg2(ܙǚ S(T&yx`^Ş()Qr_8h~d+ӔL(.wPSNQNgQz2˴il {wtWؘ:z m]VR9ńqAm{OhuU֮2QlE^YAY9^u>(,·q,X/" (`\C "B5=>(<#S`Z`5~aD_LЁؔ7L}zH PcIE2FXVFҲCX֥B \a{y™y{?>I"jT]m!@rITX"ϖY.Ml͆K#P6_ 2Ƶ%ߑqNjnׁ9r)΀:s'ηpŀ< Ɗ޴,"9d[RȻz4{ċABhbڜ\5. <eWM٫1RyϏ1)DJg>׸ܣ;`pό}uC-gaYWl}Ιm2HLTj25S-U Syy OE{x:39¶ {}wwXΑQI?{(|.ƞo|ɽ/z:_AD)A/;N-=nbիP  '<ª?.]{ۍp5Pm ri<#RJlx9 L,Î:ʪ̷ |n0JugL m ;d 4;SGtד{=&o{r?`YuaNŪՏ:6uAOU$"xJ&IZ~m Ijl9LCY```N|װa[ uK |{F{m£h7C@>hfہkiZ?BG endstream endobj 2655 0 obj << /Length 2121 /Filter /FlateDecode >> stream xY[:~>.I{][ODiܓ_:HɲLqv EVJ\bEQPp}%4_Iw8W?9IVR(jwrE펫ޛsy߫vGQ~'ATZa&%/{&aB;p%@z]ǁb. (_Iz}@_/k[yPd+?0H_Tn;~E)( "IB\*AN]0 H A0Z b"k~X?ֺ_<‘$DKrDL$qz:Yc:IhԴ4M"ڗe ںɼ9Q3DwD*YR;fCs^(35WtA㈇s)2 H8$I6kF qFh=燳ihše-=y@(IT+a9MHi̒R@AN:mϧ%9lJlfTL3r@Q(Rnpbz Ee%XaX:?wlM 1xd+ 1xE4{xL,4Amd[sgLX6(# =wF2e,G̹`Es {h,u c/;sCgK|3OZ@ c.r{G SGV]8#^0jzqP}8Yè[<ݹb軎°wBc(L}m pInR"S7ȯuTtR^sn)t!M ̂BZa4PHc(NL'ȃ3s@1 \t3FvIL*/tg6U~UYzGM&فbC@iPƣgX]iHIa8@.X |-A1PXȔOBi'sK\|@=Gfd}_2Hi $ɏc28qԪƓt> y^vy/TY|,29dRf~z '֫vјL=F䗲{vˡCּ '-T,f-4gڨmԿ**)man{9V0}{rϋmmfVXܦNoZ$'RilwPȧbRC"5TGfv"ShݹP8Qk`㧾obrpƀD6@q\oZYxn ꆞ3kGE&"LmVךͨn!-n6#OjsHD2DT0_NNp[zeH]L:9$'2\!Ou?uH ZK,gálh{lu}Q~HlU,qC7tϨWq|VX#OKhO 'OR@ 0pWmD."DhcPf̨P"t]gsX~EνF@ 9%8*n,xF0l+}+soJn`@*;b,{x3-q½:zvvk[je뵩4{Q Nzdln\-z(ȈC9 nة[5JϢ+W~݉x10^4XxthA0(oKs.t1((s3\<=)~#:*_W4p.{+8gy;bf.X0g'?.\_f:wbR.!)''"i^ȓKxKz GE> stream xYݏ6߿ȓ K-6馻{IV#K>IMpf8,ʲw.-`gH?>Y(%U4K7giW3z|}ƭɟϞz}1]U]/gɶBJEJiǷPevYf=?]u?ơqhDq5L.EU2rνm$"jQڵ]k;j++lU fe̤ێ<b(0.̄uV @d59&ba}OͯPc:R!Xu͔60Eߠ-YҤH)''-,CwgKqf},[&r-Jo2Ed*f^R稩o?fx ~+σMXs~u!b__|M#c4?ROgS2bj2 *aLtQxNo'z*fEѴ9A [jbմaPc!TһR`kisl2˸F;yi}\Dw$ ~7MQuLM#t( s*i3jvEbHV$hAW*PGTn RS-.ńZhHQؚaЧ"$@|ϖ{ dvo73 x[̮~Ǚ>f 26=&w KGp檌cmZNA ' 3'(d Ic޶{d-0ػ »_nm%T^}F  O9.)uR[LBAP.,@ iQI}%f %@5-θ&ku|XU0B`~,|q:"rZxpGbɖ c{ۺ2pܥvhNY/It9Vgڗ #Tim &JRG<q;']o,t% -JCjd=iF-00*eҵi7d7"o)?"Qr?B=}lKm#!&A z1s _2-OpNla:7+tOp :,c@>* * ^a ;)Q7{r}xk`\ 9 `$v9M`i<:bS^N>X ţ}?&7ygEtf~sV 0T uA4 S55 Š9E*뎴ESٛ΃@ 1w6<6辁k n|cPú}#vG]A1OwjrQ#!;c;.\U:Ez'p 8R>P0}u"N/p0>{!tSt!PrK_XW8HɜVv`!蟏{.ynNbs~đ"`=ڙj9g2?5KuQ竼Lw6gGb-Ǥ6[B6 Rބ]uӒVn3\`VBq`F BgEHØg^}TFC\Z>fLK|I14v6+îA{lQuJl'<ŬDyt({fR8ʗ_6‡S}hPx?z͕p.|^kS==J/RpDw_>/~9]pX;Ԛ̥P⃻bP"v*M5&9;LgLPtMV{&>IxqÎtʱ޿- endstream endobj 2661 0 obj << /Length 1810 /Filter /FlateDecode >> stream x_o6)(5'{uam[8Rfm?x9SsR>)<|T8} 8qJ$g#pʾ@V'.n[ْ_J4W+4"0шo|l6-t.(*XX162KKpYn.. .ү52K% e) ˱o7Gg[e5mګ0xZ_ŐΦaLCz4 [q)1~<ޡT*֤}y.v__yk endstream endobj 2616 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1398 /Filter /FlateDecode >> stream xXMo7W^(r>8$`H98 B rR3frQ )RrdJ9@9@sA lD #,0ۂ Q(Z|-)D  31#ii#(ׅ",HGxMG0quCٲn}YFTv1 -w0L*UStM,jLf^t&3: >j݅u!Ε0(AR nڍ@ 1TءS7)\RkJ{#be,Z E # ؓ${`l= zb5jU$) F\ts+&^PDQe!-%)g0_TqgD5WiO篗Ҕ{WOa}|brqsZlۯwח6EtY7ptl   2>FS,#]Q^qt~cxvbzbl}7E" bM|^ƵF= ˟77q^Gg*D34} AHLk_A|)#33f!:C㚞įm>Of 9 RC4^g~QE a8{F-!uPJG][ObΧhG \> stream xYK6W-j`ݍw@3%AӭW-뷊E5jLq0H,b*67iIdE^v0q7_zc)\e.o;)edѫ!»7yϷ;pGoZ'*3hgņKz^;cRv vYў-[Teif'HA.?|ww5`OȀXR.U1ͯγ6YB30%$tPSeTÊccEbBA5N2+ 'f0Wkl8aJQ}͚^0ecq#Xʥw&M~ da[m!+`㚅#OEHg;(DTV[g bt53nRR3Ii#5:-=?"?\Ѱos?EGm8H=Зvǣ(-\rAhwď _gO½u.sx-297H3씇-,:GFq}S^ͬ,m0mSE1"Al]\x Qߐa=A ;|~))}Dp#M~+dՅ&93z8mKGsf[Xqi`3rF̑o3e} ;"k̅ G2Lp1;TZ Ӕy 0eK[:4}kϐ>L4Yf< h;[ Ւ%Jq).31vEl~w{]7$g6VՇ5I]3ɓǼD '4FiZʃB:s/_(g꾯n@7O׼ޯ+Oqb&$+}Wԕ/O.c&M8|+rR0,!C!a 5#>^JڔqBR .uYBQj`ej,[V||!E}5UPP֠V,d9V3 2`iP6?%͊-BL>.r}J*M W@g !k[k p`+4$2TǡOCf%o R? I/*83EL$Q^mxS&8SHu9ʘ5z k{(LB2g';]-40 EA5c:a>.$~/ٚg{rq!b#3%\ mCGxwu_hBwKMcٝP㮝O$օY VvLw9 x۸ǣ>e4 G= $y`Lu_8j}Ǐkm> 笁(s5 @/@d,ҾAaKQkn#*HF7:0?;K?fu} @ܳ#mE2ܹ dzzR;k.Mf0U)_b4Lp@41ۥp-*>T+d} Z/KC5] t8W7R6..N϶s_B2G\>؏ys޵ؚ;#ab7')O"mN |u,a5 S+~~_tw ;[cq*n|cu$DNCuWЭO]/uG֪h1d<֏ ?XF86N dzq0~V(waE5C09+s$D/#}Q 2xPz$4R,yR&EHTe3xoshR2z ,3܄x=]$F鶍ߎSy endstream endobj 2668 0 obj << /Length 2529 /Filter /FlateDecode >> stream xYK6ϯ0r3")R9dg3 l#9LڦJdУ~Xx-hKdUWU\'WY2Z,JWЍ6+zd nf}8^Pda&WV!?uYoAzEqݿohV[(#0HyJ])R.K'e*UFB5MS7̫]i|G6R IjuEo]Mۼ,)oa.߮ ǃEEuܳ9w%x#S*rgƶ}1kb0pFERD1%R swZAGikO7n /k8z,+iX]7}Q%թ|jF¥5 A# Ug:QPtZ rܣz98W4vƅFԯeYk̷f+3u /{ˌu:'rVgS#Gg&fI}&٦+&hbԩ~;(* C@D(΁03P5yY[xyD- (VqJEY\>uMڲ|[W`@ v=!Fi+YipFfK2K'PSwe"C7ke⻾'モXDqhE }S}z&R%W*:6o,;Ay;JL̉o2pPY"i54Cߎ@C)wawF|v&Sokk(_i ^tnyw. %xvn04y 2QtIH#.q8J@cSeƨ nLd,BO(S3!o8; u]6 C?c"I~))wPSkdTdli#5pOptμ̀!>L5E:X=phjZzG  Dr]Ghkj`Oӱ$FFXԏD9M"Co0| gG÷ ^1?U|K?by$\#iBP};-ep5$xX0,(5.ܧ Jynډ`€GnY8cX", ^@BÎTHuU`.Es޹P-/10G;هC~ޭ)vL49ŗzDS(a,6t(]ݓ046ɐ!%AD]\]6W_DJe7I2SR/ A TY &J^TܱB +r[Ws]F܇ op55Ŷ,TPD3Ã*hDkϥ,KKyeg}EO';C9 Ve3yjx#E1*L! endstream endobj 2672 0 obj << /Length 1961 /Filter /FlateDecode >> stream xXoܸ_C xy"%Jw@.6M\Y+-$m g8}+ xI8R4X%a(Ȭó7+j\L-LNfrZd 멨bqr{na͏mK{m[[vU:7׫aOoM$dw!,_ټ,,no=}Cuvui)P)BoDZ$о{$*?XBZ]KDV,DQcFmKSQﻬX79sA ŀnVAN³X9YXsf|\h* B(_ :U'5_ч!4\߁OWl4UA pU$(l%F멓7P_P!Se5G17-# `™Dž?nr}7t` LSR;7~+>6cݾQ]{v֞ΫS1 =-"yAw)JԳ-gP8 z zlۦO' 93[ԃinpqAG# Rd:BNG؀ D='DqSiXZD:y9|Ly ߝz˪I1E|4S\iЏ8PFu~:AXB,'hj9=kSc +JcgLד7 ECv-C|vrdci2F($dOmlW㺅p`!=m` r ;:PTr%N)FyK;B "Z]9pӃjދd~uy"VzsdZ]+cԖ @CQρqGfQzD]!8PYQ~AVUh辯*t=)O[r=IcƫAo YY "pz>??([w3Y7"".sÈ8ST3pY ~~n%yCʈǞAs!ͩ\zh[0w- V]OϽZ.Adr}|p =٧!ӫ@\uvg+a*1艎/0uѕX8_nQ[F %;H;l hc<-~A^( >mxw?pcz0r/"5,Aj*M.ר)ar ZQ_r02v<ϥȗIJ$U(Ԇ2._M/ endstream endobj 2675 0 obj << /Length 1367 /Filter /FlateDecode >> stream xWn8}W-uW}HK[ m6vmhEWwCVY #5r~|T,XruXiyD#|P4_N'Ɉ >.MMޫXٌ(xq\!\F֥aƓKۣn$ j;sO($k+ @]j sxo Mڨajqyj.$QCÅ}dZ8jzR4i37WJnjzapԾQ+IXQFkHY:S0G% C/j v0p r%c?IC`9kLf*ْ>"X'v>L: { |" )xY$32n(=T ƃS =гbycLJbӘ%aܯ]?SޥB\ʮKvWzMDE7R؇W^Dϋ4JЯȩlFm|Fd,ݷ3ܐ1m(kv15jeKʃpNMV LjNq=-g.'\w4`HDoZ^읳q Kע,~ :UHpCvJ=Ͼ dv {YQ05uXWڭ.1l Ux0 ;We*_dאV?ypJduè`cQi&g[zް !<Xx>ZNۻ[vW`S K{t%48;xo1owgQQY$0N{Ite =^w !=QdeŽM=_Z>doe݀g4uG<ѝah#*FfYn5S>[kjWݑvQ\6Ի Uxgɡ7I$vIuNȔeu+E"eթ/ʉl=v`|ݶ <ݚ^:Rן)K:ػW5H+< wkxnT2x<7D+ݷuR׺?tcbi M^> stream xڕVn8}Wy7⊺YJч\bhM "eR*K.E}H2nR᜙áȂh8$tQ>\E?ϳ7 fPM1Zg? Gp;D[ϔ'/ =] 7l+wj\9(N^[ĵ>%mi]U=ujxՖ9 `Y} A m2B ƙicDMآzyYǃ'ia"S? CLA՞PӤPPk’aiRosX Yt ET2 c4 rń(V(_ϓ o0'5gtDuվāWѵ<~~$ 'GKD)(4T>Ҹ>sD!w+'?i*b֬yBb]h,3Բh B-smy:\SnqCu<!$kl*L6U3`_{3dbMaoH^c@4[|ݽ^lLExo_{? {qk-ugv_ z.,8Rk/,Do3Q3O`R91T =gWW'-F])ooXTXs\45jQBތƦJԟOE,BrʦFJl/.iib5wUfC녦"OdG/'}G,j2^a/.N,ZhuGb帏+V/8(6 endstream endobj 2682 0 obj << /Length 1327 /Filter /FlateDecode >> stream xڝWmo6_!d&+J$%e؇i[$ư- Z#bRrc~Ge[zC"{2B^zI^< ]surLϞܣ!Œzš{?+Ufq짗1?} 7nBUjD /'Yȣ1 C'DHD!D'M.")\Q-UILЎ㍭:g^ń2f߶9jKG %瑵&BT׭s$"Nh(zq}8sDxL@p4><:C S`:^KӪ־0^WsUYy\R쯺R4D4)|^&7zՂ~ q/&i YOx&VyōƝ@`/P(;mP~eInhQfeʴZ5ܟ'oQE2 !$23.̼d@YPxZ(̾p(VW]SVx${6Y筍n*gϞpeRʹ <_eY[r_C) zf @_&\\-jmݖ:ۓu9Z)_/Z6=Lb4K3;$dvig5vU=bmCAڶHFVUNP{ǀW+eP"""Jݬ(WϦF]فsJO.愜?bU1ΙĘqvb 9!+Yn݌eqTt `*{TZC3g+%:J.04rv?H{+4c$ɲaq\]{5ނġƾCw: Wwu=U vݵhgڦ.Ve6ËQ{ l>4KoGG!^c+[6-^HI4hmu}hfw{p\ѣպ=r[5BnYx#kU f#xW9D/Yq i@քuFٰ[j1۫!jsRY_QJk8u142oyw710nB=W|Jd,xFykb0(Hcx5<\_lotu{b,4^{zȱ8$q`GE)g;mVFWbq~~C}e}4{hec7Nu|t-rDUs]Bj endstream endobj 2685 0 obj << /Length 1447 /Filter /FlateDecode >> stream xWKo8WE"V[]!idc Vbl6RTt9-5np87㘔IUrCur#ˋ4hHʰvjQ{+\͂8,H?~~o+> OwG狭4tH>.{Gee9]|1!Hz^9֦);c9Ƅ6~ p:?4bD4F{Tg5 iĿv-vɪ7\`;r@24٨#X1 {}fvD`gWX5-Il͖ٻ18 Hk~NUyliGM$jgU| il@.fv,0{Lhcv}צUFmn-YonD(}/_FYX`7ڎX$F[\^ƍf] + ,u .ykrd3u&CtҮK 0Kz1:x$ONbQ %*8F̥ljC݉|yJ.icPP;=<+aυ s.lrp&EpmEA<'knߗ(*!۱jGoQV ӓ?p2׶&R\Tv^C칼N[[0ǔ Pݰ ߷e^ KhCn뻔M7;(D$s/ sC.OJSHw{ǯp7-3 o!Qb4d6}׽r:D?Bܺ}q$ 6!QC%11jdꗾs;g/m>~ȳ)>k |%d:O 5 )G?Y._2$ ?c1^!X}ĵ> nпXY A鉮%Gp@ W-Y+H7/E^ " endstream endobj 2688 0 obj << /Length 1204 /Filter /FlateDecode >> stream xڭVmo6_!`_$D=>$K@,6V m1kՋKIwǣb qc}{!wN8i<ʜe}S}3n|$/g?^DZ9wCU^i=?bܩҪY*)7ɼgo6c!NOe! (H܏niҢ]#3ᴃ>AP"L-ro(d_Nh ; FAȹ ;`^wPD<:<3-*5+dU3\ 10ZQeMmd;R{䶠?朶WengqlT'(6E2Zm7jaw}/ n eO]j5j6@wVhB$´<fǸXiLeL0,&Ij'Y82u}aT[ +iH ca}Ta;v/&bƃabKh, %p5<Ⱦ.18%= ,RVE2h7C%M{WAK8>5XaIjW #,h:_aV;\鶦xmM08qGpJPY|m#uKtN~]tJ@=`O-SRp Q{f#u*|N)IwT&U`܋8j%Va@\IĽ-a;wV®Y1~٘w䩅U P,Xeo(pg` ?xoZӨ(O3ԊySa'{?:F[UU? endstream endobj 2693 0 obj << /Length 1273 /Filter /FlateDecode >> stream xڵWMo8W݋T\Q$-$i1Xt{-:*K)E'1;PUa"@D:Q' 1EXU=8ؘ;G9s$ 2̖P^ģcnzQ7ߣa*Rj!=?L(8>ϮϮf5yx]:t$u4"EEK٘ua3q3aJ,s|1,?eѬH.h&bhƄ!{,k;߀0AVޠM -F&ec CX| /./r̫ۺҫWn=ݲ}/]Rޘ'C?FQ'DIeD厒쯱3E$&1%! Ia8< ])<1J@ "D<Ta?kt2o^ՠ?cPQq~"Fw 9A9Y̥x>Fao6|m}p yy)s5J%Fy{ jX/6{Fxޓ&{g K,T񨋺؛CJ,e6`8uEnB% =ݷض@lYmF'sWԴFsm8^S`B^نCQU0<Ͳ&0Irm9z(K{fmג 9*f}<~54Q~KO3D6b->3> wlk5TYɝ  pʋb}*L##0oh@y_aB䃒` lMsJ{BO@b!tGBGh; hs,\w&[+SOыgQ/}Q yBh5ؽߩVu73zYՂ(o$QrtvwHځH|xH1ޫrұk֮ew4nʢ>)R!HRYe7碮ndwp]QxBVv5- WyC( e+%et1^orD;=Oz Zͧ4wC&cu1.JiՉ5\]?>M3< ه綹*lIJuU}65w}ж"LEİ"싢u#{ҟA`y P υ^k ޯo/,6(!ew%F8)aWVv~jUC1qVu;6$ݯaB endstream endobj 2696 0 obj << /Length 1514 /Filter /FlateDecode >> stream xڭW[o6~ϯ00E] !ۮAbXMDzh #qK p|@7Z֕E7)Pof^ 8#ȑ owe,30'~B5HRoPhJќSYٖ݌@#1MJ@S|4aSGu\žD $K5a]XMja ؁JGND1(lj%Fl劗x:[8.;o/(j@kjЫ'p>$ Bn1`EZmnGm`s[hǶRpږ{I&\%Q~+#~ۓ0 ~aL'c.b-zV^NIQZ+zBɵKfIS;窹i$=Lm oXsRFƇ3DdNA-l@aі"=}k/[dՂd[U|<iZvzmٴX Wfs%]rep9/dczX88jßjQO/~F{/={WColo7j}yJ˺oN":=Qew.2ѼDii!Ԓ$`l h=X7[VW<*vqõZWv>CjU88z6]J0hGq endstream endobj 2699 0 obj << /Length 844 /Filter /FlateDecode >> stream xVo0~篈K"5ĐtCWکCi.1`5Qⶰ~vRևLH>l>ȉ3 3z-1?󕣿i{I abj8S|Es N=? {vwe6قl=g@wKb$8yP]!D!@Ah EFά (Y2g,~-dʹrMjϊH`Ԃ~ DK4R9_/MA+! -C18PGr* r9KOLkװJ[sA@k&WR)) X\Kbm4zU~ !@! b{o> stream xXKoH W=@5;#^8Iݢ.ƋbHc[%y%NCJR^vQp(cȪ?jE""+Ϥ6->~Fwj}ӛ X()z3]zLt}w⟗ցs~>iLE*N-ߝ^ QN;Ft-i8G=o3uS#Af)> X*5[u5VT[:vu4;r{:<ًcpea["%zLZ]g Pi++4 c j9dS7/g@ 6Rǁ{CL^i:(aGVArT9fg 1Ic2Sv{#Nxt>6lQ.% * 4-KA$tJ9$s#Ox9}[tf~4UʤX9ͱxj( H鼯ϊmB)pdrhmPXߦ=䫠> 2wiy4bTbT ,+faBr8hע0^5o{njS>u  AeLj=.h@7T 1flXp Gp]Iy; p Xh钙V̄_wsS%rUܙ5ʺdID6G\WSCD6O fd! ʺCvFF<{MAUC/QpV3G}23m{ /t07A+YKZE^so@G~ П'>'>NԵO&?L24{l:`5ZLbx"!F}3(Yp殑힋3ҴYSZsO`LO`&slǭm෤6\P<=g8L5w+mExp1+[sm(WAPOCҩs9KQҎYe]4j5M]"S])6 vmq &V8j&YWv/,i+im 2Q2[Gkj5y:8D,+&-nz+ F"miQۃ3-򾦹B0lrqj&mxyr$HЦ$@SM+G?Y endstream endobj 2707 0 obj << /Length 1490 /Filter /FlateDecode >> stream xڍWYo8~ϯ0/2P3"uXbMvlbi$j)9Q r~9e> Gy8FlTTG;->u='{fG'odC9͖fZ6IEAr<$8xNRYUj<S4]t&B"8|.#!:3,f< XZ)KOkSEl+i 0 9h/3"SҦR$ !`Q/HIE35q:(!Ν[x_|P-NBH9b^vVuXkbkJ̷]Yiz&ԫU c5{a Z/Z's+*Zw=(e1yB'i2E~" G+F¼h$])窼g$n|q@ohquBIǏ{6N?i[l;K!o!OPNJZZWf<އˇ_>Qk^ s#&e2e XB}ք׍Ut-xOiuu~I M鹗/-dkqO$5zd]n޸(C=8@q/ڷVFA wRG0-L,DmǺKQ&T쩊>L xWf-`1Tr"E/pq5Q@G꒖Zx(9_(?{¿z3qҌ _/kch/?2xui漆 HrYSSG/soVwwy-K Wk'w\>?SEGP@xUMs&шtrOK!)x5/ONSIT> stream xڕXY6~ϯ0RUS!gE-6ITuA|g8#(m9q.XO`G٪Wx|`ܜq>y8^σ\nvn՟޳jݭ7az&b+";LExixYg,XɕCld/ˆ MQ}w_I7]ӕjG>~#ڧ D>Le )}!l'GUٓjPKdGtG(# @';Jw>>뱮@t߳1l~İ$I/n eyθ0&+}me__P)? ]j+2X Ј#p?K?DҐy0瓀_~K:1fvGwca' S(J\Dt6)<|a{Mʔ p؞0<Ԫj}E)(B:[Ӊ"V{(=@{תxn]U Sck ೫1<>[G9=wLOPhjb 0'RZ01Uk4 Gˋ ՕT$-BxwCns2gmΓqΎCuޕ/uQ%i t X <ǟt )`as.f`C1gE0{!> >k\/DB 08 ň _E(l4K}D4 `hq0$ !Zz1dU3JE8q;}z[4p/vD`n@ia+=?ָħ`s#]q))0B;ƒ7:\ /B`ADSxI3DcsM/c;N.p~Y l9}{ģ%vS465<ٕa}?v ! endstream endobj 2716 0 obj << /Length 1997 /Filter /FlateDecode >> stream xXmoܸ_hQ"(%qi] ˖fc ]0 e8y8p|_d"eQ(W՛5n߿NADwR.x rcoK_᥯~I4pJPK?L D.yaO8|:S.4b\Dd}e7O=׬&^QZ|dBS#Jit>uߩȀgA_0>tnjqIf[k/Dں,ێ6>4ۘj 2L=6hhmo=SFRUfwZ)sYwNWj~*e)af_4B_5Exۥd瞆mu=UE:ጽ~eXnu`N kMZz;cvT(IuGe484>] 4|WԄ,S@QAǰ?ML[9~g\sbt.IF SA`|vӎ*+u;憾Lh@GhEZ}w6ؑPl;$;EhAGTf&D(0ĉ041Fi( P3tG9pv+yĒ{D,]Ӌ܉m+c//a7}Z_^})5\nho^f9Vei G^(Hd+7*u(c\4~t8Xţb%.hKпޭFvt(9g PW2Ma$+FWH01^Z ~(j86pO$}-uIZaD" ;+K`VH-ME$,K,o57/DRB %>hM]fg*Z8;m8N8? gep 1~A"1Ƴ;+9 2jW>u45 @9[raH τpp%!!K ֊d;i`| !VUnT8l muֽmoǫ)\KgţSB9KpzҮO_15(rͦ'`t55鵡kغ5<0u22(d ªmP,2yeXPKY -Y:^HÂp¢m(l,2*X(9X!gB0Ű4 OjM˵s.~3ם5=MmwM,4w#" ?^[A-ok@ztAu>mn z"9%<2p4d;:Aj<Ͻ&/f!h 47]z$s8صb\G];˲6s|O>/Ut~BrxRgΙ+^ç*VMƱoȥmIs@lBq=?ԛ~;$,ѭTxT9<@AD K^uJz&@ endstream endobj 2720 0 obj << /Length 1264 /Filter /FlateDecode >> stream xWOo6S9@ő(Q+vHd[(ȒGi}=-ZC|z{$G(OxPϰe7wHc4|3?c(9 拡y|߮H=(!y% /~;ZօEqFte|oY#x0g## ij-yթFo6KhA&Ab`0 i'c<+CiJ{8aH@F{M=B+Zom`=[%euv/k)fVfki*:P푒I4CYzX%( gLНeqb2D20/PhfjQPА$y͟0er#ͪakHc✱jz]›9\ʁ-fg|8s.p~9.KZmj)qW|Y,k7Z Cq/tVfhn[hKh售$v~_,xjJgµU]q`3jz[5& endstream endobj 2724 0 obj << /Length 1403 /Filter /FlateDecode >> stream xڽWmo6_ad #J^Z X']&l#3PYDm0Gr6) @<=`FlP,4??NA'lzp|.Ā,r>UMgB6j~E^dDZN/hanUB 0"t~l)PKtII3u6_D,VZTj<WjʮnK-Nbiӝ/x. DPϏL8swڔC`/4V+ YUҀh>œK#&/jwqo 8N!/_O9g!KRRQ0}?$I Ҵe=Wv\67X @vA*͂ 6 'IX8?^m4S)SkUxUop|j AxmxỴA |]cg6h%;NWi o+Tz1JlYA+p&bI;7k6&!K3?a$bf/m"8FwַZARu ICh8˅- yzmb+ Ʒ%BVa9M2㳮 ٓIU腮胺 T3-JS }D)ڲ1 5@ij;4>D)1 V]Fus!iw{EU)_uα޵x%.$<긔ݾ"3w˲Sˇ\yW͖ mmͣ{aYAGղYwL=_ψ|N> stream xڝWo8 ~_^`,{֤zm V%'Ҡ8)"?RiO<̛$A0Ovn/NsA88 Xe|XZΗU*M  9[h 1uG_Nfgw0aQMҐ 1v7S$ a7 m-.UՓT5Yo8]>$?be6-40m(ixo|+Tf/-dk<ŞǼrE,2L`NL'M`8WPFz#C  r#2 ,YR3=~\PL $S `K׏XS?T0HkV?u_d!0eQk0քG堌xW s/JR[T*f*"~~LAȳ}2}n J Q%=g@/~: 4njg y8}UBP!q<ϽΰPQU*i;yWɡ=p;;|ֹ:= eHtT"PLV =xB ^9G;,1bG}Dg7n- W(IRfh>ld!4@QT-9;\9P4Oɾ3:N!c_\iNQ61\qgny*x l7a?fMHKd{]X#g_l-lz5g/lh[۵Z;Tf1(Axt.T^;ڀ1LSSI(Ak&A]K&04>:"M]c6@3!ژŸtl I s6v*{QK<Zнhh( b>C=#&` $ ^;XS;g4twH糨 idn 6 ݬ9tλGJܹkލ4}Yxvw^jhQw/ɢaWٺUneu>YB~9@xS^<s2 WóX1p9t4{5,\ U]&}ټ)IФ&0`ΐY_ %b,ff4ZPx@q4).]x{=. +Bf4LO )Xf =I%ó,B,ЂW(uIBUMJP8huhOeJA!6D8@ћ Ug%J@<26Z^Y=T\wNxG<6R[6"HY'{$vsnkAsI7D4r 4A4$J #`1p{$^!PZEM|suns OY7d* n-~px-#37 ߵU Ce%^]%ݧPs#=6¦* ,TRq2I3Ǿ p endstream endobj 2730 0 obj << /Length 1529 /Filter /FlateDecode >> stream xڽWo6~_al/2q"0[d[Ѯvmh9ےKɲ~G)K{XgH}ǻN`!ɣlR/4޿Grqë8ЀAN'UE9]ojae/~ջ[\x/VBS44~Zr1[t{&8MhHg%YDh!0ѩ'k;lH[ވ'Jٴ8Fq4YH0oy+ h7p˼J8fߝޓXLh8,=, fn =D$fDcnXYi0{BBT8LhۥkJy*{3ySz a@l,"%F4VՉS LS$;v` lߡYb[j؟x\ ] ;eD0j6(޺TgǮWZH@]Nyn $- y1MS£4WHسqnNSn+Xä@Vm/u&sf%l-2UҎ[A_a놾'g~KFРR~QWď>GG;KHXڿǍ)mxal7Zc@ce= ]?VnyEbhR}~>})*$Ir&Ib %&s2sRKiNX\aY(v!EǢ=0WvDiKYI/u endstream endobj 2733 0 obj << /Length 1135 /Filter /FlateDecode >> stream xڍVYo6~ϯ0/13En۠Hcm!Rt>wxȑ Xhd8 '9<&5R՗4OgGq< )iNfY1~^s/;(˯Vp PX˨;l3ApZ-.R$IQEb>O!a<}TB<BAa0.{-<*F.eJhB⮂ 7 ˕aoAXۍ,5:Rv^GpziC-6zOB:7kی iI0A]r0jznN+XB]r^ *qիɧm[кz޷JzlZgl[wFu`FA9"avE D ,DVme {YG2"f7P{7[!A@!@ jrIHNUYBTu(S!#{,[UX~ƽ.|W1aڹ,7l1:)I6.dY/5q5՝a>K=~5XN=QWصZ9b+`y>w.E#N' Fѿ_IeETU?*\T{7'~8 OOH?k$p(}eo$=Xpwg;4e@Mߓ$ף{HQ 2UÓAv($f[:[[}8G)zS{ U!-ץ=L6"J2 &hyl''l MqKdc1OǓQu"+0⸣ƌ4sG-}AsZW{clSvh+3O3)NLMsNѴplfSF9^Zl'sߎu3H~j(`Mm1z݅@>lT~{mtoFY5{Z7X endstream endobj 2662 0 obj << /Type /ObjStm /N 100 /First 962 /Length 1586 /Filter /FlateDecode >> stream xYKo7WҢ=KrHY8) @`@[#Y$FeG\ j[VqY#gkS(QS.#+睊lLa!*`IFXE)k,W ]DB9`IY`aR0ֺ"EH1l& H0̠dU<"l Ӆ reHCR0)cNxLW|TZ atvO”>$۠DcK lp .2H7FȉJ F`:2E΋LECVH/ ,>&V"qW|E?+F C)gxɌ@&o$d< IA$2?B 1X$n' 2[6$) |N)X/\*CW`w %'&!|!S1tEC/̀g !ym-A a0RJC{'0di˒2R'20Y*@x"zC¹K$u1h2htr2^ A!PBvp`^=Wˤ-@FlOJ6SʟD'y@:wOR!? (Ozh&J]SUoWN75~GՏ0TUgY/&rӔwӫV][ٽm^V{4oG8OǞTw8>tnn:.xڃ-Tgw0h;|'~>[ I~7F;)D-Z5ve pD:ZMZYX̵=1;|D=}砕x::A:>B~H!uT`:S lIZ{&kEp>; +-g"uNTәviv8M j~ 9L~{;Y07BR[y֋t(Mqhq)'X;__ ۸h6 >=GWzd;;Pfo 9dKzgP6Ae;aN&6Zثo)mc['^Nu}ukfdҸvېkQ©k-lMGShVrMz5t81C"~M;O`hߗZy>dfnEuVMdqu}JXʫ]/>V栃Gf,YS-\.QYMU̚E_Or3tcxU?fZ+Yʺܥ\>6lID8$}C:čr:>}Blܪ:Z6 oHvb~=>;KsuԃSֲ9xYرql Zvb01Qt}sұ{mLy`;\RE ӆD endstream endobj 2738 0 obj << /Length 1286 /Filter /FlateDecode >> stream xڵWKo6WE."F[!mdX,{%:"E%q}"iKܤ"pHo^ %0v]U5:y;RG IfFs:EE /6C'}JdPδge.s%S(/%Yr/zu`~9=SXX1tC o:}8#])`"y[(.>#c>ާD5+1= ja=\CA:?%*D#vߨDk"]o3{)ߊ1=hC؝-VvX;P$B-F.uׇӡkuY9T<,ơe4{4j| R?4T]'_B7 !0J3::C17@LB.;Bgtysw2{&8 v̩ro;Ƒ,ئP0B!3i "g>ǖ^pVU5ҔVEJJB_>CMr[ /ViC8. 3%vI4J1l.UDndm\!(20ƈDpHTHL\J܅uN^S+ޞj$HB%eL8%Y_CN vN7%U2)+~2"jچdW.ҩ VIw UqP;#^T4e<" Tn-o!*9=cE)_J 4QdkT҈o *,hW}$ܳ5L)A*Hּ MEDzIC NBx}8yQrRh`/e iN_m`G5to< {]g]18'0F!RYw*P[Qҭ\,[Ciߑ/ -JN9;1KתPNRx17#?av1q|g]]>G"z\84W/NH, #F0G? endstream endobj 2741 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڝWmoF _ad&Ewɒ%+:BMGOʱWO<ɓxφ?ދ^,ެ8T.z(4&gcqv{Ib}X&+%dຮ<Ϸw^̅LN}ۊɧ홾5D^8!" γZ < ˸i%Jmf#bJ e MnGi9LSZ$gHJE<6*`T&JEڼrR,1(LmZL{g+Y$y*JZN\xJ^E"7Pj]z1^\>wC:*bmXjgaصPl.(.6.zIX_TPG"+JYԸɸZX;5g)L }\ςoԑن |8$k淺iZ  O]uN( #QdY](H zַu" `dzVR+^VyR&F{߇ΕY2s [5;!q?,sefhV57%BFtBR|q"VD{ (\ @''&G׃ޤb^%ˠ)zsjAyXD$klL^75 dw: %R&OYg*uZ?fefm;BKQSwGS0$mibJK: ϱM}m%M5ئ)ݍ oA< HY$Gڼt)*VJVS(sV9Wwq$쟇޴:(mD(ׇkoCc丛:?}*n9KJf3Xt%ZۓλwCuc(723۳D$B=34!07`b0B7,7x[oRׅ!aVRm2umޔP^,- ^rxҷBsV@V uWN1/ 7lEǕhr~ dxdP=Y*10śײ!cQ@ȕ0A([H)F;j Hԫr1B,jFJFAj)Nܤo%=_'bDuDmEqn*!a yN@?~%F$VOŇ*" endstream endobj 2746 0 obj << /Length 1594 /Filter /FlateDecode >> stream xڍWo6>L*ZoKmǰC}ꊍ.I1Gɒ4A<C"pQu"esX.hE|`'/Votpq};u]->yw|oZq{$D(nm)~.7(zrvycz],_dy8!ywljLuQ,pͲ8&~RW17;Vqõ0V ~AYe,"@pHp}ݙ\*}D݉;>~ڈg(~"^pֵlWnJԴmE`{r> stream xWKo7W+ KO=(~$.؈^--],)??!+l9!( ␚(|(TG٨XQw-GH|p<_hr#FINs6UJFuPd0`z}խT]qS ͷwƜ8ue$%YDq&Tށq . ) 1ey% 8 >t], 44J,464jt Hb󡍂Ƅ1땳o6gQ L4lj{-ऩw!uJ-zEQKRf[ <v+>Ie+\OF0 @>~ X#aMng`7] M@]-ݴbpRNd\!^n!ɚsfVmm&-[ ?ad?8i?8~a hV endstream endobj 2755 0 obj << /Length 1570 /Filter /FlateDecode >> stream xڭWmo6_a`&+R^2CӤM_ah ,۟ߑG:40EH>w܋$?:)IǤHI>^Nur!ɓWOhDE5\M/48ȏa\R˦ӐeGAΧ_o79cOg$.gt$yBh SٕZmz6C}@a4QNl`! ֢7kY{{9eyjvJQr/Cɥ1]ַL _h*ܕjpE%wL(0c\en{WeN~K5KND2[E\G+7?b A Ȃ˳נ9Z˦X[} +CZ:=Nf,M!n< V2QIMVugZwgSS%)Q(`gNngDMH) 43¢t߳vKxr=9ޏ_""KaU<gwJZkJ/x5́ejB|Ԩ/)MVr++<|V)䏙\I`yckŜP}j\NJ0W0#*V g$yJd݉pm,'YQ컡U"E'{^ 鯞Q,%q-`x?/Z5[33Cg3~9"nĠ[FNuV{TZBqc 1Gy_ugp+ސ J ΙpLht/.C5Y J06!L!6X7HPC]>yפݵI(U_rgx/T=g[1F&'Ytqv溇`Cҧ辻5۲[<8RlΒڨser[ܬC8..<ςw`$9P칛T63<0^ V,#Pv%7rt=YwCi&*NJ=]߂9M56VXG_88QKrkG<;fꐸ8q UYӲeuh& l!yZ=\r趂?gYC@Bk|UwpݺK2襃2j:JvD+ڪ3X(WJHi~xQ׮2:wàrxoeѐ]{PJ*>3Z[bA;rP8;'t6gn4@XE7E yvgU(ĘeCuHO7g$>ޤFu}Cߎ? <30 endstream endobj 2758 0 obj << /Length 1235 /Filter /FlateDecode >> stream xڵWn8}W $E6-RM) FmhPTw~Ҷg"Hp̜pBg1Yϊ4%UVY< _?Q'`t f~{f4&U\|qj̾oW|c4MUe ο\WZt,<>xv1dIr"8+]hJbeFh!$$ÈI`n[ٯH !tze 2͢$!r~6=$JWe|G 9 b,""jC^5LXp+q1FyKy10R@ :QO3 TE*JSAL&B#kV 9f7r Rx|)2|)КRpOAX5PkiY~̉SJĊI g;J4oQbaґrϥúhCR1=7MV4?0q Ombo{Z*YqCqAjL5PҢX? \Z;Ӵpk 8W'X:4F4< j)a%<;SB9WjrOxƹ)hU䶯QZ w / >T< n{\59f1yՖ+$yY|<] eNsqכVǒ;)IQUl\uEK&x7<0zw _e-9l):y+ܰ Z5CX8D Wwkì[)1U%j x߻v6Ô>>>xУvUJ$;.+ |z.nb~y7"tf F8} !6׶G>[qm,8PKCkm;Ž{\ WIT٠7ePQ#ǘhwЛѱI /__ endstream endobj 2764 0 obj << /Length 977 /Filter /FlateDecode >> stream xڭVMo8W Ĵ,zHȢmZآh{Pd:&*KH1/+A45yP$Y$ጧA:>7gMde~6" ΢bU>WbmdNc(' t6>ʅle]pB""&.Dp?R# ϡ#$iuqԴ¸6x?/F-nHpl;|)!;m.7m@ x4E0eEt.l69ֲ4p0$(fZD<kݓRUud HƩ}l -Ҟ.϶Z5O=)?YJ֎$ӬWeQ׈pYͽͣc>[g49)f%M"F(4;JR1=,v'u}RU>o# f 'V+;!t\ȶ(zpk+O4CuQmED()ys?0umw'Uɭh(׏j]8ɲ!'Vӂ Rz6- \{?Ǯsc[c,u՘1=d|y7,}#LSlgcП`v|fOq;TIS23sJ(;iM7[8gBNׯͷ'3*0vs*Qq=dNNc',ÜdOsVn\nsrB[|ҭv $}@Eah7d;Zh +Vt9e>*K4qTϺfkY2z7i?4Ci?7Ub>VOfr]Toe}o1mj͑vN{]db~Oj~@}F+n}s}/~./!_yIffɓ-|.Y_LE[.ՃĪxS*,骚?Gj endstream endobj 2767 0 obj << /Length 1497 /Filter /FlateDecode >> stream xWYoF~PsG>ȱ:cIɆBRq,%QCa{ oFlBM: IO~ߡ:X" Ib~D\gu5>Խq(ݱ0` m*xJix5F9)IKݴue".ly|qe*]J*rV*wo]:4>B߮ 5<$ߤ,r\+\e` Ԅ0nKs.Xe029Bt*J@$. g_T `էyLĔbDJ,N6bv]f0;\p%nFF Z1Cu`41N-_Fo-Ke=rAF)էg[sd\FÞW4pXHw Ӏ&]ma%@#'Wl M%%ޟu?@0%BNu6#s'%(:R`W[{ښimV=@az[!`B3TIE xbR|Z# #O41 l@ 1`}S. 6fmh0bO"2&ѷ]xR ÉvC.Bd |לZ&cX9>iYQJ(vLs{[j{nUi7 ,H&{ }]:WlV@q{2} ?%(No_QAcIJ.݀k_ o Y( n GDt@zB/})C!-kI3iR5Wi>ܐӐ*ű S0ךv(F%I-,b1DW$TcԽ7d_6> stream xڽWo6_!d/4sH#C&YdK{AUfb!Itt<ʖS{vm`;0AʂX$G6wq7alrRg4e)&&y;F7$nƝ~Ѝr=1W$bҩ@p;tIpA8OhD\Hx9H%yff0'(Fifg۰Z4^36Yc<(x3H.mJ!O)^Κ}/:>dnMHv5GsXG' ԇq\/|!̝;dz\AR/D*;F$16Gƅn$qW :dP%d!|1)ߠBH|i R^|(<3E]m6Oc*E)q@dBCwk{Ŵ7R8 tgE>/fE铆b.Tq$@v[nۈd y\Bf6Um]YkET0oO(799Ex e]?!y=YYzMH.ڴۺ1{&7ٳޙʚ&"v1HhHa_(6dmu4w{oRIaՙ9F7 J~"  2jl E-TaKcØc~"~eb u; zR@,u7&cTUed%]6zj^5QI΄<(<dSo\['uY)f }m˷ΕK wM.0%,j{:me[ TD%ܵ d endstream endobj 2773 0 obj << /Length 1408 /Filter /FlateDecode >> stream xڵWo6_aI*ND}CڴC -2}&?;؎6{1u u98?;[]k,%.uv\|kh)BP9lޭpߖ㽊p'th%Rʝ>0/N]ޡ݁jfc A2vN'K5H]2H~z5> WG,뵛3$.;~Fun]Zo@WS &ʃ= {2;TJp.|q>%Blִv-ٙ~~>/8BHӱq1le[E1Kñ-[61DcI/c14]en4  . NΆ>p 4ɨq~){`u{YGϬyrq͆OG ;Huƚ 0QI.2N4W2;ugOi6|4tv:jP}O=O ;)f..fdQO)4 endstream endobj 2776 0 obj << /Length 1367 /Filter /FlateDecode >> stream xڭWKo8W D\R3Eyv& vQmڒAM;á\ubἿDA.RX b)O" 26)l= ÌADolQzBwYT۹^3ŎjFWE? _9 S/X<Ú;!2E1R7 ]#h^Sb"iJ]fiJ}b\|{S vb }A,r^U;ì8b#DU빮-|Ummʮ&ދ#DỸ^f㛫ga,e+8e'bY.Uⱆ'ga [ui $5Ln۪IyUL/"EO 餝1S?XEi/?*TcX7x",>֕hUu\PH0JD?N΋f=)eQw졲3:]5v:T;{R)1`( xȁ2MŸ"n|އ -|lkv`7R?q:: 0Rl ucv,d `=c- !H"Qޘp/:Ƣ.1dJ>\м`YsJ3]Mgv_00>ydwK#:0v g{T;(0k L4ߞx3\}/}0TABUKEe@dlu]]xn- IO_M|_!^."A)jt*,$v}re~R艆ƬȲ(+IA퍡NV!2w';hξbNf\Q*lԡ]>Bq]\V ' m@im(N,[V;G"TMUC- {痃3U"fխg:Bv?]k7^X~/ endstream endobj 2779 0 obj << /Length 1245 /Filter /FlateDecode >> stream xڥWmo6_ad&+R, 4h<C[DB$Qf<ʱg6Hs CGI0!Ix<ʪRboq^ 1IfmU|;^M'Ћߌ}΅7 \jYgr lcS0swѶwOHQsBC.Nc@3-%~.eXvW~Cq 4$TJRݕ,H.SZx]'9[[7YU|xcU5N>1۔{P,f#+15&=4Eʢ]c+;RzQ5j"$).8x. O7] {?$B0O"@a꜡h aǢ`۱D9M :ϜB %\?/r"x0dY}m9j?Ҫ171-} :e㒧7!{lp0U[udQ]O,>@hRbY& @v2aN\˴S/ hY!> 3s%*bmH_ϵjjRDUkZBdj Se\*;CۄPtx-}J_ϔߥ;KYBZAx7VZ52}ٟ+Uu  W)C?{E28e2LF7cqRn' Rf 1q0➢Ӹ !*[7$bFlU7*mm2x)ӶoTk`/tZ0תB:B HŸn[).vھFd d^xg&cֻM,M+,u`tf֋L['JVs P:bJLbNwWłᰞݣG23h|B" Kme8su ȽN.\p[=1Z)q=e` ',UF keZ/Vx;8{A@dP6vv8^vP*n3H㦦Ǫ<ߧ5&Ĭ{U{|>|=W*\J5ݜ(qNM endstream endobj 2783 0 obj << /Length 1601 /Filter /FlateDecode >> stream xnH=_a0e`mizFMUŖLb 3 m>̹߉x#'7@*,'67zzw"Dj~mN'R/u<|qW٦ I~J? pu~,CIɛAfOT1icD (.cF-ʢ]2M%@t+{ YÐ'[)4c.-rRϳ9%4QNVM_8Fv*nY/==6Pa@55\7݊`3m_ץ 0AB/ ( e$WEуfS`Yas9gt36wtO !ɾĩ{  &̊.M=M - A,lţJRAXxByD#48C}xaFX~z.x<ľ\"Rͼ Yۢ͹,*[Ӻ9Ώc.D{ܣ^-q`uݔP[庯pCEkh&i,.,Lt1%lj*7+>\/[EβZk @!|I37ZgkM#qm==F&qo! #n%0jf<Rgi= > ^@n֨#IuǛ>%4QvqA:.G#ug{ᓄ+,l78nn[x[J$!Ă9ypE/ąG7Ee E-f?PvLч+?M=~]Zv:,6ݯ} <;N<7KLyshP6 endstream endobj 2786 0 obj << /Length 1645 /Filter /FlateDecode >> stream xڝXo9_^61^Nԣj)ۨH=2p *t{7ķ5AVݲq[| eP=sp3VgM{,^z+ma$X8cd!piU: +٧M]1xf]^,8>UZgv(@dN9VIO[CцR :g9oyR410d럮 3( Y8}B.a~aY0r8jiغjg,{ ϶㙢-YE䜗Qp.Gp<4G8VWGviwnlE-8ҧX딑5-2x+(-4t\ϖDЫIh嫃ңЏbL{k3XG*{a3:܏q4;6wfފ ` iZщcȳJ: Qv%h׍ԣTT_i :ii0WÔҰyj,OΟ3pU[( ^'e/z9ږDvdf67mCRWgARg@4b)A߀ƶjJ׽t7)DlZ2rcAvii˝ݘ&%~R召|M2r$=/N>P[^NKha@ 3V 8dik%=Ko[FTrj]m\VC|55y+htPZ'9$R!v>=(ὭDO'agsÃ_ O}(o4FCO%%z?<>miwW}HĎ_+lenֶjk*DG5n鉸q3; endstream endobj 2789 0 obj << /Length 1420 /Filter /FlateDecode >> stream xڥWKo8WJ@V=4IiEjtQ490c%;ál+Q Doh> 'E0ɢq>)p7$A'}Qj;^ڟFQi'Op)oM)i$Ŀ}8x7L!S}8Y>I(&Rhؑ$c)ȵ< X{3-~c>0 vN; 9 R2-Mk X&@VbkVH0("3TRwmM'Z.; 9/'].evbQ ޶֝4h=1-P%m9 +*QwVjD>Y'"ѢJ]*)mJ.\eg^Eb!ƯYHZl@c\Чj0-7؎ ÄB kC'!XHϯCk^5IQV}8F۲زܣ`HБ?4SXBTJv$E9ORV]qprH ZTAX^(mvVtUTP RZPx+Tm7q)*9{e`+-TSԛc:-vv .'}}҃Q!eϘ?M;Zj,RkVh9ײs+uYwD=@(TΜcwI>RRn";(;F!5*Ϙs6[tuwb k(Çɐx'_S Bu$6]98MP5,d@#U`05 ?j,@^Lb+/-BFsi{5IH"Ί$ Evmvٱ|lbٕā9iҳcYp` Xd|HoKJW?=PWv?{M,Z[pqT ˅'"~}D" wRVob#sFCpsjg7 ̐Ѻ*j MXʵ9(N /xHqg)x+ Cs10c]J7/e@ڛN;?1`/|=0mPhcƄrQ@ 6exռM>%@}Ÿn[}`}z+2H;cp,Gh[g^P6 >4ǛrC #HF9~pvۛԋ}6z> kÌ3qgdz@hPF;۝;Ck) endstream endobj 2793 0 obj << /Length 1479 /Filter /FlateDecode >> stream xWo6~_al/21$Jb=$M[]0 m2kCwǣ9SlbOeqTϊjF/_ oa8<[O7zkM78'0Idp% 7kә00ʄJ-{(zdphh&b!<]'L EɌ%fY3B4+|$Bd[ 5\j%K31(kC+/MW6˞fέY4dtՅ_;~*H$,Qj6 Ι+WXA=_f*Aϒ,R3X#s*v fE[^5غHccg=xb 1Ń( JĄ0ܚ–YT\L;XG71I(O_WFW//>eE_Hhϊi᮹2C%D,^ e"5o r8 jf@є ZBJ1X3Sps] Yӷ)x|V%M'/0׷QZҶ> $U>#;U$)KվԜ-VW^e [M d*_Tz4$-<>Ӻg_twXԡY|;4ѳ4dP^} ILֻ +αwΰyNO]y_`L܏(lU'$%HVb ;DZSq\,+N6ooZj{615]0R9z сmt=x(]u"3νr{d'0 >]6˰T}gˎVX4eûLim#) 2W!bh+@ژ҃EЌ8 ܺt׳GC^6+O%A~p_Xmz]MWmQuۛw endstream endobj 2796 0 obj << /Length 1397 /Filter /FlateDecode >> stream xWKo8WCi fD\iH-F-mlQ&Pu|h8bO2ot<,F4sO8 N6${gQ4ϼLMU3;.dݪf< oǓ0;ڸQsը*W㉟cY2:}w:|Gp({ t!AHoA@L5FW`C+N1d_Y(Sm~S?Vݴ\)pRrX) }ՌitriڲZ8ai8c?e/+vw[e]7Z(^l9 xFg]tbwn!A7maLgD?>Et\Kex$\\~C#6:zKc~ٺl )N\ܬۊ0Jx7a}a gcw|&[iT˫~<VƤm+2̿Pm!S6Jb"xEҩpGb~ąd_*b,+6`9^Jc\.ɀ} 8 '2ouSvҧ5d*Lv[av(7eݖY8„8? '*F/Vu$QKCʜ38ެdO3[JEy Mhmw5g`abčrw\B`H9F0 FgA_Ԑa VtW׿h]A5̰,_E_l&vuS׀~B[n 5+Jsk` _zaN\?~b R->W8#.mGq(m1l›Cy_\JA0"c9 cLD 7nJOݓ{I8IL$iE> stream xڝW[o6~ϯ06`E2!MnEah@KMԒ Jn o!XEÏ߹"<Ydlc6fn,(M=k_u#J?zgkL}1@cBCHYND;)(]*bUlֲM-WV(9,QN붓¶6Zj✞eDj$MN!Bbzԯu!f ^wgx9# KI1p-/4!@,Iʂ+}܏94OsiLt^)ܾR`b Ơяνj⧅Fbݪi6t&p)I-5WxsJ)!8KܿZֳF|g:< 0-p)"<$ӭ"i,LKY/YӾ>HKpe y? ŋR(m8bh[IvM%D5 <93#1 qV]RvU1^ *uye-@U5CI"cͦ{X v>qqqN Bެ)t0|p(±gVܦymShleG@iKyG{sEq:sF| tL]ŵvƪ'ϐL۫&äD@D=G &;;)O }nCcmcm ^5^ujE'il& mp2 endstream endobj 2804 0 obj << /Length 1566 /Filter /FlateDecode >> stream xڽXKo8 WԪ[!}n$,bʌkjM%Ec7n3EQXCQLJH*|?*UEU? ,ۮhq;> 7I+67SQz{+Ftk?"/8/R܈NXaƓ+כQg'Cp#<.cƣ,dIb'iFKSja]+Е׈G#+? ٟLidE~fܫqV$IAD@Uot&`xi0I3I~:]1p:p@u # 殇 cy%tɃ]Z.ryeeI ׾1Bm~wg߬ؗ& XeܩۃZc]*PQE|+#R _߷5;p58~G_$})-Ġaew˰XZ v! jB]g51[` te ?n:p<} im9nOHp`+(l#MYib$ HH0 $굍0z43) >vFYJَUE@QCaz¡3L/&ڍBgX`09@sow:'Z]#HC~c6c 4h -IJr`d} Nm9ʶ&"oiELk*WXHMFpے[i:Rz"Ͽun,v{på,a[L+iJ#(qݨQy-Z ;|NhC4*"1(2pb&wNQ4GNP#ʼp .CDy%f 7jekp'~"D1&TF0_avc+FC3/ iS<.]#ԵtM-{-lhp8>{]w,g {n:> ̍˙ٯY'wteDC# |ǽCr=n$ܴ:i_vS6[vM k^ߕC3:f6o9ˊy'r=z>ieFĶѿg3ZEi1{&>T#)[|-^PEo6 j~fvS6=:9ʇz.#Vv^y endstream endobj 2807 0 obj << /Length 1197 /Filter /FlateDecode >> stream xWo6_a`/2Ps{Țk4>2 %ru2lJdywfD3& 8H2?Mg9h/GWkZm)eO(Χ`WI$1g{q>J>#!|Oe$!]a֖M:%RLwv7 VNMC"0czf%YېllZe4}Jv%켁/<7Zu[d1+;/MIQpvtyۋfEbmFj꜓LĂkV5le8 "&ye-q:X_\[ $\QCWӛq>UT,C'|cm{,1|,t1 KD1ۧ BÃL2u4(00@߾ڛE/N W+3{ (zk/ (,Xn 8wŎ"Vٲe*:ºrG,Ͻ1Qdq䩛.v4.1&J|(<1%%^LqUރ\|wqE~*+ã %!PmY6~VO# ®\K x/QYgQ29>߷@)V;_xm 'G1o8Ztagi>o y endstream endobj 2810 0 obj << /Length 1234 /Filter /FlateDecode >> stream xڥWmo6 _ffYco؇.mpn$F8^G[2 `HCR~|{,2Lhq[)(N{,.~x+{,b>YggMZTD? ܫ*nܩs/_/,Zό5 /'\08X4 qP7Z^]Ng,[Ux˓^ߗGK'Zerwp@+C'HZ&:mh.JZ]tvMXKZw4PLЂq)uY8mσNN.ژŸ'I[t1!,4}:s0tlto8p,O+8X$t0-ʮ6cJHtd cj $ɍ3pEFN wȝQ>d7J'iVנW?6Op;IiERI5bgן94C%XM!sYGm@ǫeoU}_#<"h'`+:9|z(rήePaUl]ZöB0rz:"@z\q"DjTϸ1F׻$;Thh禲5LV8W2aa>ٮ)E,!4o^| Jʏ,@?t~~jːlo~j(⇝uK5F}VX0v]wb~eMC#l3rr2dɣzuyXi3FԴi'TggClyHL,>YP.@((CP0$U6|3YqnKbtBLXc,dR{CS%^ۀ-^?bա2<4 Ap# M+xoxe]H%Hh+-ZwKsZ 0P=ū}̛MsIǸ' HX*KlTF][il7_MQK('~jԦ9`.(JkV1Bg5`FQ|1|yeiCV]m`;NsOA( xp50.eo 8yQVʐ/d +093HfpQx`|t:]g*xت<4_ pqEBü\Y®晢ٛ!=J憨S}z0m)m& endstream endobj 2735 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1656 /Filter /FlateDecode >> stream xYMo7W,MAS ]a&,KVK{Ppƻpw83|C&X-0u!a4wI,8%Pk t.J>&V"8`DJ)V\b%س7BGa/S;Rq/=wM;&af X3P=6eǨ0Gxpoȹ$EjlR E~:{ R@Rj$IY24Hކul$CH ^8x!90C< ! ! gκ,l==C9N8l91$؈`j3R DG#"x kAaX8zYICRƁ'8 B52Hyf_"?Fi$CFc5<1\00xp<И1DF 1/\"L&?BqiAsq$*j H#y0#YXPˉ,g'5y7ofӥH,`zkaP.>D xUWR܈Q\ߖvWq^EB=]6$ŇUݬWz8._;%5yz GY1;p)naLn䴑{KPrJ?JN@iG;#=a}St:w'gmVfaXSBZG) a4YJ!uVލwޮ~-_^UPΛj$gr^4eS|EU.,FxQ?f8mV²+q z-ONWGmsXOPţ$b}UѬ/^~I{x D7$$DD}&Ȑ {)gi@WFfsTMQ6e2}Æ7i0Ac[jjJHT%*ؐ\ȴX7ς?~{'|wQBy._;J*߶i6UU%$!:a rX^CgQPᰇṷ.KNF㯵W\UcYWMv1/ ȶ uGi'QdmmT'DlRT^jBimRʇxaKϓCRv<"5?E霧A8PGRNRyG+%q+jrvx}J!9!XCR5dG'#rU3ziq}uϬ6%o>9߳wX@W.5?^>, Lw +jQl9M;/Lg8 endstream endobj 2815 0 obj << /Length 1432 /Filter /FlateDecode >> stream xWKo6W,|($ z+EI 4 4()l%5z. 3|R|Rw>KdgUu~?FAg"|s~+Mjs3U٭>Y/餲Ah={&TʤxQw=d4GCo}>y’U!of ZQwnt0VWǙDZ2/)YBZE)Op>w??.m[,݇A`x]Qx+C 4vIC8KӨd}7(慌 dYEZ H 'vY8;+ȋv[ Gx%k0շc9ҳp")m1mf^.qdQ~bKoi۶4jgIanZaZ9q E{bj4W- v޵*@SVaj6ԣEo!#X~i|YBPe!O A{Ə==‹ X'n%y)8x:fzr51~h="޿$2'*Y(c 9U&uW {X3Bv"/<.Gj Ba;BF{ԤdDxvTodmqH ( d j9,ސ^GVK z9f&UR8.y%vy={Vexu4s7sdFaLR[Cˤ#M_ Z`Riق饲T`J; SaIzA39Zs$!rQ6.k^`Jib 1:N '5(0ј1FK as6 Z8i)*12%5b$Ɗ>늎5Ie6`d $" U&qkI_lLM"U4MFLw4ײO MDDg9V`z݀`w GK.u\MUB ݉/]s*[>~;;4}{*5C5O[m l۷2Y x]D~8VRTśⓔ,Mxt? endstream endobj 2818 0 obj << /Length 1629 /Filter /FlateDecode >> stream xڕXmo6_a`_d`DYjIM$ފFfl5rN:M<{rh$LQ܋<ٓcy08F2eTf[t6YU8L$(^4͂w4qomaY(M7J8~uyE<>4OBHLRpcC͏' 1N_I3TvD^E{`9aQɲ(`ۊdH6uznsi{UXnʠv̀wcժCT`!!3Ij*Ձ̝'24q޲G?֍)^EY f~MR$an.:ՍQxH(NҧQ:ϑLtƋ51U'QUg}Y: 4-'Di#_ݡG.}A)hSL:@ =a$=fcImI\IYrsZtcȧ,BTpt'$sD_hƲ ;Z[g#0*rE5w\H\esx\bXnjqj6\ 7\ҭgzX@.Md,ƴgLsJ=W xܾfӰT^x˩'Jq_ORE{aDEtۡ6Bt[C۹x;ԝj`1m8PDH_@7CU#V3Od{xRu]Ec9Iec>\*)f#5Mn+5|$ԶqbVJ@|!sN[  F;>/ui&Rvk(vff2Ywe}%9̪P2cKvލ? ʬm_8"Pc5 - f4qq,|Kr34|48gvSCז)s h^'=ܷEK}@D-¬> oD~oxJl[27 | rj!}`0Ӈh SXUf=7}Դ^jxmӿY&+:ȏ 5~0H +x&ix`~nZG̼#pGŨdKӨEZCq'?R# =I9le#!E:Ɇѳ+3O˫Ok6jΏTRK{1Z endstream endobj 2821 0 obj << /Length 1317 /Filter /FlateDecode >> stream xڵWO6__qq}pw*PrCHy9 {P+23kϊ#I[Y]8G ϋ?rnQ$^Br[""]B:.c̎9npc8K!E Ð{6zއŤ3xoQFM>-nt:VA+He-BTUÝ7_en(.(#vWX/ש3aNAo3)\bnN3$(4$N,m0y2?0l*SH!n݈Pi0qK.̍<>h5Q2Fq`Bt:&*8C*ՁQlTâ I|z)s02;mnJgڍwy˹`1QlZȏFzwYBI?iV/ 4hw->&ڋÞ8صjFh3kBXlAk*:elU#M9h/e./ >[qȹi(Tw \T?0e{S 3y EKh֑.GPuPQ۴ٯ+y&5zz57 &$L6 %FH}o: 㱓,;$M&#YEx8IA)lMRڮ'39t GQVFo(t53 ]bK;ͧmmP ?jex 7@}k6zHNi7R^z-7Oqov+d$Bxpb`J endstream endobj 2825 0 obj << /Length 1197 /Filter /FlateDecode >> stream xڕWmo6_aĬ(Qa%]x(hţٯߑGZV*Dx<ǻ""-,IdnNӛH|y*Mg4"ETrslj}~*'I?s nF(є"YFixF>Ҝ,g& ^ ZUsm<2J> 9tA2жZg1(umylds2ʨYU'cfײm:N< u>("*CuS'Z㳪 /7NzIA{@mP|,04Уi>\HOҎ (m 2d3ʏBVA7-IXh3PѬ6zxDEN ogGe"ڪ{Wd%h<4q$JzW3H8'FG*mwBLn8.˫ǪPWi >jDž&Z0F3Mn*ټfe,S$I uDr#H)AŸI`/K fbVCٹj ` d "-mZGuՖTb9xe>"C ..l窷A>6yj+PƋJq6 !&ޅJ%wMM)obc9>K@doTsP@1`%l5 L*2ɴ2W [*w;^ ע NEtd 4/+C $cB %3DZ=6Y׽!oo6n{ܛ''z_JC{z*9ઔb{!H˯A؎ʮ>CΖBFf}zw(GʙFk|`(*UuNS3F%\A#G 7YPg/_;p<|C{ϙ ȩ<Q <Qtc eB \vפw>pe&%JLiJ~~Z$֍U>U#mu7m#]Syɟn>cSx1_wNCEɵӄ 8ui $Do}ڼS7i}W-j?6{5߼Ο;S/=/C,vo endstream endobj 2828 0 obj << /Length 1318 /Filter /FlateDecode >> stream xڽWo6~_a`Q2!m-hLLD JnߑGr40 E*:fYEgs!Hz}@ìo,e`,_-~~+QRъWcWSz6vi&H4s}nkf($M-/woM%D-+ B_W9a"Gx%DΉL˸ yzScd~e!2Y~Aa{bF،K FJ.ae5X %)*9ˀ&.8Kݦaa+1)IǺƶS5bgf|Γ4c*e 00 xnHƁLuF*~FSDg7~Xg`A^m;\)2m4?ݺpA"%rz -2X6!NѴ#mZV#)4˩\w:ExrLgaa@mRkg81ko's\N=dIi1O4g8@$ǭ+t9ZL N*!,区l|zWzߙf K7Q7ω\ԹYo8V'dOCUS;ZxHWq FQ^lm㹷QA6Y<^5+lM&K|F1DW JnCZVHW.>uNL(u=t~Ҷnd(vTT,ҳpxHiBNi Ð8<__wm ʻll $QiJ)X*{^&ziwW/D]U.4;:@Y`SW]Sf 7?{:$m{޹ӁwæA%?Zg m. VJ:5 Ȧo%!D&`M)R<ɋp_8o kڲ]9 Jfi ;=1cќREPY0cci9` |ɷqh A:(hM_LF%hm:6C7TBCV1(gˢ3j]qu E=wc;:.H0 jD"FUAT(LqzöbY$UpeFN)c NO X۰FkPM1 Ӥ)P+̝fD-_'[* OE7XFoh"҉/B}?MOk5)Ei\z: VxJH$ fpaNW(,1օqxOsB :'ZJX6׬EKLv+a+}=\uq!…Oׇ.OQ2 w}Aȳ]]-/`"cbAEjy?=8[ G[ H2cYr&,sPobO4j:d+ E I,wE.I:4RܐDMwj+n=lg!X4Мi4u X$HT2LX >2<ιNnuG%&]!Gv2x8Hk#fNX3V(7 ࡀ3z]UbJ+;#@Q&t:]MbPH gPTh}w#ѝDfkrՙ`<ߝ+jy#wb~Ž͛&WG7> stream xڭWn8}W%%궋}H˦hnm`lWr P8,$ Y&٢<ڬfp~>8#ϓˣoh&8x&fPWt6F7s? C/mKyI_FW =8'x:~0i{Cϧ1^HZͦA2#hUhG[jxE`mh_$,B]j?bm< 3=lFtLዐȹ#oO섺5S-Yk4"^EdI/jQ[TL-& (z)g]ⳢȡP99- lbTS_-6Z^jLM/؈;SG Yk竫ke= '0L%S!u^XFր4m ~Xiz`sr$v1l{He?5`Ed(&)=.}{zd=% zuf`!Xq*8OYcR'n"%,Β 1O*Ljnh=D[Ѹͤ N&İw c Y^:;(se _w:vN}Tb;MnɂL+Ĕa"\{U:ڹXdJrD2)kW6-'_O>iӺ;ç)y}M1$d"Aʒ,fO ?sU-ZmX=?c0x| 6(^Waզ3tXA Vw>[H+,gIS18.Sx!#ƊZޙEDFL}lkwÜe5$hЗ3$l݂ >Sb/ X=G1YfQ޺p=KːuSLdFOop =nMYH+&%> stream xVmO6ίHq;,RqJ®LۅJgy3s(1'N9Ię,h[?8fqr>[ !FIJSg۪S󥖵s燡pO>_9&(e4?FEJ~/  |$N T[ 8bqn?Uv}.9:e2Ѣ'9> stream xڕWmo6_a"wK-!k52Ma h$ Q8kE=|g"-I>+~; כ/tpvf~^z'IOb%hK1,K/ OߌQBth^˜aY',Bxc` J] bCgzۊxrO3>wFWoa t( "7˂;'oU]H{jYV CӐ^v0tRU[)wbf#hpmLltĥ -=O۹Q<CVS?<лulBokf|AQAEdPr( wNb/0ZV!°~2,h$X8JWrbXʹg655+Ӡ%yDFNNOغk4%?Bpf.z(Bπ4bhӇ$xt邥x4I9Lg)|EOf'b&I;W HWlM 9KȊ4,Sښ1=E) l0rʂ)*+΋ԃ~HńZIJMAl (U=.J(cg;0މԲUo++M ͌;f\3ɾ> stream xڕXYoF~ϯZf>u6H V4&’ uL€w9ͱ3,gizyV3RfFOo s=^Ige.\{q(HQρ'𝢮a#S-WLFmT[㳗1 NNf1hO/JjŬgr/H=z@0^ܮ=G7޳ƀ 3Ƈ3axIΡCrJtu%"^+Ǎ7" hS7j3':gҖL`, TH%!H4~aV58K4@YAD ;eY0Bwv/8Rq "D{[O¬*M^mz{UWtXae wd?Ex6qvL`UGpԫJS%`h  8H,wʋc/;6Oجh+}h%8 F!}p)r-mɻCmAR|򰼇K P'M1rZsᔴ껁%Ǿȳ V& miG=IwEف{,>&/}O!ho;y͆ #( 0]w%A`nYhq;/kUN^<ُĿpm?jòjB͢}KYlMU_|SP<2e+y$`!Lo`&J[H}/ֹ%t+IH@H8:>aG LS0 Q.6Os} + 3K:2E 6|,Pc.r7[^e˖<H5i+l9#2/Xo&K*u0{ /07jI ֐4>[ nt|Kút3bN1ć6E)Iȩ.e1\Q|RK=+#+ %rúXkZ 5bc07}(|YMuTx9>LiZɧ\g9A40 'Nm` |(-F ]5J| E+{BJۜkop vxYV=єp 2/c>@k Z^wd=/=L>axj}N7J8/Ӯ-?%lw#Fnml~W>v~(LO?=5Cs#계}:UuA@EW 7[3ֈuTz$I{C=̷QU;Y 4_mQo\'3S[uX Xc+}j l%'c*m6"eKyE&?.#L H+3=h1]&T0ypK*U|%}F8-%c6&̞FGqȏv -65a%OP|g7t5ǥ%iwma, g$&ixE,RÛ}臚Љt^p4'@h׮&)8k^Gܣ7\ endstream endobj 2852 0 obj << /Length 1917 /Filter /FlateDecode >> stream xڍXmo8_a]Q>I۽E{bwe,:U RJbpF:8"yy83D*I",o"?k'D|F2_Y6JN]QzkpR^i$IPM4͂'Vw = <Ϣ@x7C8Nx"~('y Smce!$! L;snւc<^ sVが=$ 6K`2koO$[4AJ̅ RR䇦n%*vxVo鑏(ɭMBe1Z&W> AGU V5>Ms͇bfNxJjAz-5Cjv}c% iFKޓHmE7$J9MH;m:0֜Xd4`$ނ 3^5hIEыU"|Iס- Xnq7Mfٱ2y{e~dX(7m{m}aPW7Ot5E\>=w'{RMMs~*EU7]gh2:{lVC"b09#lZաX| 6KCzm .qcl?sՃ>ZBdhjR(a"0юMfq474K׿zѵWIB*IQep?|]b 31zf3!|d)G5f3PM3p4H{p ZHꪥ|LnrN#4֩=cp6G^MRNDlQt}jLRe0^Q$Im^ʎm/mA VpVw򝟡2Sݣc$W;S\aо{GT kej0A8 Sgz0D'GnO'z!T6aA|Gy?:tsףGPiH53򊵊 X:f8nhո^qIZ7w;9|L96rW|[m~۳2;< l_53nZ({$Ϟg/L¾@Dm* @qWswR$\X-z)t ~zkꓝOaUl~MŪik>| |倏px^yT5vG*_QN|5QрZce~~¬>w]A |f8Z/7m?+̩XY 5ZuGaۆ_:x= ZAsiAJx5|xaXF0} %k)N.Y^`yH_ۙY|EԠyo,?z:dHJRWG9Z~W4V_ab0e^T%|%RF'i FH4m_(CvoZO1Y_Nmc^ۑ&G E ر endstream endobj 2856 0 obj << /Length 1950 /Filter /FlateDecode >> stream xڍn6}}HӢ$bG μ$BK7jWoԇYhźX"\"cQ$ܽ =.{'nʫZPa!)u5~0rq_.WI?lLo,WQ02^v};C7ԓ2"!4\ƁXAM2Pv]oMBkS2>js7˕ :/ew06t^Ioٖ(` vW!x%c!1خEF1C ζv+ f9 5hm;*ݾ1m]n vVҸ3%iᚰar w(f)Dqţ\H޸r4K tnMr7#U2^- W^EQHܹflh[(fGk;֖?2*,CNUFϴѴ"uƇpٳ[",9l S$EVe1xVA#Pb ^Gf$89n 9·1J J?6y苮e׌0YӚb`cd54col1r*d5x[(Qx*(Bꄜ QzZ^3a./.)B1pENrݰ=z5x//@9 h\C DDȲ|ŷD:U W׵n2 ;N8L8YwPmYZ%kp/n ݽ[ 7͓`>U+%dM~[m9àCjs[v)E*xU(槤38zpIyqti$ MŚC 魙bycd! Iƀ#*T#Χ6vwTL 3~COe8~IJo6x_;S$Ñ1š#x'"աԠ+ 5Ӗ [r7ָ-^5ϡ'RNBIQk$ IzT! =@م WR=A aHQx({.0q~kH4+|PȳxۯЯ-vܓISHFhKi40Lgl3L ϋWscg(YQ׾3),T!ߠD*XtIgo/Bi~S9'}G=3j* CؑӜ:k?- A7wPzMNIW_KzPsk8@!RJE^1N0=?ص)xP. O3&6V*rH%u{ clJ~ʚ8Ѵ|[_D:ʚ;jϴh[ݺȃ{V{5*±3u+ 060*z Du#|}Zqgrtt:/<6,;u"Z3mn;yMxM {ct TؔO0]kLjt"TՑr ]"+s&CpP(,iH>Qgz\E^T~J{aSOWIK64GAc<1aK@m91iFG+mEZI > vIO3YM #׳\=Y֌3> stream xWKo7W+K>`[ /B" PJWK*;z*t;73땴' )Ӣ7<<ΫW!z7z5>E3p$I.?Ճ2~̳LЈyfQ*8?:ƼXB(؇1V)aI-`Q?0I$䝪soFIeeHV c iVثϋ#'zFZyCyzm1HNئ;BiS}U5bPD8y4)htbf~p4\DSZZ֪TVqJu2 k&7b*f4^(ϕ*^[S.73*l-ǣ4!y:0|L^pW-AcԣȢSI' (y$|?&YFJ!-?xqN<wIlϡe"/n\WvFV92n_v r˞]d1wSmՋnSfCbߗs_x6ARzЪy ^h8-9D@e^[A8?3 T7kH[$@/ӝ J峗AB֠NDt[l\FmϲZS. &c>YJaAI"%Mnpߩ zgQJc y:TJ{rzthסȪ^Y\5oZUS7 &eZUcAa&~Z6կ;\ ISIdѪUd¹Q`a=PC ğr})eA`:%-GWmM!G^^P6u,!Q'NіU c})\ }Ц)AweNiDuOM'j)FE }/Q aw@hk̹`Z2!%cD9l.\RF(j"t.nfp,>%&wm}u})KhQ@b/hfɴk G&34 7g8A7pp8(eI:xnB7YN4Y6Pq&C'-vƀ d]#&<BcJZlc6&'Iǣ5rQ? {lHKICF*`+ + 7U=^6SOW^^ S3ebJQv endstream endobj 2868 0 obj << /Length 1386 /Filter /FlateDecode >> stream xڝWKo8W݋ \Qd=$H^bA۴M J3ʯHRR:`u^ f4Pr@W\+; !pEr nBYpe&/&G,;r>We.X e3.rB\>V4cV AܓvΒw"qicaV%wztUkvA~0rLO,i^:͜.!5Z k7O}AĴA0m0m!mIo>fTb`(O:6"BKԯH:7l0\%-g<.23?n^2`K9r{J{^6E`)~O;]nf[F{;#wykNٻ! %OTN 0.Oa q4ZCJK֘02)=SI endstream endobj 2873 0 obj << /Length 1913 /Filter /FlateDecode >> stream xڭXKs8WjkwL|fkd';3NŞ 8>&%؇-h4ЍH.|E/D~;_+r+\H^ݽxE n{]Ż}orUFl5Mn #ߓ2^v՛Qi/%'e*EB,,GGGdr ^7ѱr W)LZ48%?ʰTyƳ*-^ݯ7ye`T‡NJq4(uYusz)/6RнF*:2ok,G;tֲxUls[m}m‰B*CWe LE<2#tq+!/$ޥ3 )0;;|Pĥc#i42_ʂ#FeW"6mˆvŮ+ۆ{M'&_`/A(GAIdD*sMRg[kk0Fx0_9sZ1lpj>g,}(( =!㐞G<-mHEQB|iNj4Ǧ'/N>`S|0.zQ!*[":IOTa`E ag`F-vHWu۱PpS/J#48-` *{;00G툃Ln}HhGJr[g*=cϸjWUmY+2U<1hf'/~@k8PqJwmxE qE=nx$܆MA|MWRQMIS8CU cehG9Ȥш`9HP00]1WS; "UL_1w9?`P!EHuP=,@0ԋppTHg]Yu>)%Qޝ)GݶU"v"e>^4}ޛ3KϹ0Du"fձ19L箬5vv=jNy$)B/0iՉ\t3dPvu%65 0AvMQv(,KdP1ޞ^98}LC-^0_G7<{9Rwm@~N2+ΚR C)5ARmqυޘ:c: %B?+cxFn&"o5sE=F<$T&R4M }%1%_$APY 9 ҫ ozA[+Z{(IA=כ\DeQ*NBC nGRd*!>0@+~P>__f}퉂@ZbM/[}|XCP"OXO Bjصn6a NnmNiciRdQP|?(DB#LZJ9T]몪^R:N`iY۱=1˘?C58J  No> stream xڥWmo6_al_d fH+0-A4vZfl-z1H:i?#r%W= "=wF($H:vW.GĜ'w(1J2{l1䝯Z 9A१IFݟq/u.?#1̮~mF :## 8 BD8\E1NVPGi>/<z+)1󚱟zQqYUuL N Kb\55wc?Z$̓r 袩ɰus N Y< W1LX@X\ֹt &G0 4)\ $LV5zt_.p=` 7 >HgABp9NO NAdk;t uQF/(R68;R@]\ 󌱥]IaVdHXE4 GZ6,ःg%z_T_XC4կv7?ӈ~NW˕%,j'BU'c]K/ck!MG s?o*}E LY rlݞjo(GS :Mfk*FgZ @?>60Xeifbچ-u؏z"JõΛjFO_(\`bt: Y4;׼p{,Jsa$ 8 &W&sY,ⴳ=LǺ=QR̝J kwlIJo,Oݽ}>6N+b&5k{Z_+zS+lMn|JI#'n4ۨj^B᛹sJi M=9y~~&J=@DIT'y< &s΍ _OC}BD;wOKH]c$f̛\ > OwSjn,6/YeJ;9 |' ](;Y:5)nyM= ^ 1ζWJo/4}яKy}hL4!Q b9XfiK+u{سl7H>Kq)sPB8d9h1gsXKoAz+֥&$ 㘞:Ie(ȏ_s'hيB `?wԸ1LҒ,e!6IvgF&t.%P IЎ%N6 ntdYc;- ǀEl})NoAŴِufg)3 pMd;ka%ܨ﹛ΛZmm}F^ˢ#Lclm |TV~`ӱiCxܝBI3#dN]3PCf|H;B,]gt~||1v-oםqs v0'mh' endstream endobj 2883 0 obj << /Length 1121 /Filter /FlateDecode >> stream xڵVn8}W~&uWnI )̓,Ӗ] N;P/]0`Q̙!Anj l2pӸ1;ɍF̘-wMƣW%8fg^‰/|k^&۾Qz^|uN=>3:< /  > ?t s\x= lw^oyV^BA`kB ghV"FLh>bQڔ2x2FY?Piβ^g\2D&o%cve-.m7ZM`إp~{ECW`ًe&E&u@jBÄڡM9~<Ѩ:o&hS)&W"x&IULz 1FB1q( 䈺CPK6.9o=@/JIkNZ Vrg"%XƂKn?4m8e+MOHe+u]j,ZN42KH:<|:J?ߒb-?O:ޔEpg/ {:CH>\]XRÌP|TŔ%zB >Hy6Bʩ6WB=h'/|PAvgYSq%4ziKR;k.Y iDV,$FWPR~5\s?ڪfz\00%6<xd*j@15Scܘk13Q)d&Tk|iT1B)LwXkVuˡ~je[C,:)uY`%Fe/盱J r;n | v/N̮ ,ﴄM<Qh-~]- 8Ρ[nI[U"zJAc(Q1{UBu=隟PYnPKTa۔YE'sqٲ#Ȏol+lPX)-L*FrG>Q{j1{Xyv͒§i: 7=VW\M9F:T?oD/j`L endstream endobj 2886 0 obj << /Length 1227 /Filter /FlateDecode >> stream xW_o6ϧ2 XR")iܦV A`;Beː;(EJ86`0`<`A΂4Ih.`9cZv=_рg4g9wCQU|\]k0Jd?Ln~Gܙl&b$#O^7Zg9_qR@K0e%Ivݼ5ּ'+$($JRfd4@O%Q1ieѬJ1-MKQKঐ"bA!.(ˬmH]v]A2i.elD0\[H bI9Sӯ cQD&AAt2,oui"R ebk_]B[懢S0;xs!]%1S4f}7ͱUL22_~|{C˕*,$e` j؜Z_eAf*oO?fWPEM->rlk<_N#n @&gVo[ϕK\Ͼka~ʆ !#+nm*o)3ngd ySS;S *X$N+hА IgDλ?vjym'OGZu3 7iW)ai>Ƈ.X>s$@CX#XB/Jg6W]c B,Y¬CydѴ^PQj_p endstream endobj 2890 0 obj << /Length 1441 /Filter /FlateDecode >> stream xڥWmo6_al*c#,eMN -36WY(zYw;Qj?<=x'?A/K{I'[:4~wo(A;MSi7˥U !z7:#SFaGàedvѡ8OX҉GZ#*3ziuY@|<1hz<䲘s뉝KKم9IW*P$ M{hJnxy\0Qf+_SdĸShg\@#YhD;',$ZgkKG= ԿrdT=bF›o ,Aƨ>C*. bi6Bvoled@fڬD! !D`ZS؂Ja(L,yv -XB ʙ-ODz\z<DY n"Sr:CN᤿u,WBByGnEܳxڏR 446Zi>BVWVg2GR`RAfN104(-N1.VNCD.[0q@KɂLSpeUI@* EԹDqжO(Tt~FP'BS﹵pR_+6+YX6zz-O|0xrv|5 F~ZEx6 Tל_}b"Tw#Ff4Ǎ].$ ϨI7tGJ%*9KhPdw|ugG"`PҜVmd&;亚)$S)no~i81sU 8h%b[U]G[c)WG#ULsc!֌/GG4%eM8Y'AӚp;Hn }D7qA삃.px,[]swG}~ .` D>߰L]V X \ @~sCXQRK:>Q-FًvbЖDlj{T\;uUS=ruAz孻ܬcW mۼ`-G~P=Ɂi7EzZH.A}Mˋq}lvb'.zЖj'9精^۹+X _Hz<;(CgZևhlrzZ(YfFgv0ҹ!EktxzX9Hyq7E`e9veҒtTnj)J>wMXo.󝹜Z.`SdV5MzaX4pOB\)Z r endstream endobj 2811 0 obj << /Type /ObjStm /N 100 /First 964 /Length 1864 /Filter /FlateDecode >> stream xZKFW)=ُd  b>h4Hkqo߯Z1(0)e3d^_U59$e䕏%,c_Kf`U2YQ"*8+w 섈Uc9dr k5QĄ,~ʠB$T]NJ>CeP"$W, 6bAXdD!o` JsF2b:'iHxckPI4)l 2{Q)zfdفAٕ88; C7b P$;ힸ\#CQFllD@c9|H"|vYf14v{=~~Z܍WO*n{>K=bDd NXw"~1a1@]&@^GΗ&g)tsL71iC6%mJ/-b =&JA\s<:>M}x F80vr}֝Z{L.D4on;C' A IKvd|8 4TN.C"h80@Q3zPD_U;Mu3f}8PHړZfwC:A"fpuӧd1q*#ٞjHg6Z=$Ӹ96:ZanzZ hc 5h]{LJ/WŤ^j2ZWݲj?̺z.?pY#l>x8['WD1w%520}v)q1:3{L>?| t|ߔED6EƢA8^\/&&f)|ͺb6fu[SYfM LDiI(-L:(I]&OI{$>PP&KmEDžm- Nt!htclXVvƏS_M+.prZw8~T=jgRo|.6^Niiw7?Fތn[c3J-Nl9X`.ӢROc 'M嫌eL|,OOgvcMNjkh{)G%-AGODcvPT E.,u]B}-߶kV.z^W6^OCg˜tBKai3;:XփflBov^t~_]Wl1? " endstream endobj 2894 0 obj << /Length 1341 /Filter /FlateDecode >> stream xWo8 _^lYЭib VGw-v(RE!$ &I,J'(rB#8|7?B Xd|2_슚taz?"\L/t\S2|P*8r/ޅyIF!]QkKdbkynmUtٖZ̝ZSP!r+U7+_skrUuoJ"4U6;? H'6fԕS YvEQ<8hQ ÁGHj.zҴ4y$Gw_v թVwX0WޢL/fa,wn۔uF%]htNʼn o 3]_ν# D%,cxL0XOR?nںRUa:gd A^$#[P5RFb@Y&H{.m6!x_aDK菣O_<7h f0>ش']d N]=Og { NSD6DA명K&se:]na %lj>2PJJGQjZH`BDebwH<Ĥ|g^W߫Ps<aV{Jg ʺZFaj=_3rNpN98GUQob\`kU9%z0nxV]w{iw> stream xڝWKo8W=@!걋=dv[IEȌ-leKR2g<-'$DkE$_ϭ".ߝ 7YOLz>,utfoYv=1.ݭ:wәc#TjFzOKDj.?tOʔ8yx.6mQecIzY4{lܶ5%֢KYٖ֛궓J.Z7ֶˆ"[e JI UteOo\Io z]?#Ͷ*,G suQX&, "4XUl$W"!ᝳX< d̷iyW<}=|̫)Um$0<%U~!g?\Ql^rd$ 㳾2)RC_Ej6$0)< gk[$D-icG쓻'%# )JC8$J &TT}M隱@'Y6D(MY4K ʷ ,T ]- ;҇4E9RrqQopsһ_Ͻ.;AXDJ\fv*@W )H#X_l;.Gzd"2I)u>v:O_g(W"Ou:,}bx1+#27 C!0$3f_zQ@\$~_8o'~G?^L_Ro?C^Mjj15+h(?MafC0gWu| lw*f,؅#bQW 0 Kuupd1wjQp&TfBD0:{b_e_S!h#֎x+ghYsbӖIgG~o<oklZ#Sy]5,/m?H ;$ D+P>/^SOu@C^;tI=1fMd8bFMt43f?MvbG,68 t"IG|:AG7{<`܂k-_ /ȸʳGRصRs2:8 lłqW̻bf"+ݣ qXoa=n|ir?hd^UnlG _8Ha<09\U BZZ|n>2!1g}54źv.#, 4$w),(4C_~][ ?k pLK 6zE;/Kb_%0R<̱Uv e2L\ |o{ endstream endobj 2901 0 obj << /Length 1569 /Filter /FlateDecode >> stream xWo6~_a`#EIH%F#іY(NG%2Gxx,&~bI,%Kdϸ]5 7 7@0Rb94'WtLgRJ/y1A߽Fי( '|9:X<ޡ%DH?tO%( yC'ERuFO91n?4aKOX`{]OtT֕;5t,ca} aP3J&k6v5+6@-6ZTؒNWM?0&zׯd8~}d9i4 oifB$h̚j[hA(r5]CieO|X.ͪ o\QͶZIh ˞V`98ԕ6#δ#-q1>Y.m5>!ʿ-z- Ӭihl+Vznׅ jR JmlV F#ϕLe֨NiAҖU½0`.n| Tt}_R)Ʃש9}7"7#o¢\kyM5z j9d8W TG_HxjSq@7nUM%x¨:+۬q=;WT صqc(c3g|&B! =ԁU| 3> Wnt=:ĝoœ=!"MיZOƈNB>ociBi[CevO|Ɠqnt^ w1kmfq]J}Dpʅ5eM}Q( nT-؎>ϴjv`s `|MQTMGD1\I?,MY'˳?ܟR" E8\Ky8{,)u[(a-]3țgT`VQ5(6 uA192XtiQGD2{ = endstream endobj 2904 0 obj << /Length 1411 /Filter /FlateDecode >> stream xڕWo8 _ܽ8@,p]7[(\GM:v +͊eNk:ir0/GB2yB$,EI 4j j?YK6p;Yg6y .%"?\oG=9;qi:`X=2 ͨ)MΔR=Se2ىMc]';+^mZe[}٬{L`BC@S$cynV*k6ZTMCTrQx)-%#;~,kKwVt›⧣tL!ve}yJӫvsqj<4C}F}I90ނq[o4YvYj jwp w+/ҐE _@"=EVuY/<+It.@!^"$1E~0eD$0,Em?#ywErF I(_-!,xt ]jq<2E3ޱ]i/z纬ufjL3nZesSOD K+*kwt>ϋ&w6VR0?+"&O/(] 3xs *lDX,7Ӹ> dghMüO𖃗eD#[.Utf *ܗEdspQm`P- >"R٬V"a<;̾}GZ;ն:}ѳjNwvdO :PCtV  #IBc2} xa8I7[(rטYRG %X5_oz}~Lʗ vgVf{8n C}&AȢ4֝)eJυ*]- NKAޯZZxw&o;WMyet/cUӛĎ6 (HdHay 䲞r7ퟒyZOIB9!+c/M}h `*F&W9GfŮͫSS6LQ} ; ^vO`@ed=qb,cF"]hgZ}#-kya}&,on6.6E9{\gũ~ZG ]^] ?V5u/ucAOYu;Ӭ3=-~n~TQAfK߹`CZa`"xi>梢Z` jPDȡg,g@qEY5+l ܿ/[ٻMPk?xFWӘQ0儬?^H endstream endobj 2907 0 obj << /Length 1083 /Filter /FlateDecode >> stream xWo6~_!t&1'Du؃פ]4 RAi[,':Z,Ȇ>~t?H G4HʥWl^ۮ=n?Qk7Bx4$iR/[CeKnjc̗oŸ|DŭZVՅ fQЧf]fCREDg,G G$ҋ%'qD8`Lz`14T\:G<KP4MxRb`4KA` >7€1ΫǮ|(4=F#[_3oڿ-狲RFeMyE,$,d ĄF |ȷj &g$IԲcŇnCPL494[UbBR! #t[}_+roΰF>ȡ5O)?T{s(kO'S_KE+5wC[[ՖEn?lZK,OM$De`){$%qt e/ͦ JFY,p_~Rz+F%Qnf&rf)8 yr1:re$#Lf%,<ԡ"3 U(pz<.TWNMR'SQ ѿ5~DmV!ww}s0L;a$c1zٍZՋRL~EsH%q[>9ޠ6Gt ͋ooieΩѴ:ڵTc&hܴeմϜ^}]c@؎sޗ%P cС h$dux"݂$$i b5`b$mvQUV3J(p0O%B`6_%/Ll=%Y\G۴PamfTs 2bD AN|.BjC~S?.4qJs2a?7 (ko߈ozdA5Qγ8(AUg|^:Wy 34M]CZZ}~!js[as"">p9*6 endstream endobj 2911 0 obj << /Length 1613 /Filter /FlateDecode >> stream xڭWo6@ňz>IȚ%]CLDdI:N~dJ <$G(FI,LGijf9ɇ7'\`t8_MON_GHz"29.EMJ՝nnNraݾ#Ѝ.s=v8%1sugZDA $p>.m:πۇrXxGĒ̲I,"B4:Wmg%D1H#?vx +|]4>@EzKL:.;Z.@ Q8~9ӛ4=0pi|2pI:-jγP(v74t´+1Wju'C HX3 eh Ɯko\xʔUQ)ϛM.UQwvڭN}fd@f6z0:amzkPqfm`sgl4mQܞ>gεi[׵-G1Z+wj7 voAu4/U`85Yf~ 94%g:V ⠨gF^`(|V}FƑ=dΖ4ƍRM n!JD&VueChrpO1b+CB{MR;#.ȅW<`22,hL\=nokB@I (oqE!㏆rbSvTE$9>fj~ICRᯁ ұ_"l ,|-zi`o(Y.sTaBIw%"/ !He PÈەq6J>,Jbjג5[fkn@D6z/ 3ea\m#k%GL'Cސ%LJ͏{;'uAs2g;ZHڦ_w%!'' endstream endobj 2914 0 obj << /Length 1788 /Filter /FlateDecode >> stream xXY6~_!QT>ih<(w-D\IwCn"ba|sŃxFA"%K ȭ={u=#ʟ6gO^q#F)6cV<>e֫24?J^;{nk{ZhG!^h,!mxz ih0~qy[U,=f5=ܖ~߷6K#.Y2Q:&kY'$0bGOeXYcۆxL"xN,Fó2k>Na&Xjs::KK~GE۪,- Df1nR "GruN=w>Aޯvwv6+ m1ۮ ?c(-N幎]xKG+F,;EbXW++u"vܓW5=8\Kv@Ye9r o l\1+C#5$O#%%䈊,߷Y[l) .|oAOWG! L:=.1QǮ,Wˇ_K_N uೲd8vH!yw|y"+b|>TPW8E8TsɩcZ[x;4=$S:UN?-eԐHN UXf =*o Es,3Lћf OS?`RV|тUY] hblo=c.=n]VMS|*ohi_T6T CXOf_d3Jr1m2a:6j{HQ-$] {_ XPNkL9>K"1(1n0ڒn"l>2ݼ. ]К)Nftٖ<ܜ00ECMD@x,w2.Hb]*Om Z,Y9yx&/&0)6#h[&I@!,&X3-dyXU-̈́7Zaq^U=i㤟OhHP]~*V%<^Z?C T[78i[KCŨt _^۬8Р kGP̰[k[Ӝ qwX!>cOZGNW p =^^d m~UMJ'_{&*u2*@I6܍/6yxG.=VaMk4ߣ}{r^%LS, t>AlIGi.: ~~)8#nW˴naLfܴ[p m2lp(扺mYP gsTmmwp^"t&Nn\ķc RD~oX,Hٗ )`P5N.̰\Gw׿Ϫ"pRA2%w =`~r@2 2x P_`М)xN"#Y"2?0:W}3s:i =Xt)GnnUƞO(;В7T endstream endobj 2918 0 obj << /Length 2199 /Filter /FlateDecode >> stream xY[~_aI.lFD](m-@``2hؒ*;3ȟ9VI./~CY,gi!ÜnCR]^ԭl(|U|(\Te]\Fx ]<0Y~aT9b~?/W'1Nh%Bv  FqX/p bȱ~KBN,QզuFJrQeݪk?Q&-Y 5*C#?]m/-O1g?eMΔo0 d BJ hlNk &`=G"eF/  ןrc4m kɪ' RjepF FʌT+3Jn0$Jj,A*3 hqZ8*jX1;r)s{ԄȬ8N%kшւkuZ _6׺).C!Ӛ޼ t \C@v26zH%DTHh8#2wtƂ"+^5yTpHp)SuQ-̑'e 5a;z(A(@>X`w6,k#Gr l A)q߾0ixN!>9Crsas0)V0}̞7NGƁqklsNr"g|,hƔCeBRi:6\QU|Pm@oV;] b`h(.;di`]p$Y!Gсb \ f׷V,5U+;hUf(ƕB+N)I$JD QFcHg, -ꩵ(Ji^ʊ g6ދl!_A}zB)Pԧy5`֪ rM4.ftDm } y.}BqHN[,`kM"/O2ak`ljg9Cc%F f$j GSEg/܅.  G>eE2v(rz7 4"sC.ᗷuX(g4<ŏjwlzqx:>|c>9cfV$E7?]5ez9KNWg.P)?X\eо#&Z_|J B]%W_vҬOq%192v HW~OwG6u6sVL\*2}mE؝ *$ endstream endobj 2922 0 obj << /Length 2905 /Filter /FlateDecode >> stream xڵZMܸ WtbM͈HI[My{j/^-bu#=v~}pqRsh@ɑ䦈7RH,v݆oL3ɿ>Zod,\myx,/nJ(f:zxk罽&8Iqg?ݎ$yu(мbn7&OT)YXCcgh!4;u GK Ltl>߭WeWo[4 nZ@:N7[7I}!x$XAmGmoYZHaJN /֎ O?t=m*-Df+*h37=G=N6=gE얪),,ϴ\Xyy qG|?țzg+i2K, vO(pqdZ7_x()?m)(jM{X^T=)x7Ef9/O kiD 1B}{L0r &hK3LM/ziD)h5w4*ϝT&./W(=XrSa3poz5k gP.=<4ADp-WYCym#J4&xX UH^"+M6IĩJw#Q7Weg9w+5$ʡQ>@ܿȽtˌ CvY@8mƋgä㲬Gb-/!ՅPFy _pgo&pxu$KF{1Ζź]Av/yyPVu\@ 19xNf@2 VPk@~&!xwy VhU Es=q5@R^JQhкӗM7) `&3rmD ̔:v1 (Ldij"C5}H J:^tH(zLcJw(Z2y?[ 2t6zOz4e7pгA\Cޥ!g2:X"~'QИU_Kll UTS9ƾ=LE[K6s$&nR=8;GFĤ"zU$öI tI iM,KhkwDg0*^i7]8]u[H]if K?Sвo~Sl? _gԋ4i)S^JK?{,J*:coN]K!"ĝ[l;?) &H"f0 V4e@lHEsHтY<^x^].>>+`yo#;"N͇-yiz`AF{=TWnUo.C9L粁6&];ѻpmQCr 'bzBi5tVK?w ;\.\UWK;ftB^P 1{83 *XKn&5DnXRUЩ$ 4<*X  Wez.uI>Xx\Vo(-ND".tk4Y|A~*oUb-5d[W+d)샞NcY(6fPK @>}D8G{VӖ}Nv[ &+LĆDO,hW24H\Z6֩l:w3`PN|0-Fwm,u Є{<[5󿳇wӖ:3i<{cw>F. [Puq!V;UOV8e%J:À xr.vub[8<ȾQZ< G1ޞn!kj;R<_?ŞuAM~l}qʑ"'.cy-tA\^rTf*8}whD?fV^>- ?IC鏴/x #7ݭJʠ luӌ-?Mk{h8K8^Up:L5o\%mxS vFHAYCKBpػf:%{}S_ۚe 99XGņGdE_R'q@뷽+x7?|Wk [(!9$ ўY:#pXr։mP n;Hb> stream xYIsܸWHU0S+ewf 61bYy6eyrJ#W>ܿJPQvUDmWvG%k홖%Q{I4qcK sZSz}}XŵK<4zW 1-||{ vqi SddW(m/xk`ƪ囎S V+ZAf1lw7+⪶,>ϽƸU&hnP0ʈtZ>Z硓}\qpHY,O)qu_L8k 0z𡸕̈# ?Bǯ o[Og#LRP4 @T"* "EI TAz$ݕ=ܕVsȗ@3e)mGR>B I(&PT _J|`$$*H$`  }{(lM&Ѱo~쯉 'mtx3d\gbZ G-\cįLg~1MuJ7nx 9x;\րk;WHߍ>bg3YZT+DBp5׷Gl){ïeJ.+ӹ'K7 bJ'WYAurV7DP>/%}n8pqȿ/i 8 J~}9Ҿsci* YCTCp4rt x!!ARXLqDQQ뎓0ޡ\cs?h~0/̆(1Ky& Qdzarイ$+8k(״,z@L,( 5~ >OzA0jBiR ѡ nw@x`ja( ̈Bk\1"?N+4J 8 G;̬"$/*d@< B0 x7Υ귩xB4RQ<Pu4Px ѓE'dW;7r3Opc;ٯuewp]Gccjn\ Dghjx{J&9E.<^ItK#m2~bЗkН ~}O_cNPǫQ8qt\^n&k&8V,jsД@?=&EW7Ok ܁ a T W*U[#SزU`CHb,? ևƜcؚE@p8i4t<~: &\Jsd+Yz%g\; J#f^d]%֧R_rS&ٛ<=T endstream endobj 2929 0 obj << /Length 2443 /Filter /FlateDecode >> stream xڽn>_a2j{6 &.Yf@fRGTT%׳ 0`IbIOMqU7Mb^>`= =̿ܽ<I\'{In>F}TI}Qney~УˢȓHbo~7K!+ QMQeH35ȍ)#ӷ^M헝,#Mi >^:5&='^jL㥙ֿ#'ipe?Q ^ȉYऊhڡ' vñm5D]Fkv2=lR2_ϧ,S_GeZF'3~jpШѴT16{AE?SBe0ƒjt neǶiWu~P1 T3A࿾hpb=ْq6 @̓uA /+ -oȶv Q&z}yY7Q^٤xB@M/FtkL!a\0=foRю@5X8^q>zZ1ւ0Bagة6d{D5vnJ>(%VD76zNM6ܬȭ1m4  #[2, $Ok+QV?KYyԆĄ(fe\3UÈ 7H(8PEYf˸(1%+S㴃MG舸rt>s K>8qr;2-.X2ER8?cȣ/)fc& rAFj}M|Uuvwm7 B؞l4gWmբ@+b=Ot 0l%MsIpR/J{0|+EAGZ;@.7 POb@"BsV:6 =X:7X96yMD1&3ң,ՙ`4'Ow-AEd"Kh J)gh# ) Nj;yA"otA`ނ7 w$;˃9%|sdIb5"kfkOZW{pVhz8/4sI[0Lve(0謌A:&G4cUU8BxMI⬚O!T""Lm ;S*AA_0W^*z7BQsԼtmSJ)~!\%lߟ϶]s*M0uf?jR=};j䕹,h4@i>޳e0tE<-OXYԅ ^N|60;TǸYNҺL@ѣvq)VG|w}HyuKi/lcsw2u' {S$YŸK pcK-KwǔX\lH ȚJ!/ZUVZeq7gI%^XoD~וbzX<ڔEu׮nVb> _|XeWIj8Of60c%JX8 glcq]C+x^2a8]ԧ+Cg^-itO6-{ 7wC1AZQ@E?ۊF,腌STt vJag ?/\+`:4>bBV _ pdkq 9aP/ =m2jWӃCL'@f}S!#0!ȻE?/GiʐiK_bbVA8czņءo'>o`Nq҇}#^#S4~:Դs_TE%r=tP[i%+D|5 P򛴑5=论t?hL|ҕL$ɿ:r5Zwx-eH`k^Iݘ+`MaT&] 9; OYoLXcՙy 1o+b~"SU}O3Oz-?9NO> stream xڕW[o:~ϯGV ccڴթړUՑEή"0όg ,:EZƃ=o<Ox2*T*kW1|z!MW"*(doWL>]M$>q^lGtJERe \T*Cc[҆%fd7PiPt $HCvmٷ FỸv捳5/ st4>Xx :۔ǡ2ʷsJh:G8ˊVc bv8u7(>XD/PzoN=ܧPf =|{Gs|ғQƦomiQ_eysv5Xezdž2_O`JamKygH d.ԽqcݻKdǑȧʠDG[dތ@ iTU Hٰ\gGK~/ǮG6QZ$ n=݁u4x|pk CQ?Pon޸9/`;#m]I$3BI0#ޯ~>&0Zkڌ8뉬63At;!,&U=\őPIQgju(X„J/%0(&(8$N5DEʛO?_ey~Z-qsm{XŹJś`sQZPk6Wue{ه  \N}#_N}擏๣al+O$EA#G1]T¿oZL2y_ϏLg;ӛ2b>!SwtAV <`,ۧM݆ Fv endstream endobj 2948 0 obj << /Length1 1626 /Length2 9213 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 2952 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 2954 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 2958 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 2962 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 2964 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 2966 0 obj << /Length1 1457 /Length2 6520 /Length3 0 /Length 7517 /Filter /FlateDecode >> stream xڍxT6"U{Dj LBHAz7i MzG@s=w=dYϐO h>A~@Q\@!B66#(NfA0[4Ʀdp ( B@DRd8EȦpBBј}~pb.$d hۢ!.A0!SvuA#2\(`AA0W[_?!a00.np0 0TBZ /py v.p/(`A*ZhO4/E[w[(C-@E^`P $GAajsp"GEB@sp=UU}QW1AD⢢"(k#/WoS+`)`>}PO+BAA B P8ΰc?kLPO#?A_Op׿[,`fW>!q( ((( 3-Q ?Kuꉂ p|y/9AKijh,5# `øXza>GUXE]G@9s:V>k93 z1YE5Sh܅BG W5̡ jֈVS`NLhFa++&/؈-}.oOvktQ ?VY:^6*@|%)ʑ6Uu>qX# ťbw}=(-0~"lyޥMlVe4 z0Fa{WR Z6 =uf_A+͘g[-o;z" SA fYovEߑp+4\yyz]'XMI 猴62tnKNP83x_%:L:E:a %x=_oZ%!49ڔph$@v̧f~XS?ηe0L>,*{*`C8W{jq(T%XBaM"m)-m:Z=#Mg_-.$Zm5~xC1&.V.KiDbۉ`Y8?}:LV=UӖhoG)4A8* /~0}%;ݴ4}B݊i`4<~fLOHZhZvuk9B-ՇPsGwo;ArI~fk4w OZ/UKx"`Ċ=3{9ڻL~0YzR$AUAg uwP 8f1/_~߼ŀ5zT2{8cM~{bߵ/_l7T`8]=qIje=իM&~+ 1AԧpoKOaLɩ^ _+zR)5z`b|1n#! ɴ5opiX;{ئvE}BE X}Pۙt!=1z0hpXOGs|EFt0j^Q/:~ܢq_B7]"5pXͣ+7Z$_-ĂOwԊߵi.6qe|3d7^}Z{$چOx,gnmX6XD XgFKbYǴվʼԖ_}ڶs^e}3VBld@l=v1mKb^6\ Lwyߤ(7޽\Iߝ>gEχ\Au6YTEJ, ^Ťnr/GUĂ5Lz/!pT<7pvM ?XoZ}tkS4#o-+UoWh[SZ_wa]ucjXFA1B0(gHy|}I{j\beP؉`V ^Yh;Qާ|e?bzM\><)qPI8㤓Cj¼s·'(pI/í,r?q\KTarہy"9 kS;>AţՈ}c]s(Hg#szv눴Lt! #dRb^nBJ@/q-oC?53}Q>V9XP3йr$c@e!M]aITsm6w=fE=hu/,1(W~Z]Yn); oO؋pI|ڔȒ]bObMralFx/[ɽdك{<{[3F)余 ƖI4vOe%G(K|}1 ݵ4ywq5+3& {GDWo %~\緾M*[ZשRH\q0X, QaZMc<=YJ`00 mB!r& |Yuq=9Ј@4֭>ڑ .]էV`49g=W.lJp&|j) YcM*"|Qr0] W!sk={OJ瓗GäL˯&4G3F%LгV)a_ZMgȢRďm>u4}>PeOZ3W:v{$zqKe43T[,}=3 & ~>1c~ 9Qd2QTۺ}Ιz&em NqYgI!6ZM$L%Ye%i@ai FX<2n8D++A_屾.I;?w*xR@$ՁMR^.{(L qWf.R_9JtUWnfȐ`rl?6(]Pֹ i'fyBmg)ò{is%b5kxCziYHI@ ~棜D9T#hf%deӑsj`dR𭆬]4Mdpy+LY(\2J荒tL>ĵ1#O ߥE3·[Rj;/d*62NհY Zn&D@\ȅ+oxf?ue>Z { :R} ;jٳ~SjPy=AW>V97֗wi?A\di$;33Xl~jy+74wUiɺ#Aa(t*Ū6W.js9LY\u3߲okk6և?wgoP\jz0sIBu^=˭./0~^R]s,QQ$v3jrEHYI" h/p ;E.+Nt<tWzuz| VnH^2M}-d,dvEԴᣫ/!I*,@M<3EMP tn1j{i?a2W0DHqG ,'2:RN?|!XM1OJҏ(v@.hSb_'{F(fCnyVQO&)\LQU `_F_S۵7(S7gK7h@<H"d2M9R}'1.4(4Oͱ0y \)ζ33助"q#_=f~퐬3ַww&`[,[p}yYdg.;B W6~|o7!ywjo09XFuߺnߩM%CTZEh(ו+bNT^&F4λㅄ[Zc,*13T sX-OJE|m=bcG°\x& L݉'Ӹ\{1$]衳[o bY[赞RF3k. GM XmL~uxCXg)"c4ǟڟQ ZxAkROr(b"Gm]!w/3N*j&PyfxUҲ}؟%t]9Yf4ܷI;%#},a0;E5ݘ)v/+9#Or{e}%kpyX'Q5QdJ4#9<,KL2{,vwcUn3Z WXvoNDmèe0p]7,ƓfXq!UgD{6}ar> 7Le"e%lz}j_ j #)/;r3g|Mw|n;zF?d\p R2|lxn5"L&On|k7!2RϷ[L}g ׆y,slsoֺ us7_D"˜z 쯞 fzІ߰1sm  \.-`'F IyP*}tAKpKƧMHgG;N}Zo|w,U6~ M:w C7.wy &BS |AOES B-2soYHM۞^L|rJ4gZ^ۑb~/|H}Y%:U Gj$:sߠ#CqMx*0؉Ұͩ"n >Uj2& :֩~-k gˮ|}攍+h܈"-yOs ؏ቧ?|PvyF|JXZNhZ,<-*e| nt@,}(5 8hԏeY)U/@Ǩ$A%VGP,Ln5۳؁Dw~n >O-@U)6B O\! . ~u8y򱸨*D,T=LYg^2Y_ hǥH\p(-Brwi'^E&ێEW%\^"<+z':wh־]~mZ_po<[ݠ>XֆtzȕVI,*?5> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 2970 0 obj << /Length1 2881 /Length2 20706 /Length3 0 /Length 22335 /Filter /FlateDecode >> stream xڌP- ~pwwww$n5C  I*`ݽGE$fhvtpcbcfH(ijXY9YYّ4m@#Qi\\mp2IP n`qYYczX W$* G'o+k7p 50ؘJ@7k=89hnrnnN,,@{WfG+a:F5@ rY~ Pڃ) imBv6 WАS86VۀOsllW N@o+":X2ڹ:@;/@\]l\]m~+ R 7W_$m\@{sA6ʰpwbrqvIc!Y\3en+/%/1_'G'% %}T7BbcXؘ@V6H ˿1]lc?#Y8:y6Yt$e)_pq;*x9X:& {3c);=憬\_lߌe$ngohocxn;5J wʹ `eo#m\m@6nb_{fgRutuXYG^.s[ ɿT wF)sG_K Xeo!0;8].H "K7F<߈"_ `,2;E7FE7sQ\~#0E_ F`.ohF`.ڿo\#_;wׅ _9;? 7; пrN_bڸ>_A~g2f@s[W;0s@na[l r/{>  a>@x2GZw4yu['Fɴ3!4CN~6;xZ~-)+%'&dGDNoSCŇbĈDL~O~om!{yT _z~j>6[˭X)V+m,UYkr87&bz3/٫RD$X_u9jMv^|J|WXԾx 1kB tkヤ~c=drXxv.|2,ouPw4L^3XzzJ~2 GpaPWX;R8?ӧ{k6!~A,j李9r>PU;k=7&OKc+CgZgpw>a -2켪Npe#`tRorL] fs,}ݵ2r^ʰ/Ikٓ'*✦¥ ra%<Cї4W#tc,SZS?oRܤ&N5H2Ϲ/u 7&{gc-d)k49f#Aʼqv6Z+Xc+BmT䝃҇rK#AsRZߊ14Ϫg] P 4f#D?ɍtM\LlG+cw}i'ypȇ/4j U|#Y:#on'VUfGF}VFqI_rk!z QmT'ݨgUJHr=Q;`?[;Mj/աexDgrI,{?g"h]G8Q%E~޹~_az*9mlJDf>Y]asF83[j]U_i7JC]M0o]lW7&U4.uaŃ]0s|Qӗ2ӚJ|p&V_<6Pƻ\?Q# m_Ǚ(f3e>ftES3^A6dR%"f kz~mz )b VJ}*2_gHVʔ7 ?đ/AWR^&\$;QYlqј83^3Ty7n?\;!iWJǬ 43qT= l۱f$G #S_1)W-bS&Jn?>E6Vץ2ڇ%<%Hoboȴa.r  Qgِ,z^ᕿ 󐨍VlIԯ0~)B[3T06mNL![AaiޗOMi7x=.~Hc<"AgͷVisFƾ2ǻ MG NV:N>->ʼY|K릎o@L˶#]=gv1zdxpdE+WUhDzdWEE5h:ǃbEGG*V(p6e ̽Rաgetew8%tNhot5Q5>h*&)~D>ŻD[HW>ޭ@^;f" {8!_>dE,oy˧$} _+Bedԏ;4a/7D6*gW : r.bMK="İ|wL|Ѫ$8 ͶFMVGp͎&Gzd]S#`Bqc@]m߱BܟYivKct +srOm*n;Q9/AFxXݟq!{?fL!I~{e&791]f2wuPCahΜ=b֋Tw;Lg=u׍d`W}UHF'3"0fMv/y>!ӑJǕ{q;AD&SX.{DhrGpXK&˜oQ44,`Bѣ< 5+z6 =:єM[7Vf̴H}UD1SPiTN=?qx1.'}17rv~U0Z&,4x"0ֈۻU µ7KRǼ3!K&K\=x֢ 2jՇgg#T! }MHD&Y6\oסԤc=[{\G)np .̨}`35u_y1 $m.I/"1p!8LY9z")_ƶʛnkK M: ) 9h˾uJs=,ަ^'8 yE6\WJM#"ЈN?[N4u" ZĞ%r*L 97:@(2皓u]~Z:`&ZqߵLy*?{?#zWc"΃5` d%aA8=mLMFNM/~YsɌB[oH_|fjBP5ߵEWR0CmJk~TBԺ>L1{ݦ4\tH!Rb1}kN@ar[])Ѱ40d\.8I{zx%Ӌ0IN# Z1Uipיxh|- CLK ~fŒYP<}<4.ra%q _O^ n0̍X8)&NrqiۄJDPx/!&||X֔4'gųݦzԥ;2܎0-KB(ʴ=Z.Fl.'IKuVs!UתﺉϙSAjj>eh$Շ(Fz{nLjvz;+Ю2#7!hwQg⓾2 q=M+t%z\M`DDpD^$%N֬U^in [ [;\߯Rb`&jt+ C!?D =koDe?^ z0UDp=ڇjDsuv>qBBZD+tgU$?p]ñpQrJ4# 8O˃o&6/DQwV{ʔtr)*FJ˸Ai6ިy2ej φ2hwge(+I9$ /]JƹRP)@qzk"uA{vXo+V>&rdž5j Wr1sXRDN[;J#Vgn$5/i-{ wgsxqPMzH6M- ~ .pdg@Ҏ)W_]2 ]&4$>B Ey0}5$c*eRLYUĔc~ƝK;` ƒ;ΐLZŭwcB2,K8X)OgBxdX)r;~r\&*k|2? :oX_x[<-+FPRZE#YL&6@߻!Ҳ|(]0po^1BuIDGA@^GEꙖʛ׮X:xŋB&brSM^YOJ~Q!KnaZ+ısΊ#o./Q3Y}.ܼ'F6V#ѱ&k&Goˆ>=pז(z+EP3H{ E@TVn$Kp&PLQn'@f6ŒFʳ8vc@S%VCJqBGw/yy4Лo*9J-ّ9$$T0F=qGDzfÁI3G|:ZwsJ_p~6_g`.4 5;(tJ`;`nX]%(qtܶ;33\ yT ߸ fn-?* F: lBb^'K|ʊR=xx#h<1R5ɟ'2avw/MNC/H{XT`6|DZdt,-RB>-53L'RO~TTF7@x4z+MYzdQ3΅{1%clz :B׫Zufaq-XZ? ^xfڨ`OヷG`7imik(GX9hs9z8g4. YnO=l|8S n|`[Zmgb[ M\P;!\@Ҙkj"'d!}7aΊ 7%+NhH;rBbd,g8QZg>p4ZM4M:T@JEHW_;4Vb=tD˗rj zWoc1K'EҸܪHJV .^X0k ?@fUQw5lxAP3Tp(i)x⟢6=ҧf&5(N֜~1=i2˥T(I[­FWZfURxQ$ 4ϭ+"HAcr|.qvRO| g mW[$]@[5;5arb5ҨH$ٺIDzr=!5nZ*(8_[#4&w&Q7AQ?p4B׼řcr2.6H(+&j(' h vUcLߪ|޴%£GфƍhW -'\նR|ͻص\Ɵ˼){EV2VFvgZ6ԨY$a5tҽJt?v' _u4pbWq] Nyv},Z*VObwS 7!kJ9tV%p0+tOl~\]+Ir=ԡ{aA65Jը .x)5,CN_@Ta 3mڇ.vۏc#WhY Mx&||4zlI6Sߓ q +=\&/sѣ/2!KLL4P { ֥SJ4auئŋ|MEL,[ZEW}bF@I cbh׍IqD\^v%L!~DąfNi ުl;q EYl3RhaFBqd5,zH됺(U{Ȼ36ive}C rd=l.dFk9mr@] ,z6k#oo0(6[_T3_Ue8ؘ.(>abS!~Nx!D ײkB񴑯X^R=w ͨT M$*A\xv,֮2q AwxcGCOz"KU~KqxW!Z̬=*=~~YIrv~_ʟĊX"lq#K?_ua[ Q@_ cD69:Qi-8x_i۳2*jDm.cܡ!UsN|\`EьiTaՔyhr# .쀡ON{,(7̔; 7h(:-~A) WpqM04kl8iǣ/f4]o>b׌>Kd=ewo DBiq/K?1L/$N1wFeG>_;倢D.{d|:@p2Gf G:. 0adؙ),yL*0uޑlo_#,Z dOyq~vb&@ _H}J<5,'(ZW2c'4=MsTtݩ~J|+z 3mc&rX{Ǫ 2jsFJPvwޜ;jάa= } g 8N|ўnRB9&\? r }BfGxQ h~ rǤW<'Yɛ~Kp.WB>GXK{7m"%GKj])1ߔj?ILK-݊ZV.S+izTh= ./]}&,wFFͽbWoV{_^zzJdu;X>D c037]]4OӑqtvbԢ>Xi솱.mq |6.5& |P *h 61Æ%8we~tiljnSOFhZL䶅8\>.--/lp*'/fF"zDZu"1m&ErW0zG"n= TiI(t|a yW)b_!ٍϗ2Ů[c`ƋAB,z4NTdiXX`Xzq;njGZ!ZfV b#\:ϔvWLԿ- BMz\,yrBa5Sh C_e~R377%rlލ7#0 %{+H[Si!*/\وHhXRw@_NoةVߔol-pM-Ye<ǖ{ Q"Pz8A>GͽYj+.w:W[4AK e:0`! +hh?Ia&%b$CؘjMBΧ!/e9ɠG3d4l+c8+u t)e]"q ϣg9c_R2Pu{kS Z]RX'Ӟ$Me^`I"[&o/T iLaiF^ρR{$Fm[G͹ga^aIz&WEx7e4B(c:2>rE-j-9xzdzr_~o#4w NLBrm3նKA ]K1K1{_%3<:0X7#.>ft`Po!Npc7 O GûeKhjd">6CcStőh5wMKd 몹>j9I (fo80.Yx9>*@&Mu9zX͇rskP'ܮTIǟa Ld_?D5:zgu h9^_5DEñf  u}[beJ0TI*rw}Hnۓ]"m7g{rݧ%לOh! q4u Vݳɴ~a79q!c3ZaOeW:WzgkmA6- GB~zgO p\^`,A#(!ҩGTtUG_]xXJFvgJa6AFʿ:kq+-[{d-h^)Զհ-IۡwU_[B.)4fN)\I=0mk\2l%;oo1D+D wL` %{~z4J!H2 Fa͕ CF=j8d^wI6)e;Kq ߍȜ pwXƯ^06K1tO[@'Nb!uR*b4Kw.2_<^FIlE@懡ۇ _``~e3jw4 - P<q&- 8T=oB&_/e1 {Q-NK0-c`Ay}.zn(gW@獪[bJmLF*TMqSB7嬍dE |Q(xfGo};" [^kQn'ƕ- aJ3;#Z =rw{'NY_XhM㺡*NO(R!RZatG?*1nIb$"Z|y͏dyXĩn9=.vWF]Nņ_%qP2/B'28pc|i%ކXf!_n1DTl6>Zch'c'?A}Ι|k>LIr%x5%ˢvI:?:(!0M!֗4NdHoOW'j8ܜB&ajap/!sh†PlO˪6&۽3C$c%}LO#6ogBnUylR"dqvyl\Rf'~Ն B'Mc LȆvڮ~빁|uK%^(r VZK?ُ[ L-yd XT46U#­p\V; G˾Hoڟ)'~p@WB`RCe"`_J;1N2F^- MCqnlq$Yh}"]&58JK[OMr*|RݤFPeJuD8_0t n}m^A-p0:EI1ves]֐NdCfZϐQ`B2wXTߙgjWpУ4&-uji#JΐyHÎEw}j񁲾 7J6)׎ DNzuǟWs;v&=l>wuSpdNO9cTȱvPʦCj׭5nTRGan.]mAnM` @w: Z)"&]#8K9rF6`b9H74] iɲKk]Z샇`}ٰ<(MC vV8I'(U\Qw]g2HوȲQ_[^~|OK, \\-za# N$ rdaB㥟p 0WYUwÌV# =~|Q`y[`fb^nΑ'-"p˝2UDURt)Qːu5P.-R}?OSXkKS86B?~,~k){Tg^iuj_(' RO6UFYɜLZBhE|,'RAg"O(puSz6zu38CA f ۤwxfgGQi=G<%B|O|ruY BJ1m1Sm[1e5!NXa.J$|Q]nIJ]"mXSSyEVmwGdt[ 'ƈ\+2?bR׀Ͽh'mXsmbC`8>s 7}hBD+13AMBKߥ$'犴CʇZ·)PB~vi|tKhe)B@BVl!נG {9Tѭ5e(^}2hfgj_U᪽-$ D_wD^Oq Do<:g(-ȊC'aOIJ".xo% ȯ<ڍb.A7,gwdL[~rMqG.c$:$|!?w ($Ky=sǠJM цOG}99s'屎i A-~<5}:f)Lּw+lCwxB.9'h[uh9z+ozG;5ZIl=2`- 8٪ߗI;08GQfKv7-y^ [n=zL0g)l* pfX72vXgM&bYxY۫K?"9d}Al+{薈OκRr8JrfYI+:j H1tˉ1Nd?>Eto䐑 둘U{% qBHNcvVbeN`zK`kzʵS'-@et(XjN Fy搡PA۵Ye95fO`-pkb猿wK&vA.n؞b #0٧e,㇗.}[E{  uUT4#'`MpE"PCM!K)^>br͓o$_]PJP~7^bsG";ph0'`3+B/0f rQڮT;)1R8FM|02UK.D&d{ }(b6;tM\Ï za讣G0-sP1f.Ks^'Y8<O5~فq{Z{CߛARëJYJu;(vHHG \% $\(yqzGS0sKn_4ا 0k3- <|ra Dd^0O($js9PQA:A F!۟uZ*C\4 xwzz/JC «cdNv%/=H8gSYX)a4 idϪ56\ ͏\4eM3jGG淎 w&Jn߯?QyV&nyFYŶ0^c}FT^Id>GU2m(iSN 3p W]U>,Λ8ʤ_ly4~9۟vW醴+~&d X=,r+ok1V2MtT)jOďV3 @IoH{^w7K*e+5 t|.M9vWf5{llU54ؼrY2-$SɧE:h0{l`-a2|&Xӻ!IgDueZ96V3±{;3uB~`;9YQ@4EeMgFvk J!^13jCVqI&kzx\Z^oTV73 OvN [FWU-r Ds>Wa 䑓k+ρ:!iW]:'P#{q"-`י n׮U]mUF]˄@c*ى䲠$`PoZWfIuv=Vg& Y@baOec $AW0Zx.ydPWM}jDxs /Sqa|n筭^]slқֺvk(8{I{hl'Xbz[Þ|gOwˮFH {ǫ=jWȎ?VIA<Yo 8lrk6J(K A|F@'% Ԙ¼tWgM-l"hJrP?ZtвJ*!?f$ pXli= (:X.8?.\,:Lo;Z͍4_]]g!-0X: :$򆢵[/+ UFRҷv{&WԖ(P.+|c%g8S@^(WI˙76OtNZ 6jw֧ѹ9knN]$1ݝ@da2=n8lvNR@&/<끚#d<0fJŞژ/ B%G>Hv R./v .0!rU6yco,@i -㑹 MrLFGᏯZ:;=.V~'*>?ZrV>#0 HUVH%c&'+Ǎ9I˾~jњn-( ;sr2OL<%4\OzUx[ڎQH; ^v("lRgmWAnCz g4kȱiq!\WSqVxg"!FbՑf+A{EkOq\--diJTԔajoc#IO3Tԓ憵D݊62~//@RbjN zȩڽ %FlARr)e ˬQ <"6X81C 2}=Rn(9J Gxll&δr%rQ8n 3W ޯ !7#7Qd]z#6lTn]FiC=!l JW ݭCHub tXy{ٌxh U|RёWs4em8V d>8J$GTޖjdԔދ|q=(> ƏǰݚnçsI"X@}F(p[:"A4AU<|!hJM_M=Ɲ搌$MU`W01> Ä.lZ4ze"&(GaձOo&T-d_OhÿCR,&G(,#nZ8AO.2.3V[ȗscMfk )-.7lr_tׯ wG>nCI MqZ,iLBIH5G]Zw/嶺U+Qu VwMe";!2V${c*i %Tl }Tj!CEYa/! E?+K&JE ´s̀RٔLf 4Z{@y]Z4j[(wv.M![vq2-}HW\vULؚo@a-RK\Uȗן7a`6E4;v߾ۜ>!ޱ`7"/ ѯE{@3'N}sW6w~j39j_M/ d~":mm_[pWB~ϰYOAutRNy̢E_0`}M5?P5b "hC!퉶,d3|DuI®Ă\jZNV/4 j5 7ě*?Ă1԰E֑b\D'L~5PdT].Azپ\64=|v]sv}fMeܦ|tF"<&wh;NL)S驮k+N7eTiM(sտB^Pl9&J WgrnmT lA# C9Z)Ő몯d\,}l𼾶f]!\^Ncre/HW=ے6eyr|h嬣Z@aQsK/L*h"N+u' 9Zc$$rۯ-˙h'Sa?ZvxK590/*k'r0ONDF`^DV f<Ԉ-$L{܂]6B[Bo|˙l:"^`=bѮ9iJ8Njfߞ$㮻AB48 =wt"Nx n4xQGyaDZk A>|Ltn.ږ 7V ﻯm2^[05/4m2C3(n_@#ʊĭ QjXu|r0SJq"u'i&&셨Y ̆Gl!3t{N &:&+MSCUxGxVXq''llo!0ݭ|oexL5Ă]\?ݯ7‹7-'cTY- )13PJ&M Zød/ b+->Q wE[|2)v endstream endobj 2972 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 2974 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 2891 0 obj << /Type /ObjStm /N 100 /First 975 /Length 3271 /Filter /FlateDecode >> stream x[[O~WVwE+[ H`Q=OMq.Wc{|lHqSS]]եkƎ"!TH\bzpoe"&H)p"&RW%F !H Rtb3 Y8/ hx)d ϲ ƃR97 &Ю  P*f%6C`32HӠ,6{YGz582hhR^hbÔԤye F`"4DAӜ `!CȌ( PgRʒ&'ð@m$lGH1 %O ;a4lf IbYf#$((&JevkE (( ozaE /y-Ì҂|vtX w! :D򊐓.|uagaikSn<]X":*Lzt0V.^A6;y\$h{7a'"o{.ǍuB-T# >f>u(vc=0a֋Oبj0Vb"Y Y*RF0%?=z~8vzE<Ӭ4>+]5Ҫ_0Lt.iI[n3r'S-xNA8s>\8r*5ͤM/găFʡd蜋E3LZԡ/eS2o%t^|j<45v9h^ȅOXgn^yt.x/wxwD_,TFGjp48_Ψ26T+3G3J1[ƴc J] Mj0~ڸbdb xw2W]Czv^"x3M!҅9? ~+ߟ %,fer&R,16Da>f`7"8Cw]+"l9c,:+,(3gQ\93 )(B_hE쁢TP' UMLSiMD {G wPaAaIocw)]em,AZv̲CYke#*31_NW"cU0Q|^EE}ĜPh"+ȹZhR;ސŪ9 }-=<-ˉK!;>1ޞB0Y|xh<>ch@˸ϲw/ Ny},2 HU9+;IIkB&@Hd *w +EHut?ʋ+Kقy$AȚF[ՏW$FIM*)}ZV9:v\v\;HFzr/0g*g+1cų&3OߧL9 t@($m:%4ˆ];:&V V>Υ 6㎑;.U"aLݯ*c)Y@rrD:jQN!;p<.'cuJ0` މZwQwF>04$hWOEZiv8֍y}I^D(HQ7yB/A߾+zMwN>{{&0i\6+g@I9'4=6Vn/o_ҙ FнgnN{?.6YY7>7-{޳c5X5{^욵YuYYumCjꛡe6|< ϸXld4G б$FZ_MŶe/gk@q8*8a@\@ ¿6}UoX73 hv7r=w.{-@ w٠7ۋu_ #ֹtz~O`a̅|TYBYx9S($(1uѶwbఓ: @#8]=&ZusQWD^=PU~>og!֏kc*bT鏚66E'mS RloTYnWnLU9t?:`09KXоHuET$m}iQI\pصo_i,һ`A/{Ohϧ]on?.u&HΑhm*YzgNk!vC K-桪r&afc߇̾6+vPQF1hD>kh4aN#y/F ?B`nrl endstream endobj 2976 0 obj << /Type /ObjStm /N 100 /First 980 /Length 2174 /Filter /FlateDecode >> stream xڭn7)>XUؒ;c-6Pb!H$/6obODʣ 5sISN@c4.3'JlD@,CF4yTB0J0sT<=AX(Xj<,UJug)Ŷ'4JMѲdBJ(sZ$B2 J$XOm-!('؞ -ʶb()df. %h.%i0Q\8+[.Llf+꫽קuv3]~9`HO a/&!'H7,%Só3:9U)79aSL9Os3{*#ŧXG?R#{to!95)-s~{IWKĎO,_,ο\O Z>z/W/d@r*]/ROkAk{Mow"#__I;Y%Yd2ź .7ZniK,m!,2@,b_~%£Rka%, ]Sg//ָ^J&7O>W`e/k K+˄y+dY$=!(˲Z (c /6rk%^7u+Ci'+g/sK41W| +y+_)ܜܜw):{\(b$|1j~U U^RO!z >ѪfAs.Vj١e}fZV{nFmuK*\ ]P vw WPxZ(܅@ wPPv o VPJlPJ1 uTMJj(mnǪ#MM&06y6y<Jj(mnǪc@i> stream xڅ݊EoADDr B˷j٩+S'Io6V;,e׺`/l#.EcAb], Kby%yăώźF2˵G4õ7Foް#W1|5wG> ~+F[-fla383V@McƊ9 Sʣ> ẓxo_ՉP+ߡ84 9V1sbKc 7 x1ß6" <Ҋd1}.qxBqK]Nb‹vE~Iţe|;8xoN'VC]WC0dqxtT72?7g:3h1r3a3YVXJŋ> stream xڅ+ )”_U0 @V!] ܄<~$#u)ۭ_R}UMkmlo;m4}#,`5|06Qky?7׾:|mN"lLގ!6};v>TYa?]$>dwyb=L9"S9Y&X l̻[Ji9t׍U km<|d,NX&`#m6ld62}$Oѱ[&쓨MgQH珟ۏ~l?~_?o/dA x*LT W, x#P_~=T_RkHoS֮)Ye/gc_AF)(Ap\kFYK@aq#8*)@a6̂g2(3CY%f(6P4C% PP4@AP EK(P@ % P" J(HE2)H P 7P8C (@ K(P2.PB PBh J(hdӟ`s0;;,ȥ ܏(\oG R)< e#s9/3i_^+h"x^nJR0Z^pf^\`ƷJ|3 _mh2K(hE3YBE(P (P d(( @d((H" PPBE(H Enp"%P P8@ e(\B(p j J(P2@(O(8CSF/P aLWӿ*d7`'\MEP`YazxL΂/ӎb:y\K߯%>_dG|h<A? T|&U&LW,XVLW fGi&ɿMS< l(M! l(M! l(M! l(M l(M_Ay(h\tG>xΊy> stream xڅK$G)> +^` 'ceosÀ 3RUfΘCHee52H P 62 1Fa3T3y[APi!?*(ɳj́&Gs1]1o)Mt2#B>ڐX4ڍ(ڭ.zu%z4BPG͊VUtS/9ET6!EhMÚZӺ̮rv<L Mɭqwݧj6^fYrtѠmeN5p5tb]/N,>e6Vk/ov|n׷?y?op܆?!/AIiv'( A k1IPCpDAJ`|tPJoQ0) PPZS(Ai (-B)栴JsPJPZ :(uF(-R"JM" (8("PAP$ /p")vPx"NB (p Z@R( F(BAP0B :( PAP0=-=FOi'q16zJ=FFoOARA:^FM.9 b*(N [gA8$+pG{! |" O}byrxyE^[j'xzʫ9^ /īUO [5ͱ:^ }ׂ) u!)Ԕ8 ׂ)HJA^Px$=D G(BaP(B 9(B PAP(B .`B)tPp#L (` X@S(5{!}!@fs PςP 6=k0B ?)]\sjCޣhkx{jgAk!{!m><5}T=<vPхJ16<9pHwkp@:k=zi|X_]tpzp֋pOzU@֋>}pZ/;E;=vd/oΖ_[yo;usn~欇i>ߏB,?rڽDg?Ǹ:|ԣ؉ܠl>y9En?F[x]V)OQ?dڷYQv*5aPj|=A59mխ2(n!6pփA=1YQuyNuU2(9\2@3jqgJN8\A[d|}^"xG{t}D0ض> endobj 2990 0 obj << /Type /ObjStm /N 99 /First 1022 /Length 5170 /Filter /FlateDecode >> stream xڥ\ݒܶS28#JʙIIc{3S[3uԑԶ'OH["5ڽ@Ԗ+;f ,$6qY fK|簩̳o}M쿾}9ٯ !eaEp;G^n8&ϾnVHX!4Q`oRlgg"( , b! =(^{qDAI(Dq! W2t&#DB:Q2D%CTQIgEH8Epp-v FN֔ Ơ%H&[dm(0N >H"-Vh?TGB8u|O#wTE00 ;R N |`'‡r+HZH "@R%vBH ӸW*RNl]P]UPZc'v( b!DH: Sꠊq<+v"CH Bc'+ @2b);>Xa?i Nhv"(i>?4ePA (ib!DH4>" KS"*D^&hbĖf_Y/D{jvo[\AD=zkW| \E #ދX Ew@6*׀K+z; Svj.R䅄2_gN(u +PHa v'$pMfLR\EbϷDNjmӒwD.S vpd&Ɵ³*IpLL}i -Tx'Ӈzdr<')Ig "e؇ q(uHL>kU))ivֻcKO곉1T%ldG^la7_KY} #d>jK7jH@M%&Dh?Euq~ xҵXn=>&|!EeoVɒ61*QKHtʦ) nIl,u\: r}MOj۹ivY,zOxҸ=Es]tc"?IQHSQc+qviPm(7%]|rGf9Y.'ބTOprS||L NiQqS2xyfj:pmGʹ劀tH+hi~KxwJƫuIk=',;C9t5yմ?_WmxI82.ΩY@~`5 [oHt;0M|8rڙH Ubߏ^΋Q`x?xZw&a% T:]X3EϜd9Wd(n?ŷR01HY8ҹ;:(鴈sx"I: |O{"|N5 q ᜙x<)8V|%qZ dNkp3iz.xy_]h 6":N&Ḱܱk $B;!S,3Gv<|(48X{'Nl|?jv)ڱ}lZ+$%Y,5Eɪ;PY)s}Ј\d }$L3C?`6b̸9 ۧmݭܜ4jBϹ|žf|R/(J4MZu*孜 ͌\AK@N{JmQT(kU;e xIgn蘦9eXixhX x T؈]O5ڹ];a9+.k q)EM. >œ>l8Ă#\2_v#_tΤA&]Tf1vmZu@7 GZsQ+|:_2mW;*S+TL7 'LC#P[!9s)u|-8?T#:'oiZP+s_8ތ/Uy|4 /ǮWm%;ux2e#6J \\V.vOטo2vCOw2/ }R%=C׆PIX{2]4wfџ!06dҞ{CRiU{O R]䊨Kzv Xɲw; g2E}}?ndb%3?݁L}P5RƇ Z|J%v-"C뾁)eޟu~j9I+ΘJ n[`]vi7?V+θy;'~×<5㱯?ë" ?-*iWX~}?Ҥ# ǒqKī.:oEvtF,|F| EަH{:BUP}t[Wn#[s;xcoL.M'ڦoP Gvx)Bi#}+wTO[: WΊbjq%ЊKhƗ ShICّ3mO{~Arv?T#y$+.a?=iGcPva%sG=m`T훱To14d"_;f[t( j0HŰ}Di@A==}!K9K>vuM_)~ dJ <#ke v8t2OȶRY6(>!oUE|n<5 dHU_@#Xr'=STmGO\۾>& ) 3Q> z+ KKV)[vQC?/YΧË-fn$KHD9bC?P n觭˄:=]4PI;}A˧~ȭL:͌7RsE ffҿ-%Zаp(C#,+-!f[r!FEhΒuo/O; f:@z?g9;W 5 W K=/6V/+&mB0 (${PER~Jp$Ñ Gs%/ǻ+M bD)bE1C1CPYvĿ_|Vi6_Sſ>^4I42`4)ة[Uȋy`t+[Xe8; 6 p j1.jXalWV +00, 20 ޲mltl// cN~]8V<sE xpng/v{8eoiClWOۂ߆iuu[oo{+x^^g}'q =3!B)-_Pjn endstream endobj 3090 0 obj << /Type /XRef /Index [0 3091] /Size 3091 /W [1 3 1] /Root 3088 0 R /Info 3089 0 R /ID [<3DB26668E079BAA3432D30942D536B58> <3DB26668E079BAA3432D30942D536B58>] /Length 7321 /Filter /FlateDecode >> stream x%ydyzn^}}^kzߦ}LH R@*"f1:*GU]NQ>GQK(`0p@q)yWp N8 <\p >!4 \\pn- w.܃Sxb.rb7nxHetԍk^G^AK/sRKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RKA/RK#"(U-ɻcv>g fO"X [=hy⼤W^AzRKA/Rꥺ P)0|XuX`1, X `5x ކ 6;6;`'ݰ>]8!8 G(ЀSpY8\KBUh57&܅{p@~ut?I{wB1TX `+#!<3x/#x 5KdKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/dKF/%^2z%^2z%^2z%^2znm|ʍst_;TҸOavB"^ k`3l@9pTv|Į3Ό2H*#2H*#2H*#lVRUHPL0BXa ,eVJXa u6[6lMށ-v;a=~8Axa8G'$p98"\2|M܄[ *Ͼqt_}s*Lgj}wkpއp.C mhL~BM_ w.܃#x O)<> ^vKN;tڡvC:iN;tڡvC:iN;tڡvC:iN;tڡvCߡvC:iN;tڡvC:iN;tڡvC:iN;tڡvC:D)tO80Q_& &?r?͘Vѱjx 6n8ouVeV73ry{:C:oQ>#ouܲ7rtչ -uu9;ع)7OD;,ٹ-Xv;ݹ+D;4޹/T;Cer8cUrщ/Tn\>.ڴi8pT'#rb_SF:XWRNg=1fa+>13MkQЈjLoT1ocpјˬu(cV[+g~L7^%G>o1Ƚ#GcF.YrAn]sN9Ez̦hc1Îߑ7u[ј1ؘ;ޓ1c%gɱ{x }_~I9+cҙSrl?V ƇɩQr 8p\\YS1`C"_7U9kuQ%59oі.brJ8D3Q죨˄q"fCŗdz%¸@fEŌ#죨Go%lfEA ofE/>&C qhp0(Q >`Q9((1e!zPjCr1GG~a)bJRF揢T,0ȯF0ȯF 0K9`Hx}h_/=^f)Zg&DM?^f)Z'k#EXx}h oC` >R~|$#W_G T?fW1av_-1̮@o c T|f?g+jgT arׄSfo !6U8*\pU~S}(\ Kt:/ 29p9XL/ W*i`[WkAӤ ׃E]qo)nIέZp3#O L]qnuŭR[pX=WM!uw7?&<ETGz[0p\Nqǟɭwk_$+nw1`g~|m*n˜(]֏KI;^aC9wZEݝV0iYW1!j퓺) WܔS1=ග.wKzP. ^X^ߗ{GtlQBR oX'ףh_FO܇r:}r쿰UFUɹNex=:4̕!V87@4oɭ.lG5[%\ af+K!lp9٣EG1Z&٣šK2o5bQ 77%lfoD1 @4`ofoD1/ވbC hp0{#Q >n9(<1eQxjC(<1GIx a4Gc `{-<P;.<VxzDŽyC|wD`;,0{[şəP=a|z)㢙ƀ1{۝L/n v%D1{2mw2bB\ގb[dV/8D( ; foGQcofocjAt[~{!G0;'m}^HDo=m\af@ D>kՋCŗdAd0._#FHht>pkڋK03CfįA]hV>_|2:7_HMQn{sTSyT\r֫nfƾK$d!9{!f !u?24ԥ!c>db٥!}.ه>P,4>d!4υ>dA<Cf}*d!O.o }˴c!}n˗Cf2Rه>Q<=daHOn|$w<ݻB>qҍ0D@vn|DfXto c}N{>Ĭ+^1ׅU`Jӽ&MKm 'JpĆ`I)\'xtccd10$&p)0DƦr`IL%JVLrlȬcr;ݽ \ |ފ͜N~+&>66;VLfъ?-A+&piğr .(/沥mrqr[=&<ݣC\~G?6aaaAgqr7---[~qʸh?J-+SsZ1zi-DC_\jL2WQZЍa qY}vw{2C7.\O/xf;t CxRSBݗ4U~{JدR?֖fWso:N4/U˃|MWs:U~RÂTw?BosEq3FrsM_!7="SexC#@3@y{Gmj6AT8mh6OlSMM9Њm^ %vm^iTߋ#V5 ۞rlf-{lv#Mء|y%Ucqئ| 9S9OhTAsf Lgpg,gi133!YLOLn<قY hgbo#3ۅ SoЍSv[YҒsqЍ`fˑ33;wJafb-ˎ񆩝13gRڳ.N_װ|obfJfǞy~Fq tyk%~#I"Ѣ^8њ>Gb7cSJ?r8،ؕ_c/`JpH'NgcӇFm4{msQ_sut d4{Y'(b*_+#ZJat\#ryw)n6g/&sK)oyQ<,S~#. ҷ'uw*9r ?BpYz.RzE9'' c6U7HR}_Gxߊ0z<'S#vGѬ#N;p5UG&&wSnP# ORʵڞoEb2=l/lj_ToT 9O%q֤ڒ_7b!VXO/6چV|sFD=naA,yvlk(V&`p*NYO-&|j/Eh&`p%nTf"p^=y' Sv/RWaxT+Tˑ3ڏ?\ܨK<1,L_q"RdY\Ly*~a|d}?Ъwb'S?]%~"4MvZo'b&S_ 21é" x\lv~gCԒ9QF&t?9j_ǻffQ Lb=L?'4Uer-վa&$njGTO"TVh|2ש6J޸hNşp{hN$1n|kaJ߈hmy#ͪ4xmѭhOS5rMijݥ(ZZ;_z& bp(M b j3_~SljRlmͻb+n5e[n[--=&B˾P8nsxgxu7M}Wս4!^Os^|9_x0x(MqԉWOOūig_ūgiOǫi/^Sn,bKX[Ū|g^%]ypgl4j7]Fn[rK4'\O5{[kq嚨in1E9mĹmb4̩$ $v-AsRɭpsZ wK]jRs[[֒cNMi[ API Alphabetically (Tablicious v0.4.2) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/API-Reference.html000066400000000000000000000047241515050116100305530ustar00rootroot00000000000000 API Reference (Tablicious v0.4.2) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/API-by-Category.html000066400000000000000000000351341515050116100310410ustar00rootroot00000000000000 API by Category (Tablicious v0.4.2)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Copying.html000066400000000000000000000077421515050116100276610ustar00rootroot00000000000000 Copying (Tablicious v0.4.2)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056631515050116100311760ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.2)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    Date-and-Time-Representation.html000066400000000000000000000060461515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html Date and Time Representation (Tablicious v0.4.2)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074541515050116100324550ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.2)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060021515050116100315630ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.2)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Durations.html000066400000000000000000000046361515050116100302200ustar00rootroot00000000000000 Durations (Tablicious v0.4.2) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Example-Data-Sets.html000066400000000000000000000102121515050116100314110ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.2)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Getting-Started.html000066400000000000000000000064041515050116100312500ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.2)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.2/tablicious-0.4.2.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Introduction.html000066400000000000000000000072321515050116100307240ustar00rootroot00000000000000 Introduction (Tablicious v0.4.2)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.2 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Missing-Functionality.html000066400000000000000000000105251515050116100325010ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.2)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/NaC.html000066400000000000000000000075701515050116100267110ustar00rootroot00000000000000 NaC (Tablicious v0.4.2)

    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/NaS.html000066400000000000000000000074551515050116100267330ustar00rootroot00000000000000 NaS (Tablicious v0.4.2)

    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/NaT.html000066400000000000000000000075211515050116100267260ustar00rootroot00000000000000 NaT (Tablicious v0.4.2)

    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Table-Construction.html000066400000000000000000000070261515050116100317630ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.2)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Table-Representation.html000066400000000000000000000100161515050116100322640ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.2)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113521515050116100305360ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.2)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Time-Zones.html000066400000000000000000000141161515050116100302340ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.2)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/Validation-Functions.html000066400000000000000000000117371515050116100323100ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.2)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/array2table.html000066400000000000000000000102671515050116100304550ustar00rootroot00000000000000 array2table (Tablicious v0.4.2)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/calendarDuration-Class.html000066400000000000000000000063021515050116100325620ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.2)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/calendarDuration.html000066400000000000000000000205171515050116100315230ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.2)

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    calendarDuration_002ecalendarDuration.html000066400000000000000000000077061515050116100353770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.calendarDuration (Tablicious v0.4.2)

    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    calendarDuration_002edispstrs.html000066400000000000000000000062061515050116100337650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.dispstrs (Tablicious v0.4.2)

    8.2.2.2 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    calendarDuration_002eismissing.html000066400000000000000000000062061515050116100341170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.ismissing (Tablicious v0.4.2)

    8.2.2.3 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    calendarDuration_002eisnan.html000066400000000000000000000062521515050116100332230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.isnan (Tablicious v0.4.2)

    8.2.2.4 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    calendarDuration_002eminus.html000066400000000000000000000061121515050116100332410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.minus (Tablicious v0.4.2)

    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000066021515050116100331540ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.2)

    8.2.2.6 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.

    calendarDuration_002etimes.html000066400000000000000000000061351515050116100332340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.times (Tablicious v0.4.2)

    8.2.2.7 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.

    calendarDuration_002euminus.html000066400000000000000000000054551515050116100334370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html calendarDuration.uminus (Tablicious v0.4.2)

    8.2.2.8 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/calmonths.html000066400000000000000000000064571515050116100302430ustar00rootroot00000000000000 calmonths (Tablicious v0.4.2)

    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/calyears.html000066400000000000000000000057651515050116100300570ustar00rootroot00000000000000 calyears (Tablicious v0.4.2)

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical.html000066400000000000000000000174631515050116100305270ustar00rootroot00000000000000 categorical (Tablicious v0.4.2)

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002eaddcats.html000066400000000000000000000057521515050116100325770ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.2)

    8.2.5.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002ecategorical.html000066400000000000000000000135751515050116100333740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.categorical (Tablicious v0.4.2)

    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    categorical_002ecategories.html000066400000000000000000000061451515050116100332370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.categories (Tablicious v0.4.2)

    8.2.5.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062241515050116100326370ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.2)

    8.2.5.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062531515050116100330440ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.2)

    8.2.5.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    categorical_002eiscategory.html000066400000000000000000000062741515050116100332660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.iscategory (Tablicious v0.4.2)

    8.2.5.6 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002eismissing.html000066400000000000000000000061171515050116100331750ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.2)

    8.2.5.7 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062221515050116100326440ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.2)

    8.2.5.8 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061251515050116100331530ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.2)

    8.2.5.9 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    categorical_002eisundefined.html000066400000000000000000000064401515050116100334050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.isundefined (Tablicious v0.4.2)

    8.2.5.10 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002emergecats.html000066400000000000000000000075621515050116100331470ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.2)

    8.2.5.11 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002emissing.html000066400000000000000000000074371515050116100326470ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.2)

    8.2.5.12 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    categorical_002eremovecats.html000066400000000000000000000074371515050116100332670ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.removecats (Tablicious v0.4.2)

    8.2.5.13 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002erenamecats.html000066400000000000000000000067611515050116100332400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.renamecats (Tablicious v0.4.2)

    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    categorical_002ereordercats.html000066400000000000000000000072131515050116100334240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.reordercats (Tablicious v0.4.2)

    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002esetcats.html000066400000000000000000000062361515050116100326400ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.2)

    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    categorical_002esqueezecats.html000066400000000000000000000060761515050116100334510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html categorical.squeezecats (Tablicious v0.4.2)

    8.2.5.17 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002estring.html000066400000000000000000000062341515050116100324760ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.2)

    8.2.5.18 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002esummary.html000066400000000000000000000060261515050116100326640ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.2)

    8.2.5.19 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/categorical_002eundefined.html000066400000000000000000000066311515050116100331320ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.2)

    8.2.5.20 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/cell2table.html000066400000000000000000000101551515050116100302520ustar00rootroot00000000000000 cell2table (Tablicious v0.4.2)

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/colvecfun.html000066400000000000000000000065311515050116100302300ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.2)

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/contains.html000066400000000000000000000074131515050116100300620ustar00rootroot00000000000000 contains (Tablicious v0.4.2)

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datasets_002edescription.html000066400000000000000000000064621515050116100330510ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.2)

    8.2.58.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datasets_002elist.html000066400000000000000000000065001515050116100314720ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.2)

    8.2.58.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datasets_002eload.html000066400000000000000000000062251515050116100314420ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.2)

    8.2.58.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime-Class.html000066400000000000000000000063571515050116100311110ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.2)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime.html000066400000000000000000000176271515050116100300500ustar00rootroot00000000000000 datetime (Tablicious v0.4.2)

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eNaT.html000066400000000000000000000075101515050116100311670ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.2)

    8.2.9.23 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    datetime_002econvertDatenumTimeZone.html000066400000000000000000000065071515050116100351040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html datetime.convertDatenumTimeZone (Tablicious v0.4.2)

    8.2.9.1 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002edatenum.html000066400000000000000000000057711515050116100321510ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.2)

    8.2.9.2 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.

    datetime_002edatenum2posix.html000066400000000000000000000060621515050116100332310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html datetime.datenum2posix (Tablicious v0.4.2)

    8.2.9.3 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002edatestr.html000066400000000000000000000065711515050116100321610ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.2)

    8.2.9.4 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002edatestrs.html000066400000000000000000000066431515050116100323440ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.2)

    8.2.9.5 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066371515050116100327000ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.2)

    8.2.9.6 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002edatetime.html000066400000000000000000000134671515050116100323110ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.2)

    8.2.9.7 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002ediff.html000066400000000000000000000060611515050116100314150ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.2)

    8.2.9.8 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002edispstrs.html000066400000000000000000000056561515050116100323710ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.2)

    8.2.9.9 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eeq.html000066400000000000000000000062061515050116100311130ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.2)

    8.2.9.10 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002ege.html000066400000000000000000000062211515050116100310760ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.2)

    8.2.9.11 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002egmtime.html000066400000000000000000000060351515050116100317700ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.2)

    8.2.9.12 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002egt.html000066400000000000000000000062101515050116100311130ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.2)

    8.2.9.13 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002ehms.html000066400000000000000000000061041515050116100312720ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.2)

    8.2.9.14 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063051515050116100324730ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.2)

    8.2.9.15 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eisnan.html000066400000000000000000000060041515050116100316120ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.2)

    8.2.9.16 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eisnat.html000066400000000000000000000055641515050116100316320ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.2)

    8.2.9.17 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002ele.html000066400000000000000000000062411515050116100311050ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.2)

    8.2.9.18 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002elinspace.html000066400000000000000000000066751515050116100323160ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.2)

    8.2.9.19 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002elocaltime.html000066400000000000000000000066731515050116100324670ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.2)

    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002elt.html000066400000000000000000000062311515050116100311230ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.2)

    8.2.9.21 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eminus.html000066400000000000000000000067611515050116100316470ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.2)

    8.2.9.22 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002ene.html000066400000000000000000000062221515050116100311060ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.2)

    8.2.9.24 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060061515050116100324260ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.2)

    8.2.9.25 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000062431515050116100331560ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.2)

    8.2.9.26 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eplus.html000066400000000000000000000066451515050116100315000ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.2)

    8.2.9.27 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.

    datetime_002eposix2datenum.html000066400000000000000000000061571515050116100332360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html datetime.posix2datenum (Tablicious v0.4.2)

    8.2.9.28 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062361515050116100325320ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.2)

    8.2.9.29 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000064531515050116100325270ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.2)

    8.2.9.30 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061211515050116100324630ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.2)

    8.2.9.31 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eweek.html000066400000000000000000000055241515050116100314430ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.2)

    8.2.9.32 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eymd.html000066400000000000000000000060721515050116100313000ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.2)

    8.2.9.33 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/datetime_002eymdhms.html000066400000000000000000000060271515050116100320100ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.2)

    8.2.9.34 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/days.html000066400000000000000000000062101515050116100271760ustar00rootroot00000000000000 days (Tablicious v0.4.2)

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/discretize.html000066400000000000000000000121151515050116100304040ustar00rootroot00000000000000 discretize (Tablicious v0.4.2)

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/dispstrs.html000066400000000000000000000065521515050116100301220ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.2)

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration-Class.html000066400000000000000000000057511515050116100311370ustar00rootroot00000000000000 duration Class (Tablicious v0.4.2)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration.html000066400000000000000000000122201515050116100300610ustar00rootroot00000000000000 duration (Tablicious v0.4.2)

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002echar.html000066400000000000000000000056371515050116100314630ustar00rootroot00000000000000 duration.char (Tablicious v0.4.2)

    8.2.13.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002edispstrs.html000066400000000000000000000056671515050116100324240ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.2)

    8.2.13.2 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002ehours.html000066400000000000000000000057601515050116100317030ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.2)

    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002elinspace.html000066400000000000000000000067351515050116100323440ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.2)

    8.2.13.4 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002emilliseconds.html000066400000000000000000000060421515050116100332220ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.2)

    8.2.13.5 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002eminutes.html000066400000000000000000000060161515050116100322220ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.2)

    8.2.13.6 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002eofDays.html000066400000000000000000000062021515050116100317600ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.2)

    8.2.13.7 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002eseconds.html000066400000000000000000000057331515050116100322010ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.2)

    8.2.13.8 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/duration_002eyears.html000066400000000000000000000055061515050116100316640ustar00rootroot00000000000000 duration.years (Tablicious v0.4.2)

    8.2.13.9 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/eqn.html000066400000000000000000000074221515050116100270270ustar00rootroot00000000000000 eqn (Tablicious v0.4.2)

    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/head.html000066400000000000000000000074401515050116100271450ustar00rootroot00000000000000 head (Tablicious v0.4.2) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/hours.html000066400000000000000000000062531515050116100274050ustar00rootroot00000000000000 hours (Tablicious v0.4.2)

    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/index.html000066400000000000000000001315221515050116100273520ustar00rootroot00000000000000 Top (Tablicious v0.4.2)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.2.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/iscalendarduration.html000066400000000000000000000062131515050116100321140ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.2)

    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/iscategorical.html000066400000000000000000000061671515050116100310620ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.2)

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/isdatetime.html000066400000000000000000000060771515050116100304010ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.2)

    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/isduration.html000066400000000000000000000060431515050116100304230ustar00rootroot00000000000000 isduration (Tablicious v0.4.2)

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/isfile.html000066400000000000000000000044441515050116100275200ustar00rootroot00000000000000 isfile (Tablicious v0.4.2)

    8.2.21 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/isfolder.html000066400000000000000000000044341515050116100300530ustar00rootroot00000000000000 isfolder (Tablicious v0.4.2)

    8.2.22 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/isnanny.html000066400000000000000000000073751515050116100277320ustar00rootroot00000000000000 isnanny (Tablicious v0.4.2)

    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/istable.html000066400000000000000000000064501515050116100276670ustar00rootroot00000000000000 istable (Tablicious v0.4.2)

    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/istabular.html000066400000000000000000000061701515050116100302310ustar00rootroot00000000000000 istabular (Tablicious v0.4.2)

    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/istimetable.html000066400000000000000000000065441515050116100305520ustar00rootroot00000000000000 istimetable (Tablicious v0.4.2)

    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate.html000066400000000000000000000122021515050116100301640ustar00rootroot00000000000000 localdate (Tablicious v0.4.2)

    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002eNaT.html000066400000000000000000000101031515050116100313130ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.2)

    8.2.27.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002edatenum.html000066400000000000000000000054541515050116100323030ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.2)

    8.2.27.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002edatestr.html000066400000000000000000000065701515050116100323140ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.2)

    8.2.27.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002edatestrs.html000066400000000000000000000066721515050116100325020ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.2)

    8.2.27.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002edatestruct.html000066400000000000000000000070751515050116100330310ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.2)

    8.2.27.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002edispstrs.html000066400000000000000000000057451515050116100325240ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.2)

    8.2.27.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002eisnan.html000066400000000000000000000060221515050116100317460ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.2)

    8.2.27.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002eisnat.html000066400000000000000000000056461515050116100317670ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.2)

    8.2.27.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002elocaldate.html000066400000000000000000000110331515050116100325640ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.2)

    8.2.27.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002eposixtime.html000066400000000000000000000062751515050116100326710ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.2)

    8.2.27.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/localdate_002eymd.html000066400000000000000000000055221515050116100314330ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.2)

    8.2.27.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/milliseconds.html000066400000000000000000000063561515050116100307360ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.2)

    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/minutes.html000066400000000000000000000055671515050116100277400ustar00rootroot00000000000000 minutes (Tablicious v0.4.2)

    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/missing.html000066400000000000000000000074771515050116100277270ustar00rootroot00000000000000 missing (Tablicious v0.4.2)

    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/missing_002edispstrs.html000066400000000000000000000056651515050116100322460ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.2)

    8.2.30.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/missing_002eismissing.html000066400000000000000000000060271515050116100323710ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.2)

    8.2.30.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/missing_002eisnan.html000066400000000000000000000057601515050116100314770ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.2)

    8.2.30.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/missing_002eisnanny.html000066400000000000000000000057711515050116100320500ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.2)

    8.2.30.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/missing_002emissing.html000066400000000000000000000054321515050116100320340ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.2)

    8.2.30.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeA.html000066400000000000000000000044621515050116100276050ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.2)

    8.2.31 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeCellstr.html000066400000000000000000000045261515050116100310360ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.2)

    8.2.32 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeCharvec.html000066400000000000000000000045521515050116100310000ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.2)

    8.2.33 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeFinite.html000066400000000000000000000045501515050116100306410ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.2)

    8.2.34 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeInteger.html000066400000000000000000000045461515050116100310250ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.2)

    8.2.35 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeMember.html000066400000000000000000000045541515050116100306360ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.2)

    8.2.36 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeNonempty.html000066400000000000000000000045601515050116100312350ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.2)

    8.2.37 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeNumeric.html000066400000000000000000000045461515050116100310320ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.2)

    8.2.38 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeReal.html000066400000000000000000000045401515050116100303050ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.2)

    8.2.39 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeSameSize.html000066400000000000000000000045441515050116100311460ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.2)

    8.2.40 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeScalar.html000066400000000000000000000046041515050116100306300ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.2)

    8.2.41 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeScalarLogical.html000066400000000000000000000046121515050116100321220ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.2)

    8.2.42 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/mustBeVector.html000066400000000000000000000045301515050116100306630ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.2)

    8.2.43 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/pp.html000066400000000000000000000077051515050116100266670ustar00rootroot00000000000000 pp (Tablicious v0.4.2)

    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/scalarexpand.html000066400000000000000000000072301515050116100307060ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.2)

    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/seconds.html000066400000000000000000000062751515050116100277070ustar00rootroot00000000000000 seconds (Tablicious v0.4.2)

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/size2str.html000066400000000000000000000064731515050116100300360ustar00rootroot00000000000000 size2str (Tablicious v0.4.2)

    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/splitapply.html000066400000000000000000000113441515050116100304430ustar00rootroot00000000000000 splitapply (Tablicious v0.4.2)

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string.html000066400000000000000000000160431515050116100275510ustar00rootroot00000000000000 string (Tablicious v0.4.2)

    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002ecell.html000066400000000000000000000057041515050116100311410ustar00rootroot00000000000000 string.cell (Tablicious v0.4.2)

    8.2.52.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002ecellstr.html000066400000000000000000000057331515050116100316740ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.2)

    8.2.52.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002echar.html000066400000000000000000000061761515050116100311430ustar00rootroot00000000000000 string.char (Tablicious v0.4.2)

    8.2.52.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002ecmp.html000066400000000000000000000075001515050116100307750ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.2)

    8.2.52.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002edecode.html000066400000000000000000000061631515050116100314450ustar00rootroot00000000000000 string.decode (Tablicious v0.4.2)

    8.2.52.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002edispstrs.html000066400000000000000000000064341515050116100320760ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.2)

    8.2.52.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eempty.html000066400000000000000000000061211515050116100313520ustar00rootroot00000000000000 string.empty (Tablicious v0.4.2)

    8.2.52.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eencode.html000066400000000000000000000062741515050116100314620ustar00rootroot00000000000000 string.encode (Tablicious v0.4.2)

    8.2.52.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eerase.html000066400000000000000000000057741515050116100313300ustar00rootroot00000000000000 string.erase (Tablicious v0.4.2)

    8.2.52.9 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eismissing.html000066400000000000000000000061261515050116100322260ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.2)

    8.2.52.10 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eisnanny.html000066400000000000000000000057541515050116100317060ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.2)

    8.2.52.11 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eisstring.html000066400000000000000000000056771515050116100320750ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.2)

    8.2.52.12 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002elower.html000066400000000000000000000061731515050116100313530ustar00rootroot00000000000000 string.lower (Tablicious v0.4.2)

    8.2.52.13 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002emissing.html000066400000000000000000000061121515050116100316650ustar00rootroot00000000000000 string.missing (Tablicious v0.4.2)

    8.2.52.14 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eplus.html000066400000000000000000000062371515050116100312070ustar00rootroot00000000000000 string.plus (Tablicious v0.4.2)

    8.2.52.15 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eregexprep.html000066400000000000000000000067451515050116100322310ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.2)

    8.2.52.16 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002ereverse.html000066400000000000000000000061611515050116100316730ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.2)

    8.2.52.17 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    string_002ereverse_005fbytes.html000066400000000000000000000066751515050116100334270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html string.reverse_bytes (Tablicious v0.4.2)

    8.2.52.18 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002estrcat.html000066400000000000000000000062331515050116100315200ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.2)

    8.2.52.19 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002estrcmp.html000066400000000000000000000065211515050116100315300ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.2)

    8.2.52.20 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002estrfind.html000066400000000000000000000067341515050116100316770ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.2)

    8.2.52.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002estring.html000066400000000000000000000070611515050116100315260ustar00rootroot00000000000000 string.string (Tablicious v0.4.2)

    8.2.52.22 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002estrlength.html000066400000000000000000000072031515050116100322300ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.2)

    8.2.52.23 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    string_002estrlength_005fbytes.html000066400000000000000000000066401515050116100337560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html string.strlength_bytes (Tablicious v0.4.2)

    8.2.52.24 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002estrrep.html000066400000000000000000000072111515050116100315340ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.2)

    8.2.52.25 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/string_002eupper.html000066400000000000000000000057261515050116100313610ustar00rootroot00000000000000 string.upper (Tablicious v0.4.2)

    8.2.52.26 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/struct2table.html000066400000000000000000000067201515050116100306620ustar00rootroot00000000000000 struct2table (Tablicious v0.4.2)

    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table.html000066400000000000000000000224621515050116100273340ustar00rootroot00000000000000 table (Tablicious v0.4.2)

    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/tableOuterFillValue.html000066400000000000000000000045161515050116100321570ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.2)

    8.2.55 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eaddvars.html000066400000000000000000000076741515050116100314370ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.2)

    8.2.54.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eantijoin.html000066400000000000000000000070131515050116100316110ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.2)

    8.2.54.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002ecartesian.html000066400000000000000000000076431515050116100317600ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.2)

    8.2.54.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002econvertvars.html000066400000000000000000000073061515050116100323570ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.2)

    8.2.54.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002efindgroups.html000066400000000000000000000063601515050116100321620ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.2)

    8.2.54.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002egetvar.html000066400000000000000000000062411515050116100312700ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.2)

    8.2.54.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002egetvars.html000066400000000000000000000061341515050116100314540ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.2)

    8.2.54.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002egroupby.html000066400000000000000000000074541515050116100314760ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.2)

    8.2.54.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eheight.html000066400000000000000000000057241515050116100312550ustar00rootroot00000000000000 table.height (Tablicious v0.4.2)

    8.2.54.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002ehorzcat.html000066400000000000000000000062651515050116100314600ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.2)

    8.2.54.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002einnerjoin.html000066400000000000000000000072721515050116100320000ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.2)

    8.2.54.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eintersect.html000066400000000000000000000064621515050116100320050ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.2)

    8.2.54.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eisempty.html000066400000000000000000000056451515050116100315010ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.2)

    8.2.54.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eismember.html000066400000000000000000000060771515050116100316120ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.2)

    8.2.54.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eismissing.html000066400000000000000000000072221515050116100320050ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.2)

    8.2.54.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eistable.html000066400000000000000000000054331515050116100314250ustar00rootroot00000000000000 table.istable (Tablicious v0.4.2)

    8.2.54.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002ejoin.html000066400000000000000000000074161515050116100307440ustar00rootroot00000000000000 table.join (Tablicious v0.4.2)

    8.2.54.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002emergevars.html000066400000000000000000000072471515050116100320020ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.2)

    8.2.54.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002emovevars.html000066400000000000000000000070101515050116100316350ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.2)

    8.2.54.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002endims.html000066400000000000000000000055761515050116100311240ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.2)

    8.2.54.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002enumel.html000066400000000000000000000060621515050116100311210ustar00rootroot00000000000000 table.numel (Tablicious v0.4.2)

    8.2.54.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060071515050116100326730ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.2)

    8.2.54.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eouterjoin.html000066400000000000000000000075321515050116100320220ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.2)

    8.2.54.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eprettyprint.html000066400000000000000000000060071515050116100324040ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.2)

    8.2.54.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erealjoin.html000066400000000000000000000077601515050116100316120ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.2)

    8.2.54.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eremovevars.html000066400000000000000000000060721515050116100321730ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.2)

    8.2.54.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erenamevars.html000066400000000000000000000066561515050116100321550ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.2)

    8.2.54.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erepelem.html000066400000000000000000000066311515050116100314340ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.2)

    8.2.54.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erepmat.html000066400000000000000000000064541515050116100312760ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.2)

    8.2.54.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erestrict.html000066400000000000000000000105341515050116100316370ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.2)

    8.2.54.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erowfun.html000066400000000000000000000156361515050116100313300ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.2)

    8.2.54.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002erows2vars.html000066400000000000000000000106531515050116100317520ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.2)

    8.2.54.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esemijoin.html000066400000000000000000000071721515050116100316210ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.2)

    8.2.54.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    table_002esetDimensionNames.html000066400000000000000000000077511515050116100333550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html table.setDimensionNames (Tablicious v0.4.2)

    8.2.54.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esetRowNames.html000066400000000000000000000061221515050116100322450ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.2)

    8.2.54.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    table_002esetVariableNames.html000066400000000000000000000075671515050116100331620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html table.setVariableNames (Tablicious v0.4.2)

    8.2.54.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esetdiff.html000066400000000000000000000063271515050116100314310ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.2)

    8.2.54.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esetvar.html000066400000000000000000000071431515050116100313060ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.2)

    8.2.54.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esetxor.html000066400000000000000000000065111515050116100313240ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.2)

    8.2.54.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esize.html000066400000000000000000000072111515050116100307500ustar00rootroot00000000000000 table.size (Tablicious v0.4.2)

    8.2.54.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esplitapply.html000066400000000000000000000070631515050116100322040ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.2)

    8.2.54.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esplitvars.html000066400000000000000000000075331515050116100320340ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.2)

    8.2.54.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esqueeze.html000066400000000000000000000057101515050116100314610ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.2)

    8.2.54.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002estack.html000066400000000000000000000072161515050116100311100ustar00rootroot00000000000000 table.stack (Tablicious v0.4.2)

    8.2.54.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002esummary.html000066400000000000000000000055301515050116100314750ustar00rootroot00000000000000 table.summary (Tablicious v0.4.2)

    8.2.54.45 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002etable.html000066400000000000000000000125011515050116100310630ustar00rootroot00000000000000 table.table (Tablicious v0.4.2)

    8.2.54.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002etable2array.html000066400000000000000000000055471515050116100322200ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.2)

    8.2.54.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002etable2cell.html000066400000000000000000000062161515050116100320130ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.2)

    8.2.54.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002etable2struct.html000066400000000000000000000071501515050116100324160ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.2)

    8.2.54.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002eunion.html000066400000000000000000000063751515050116100311400ustar00rootroot00000000000000 table.union (Tablicious v0.4.2)

    8.2.54.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002evarfun.html000066400000000000000000000102621515050116100312770ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.2)

    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002evarnames.html000066400000000000000000000064161515050116100316200ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.2)

    8.2.54.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002evertcat.html000066400000000000000000000063731515050116100314560ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.2)

    8.2.54.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/table_002ewidth.html000066400000000000000000000053521515050116100311210ustar00rootroot00000000000000 table.width (Tablicious v0.4.2)

    8.2.54.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/tail.html000066400000000000000000000076111515050116100271750ustar00rootroot00000000000000 tail (Tablicious v0.4.2)

    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/tblish_002edataset.html000066400000000000000000000243741515050116100316320ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.2)

    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    tblish_002edataset_002eAirPassengers.html000066400000000000000000000075561515050116100347730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.AirPassengers (Tablicious v0.4.2)

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    tblish_002edataset_002eBJsales.html000066400000000000000000000110401515050116100335270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.BJsales (Tablicious v0.4.2)

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eBOD.html000066400000000000000000000102621515050116100326150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.BOD (Tablicious v0.4.2)

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eChickWeight.html000066400000000000000000000113051515050116100344010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.ChickWeight (Tablicious v0.4.2)

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    tblish_002edataset_002eDNase.html000066400000000000000000000111721515050116100332040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.DNase (Tablicious v0.4.2)

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111331515050116100351130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.EuStockMarkets (Tablicious v0.4.2)

    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114171515050116100346170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Formaldehyde (Tablicious v0.4.2)

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151041515050116100345360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.HairEyeColor (Tablicious v0.4.2)

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eHarman23cor.html000066400000000000000000000102721515050116100342710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Harman23cor (Tablicious v0.4.2)

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eHarman74cor.html000066400000000000000000000103471515050116100343020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Harman74cor (Tablicious v0.4.2)

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eIndometh.html000066400000000000000000000110051515050116100337540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Indometh (Tablicious v0.4.2)

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    tblish_002edataset_002eInsectSprays.html000066400000000000000000000104441515050116100346420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.InsectSprays (Tablicious v0.4.2)

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000102561515050116100351710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.JohnsonJohnson (Tablicious v0.4.2)

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    tblish_002edataset_002eLakeHuron.html000066400000000000000000000104741515050116100341060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.LakeHuron (Tablicious v0.4.2)

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126261515050116100354110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.LifeCycleSavings (Tablicious v0.4.2)

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    tblish_002edataset_002eLoblolly.html000066400000000000000000000111021515050116100337730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Loblolly (Tablicious v0.4.2)

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    tblish_002edataset_002eNile.html000066400000000000000000000112151515050116100330770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Nile (Tablicious v0.4.2)

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    tblish_002edataset_002eOrange.html000066400000000000000000000115221515050116100334240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Orange (Tablicious v0.4.2)

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    tblish_002edataset_002eOrchardSprays.html000066400000000000000000000124741515050116100350040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.OrchardSprays (Tablicious v0.4.2)

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    
    tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102161515050116100344610ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.PlantGrowth (Tablicious v0.4.2)

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    tblish_002edataset_002ePuromycin.html000066400000000000000000000124711515050116100342020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Puromycin (Tablicious v0.4.2)

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    tblish_002edataset_002eTheoph.html000066400000000000000000000142601515050116100334420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Theoph (Tablicious v0.4.2)

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    tblish_002edataset_002eTitanic.html000066400000000000000000000146031515050116100336070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.Titanic (Tablicious v0.4.2)

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    tblish_002edataset_002eToothGrowth.html000066400000000000000000000115311515050116100345010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.ToothGrowth (Tablicious v0.4.2)

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000140771515050116100346640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.UCBAdmissions (Tablicious v0.4.2)

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000147431515050116100350450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.UKDriverDeaths (Tablicious v0.4.2)

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000110761515050116100345130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.UKLungDeaths (Tablicious v0.4.2)

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    tblish_002edataset_002eUKgas.html000066400000000000000000000103671515050116100332310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.UKgas (Tablicious v0.4.2)

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000100531515050116100342760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.USAccDeaths (Tablicious v0.4.2)

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    tblish_002edataset_002eUSArrests.html000066400000000000000000000137551515050116100341160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.USArrests (Tablicious v0.4.2)

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116231515050116100350510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.USJudgeRatings (Tablicious v0.4.2)

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111061515050116100364570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.USPersonalExpenditure (Tablicious v0.4.2)

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    tblish_002edataset_002eVADeaths.html000066400000000000000000000113251515050116100336510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.VADeaths (Tablicious v0.4.2)

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002eWWWusage.html000066400000000000000000000103531515050116100337230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.WWWusage (Tablicious v0.4.2)

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eWorldPhones.html000066400000000000000000000105141515050116100344550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.WorldPhones (Tablicious v0.4.2)

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    tblish_002edataset_002eairmiles.html000066400000000000000000000072301515050116100340170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.airmiles (Tablicious v0.4.2)

    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    tblish_002edataset_002eairquality.html000066400000000000000000000125521515050116100344010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.airquality (Tablicious v0.4.2)

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    tblish_002edataset_002eanscombe.html000066400000000000000000000121451515050116100340020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.anscombe (Tablicious v0.4.2)

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    tblish_002edataset_002eattenu.html000066400000000000000000000114501515050116100335110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.attenu (Tablicious v0.4.2)

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    tblish_002edataset_002eattitude.html000066400000000000000000000111021515050116100340260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.attitude (Tablicious v0.4.2)

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    tblish_002edataset_002eaustres.html000066400000000000000000000102211515050116100336720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.austres (Tablicious v0.4.2)

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    tblish_002edataset_002ebeavers.html000066400000000000000000000106431515050116100336430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.beavers (Tablicious v0.4.2)

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    tblish_002edataset_002ecars.html000066400000000000000000000116711515050116100331460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.cars (Tablicious v0.4.2)

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    tblish_002edataset_002echickwts.html000066400000000000000000000114221515050116100340270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.chickwts (Tablicious v0.4.2)

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    tblish_002edataset_002eco2.html000066400000000000000000000116651515050116100327040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.co2 (Tablicious v0.4.2)

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    tblish_002edataset_002ecrimtab.html000066400000000000000000000164001515050116100336320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.crimtab (Tablicious v0.4.2)

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    tblish_002edataset_002ecupcake.html000066400000000000000000000104731515050116100336300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.cupcake (Tablicious v0.4.2)

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    tblish_002edataset_002ediscoveries.html000066400000000000000000000106211515050116100345270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.discoveries (Tablicious v0.4.2)

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    tblish_002edataset_002eesoph.html000066400000000000000000000106631515050116100333340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.esoph (Tablicious v0.4.2)

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    tblish_002edataset_002eeuro.html000066400000000000000000000116561515050116100331730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.euro (Tablicious v0.4.2)

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    tblish_002edataset_002eeurodist.html000066400000000000000000000101131515050116100340420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.eurodist (Tablicious v0.4.2)

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    tblish_002edataset_002efaithful.html000066400000000000000000000121121515050116100340070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.faithful (Tablicious v0.4.2)

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002efreeny.html000066400000000000000000000121051515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.freeny (Tablicious v0.4.2)

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    tblish_002edataset_002einfert.html000066400000000000000000000116021515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.infert (Tablicious v0.4.2)

    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    tblish_002edataset_002eiris.html000066400000000000000000000121551515050116100331620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.iris (Tablicious v0.4.2)

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eislands.html000066400000000000000000000104001515050116100336400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.islands (Tablicious v0.4.2)

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/tblish_002edataset_002elh.html000066400000000000000000000101731515050116100326740ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.2)

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    tblish_002edataset_002elongley.html000066400000000000000000000115411515050116100336630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.longley (Tablicious v0.4.2)

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    tblish_002edataset_002elynx.html000066400000000000000000000113351515050116100332050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.lynx (Tablicious v0.4.2)

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    tblish_002edataset_002emorley.html000066400000000000000000000121341515050116100335200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.morley (Tablicious v0.4.2)

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002emtcars.html000066400000000000000000000124261515050116100335060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.mtcars (Tablicious v0.4.2)

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    tblish_002edataset_002enhtemp.html000066400000000000000000000104771515050116100335140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.nhtemp (Tablicious v0.4.2)

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    tblish_002edataset_002enottem.html000066400000000000000000000101411515050116100335130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.nottem (Tablicious v0.4.2)

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002enpk.html000066400000000000000000000113041515050116100327770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.npk (Tablicious v0.4.2)

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000103631515050116100361000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.occupationalStatus (Tablicious v0.4.2)

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eprecip.html000066400000000000000000000103651515050116100334770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.precip (Tablicious v0.4.2)

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    tblish_002edataset_002epresidents.html000066400000000000000000000111711515050116100343710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.presidents (Tablicious v0.4.2)

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    tblish_002edataset_002epressure.html000066400000000000000000000112301515050116100340550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.pressure (Tablicious v0.4.2)

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    tblish_002edataset_002equakes.html000066400000000000000000000120511515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.quakes (Tablicious v0.4.2)

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002erandu.html000066400000000000000000000111311515050116100333160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.randu (Tablicious v0.4.2)

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    tblish_002edataset_002erivers.html000066400000000000000000000102631515050116100335240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.rivers (Tablicious v0.4.2)

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    tblish_002edataset_002erock.html000066400000000000000000000110441515050116100331460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.rock (Tablicious v0.4.2)

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    tblish_002edataset_002esleep.html000066400000000000000000000113051515050116100333200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.sleep (Tablicious v0.4.2)

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002estackloss.html000066400000000000000000000141741515050116100342250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.stackloss (Tablicious v0.4.2)

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    tblish_002edataset_002estate.html000066400000000000000000000130011515050116100333230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.state (Tablicious v0.4.2)

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000104521515050116100355250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.sunspot_month (Tablicious v0.4.2)

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102121515050116100353320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.sunspot_year (Tablicious v0.4.2)

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    tblish_002edataset_002esunspots.html000066400000000000000000000105111515050116100341040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.sunspots (Tablicious v0.4.2)

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    tblish_002edataset_002eswiss.html000066400000000000000000000140711515050116100333630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.swiss (Tablicious v0.4.2)

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    tblish_002edataset_002etreering.html000066400000000000000000000111731515050116100340320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.treering (Tablicious v0.4.2)

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    tblish_002edataset_002etrees.html000066400000000000000000000113431515050116100333340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.trees (Tablicious v0.4.2)

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    tblish_002edataset_002euspop.html000066400000000000000000000102441515050116100333570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.uspop (Tablicious v0.4.2)

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    tblish_002edataset_002evolcano.html000066400000000000000000000112131515050116100336470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.volcano (Tablicious v0.4.2)

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    tblish_002edataset_002ewarpbreaks.html000066400000000000000000000111751515050116100343560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.warpbreaks (Tablicious v0.4.2)

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    tblish_002edataset_002ewomen.html000066400000000000000000000113451515050116100333410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.women (Tablicious v0.4.2)

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    tblish_002edataset_002ezCO2.html000066400000000000000000000104511515050116100327660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.dataset.zCO2 (Tablicious v0.4.2)

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/tblish_002edatasets.html000066400000000000000000000064301515050116100320060ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.2)

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    tblish_002eevalWithTableVars.html000066400000000000000000000075651515050116100335200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.evalWithTableVars (Tablicious v0.4.2)

    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    tblish_002eexamples_002eSpDb.html000066400000000000000000000077521515050116100332440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.examples.SpDb (Tablicious v0.4.2)

    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    tblish_002eexamples_002ecoplot.html000066400000000000000000000150401515050116100337010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.examples.coplot (Tablicious v0.4.2)

    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000117551515050116100351610ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.examples.plot_pairs (Tablicious v0.4.2)

    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/tblish_002esizeof2.html000066400000000000000000000124271515050116100315620ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.2)

    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    tblish_002etable_002egrpstats.html000066400000000000000000000104751515050116100335300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html tblish.table.grpstats (Tablicious v0.4.2)

    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/timezones.html000066400000000000000000000077701515050116100302670ustar00rootroot00000000000000 timezones (Tablicious v0.4.2)

    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/todatetime.html000066400000000000000000000070061515050116100304010ustar00rootroot00000000000000 todatetime (Tablicious v0.4.2)

    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/vartype.html000066400000000000000000000064671515050116100277460ustar00rootroot00000000000000 vartype (Tablicious v0.4.2)

    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/vecfun.html000066400000000000000000000066261515050116100275370ustar00rootroot00000000000000 vecfun (Tablicious v0.4.2)

    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/html/years.html000066400000000000000000000064271515050116100273730ustar00rootroot00000000000000 years (Tablicious v0.4.2)

    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/tablicious.html000066400000000000000000026620061515050116100274450ustar00rootroot00000000000000 Tablicious v0.4.2

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.2.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.2 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.2/tablicious-0.4.2.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.2.2 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.2.3 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.2.4 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.2.6 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.


    8.2.2.7 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.


    8.2.2.8 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.


    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.5.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.5.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.5.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.6 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.5.7 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.5.8 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.5.9 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.5.10 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.5.11 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.5.12 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.5.13 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.14 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.5.15 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.5.16 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.5.17 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.5.18 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.5.19 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.5.20 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.9.1 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.9.2 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.


    8.2.9.3 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.9.4 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.9.5 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.9.6 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.9.7 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.9.8 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.9.9 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.9.10 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.11 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.12 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.9.13 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.14 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.15 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.9.16 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.9.17 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.9.18 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.19 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.9.21 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.22 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.9.23 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.9.24 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.25 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.9.26 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.9.27 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.


    8.2.9.28 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.9.29 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.9.30 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.9.31 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.9.32 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.9.33 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.34 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.13.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.13.2 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.4 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.13.5 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.6 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.7 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.13.8 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.9 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isfile

    Not documented


    8.2.22 isfolder

    Not documented


    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.27.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.27.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.27.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.27.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.27.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.27.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.27.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.27.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.27.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.27.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.27.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.30.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.30.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.31 mustBeA

    Not documented


    8.2.32 mustBeCellstr

    Not documented


    8.2.33 mustBeCharvec

    Not documented


    8.2.34 mustBeFinite

    Not documented


    8.2.35 mustBeInteger

    Not documented


    8.2.36 mustBeMember

    Not documented


    8.2.37 mustBeNonempty

    Not documented


    8.2.38 mustBeNumeric

    Not documented


    8.2.39 mustBeReal

    Not documented


    8.2.40 mustBeSameSize

    Not documented


    8.2.41 mustBeScalar

    Not documented


    8.2.42 mustBeScalarLogical

    Not documented


    8.2.43 mustBeVector

    Not documented


    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.52.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.52.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.52.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.52.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.52.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.52.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.52.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.52.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.52.9 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.52.10 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.52.11 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.52.12 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.52.13 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.52.14 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.52.15 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat


    8.2.52.16 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.52.17 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.52.18 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.52.19 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.52.20 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.52.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.52.22 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.52.23 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.52.24 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.52.25 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.52.26 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.


    8.2.54.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.54.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.54.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.54.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.54.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.54.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.54.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.54.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.54.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.54.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.54.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.54.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.54.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.54.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.54.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.54.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.54.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.54.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.54.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.54.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.54.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.54.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.54.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.54.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.54.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.54.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.54.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.54.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.54.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.54.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.54.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.54.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.54.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.54.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.54.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.54.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.54.45 table.summary

    Method: summary (obj)

    Summary of table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables.


    8.2.54.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.54.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.54.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.54.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.54.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.54.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.54.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.54.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.55 tableOuterFillValue

    Not documented


    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.58.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.58.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.58.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.2/user-guide/tablicious.pdf000066400000000000000000016603731515050116100272560ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 268 /Filter /FlateDecode >> stream xڍAO  0QdM=ۚFm# x{N yм&`=^^^/ΒI5 aRwްKoP9x3d&W!fE#؍n+N s, {+ >o|hao<2oM),qtB&CKE_Ai` endstream endobj 13 0 obj << /Length 667 /Filter /FlateDecode >> stream x}TKo0JؼmTʩ=8@v,xeLx̆}$cf,EZW!/b*de;8C ^=Ơ~]PG@u'=ūao؂HyNA0Qa^?`yMMΫ_?CZhTPOh>ϘjFEQx,^@,7 yziiG.Q ƿH;Xɋ~_V 087$;$Y2%_1f@pFK9_zx@x -Zy#qw:Yfo^-Ö-aKĽo@~y,8ԩyr= w&Hphjjׇf &5j=Uh.mڸ͏fh$ endstream endobj 35 0 obj << /Length 565 /Filter /FlateDecode >> stream xo0+|L1~Ͽئ!!.8ڴJ= {8 h*). 9z=7 vE0,Y-g$jDR 0;ZK9/e99cgǖ h Ee82qo249̻0`w9~?qx%WC^,irԙo7yY! (w`U2闿˕z?0AQBlHe`*4)jyÁεnWw$`@Q3&) 4< dו눨l۹B)qpR#Q~@z1H.A,eG&@A$)Lq. Uz:^ozH2h<c\~!=ڃJsWU vJ{|w>&?Tt$^hjؠ0xT&*>wwu%U2ONuV) p@  q\l}wx(\v*W??.P endstream endobj 124 0 obj << /Length 1480 /Filter /FlateDecode >> stream x[nF+tz{6$@b sr-!Š y&)n-ؖbTTUoq!I;j~3o?`uߘno31@'\d:se'?|4+)yoOh~OVJ@!vr¨:.#" /+R/EO"J8_'%-UZǑ#"8'h?ƨMxѭ~{n%i3 AMo(E L^I^8B1C5H eP&a2a#sZ銮VI#(HXHm%ȶ<@d&1؊ڝ*MKbs5ݕyy>_׍ŹuPϠ( Ѧfw\ ^/~%ƠC@҂m[d3I[e2Ǥ0YLÛI6tǽ%11f0UV7>7^5% SdYI;8%UL;\:k9hHmZgm#:y,FUxr~?d,+F ECmT| -QR*^QR3R`SDEqt^cYrGv%띲ҿE: \׬#7`{ )[;tm@316䈊L ڣxIiBOwJQ!lؐ%V'!DoMIw25T_%t1M;(w )7Ļ16Ws*s_,>WINYƝw 6խUVwmC _2;T$U6-!=dlQW%UɃZv*ΣStM_M=GiIUC\ V|*/J|,5 H^'Ԣ58՜[dHIۗw*E1~[ѐh bܒ[s [[R{O:Mf;GW;<4lLV*e*V.k}F9xICbE}0U/)T0 ڠ،JxHr'r8x(bo/F]u}+;z"ѴfIyTfݱd'FmO{s_'FVvn Sy1XϟI]YHwQdb~.heN傫ӍSO 3lqjlhL4\$W=9O0.@([;?eI[Z{msIS|}aIEf1i^ glopa4MWfOj#m>+?"ԝ.1pS94%b] nñ߂4[ݮ<|iM#Crb{o޳%U}Ӏx|tD8Ul endstream endobj 228 0 obj << /Length 1360 /Filter /FlateDecode >> stream xKsFfcj1S9Ҭ*8>F؎P>aXII Ncp,=['~!fYʟ7>  6$Kq{26˲?Kvr/AeҭǻjMS] ad0GTdF"UxYqG6E1*[lI}Xyru īQ|^[g| y+`*z$hͰ&HMWD$ܔ{|W'%xF+F.G  ڴM]@vȠ%-z4h Zu9Â[R#r'p܋.pH3/ DCr^‘IĹÌ%ҤEm):ipDW0D0.X6z.yŁBʈ!vKU7L$K)+ZfՃ#gA5Weg0.k ΪG#3<28 gU0_L2=fPDYV̏SZ7" ieVxr:]EGSc&PK^إNq|/(l0\҇zA:f|i47t _ ~E)j3 i3a}Mk|\n}-ȵ{G6F5(i׍F)QCV@d]naŀn"tZv[tP8O}YlwP&!FǠںT!\ߥ#iFo<5h\]Q#' аoS {*!Dڕ.!=¾mӮVN,#4O^ϐi$1aOzlm )ֱ2o,Qf'~) xDɣ4=y#2[-zh/]k&*AkX]]"{f|9Nr;NM>w?}]D $Z#qy_*+1?kYz,3Գ- 6 =7M6m>mO&yK1`={c̽!¦9 ?X#-Q@1E#n{AnmOL#ɇnV endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2400 /Filter /FlateDecode >> stream xڵ[Mϯ1pXE?A$aDac7X1DZNtG"IB %I DK $A hUCo(F=wN%0~ɄS2JL8 *;Z <O9j U f"Z-dPK <]L#HBA gt}:zA$RC!8 = PdEEIˡR(D J*:Aj 4[UTTOhJh HZbAamjƟ@QJUGzʑ%.P{w@CwFci IwPC9lgD>1rzt~݅xw:CNߝ}xw?7 _TT ~wx}D~E8Ҿ_Gt뻧x*ޭ/ mIbϩQ+ *ϩ\O+KA k=b҂d[0l(l(l(l(l(PdCD?_~tGީh, *%2f4jFD l72mlHZEN:s8F_11eJ"HSNqT՘0Xt"k9dH+w ZM=6H&Ѷml*#IĎ5sbwHSt*㙑pj> /7帑8ѩ80fL#il_3i6Vexik5y3QblYFM{:Jj6i".XL2cz2"4= Q:"[J'd?=/hE 7ҭ>, Xr97RS>Jd=WziWdėv#8nc;z`O$K*LX{VN9;z0KL_s}*US>C!c a:?(X7J۫)}tX Xjl}ctdkb\k>FY\  ۸>\6RY& VB[,,]'lSSjn.mmؚ y2yFNH6ѓk*NL\wr8=! 'ڔ[vN@ɷV h_hX[˛5:ԸЈM+l[o{%TPl#@3恢X7hSFC g}HXN=嵣ItΩq#HErY"e٪qqN]> $JItJ2ϧֱJ^itΩq#ߡESLޤLsNOH{1驆p{5:ԸGlޥS]VꑯELsN迊DsF^=z#95nl8aꖤ;+ՂmRo&)}tKHhDl5_8{vΨ6-}3iƽsFl/Qa}{Z/?Yj"p4/̆}\LZe\et$A!IwohyV_J]8qxH ${M r[/ܘ@L &{ r{?ܠ@P&rMܧ@nT w*[Ƚ fjˌxW 7,;- rkܶ@[ܭryܽ@n_ / .nunb`71M &v2:M ϻ ?ծY=6=G tYlQN>CaKo$R*tʩpݡivCh1ևP-# endstream endobj 337 0 obj << /Length 1360 /Filter /FlateDecode >> stream xI6)tB>=m @omV/mO_E)њbWmN&M1HɦXMpͱ&{rm뱙#xpOi&e2a%x> stream xڵA+xL.vClAE^F`Whm#Zqf^Ev5$V:J*B< ~c+,:w/cJ!ԙwqu90LQ]JCJ? k|+d ͎SΨR\HNOK3R:{Ti m>K}2F+  %<#.| Qe,3tH kEz/FE8. >~mRdhj7QdΨAchgDRN**qEډphPҢzTYB4g-=L @eh{gg4qPUZE0%b=(`l gr/- =c _З:l"FhMl(Z@m=LЙe" eNL~jDM7(ϣ-:=4:iqi*+0o0:^<ڢ@w\NШ٩G [tk;BI ,E.qy@GOшguAcŋ}W_?i}O:yxkSO坰׶O!1S☯ˋ_?| ??bKD ^-cz.ƍ~#SU{U+͌7yhVqFey#\ƈc$,Hg/cz.ƍ~WF8z$I^+rVƫg0ޏjqDFQ=7bLŸ`80;Jsei7F lV1l7lc Hզ_F7]jv\[˘qH8bph^9U>2bwe712ۋx\˜#ċߌGaN S)~ #V/=F+#c?|>1ox\D$Mac6e3czNMfn(]2bw0*#jW˘q( 1ejj1=Fi(x*U37uH˘q-#u;`:Wg|#\Fn8כ8VY"Bgw%#֘Kkշ^p-c7wM6gb ׭=F7j,!k73bw0Fۂ+Nۋx\B봊Ţ?UgFz#\Fl8^u/rY fw%$ڍj쫈e*䝭WŸ`Dޖ0d[ˍS2-3F_m5+Xta19& oٕ<[<fnn*,z7}WXo?iɼR-r쫘(LJop1r~{SyL?t >>?~ӷw?ᛇ_."R^xĹ託V>4v%ƥĞK)Y2> stream xKo6:s[w-=l= ?9;dRNRHD gEHqN hw_pVݵPâ`xeW=X\HƑhH#5tl3,lRwwzw-ym4DArR=z>4LJ0\E3N0ьqD4u_6|XBYjiy]FtR 19ͷ c-j1Eu6{;8xr mL;W~J%Nvy| &Qé;F\fAȸ1g7k׀pdCf?ә<-'&Oҕ{#g i| \7sj0D< ʏÏ~`J,͓ftf\t lڡUsm悦&D?-<9=t}dY|PW$WEJX j{!oKӵQ4UUt$!y1D =r's* eCΛv)T uD#AΣ87O8֘=B9#`TEe< uJr8.k|77Rӟ$4I~H̷ k} :Gw_d@PDDw(l2Nש[7so@DoeVg6h gNjXvBلgbrCyXEo&ueXFLFjYKEXUrzn D5;&OI9S Rm)1 iMJn3VlAEŞv0}t*͘)w#TIm<.É Ry!AM`{cG” xJ:();Dq{+FrU?Ãw> stream xڽ_\S1yQTU nY!’e&ǰ9!BW`fӒι?{EK+]F!Hg}!]EZڊNBJei(\JU!^^,Z ɂZ!5dVhzAVG̫.g& (ťM/~ cKw2t&~к_d/L˳07:%,<S^n‹4CC: wϒ"vUEƮ>L]݊,CW7*YTEśĤN(Qt54 C\gcV p[+[e0[/Cp-ܸ 5ϒ2&鉛z{(vYfC#0jҮne:.S+:FhЉ<|2Bfx(, :,խ,A#0FRީF˚^kyt) ]QQ uV1HnTw2Țhk[&=-vb4$1>!3F;D9"B?0f_HOA|b_^w/yO5+oNw_Ï?{x|hX Ci0n+.-^rr~]~o7ߜybPftx 3FZ1zF`4W=׍s3&M~m+u.r&] W_E0`~աJNiw΅9՝ E]jKF ͘w0bUJX urŪ1`^׎{V{=FFhG0EpSi2cxnD #)P1/\܌~#qGuP,1<7cߕQlţj:Z.s3&KЎ웘K9!#&Xg]b;UQr r&Њ&%I2cxnD;Iljrs3&a/Wo͹WlW 1&^.Mhwv5٪CpKH-1<7c-79L7b ͘wedۋ}[lx܌~:/]31ЎDsu<~#܌~b=a2fL;VX1`s(yss3&X j9#:e ͘w0vW3|aV9y ˍgw%X^UKǦ^6WK'L;Tyv'#FL8} n/V_M81`V_><L^FmUŮW/FFk~/C;SƶЎ1HvQ{XžXS1`-{c X|Θw0NIɄLKOm̮[i}G2VYȧⅣnOKVfoO?}ype`K7}P;\L9}T>'O;/6ƫ;ŗ+|ǻ~WQn/pv~-~rrI.HFyU#HW7Boz#F7Bo z3fЛ7Co z+V[Bo z+VYYYYYYYYYEOZ"rF:"HCBBBBBBBBBB^z=zЋ9!=zЋ*1^%ƫx¡78*X6qj g9@d {D:r r:]{> S!1<7bYY6Bdr~qZr4WC5^ q{  endstream endobj 554 0 obj << /Length 1419 /Filter /FlateDecode >> stream xn6y -9!/]]즳plq[%9KNd*DmTpJe~LqN|sCWevvojo͇Pò2dݧWBGw>[HM2z@(uHM/?ESrD6UfW?E2)}0N%>eK Ȱ.-%[B᧌ZJMfKUuON #uSɥ A3p=Jjơkg?/ӄ3HSB$F1@ݞŻ=#._)ۅ} bbɂEYG0BU;wSo#T η!h)ht]닰;JfFĠ(#56K)2wM3&BL1w<9M-}3h 5,5:?ϖ/C4U:`y12Na_4>_ȳ)°TI'OD]OݧGA x pP0||hr֠JW)cdW[4$ 3/(j͋p-/ImvRNbi'={_U(RI"fGh~1pDoUOD #Z؞s!\|Sø$i 5B]w3MN#F ҅ucB._i{zEu$0A3Aj'6y{[!:&(ኍqڞxoGN' l\ pjb)GɫkcEQq;lu*őW#D|l!^ϔcXypS%89$aV1"R$"}qKN zq"bRy15a">թἊO' 1; endstream endobj 449 0 obj << /Type /ObjStm /N 100 /First 903 /Length 2063 /Filter /FlateDecode >> stream xڵQdW1~QR e݇f63; ο)u ;v0]0JJҽ!uVzHWVXR*5QB~BPP~ ]vK/=l4{!#xQh .gI4PUC],}Be6s^}TSҍqz P_BI&ea䙝{ybeXr ps5 wX\xtd\RNc)oU*laEژ%Z/҇ˏ"a 7)"):<,2] <*:.ICT .ԛieK\Tv$Egj3ϢkلaIܩLoFMA#29ti'Fg6t_ybn|C;4q$pJU{f7b ͘w0bc)UFe ͘w08ǰd܌~#a6x3*rr#& FF~Lefa쮄w_s6|axyfWnTTpt%cʷ&*r]z2D]bί>CeWק^t3>>=~姿~|Fye%%npb^?*vI)~I"|4i%H%RtFzz3fЛ7Co z3fYYYYYYYYYY[Bo z+V[=?yI)鈔#H5Ezzzzzzzzzzz=zC^IJCoz#F7Bo^ĩDJĩD ^ JлD?tJkF(ѓRg>&gwUÀcwUta B')Za/{\܈~#ϢgL;N=}fi7b ͘w0IL}mt {v+܌~#_>[oxs7#2>'噳P7C 7 endstream endobj 664 0 obj << /Length 1446 /Filter /FlateDecode >> stream x\MoFWh.CSFzh{eކ~M}MiY[lI㽝7f& v_$18Q!u26Y|<^7uN:{s)DB02ؐS"1ѴMWk'\;񪽕3+;JGDjQ$8j2Wu"[D(?ͥdRRgdJZ'dKy? tE'Dl.J ;pI!"|̵dJygsqwX?tb`ĉ<0;t &"8fC`' ; RA)9LP(F<&O6p)xD '-%GtPd-ɚH+Ă&M`,mln\Z8.Bļ\?9P| OAucDŽ98B|FL;lQg'`mre3S\q ~FSwƳ!%q OهYta+s10;|h昱p4=- <]s6]$eʐ˘!gH=k[ڿ3 &g uT 9>Uz *!DL # [ []J"EZ=[|w2X&2г*Urx=n? ~DPL f|[i,q@M}l;XF9TԦ̡iQl} c M=B>> stream xڵQW1yѨTR nY!{ K{} SO6$SpnuO]RK UJ !~EͯK禖E~}jNc@ 1\Qa^H?IQȺgI~,TN EϰU:/.VJt0>ٳtY%;&Y[?e%UX*4A8@=L8M= /sY iP>pRN`#Y QUB~y  !)'!\UpP(,S(w ?\jxb.ymUU}[^(7Ofo7ߜy^y琖w0NjFbZ;wb ͘w0* wզ#1<7c(zgX mX>{\܌~#h}4ƴNMf ͘w0zKqD=1<7cHT`1F_V-NaƿB!(FG ]uH.bX:bA8*/ݤ>n׾=םs#&bF08tVdİ܈~GG}9Y.cxnD?Ug^`Gwtt1`xDGnUW2cxnD#VqPUqFR1;^7`WG%&U+/IEznDb^2&uƷJN錙~Z\F.cxnDQ D"FL;1@m&vw8_uNƮGSqѷ1@$F5|(scQ.cxnDꋖ;TW[呋1Jo+[1JxtDpTb_F_n5wB ύw0⋈ΰ851<7c~ ڣ8dɌFQ쥸\e31<7cHu(`e ͘w0㞴. q'ċ&LҒFh*TbIEznDzhQ]6r3Ib=4\NF ˍw UjxlS% X91<7c{ɅFB*sr#&nT7?_톧܉1<7cHZ}s1@l6N }O wC ˍgw%\3Uo-6܉/ /J7_2sޘiJ8:a}_Ϩ2{+_~WO[H˽v~_|Uo~y.>ο:q/O{傪=l}߮p}O^Si%ȟ?#H9DHCo z+V[Bo u"H{T"HgiQQQQQQQQQQC^z{C^==========z#F7BoOԈOT h*'''603{}N1A]J;cf̬R1% Mgw^=rHWF .cZϊrs3&>^Yt:ݰƲFL;0cG:r}N[1`ct|}V1 zW̟}XA˝ymum׆fnyokHn endstream endobj 782 0 obj << /Length 1510 /Filter /FlateDecode >> stream xMsH:|qv.o6YAQYHDw$ W8PUF t=ClH`pC _lyuA6M셓+xq%D@02ؐ>X!"vi~9I˻XRT8ҌRsdןEލO$ƣc34 +4M(S=\$.[|q%Ykd5I3o=~||$2~J9l ?!kq& i-o*/i5 ߸3/C\=`#e1)1/2f `KDtYOθ#%9KX0z xX1^.oEcxl\G9#Q9Cp.jvLa0lV9AWcGy1ik`i |yyqo%U77[Ŧ=7M.N^BswFZ&S$Y˳ z'Lw}R&_4m${p6B0' 랛cY5*mUxԇ<{H+^z8y^42sBsX$_gH_ MhgŬۊ9,yqɹi{YXA`TEaHc6͵.nlЍ Wқ$]p?T9Qʚd& ˱lw8grXאDrVI혌ZbsJ cxKz8.!v.j`򜝩kQeɶبfa1kT?8{qƣ:%`Q6 իYt>NE Bm}< 5ial>Zq,\+@mEL%65qRaG͹Ex(sb,E !Оtל ze7}%FqkjrHr=ęC"{fɺ}%el9]t]`ar)ҵ(Gk=ԍ3"weXm64)$^;piڨLؑ89ץ"+YZµ)y\$xY|2(YkNo aU.rѸ߼vo/YЁChSo}S#/ͅ!ڔ!HLl6K o^[×{0|FęƎD1[zE.6U,vT~L5||& endstream endobj 669 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2111 /Filter /FlateDecode >> stream xڵO)xt.XE;rq"#nZ+Nuf iZq?6Y])zMD-Z;ZI,%i-)ޓ >FIT .N~D}WK5( Kԫ V*i=i!\ul]؆ӵHJj4ξR'.*0.C$DA­.N eB?餉.KR@RIOǟI+t$f8JՊ(w#עR~')H BI֚Ik6|w5'NR3 6Vq I^)Z ;`` { IFN!-YEqbɚw3$t[(7A1,z1ũ). u}ދfO&\w78ݺR]a@Ic^q>K\xƁ@D#0|"8ijAMd!'LW;xq:ߗtt~7?=tSzW0_Nxl0Vs+ |^H7Ƿ2}_җ_#}iˆوQ#q&K=~~xM/WT_NeCO87 qit]A5f9 턭e1I4 9H}j"Fat"z vF&/ K_jK*07ɸogD=~!_ܼ0ZqΈ |O@stͽ:,'B}y FhcDˢ۞Л\:og4E?}9--eל}ET-|Բ-? endstream endobj 899 0 obj << /Length 1532 /Filter /FlateDecode >> stream xMsH:*['>rAU0b%`$o)`RI~ߞ8灕y F'by]/׮|vzցs/ӯϽGӛ;i ߲=TIS /1`2¾WO|̆Qq4}p䕑{θL_?ͪ/xcW}9>R&KMLrr ߁w|E!t6& k@]?L%r Sl0"&`^=$TÜ3k]4tb9XNǯ4zYK yDKB',WKnz$",[;_%A{ᴼgk3Zn3Xw$ߏϟ=^`O)cK2;ERlf,^־8{GŸn"xϜf,4߿wWs:Pk>ݵ; LFBvhW@ǰHvoɴqʲ8osfi(Z|8G֖͵Ff!ZW~mY4aR̳Pb`l|qsiQ?_ f5L*/]50e`n:Z ww$jn[ʖqbs:ZWB5 iJK3|1C@-\ipYryGiV>ZK˔k~8x'mD'8P`TJowa8 dvN[&$㚶([&sb" *h<tX7g 6ZhT{=#UdPJj:Wпv 3ekAu9UadV$)ݸc|/fOeEsh86E7X# xH!%/^4ճD=3c{M/%Ÿڋ'A2w7(u/wa"]&qlm{ޘCtAsA3_/ϒ{sH 4g\@rYCc[..bUENQ@+CJl&Ѩ̢!0x?wrFþ+yً6q8Affʫ{oW:N̗{t.,۹Ů9)F,/'sfD}=UV"n9J@or 9j}*YЭPi$.H1m8.y):r-w%+BYuEh~gnruNŒ;-SuU1 h0cf‘&@oHץGG+ / ifgc=7,wus]pW&V[oý&2,"%&=`?6Cu*~ [})e1|*KF㲅(Qjcݞ3p-CZaɄfMiy4ήBZB=:<ݎ`9U]- endstream endobj 792 0 obj << /Type /ObjStm /N 100 /First 905 /Length 2100 /Filter /FlateDecode >> stream xڵA+x/"A8`[Ac7XFi;VawǏT)4q %(%p(k(RPjZ{ނR J(zQb;,%Wh@Jk P! dJ-P#h:!9 e *_4gk␹!4t+l 1s SUS`(gZ3]%pfUf[EYw KvQZR( -Ja]{P_ZO 5 ]ܭ/A+Dvr AZ j@"Ԇ1LrP[M ]4Tt>`XZ:jj b+:C]g*6TVSCFj j]FKtQ6irhCMi0C(@kX{; UC/_a1n6u TC)>P@Z ffdUls31[&g fgT$"LtiE0(6* D뀀OT~P,V*Ʉ`6ُa:^^\_pr}۟y~)Kwq*cE+JJM1'i_/M~1\_E {Leɹo"?X4&9r .FQZ8`=嵌9MFHjqj.E$F v{XpO=q &c!~*nVXd-[BIGѲS̽l'!@\7&͂*nʁe? -B]p G>eto2DXSlEzt{ƅ~Rذb)/`[5ْ:BM߂)IR{I|9ܑ/"qέl)GCx0qdԎ~҈5lyp|{JXX1e-{ƅ~Q$rq9r?'vo2mUU{ӣ˓@\73|+v[dj'5vo2"twVreƔ9MƔЏhў ٺ"Ikr sCؑ#bO7'-5vK#\h7 D{D|M=BXo1HWԿ=B( gqhTIO+i: WNJ+#w 6] yƕ~^^"f+S,\L$H7+ 'ejmi%ZDs`OtAp.I#c ʲMJIٜr{r`'QQ.5j9-"X|G$J7+ 'HI{{39:In:(WNJ.[&(S\i8) (u!7vdZOtApR"WЀq ;0Փ(tP4b@$(j'A\3~9*؏@? pΧ.Rtd"Ykwb])<|9+ vjӮ?5p}{9oq\ pcǛUVO?׍m[;y>նX[lgV6/ؖ2ʜ$/eR^Kcccccccccc+W\^qz+W\O\O\O\O\O\O\O\O\O\O\^uzU׫W]^u=u=u=u=u=u=u=|>|Rz5k\^szu]oz|zmԃ[=-2وWbF &HMgWtEn: WNJd/u<\Dz90=iʕr=#DWdt+I tP4,Ӷ5e3nqDDkb# #tNZ`\7u66ٛpAڋpyҒ=~m[=&YIG'wApRVoOӖ$MJvP'teń[ϣt?C}D-#]Ds& # endstream endobj 910 0 obj << /Type /ObjStm /N 100 /First 890 /Length 1758 /Filter /FlateDecode >> stream xڵY]o\5}_1c @*M6E+һ{rs(k9>3c{[B!K%9%PgGŬu$ZTfr6MEW}rT%2$ёcQ'lF!"+! ۤLeٔX{Qg>T稒@$0y)*$QN%BМ ȲJB-!ɰC.*Ī$[!Gb 31)Q<$B-:K\P(RTà %k ӦHT':C">PP%B0M uBTIBh0TSEQv G }VIAz$hf\׬nx(3#̒6刘/(@s-@s&'\ ZP)g[=7d/e5,X5dA4ƴu裞`)Cg, 4&, vfہO0mWZa?~}8 Gzi>zI1°"'r66yJO^h{A_8'_W_m]`Sf,4ؼQ'X8:leOsFa89zkrt+L,heĒ%Ô`hI3hepfYAKc͆ ?Ɇ${s03$h%pfGzWN X gb@+˞3K&X$ qlD &dì${$q (gg<`3ldOwIқe,{,m4y"g%h"t& xb>&HZYDzh.'\FP^L, 82WY6ʲ'2bO붇JH),hepfx,Ťbp/[-gb@+˞=DA|F^Y, 3ZYŶ,6%b,hepfi-L'޾E6)g"0+Ɏx'o`Hd1kq/r7s&CI=|63@+ɞ3˄tRylsVL$f%p&qhl\y L 'J'L2`-:JQ.;leO%?Y?c̫1dp<;rXZ™{fIIqe OdG<#] C+OY|(:P8.R=&Z0pNLOlɮ3qް؛e,?^Ͻi˯Q\Ʃ까ZKΧV)r+:/gՀy%m_ L4!_a-zW@plxi&_ .Β endstream endobj 1003 0 obj << /Type /ObjStm /N 100 /First 958 /Length 1052 /Filter /FlateDecode >> stream xڝVɎ6W8E `0* 3q9|e= ,!1܌:RrJBdCXLa%t&1y43CjRܪ(exP4JAt-PZBrY7qRGrzD&f8(KdlC"KhNV\iМ"99^L\ !JhN^cwgq[؊q';UsפhJ~|*vSqHucU'Ө GHDCUC6ulN13S8&c O_~Na -p^| 2Ŧ]3X)zcIhʢ{8)dh?˪?C/0LU_Oe⿅)EmsU3.59EfKS 7Ík˽m3|Ľ.SȗP\i0'ec /~uvF\2Iتo,܆c5UKxVƜV/s+ǛKrm05&FtەUR`2|P8.U:t!}&/u94.폅|MQ/r}zH.U-N]hڹzXEZ+q4q!qcķx^&PTi o?ZA#t?6c͛͟%2k9!Мv7to2nM#mmj endstream endobj 1197 0 obj << /Type /ObjStm /N 100 /First 956 /Length 946 /Filter /FlateDecode >> stream xڅVˎ8+dħH )@rI~@k!4[E{V1%q#],*N9BBا v 9< tUC2Vyf\i(g]%kËaȫjɰ:VU6( $Vh#"h)rD%N+@i]ZAi.X[AE@n=a1Z@qC @3^ Ԫ:5c,0I(ho@smS5g2<3X_gӜswh8w<}I&.|=(ip\`vm"Tb^R39/3۟.fWcwXw)?,w3ֈ}3+s3RO|fҼ]zi+\`f?#шySRG:ݰe{ m'向F-h9~2é75?cF/p:)|˰4׌;\?2Z&#)O?"wp5N`>"ğs՗cs/Ӣss|tAˌ |. [d_ " ]ž;̚/*m3 pڟŠ19}nې(߂jXf3,cߑ6B3z**U?* endstream endobj 1398 0 obj << /Type /ObjStm /N 100 /First 952 /Length 964 /Filter /FlateDecode >> stream xڍTMo6W\lQ$E ЦhQk䮬UGVV"Gvu.9y_CVƨ2&es~[ޫToq0ʐ,2e, ,6QX)da (HPV8V+ /A|u (",#q DμrYP^sN+{Ϲ\S"\'䈆I)޽ 80dAH\!h2%b`9`Z, e9z9W{{LVs =6ʴ,H]ݒDEE^NA&ऱsܩ%Y!)9idN&y{CJ&]PN A|}88k [/Aω`AR)<'·#q,1OUOU>~T;{Ԫ_m\?Ovhי6n6XCi&ָfxƓ: pŮ}Q?}ۦhN 㖒}Bj>n3Њ|G5ln֙\},.u Ptm_}u{;~=<_Rr6ϓ+dߜL75nRp&uU \6`RY_S?R> stream xڅ͎: y -MǢ$S.p_x5"ۙ6{8?21?QWu/+WU˕U F>H-|40VAQJQ-( FVXT2L e felr䱕rZXK :feYՕP֫:qZ)jG)ְEfe/k#dlԽ kk| uSr.Jf uҜJ0*p*w.fǘX9H|H0Hq"'3D1Jjs220dRL=ǡMnsiKY0DrZ}_/yzu}?|V߾K71 "ю,ǜ%*)CJ1{,@RJoekZ9/,];rVJv$CM-sqXs>`{>Mq|x\͔Xtf6K$iI\vN/KhV?ޙكKgDũ=+Mv2nʛG_浹rDtSo hf [dM,Q};- xm̬< RT ^b}Y)r.ⰴ&I^,).brH992keWs rh浏6.OM,Q[n3,ˢP0g۽6FM,PrZ/j endstream endobj 1800 0 obj << /Type /ObjStm /N 100 /First 957 /Length 1038 /Filter /FlateDecode >> stream xڍTMs6W\lbEd2tNze:FLJ ?캿oAIiA"v]Tլca0O@.{hNG9@F?ײ)mx~927U]$&U0<d÷W}r70m?ٟju%ù;|K^Ա };dNemvek*?uk.KM3!>:WfT:JWaYc A!m*VάClM 95w!whU|kM oy_$ >nU- _嶱dj MxX>ؚme鉙sq_ӺGRG endstream endobj 2001 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1074 /Filter /FlateDecode >> stream xڍMo6<6XE %IiZ`s/-73kw/UUUPVԆh= Y i<ZHO~@h䕪XQJh'ɰ°axt%$gB;TCFԵHd7F )54(97jhJa|޲l4B^k ,fVH٪aq+5kp2TPrFH ,˲qi4 rA[Q rXE- 5Y9,5wᑣfGڳr8I$B<,h[Gr4ԥz-*;~G HkP ETdjoø#|*tpO]+#|OT"tlYY)ʝHEǓPGS qη^Ia'b>!q\bz\;vzHG6gVJ_waߛE*Ԏ}G,Zc=x2 endstream endobj 2349 0 obj << /Length 1393 /Filter /FlateDecode >> stream xڍWݏ4b D|q|Q8T(TJ< ʃ7uUt?쥴:2όi/ߤ7u)`6MwzxۋL.$:f{yrm"}yl(ϲ<%Ye^PE%r>-ɋ,8 |S#kYŪM:XؚNúm' vXH)_*:Y~v#v`в7 眎0ZeIn:7+@䣱Kt0N0^IlJDjך S0sR޳wqG#K22ɲY"^7qPD>X}2ͣd ^{NaQr%Н3VSU# ٪,}K)GkI*YU!Uk4Аk-)iE]C漟"$whЇn[|TX2L$ alN~![FCCVX](M|"EUGTG}ZnnOAA: Ha]gz9jm,sI$H@Cd6rw8h#AR({G:gh;أ- }]4)mAɪ,m e aqz07?x+t;_-Ad x4\IUq M>fA'eNB]+ZXutG788k|ABG$fh"96\:D5{[u[q+sn y.")pSD^}NwZU U8 lo @)݁Gt/w lLa0Il h;#<0{R8ݜS,R rh>yÓJR\#ֈs/0 w~DTطڕI&l~! pOgBC+N\z]x*}<Å_?il?TĢdñ2aqL+ͱ8 .CxK)X%>Y:_rmt=ċ~LDo8 ~vD7iʊ7ѹm5m--+KT{VS<͡Q endstream endobj 2356 0 obj << /Length 852 /Filter /FlateDecode >> stream xڕUQ8~ϯT 6>U]oBήc!-])PϡXߠs赧vaG-%o7)Օ\oN֎4=t9z8zP$vs O}7&}̨<$"W&HqAs.q Z Gwe$DLdɄ>&BIl34;KƅĉS 20Ğ 6;?M.,pFʛ݋>=)41=6!xpງ0,W.N!d]d]x!7A-ތЩܵl!6&+ DFR?ԶD'/7:Oms[JFXDݾP~}ûjf^:p\wCo+@7R^e7'ֽ Yu\պH͙rմyo ^x6j/TH endstream endobj 2361 0 obj << /Length 2845 /Filter /FlateDecode >> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2366 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xX]SF}桒{7ɔ@ɴM Ж2ao%p2>8P,|}xWÇ8&TA><|x!3( $|8á;|8\GS )_]G0fuh(Rcn93G uG 4cqpиWH%-Ti$rAA0$%FLވY| sRӀQQ4Kd,%MD2 8 WLX%C!$z$v/9RAyH&iX8X)A&2IV eS |R4(o&qUc{lKX:XVmB]gF6,FU4EUvGWס y{>qo""MY9~0;^!;-:4Fh MU擟o}fZM;>;Vr]MyYu,u}zz^;;^*$QgRՓEUn<:95>ϻNL#&fXSsNf{iW U>ZM|rR$)k7WIha5T}]/j4^y7KloϡpT{lZR2Mʊj :Bc/5u^ r |.5̧p;sq [M?ߙʖ;kP\簃|xC}6/gd =HK@5Hw emr8HCSah76UuN3lZg԰j) d$WɹyKdQE1l) V ]GkfmyS`cz;eWy1i&UOːa~$uU)=\"H2n m4bv}.Ia_iaQ͚G'6<1[ol55ϿVdVdM&gc c\xH,ۅH6 +CoŸ}zPWã2`Yzn![vmևftkӎgbRvd6qxЈoȴo'̚*OcN-1oB'?҃m\3g{&)0ǝ9lğRR%^ㄴI"=k5GXCʚw|5}YG"+@ط endstream endobj 2376 0 obj << /Length 2290 /Filter /FlateDecode >> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2379 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2383 0 obj << /Length 1902 /Filter /FlateDecode >> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.Qڇ6iUj ;3`×Utavfr?EE""߿=_p t+ \Q~q1 ,b] oYdֿxF|re2JWPq4/W&VJK*(1[,A סT*aƼ4 ]Uew˕RI7ƒip,ݎ]e *^|嘕YG%| 軂jZk#J2mA]^CTIFBI*z&Pa܁LSQ}˕ax?xg$yuC!۵M#:+تU"ѩ^v]C(3([)8:t)RM WNxcI ΂?4~\M% #,zā-+!cr+[m_**+v/䜾Re95Э5 h솠KHL-*FE%+I`/!)bx C:UWﺖbNP". `A(b"tdJos[Ue}? %wxVi>B9 - UvtC `GPH nRsb|;%koC)]5: ,=8[^b EKp[;=aS%W`|9s{8vfKT*Y!z= OX3C!t.g7~tFLL!F#k߆Izrݡwsȼ9l̩RЁ6TA]Qr#;@)-0C)rfu݁_ r:kӜ,'BLsQɘmӣlȯǸ$*X*6M>[4_LM\_+GyR7>I+ xl2` =PJO> stream xڭWYo6~ϯJ@Mc߲Mb,}%:FARI_*rA79CE,("Ky}ratD ,b]pJ .uˣ#D:pARP'XЈYuqKڧ.K%;ܔm#Qݢqy0&r'6Umen]<wNA Su!\V˩~+UA:,]X{}kB4"Sc;ȋKƘ3(_0OTA]YzW BtnaIP;iԥvqR('w -Lu%fӸ8rd.4$1V꤬Ux: p<= a%EGksQ< vĽQ3w9ۈĩgvDC]E5Bce3$iVW!C*qeA$"Q Ȝ$a:H,˦he\JTm}O2@6W;lBJ3mgtYcf7d/.=AbU'4^E] )v90z1KO/\qBrʦjUU/1U$B?͵TD5~Ӑ1{ft$6f` <|gN~{.UN3V-q{[4愅|]#ߴֹS?6fHs#esHN? R(:Zʭycc,dHx. 1ugǟqCݳ%$/O6cS~ u54#MI$<2v7L^s14,NGmYUCg9k.K MqoۭNC;p0YM`z%$<}drJ8> _vYXBIq Tx/TP]kFƲaG;~gy)ҷ?b2 Sw*^u3ns~y8o !Dv)8EgMO-3.b0&iBҐ`ʟH)NrMzeiv݆mo67Z.h\^8jʁAV'YB"3l>FfrDtTzW7f 'J; [8 endstream endobj 2412 0 obj << /Length 1042 /Filter /FlateDecode >> stream xڝWMFﯠrY 拏SIY}]eĎ$$T08F!֒joiK8'Hb٧s7{ha8u[)=,ʨ\{Rbn{٧4$rIc9Y3eMR5!8rKP ߫jԾP& 13g p?;׹Vy>q`eb-R+g"“icQ15]7s)׹˛&XbEX oܳyU<Է\a=@J* ғ JfHhsZBK #Rm_v 4%HgxJz}7Tj*:%k|.-]ˇ"nX 9 =0dnٟbRa|Jзo@Dܵ+#a<7%Ӫy[V 9N/D">tAcP܏Յa۵CXE>CX R]JF^x>갮ѳkѨĂUAۛAC۸#T Y A]k>uar2YGע['KA03UOKw&&:ZTւ[wT";%//)TKe8P-N5sEm뮹|;>A/VeLP3\(XlՙtW>Oܪ]RKZmQ)R'!4,޾?ꕙU)YU;L>$^Ue%u[D*4LA1;4m1NҎA}hL|lM}T?h9q$p{Cm;`ay>@7/400O.sB7pn\O,L; Zs$v>0XeQN#-; pa̘? >M:C' R)c$#%y$IX[ຉ}}-ww,vo. endstream endobj 2430 0 obj << /Length 1115 /Filter /FlateDecode >> stream xڭWMo8W"U&`Pned&`K%jHY%'bg޼78,xU_n 0YQ|$"*WǮʕmš8&o~yB~N|ke]I?`M"BX}g90ѥ9i1}N~vZ_NNzhN4:RCda4 f*%U! s6'b#ђ90jɡ`ǝ0g_7Bkk)_5 vŐ+MU%v&9#?I f%vr1F_}0?ms?|U{!6=Q>\9EصgmZyeQnL"ĝrS"BKFwf"$X,L&ksgģŌǕL))yV*W#}a=E'f*|3F ۍ򐆱$)# 4A+js3R(Y`mDPl<5j4ֿĵftl)K1=.Q;v^ }=xΆ~:puip,+©㠾?j{{Ti * " 6> stream xڭWێ6}߯[)RH%ݠEQHa6QY;ɲeFji̙3?8H)s 6:>.͛{$+݈]+0m1ѻ?Jֲ\0JR1"4|v˼ɓLpf eRIJ Nb -i< "S䳔V\xi8 ?|*~;Vmfqg\p!VZ6ԚZ8!gUsÉd*g~ Р ;)j}Ä˨+9V&9ELiSuu(hw'kvRʵ3hֲFg(rEf. IU<;'Vʻyz6B/r5eJ^A@TsE_ {';h d/td<ɘ/ sEBGE†DhN]>o$ lr1ҵQ#mcO@9q:`$3X2FjoUj^y~W˧(ĺ&WNEA).-yntxf.lƝg=ʱoTp=k~Has0ѽjDĦ}v0,>zqJh̩[̲,,AAjTM)GwV+1.I0KYұpQ*VjOGZڋO!l8讘+M(!ei4hs=/;@V/3(aPD]h?%{d'<d0AworB');QVYTETGkw~{(._J|Oan)W뾥~ ߇9C] \Ҍ}/]NBIWW~ɧt/w+iSu-,!ً1^'sݫRr> stream xڝn0~ ) bMKoIi^XvhghRmٵe S ə!q|'1Iz[/nBކlry+C|1qfMyB_dժc(z t޼xT U"QGC"|D<<} JOӖ邈c¸]i}j @G&˜N2SiYG 3ƢK+}rY?1ezP Q`#iXoeJoՖARud> stream xڽZKs7W=xxlRۥT%ٔ>\>Y Ejgv__ֶ8H!{$F?01),8٨#8(eApL+m;,#|ƞ"䍊xhcyI$9WrTMzZD$KH^㬑Opn W ^1b+jl2ۨYR9ay6'(^Nzq0 I3gBaqpZ7pN˾XG9#ذCPN1Yo^d'Wbz?Oh%9p^8[K?r@x~qG-:&3zX|IL2nZۻme}re+yź?-_^ϡ7j$&HQm>կmvf{q<}YYqq=}? |Y7hDA6LcbEl\CV.t16YBra#=QݽDvh:;9y:G.Ng\A TY?׿uNj2,$) 9)ݟ}Xy;C7wijv+\W{9,"p~JF&iїKK6)#7;GhL)?r󡙯f/n~X.f-aspn[-=QÝi3hm2:hc~G*<#Eeh{/e,:>} PX-Σ-a a ApBBB=CqP8F#cIf;ɚZHtyH2Mk XS;+fضä}``;ϻ岪l 3&:5*\){|*݄F~#=k݌]X.߶M%%G 1*4N%>0$08I5qj5;/f'2)4嘌%4%3GE)EV7˶$(|͢mjH<\6vw7bm?Ghd)=\0XK AMIN%buQG.ُZ$ӹI.G~۷/۞lJ7Mi4p Q l@[8K9#ph9av4zw%zwi>_ HZ\!9H?=ڱXyB rL/deKNT0~d~}7.~4C( xH ٰJ H7w܄Ti%`n1F\-Obè]JkD$M$yyumP=2S&VC ?_mv\W4p ΗG0YR:uC8_Z}3e+tˡ.A^=Hoe)6qGZ9PlT`AXPTBw dY\,pv+]*Ra˩T> stream xWMo6WV=lh ,%$*dIͦCHNK"3! ( A"I umO0X>yAQҔ)z\gwYӛv !B*Ro scZSf)2^|~=8apxt uMYYӔ(жYWQm[gj?~쫼/X"JHD,&q\44Q5D1z{IGN O"YQqxe_pd=f YfvaE8 l(Oca,Ůjr2A&"_z$m7nr9 nMѷYqT?ڪX{q?7jS銿L}ç C#kz e! -$|˲q;EU 7 lGˆ!fġ MPj0yޒ@pP;w6?7$Nۉǂ|40LN7}sYtK~}H ;ȡ(t.KccywUʚ8AhN!U^!1e^ih[J,JPDQH3[X5/OC리Y]m Kʘ5~1d4j׈1oo?iEguiIȽ|ɯK6)IDMVL\,vnC X+2~*͊j)M۴#vZB 9ZHLe:jiS\7yyc]e)r[,LEVάEmtu  (wMU<!O 6@#qר&]qEР,{ct# ]gT){#)$3$Q` b5:H2}}Wx0ʅ5 )ӐtB?SE֗p`/&-1#<ճ#BN3e7_k>e;ف%LhB5 fNa1RqLOt^j^G1\=/(vLC((^~Z fKo1҉3+x:^ xȣwC%C/lCWwU?ܛ<\ffgMæ,^̿,~Ӯn̙foeQ#HQE(Vڕ_QԾs L#NδzQqͰ{ky_O[ɣ;{>9 ͩn]l[|lAJoh endstream endobj 2489 0 obj << /Length 1567 /Filter /FlateDecode >> stream xYo6_@{ùCkl(<6mi%AͲ~w˜;+AZ)c&4򮥡KѹevRn?j2O`e»ܑhtM"@""e Q pG;6Iܼl;&~PZӫYx*}  6n  uo|݌adUe͉&?]a9ᷛ wr&RB>|"&>ARfcM&>#ZVX[E[A:Ǒ٦ˑ(O|GԼQ^v=Ft2'+Ű{a:ãfmXF*?D}Y53;ZD!l@.(Z9SxP{9(}>bA{7& ]_}mMc|t|8Xdp,u@vN)\A\N$!̏;g/y.1( O]o<O2stSY00{ҼUQp3 ˅> stream xXK6QbV|Kzm h)AkѶ==EJM>H&3?n]`A)cܿQkUr>/?-G'ӒEϢC2.BD_%*Ӥ~IU%Jf״u!F JT`+~2(E *4UZb*E8¡~ps,"b  y2@M~viH<ф]{_DXx ,S9S4Op½`>McfוJVUJ5ix p?@bg$"pZ!pq@.s7Ksmڭ2/MR(K'PAPLPq(=-ǬfK7ki񏲗}{N2bסoLQ$ɜ ~CYv`}ҁ.]g2-l*dewCބmdw!F'ϗc? ?qyyɀHDR(~YTKӚ)8AIy10ňFk>J(Rץur}\y?y|߀V`DRsFTSeU;mI:ݛEU~_TnH|Q0h{.oTt#Xg]sfjY> stream xXK60zH)RIMdKMjd#wCђCovӠ@Ryq曏f"iDUlfr?]_}R"₏>䨈j"f !IfOEiz]?maѓ~W$pƼnˏK^48u 9l5G$Oa\תZTxUܡ";wp-1Rc°mm[ܑw˂U9.YP[s<8.'ǭ,$omu\R` ]‰k;[Apt474ʘk&\Ovp4*JSB5u׷êoZRtW;0ᐶ)ׇ?@}zBa/K(ϳ=4;m}vggʣ\__/-Z M?/7~-[Xŝ/JԽ.T9bz0iݹ7Pnyd  Gz]~Ϡ= . <:?9ee{*}{ ^>=6eݎ)S@t \Z<CKHQ0~(h;7!-ėCO),s(O DbhBR̃7ᢞ\> Ӧ`PŶi:^H LMuۨ):ÛOrլ[e 4CUY'ᄮc)#淲\u <|F:ram,AcmoYV[nS3i ~%r]k(@i֣%nvrfHCwرnhCr+.ppƆ4#9~`1燒G`.05`_'@ʺg^|]cccKRl N ڴ$ebbmjhΘ.<1 H+YmԵaPiTQxމz}3o3x9TM`oOpm-NL~3Ӄ2 D˾>Гxuxb7RaRmɘmpHp gTtVT5%~OAbF:EZ/3tD/ endstream endobj 2501 0 obj << /Length 1800 /Filter /FlateDecode >> stream xYKFHO"؉HQgmYлoS89QdCCuuu=z,0#Q#yo/yD  Lf_^|(9..MP %8vp.⧯^յTWJ"pLݻ˟.~g J)|@:&8)Ҍ#¸˦ #]⢫ڽiP+"g8pij_Ԏ:89e#ỉ0 ʥg@k ͹_c ;(! aw]8n[G~IHl_<~aZCDL%8oKz Oi'Ҹh'JgbjJꑡL ~Ӝ~~{_7q+f'B:N9=;jnFZ^{5dFט'[ uқE"1&C6C+zZפL(R:*r+XftWeyg>.]: 4,5;R#wr()r:ҿګk'P d U ߒ21eEOM7 ļ(1># ϳux}J6<3y ,y'vE"bRz_wXÐU KhHU[{&bB$FP-Yo5';prEӘ:us\œsz4Gz#z3fJZp~Y E?~hw·jПX&ra1Ho,I/yhe!fa48@}۫d!ijTi#q fEo 8=}*U 27d< j۹A5EIRDF6O|[_j&|r̃zby W;u%b k1(?8"8T&C|յ!xb.jUHϲKL*@l(30P;SauoO@5>+s:[zWS|5ܳjqؾmkoN',*<,]n/.\wPbEޔtU}vIJhɦO'P )KxXn.0޳#2tC<ǦxT떃~yy>/]HuUDOZM>q9T2)I;/qo(o#V.~uS42*%figQCFgc45 ?n Hf֍jFڦ} hJ`2=Xuy<ܹt'( #(8s͎ Qيlr|ьHT995s̘pk?Zҋhl-&ld`;4M1]&H2p25`Vt:sB# swەM_M*`3Oklu6lDWSgok!z9є@.-+;gQ'ѳzK}0z|Piٕt> stream xXn6}WDxzڴ Ria,Ї4U I~}]vFa{g W9U$`jh]/0[X+"/j}tVv]QJu1Ɠ~.tiF$yBӚ3GYar ̡S XqAM9m՛r6z΀9!U rϻ_ka*޻IƨI;nʸh"< | ETFF?sfFՇ'"m=SQ\2)gmRGGwI,K%؃GxϰDޯX,WdFg&Sɇ6#>جϨHJON1tc]WD&b J3Yig VudۻzwӮlzH7ܔ7w_\_:dB".oTuuA&_h̖89ssPhheJ jZu]2 >hAô]kz7t1_6TƨมۏѬ#xvO;lq6Z"g>##I +YR'>C,`u'?'_&gۇzA1qZN3~yfTcO{}1i;|';|N@* 9RqyOSRQ d< \\LR^נ]'ʃI_].@Q*!w~ r$%~Cѿ3>XE`"|ӰSE,;d7tQvm}lb_zM?$k USƾOXBc`-Zo`=m7-b 4\'jdb{߷1F8C:8[6:GT/:LMqqh&,]^ׇf)S SS9l׾e% ⿯{7k endstream endobj 2510 0 obj << /Length 1972 /Filter /FlateDecode >> stream xYݏ ~K MW Ay܃Jdi#ɗ3CR]wW )y8 V*Tl=m_/fF݋ORj(iVwsVwCЛvB$٧더*w/݋[soZSozSh?^|y78R8<.+&t: '0(͓mћ}Ӗۢ"ewwdmv(RQe$OWΉܱ{ %7nɕiwQGߜzZϩ8@8'}9\,%TΗK1'3N,$$+X”#[g"1]1T^fI{[-f&xaL ad'(U6*MLߥ?IG[^K1iNY6BCHw =캲xJ1ȯ1MF?UNqD]qyԕF}Qx*(o,IXN7\Djm,( J@Ӧz4@TtCM]Tk**?aEa`25UjwI*\39DtzCBC^6ZeOvLN)Q+ߠ\y|tѾhcŐڗW$V]ǫ3RC66}`f`Qx>*TTMG3 AEc;ev7;#@BYiXFIw4)v;ս ,P/xzU(Z$!ġ'tޮ&_SObCϦ~b="!>d Z+_=ecgo[d۵)'2)˸38۴^d~:̻ L`i;S^6̘]o/PabpM%h)"RZslւA(¿TߟPw t{?J -ъa7nl$׮|Ikj$[4ָ9FA  Ξs_Ix ~9P. }0PPFg1F%ach%ŀuCh0pdl.^򑴀+*gëz9wbdL_smsD[A/~ض3AziКɊMv@&kYjC,2oIBgPSkb;ULʰn|.$#2e:SUݻjgT\Cs7!i9 .`$*: X.s|4]G:?%\ye [kĒ 0y]3{ u~cˆǗZju3OzfaA<~,gE}6^$OwnX endstream endobj 2514 0 obj << /Length 1657 /Filter /FlateDecode >> stream xYێ6}߯[d`Ŋ)REM/hEoI6+$WnË$RKﺋ"H p83Z^ي9*Xm̌VWɥ z?\} c+2+f竺ٮ^'/Q~yo),Kl7rY~{7Ӟ ӒdsyκBPsj 0[ ɦR]כz[Р-Z3|+H$"پ 1nUf廓r _AY1 }3|sGX۟"Bi1MX AJOqV)cj0 9(dbse J;_b+Vɘr@ZhL1Ce+R?Po[}ěpT] DQRuVmS͚dN lMq Gaӗ}17ZG6$p4ڭkzr9x#ӚV+1@V!ُv*p7|R;|.-{ehŗ%a2΁K~ѵsFblk'QP5D٬F*|Q KSeM5A{M ķO (#]ֵg/j\EnamՌM+6aE" h]z둰)?9!N&la>Д3D{ҿfL4HK]cB>N};b^" N}\G9%m0a1ZrcU4p9E.?"$ (*qT:5MtX gKj ?*OƐJ]Ƞ?T+x=j.g 0.` h0aW0lok6ק)B㤎'eeZIUmN_۝Fߌkd fmVoy2k\0]pf[C+*@Eպ]/õP{hұq\I-#X)1n7Wͪ۽S~ՆE%AM Zϕ 6 Pf|o^ vѺv\͍G'ʧ\dJO@9aLH=FWI(_???d!w"sspnױs,1m"R,nj E6G5>ǏAUfǂ~Sǯ-? 6 endstream endobj 2520 0 obj << /Length 2089 /Filter /FlateDecode >> stream xY[۸~ϯ0IbH,Ї`wZAcsldL{ϡnIQ"HsΕ܄OnpFl? ls/o$d|{Dζ ^5բă\RDõIB-:((Yi/AҶ/;t% f/EpN9pNԓaP- ?xbG B4Xu5 wܝs|P!3_!+,sw dY ۮHL!J{ "C뿃WYO2JDz?T$f@ږRQIk`6jr}>f5bdbe:D1@3WTѳ WR!&y-l;Ki8Xi" x ]\kaG:_̳$xYpk୮l ְ]|pBvNnŝ}iœu`)?  F,SY)G%y1q0t ~e"hc/8X}|IK*y] YfN&Jr(/?@ۙk^t'[(8]~g;/x(M~\!;^zm$$2!r:k_e  ~xy.Ӭ !I859T,R@?~1퀜'>`牆>8Ez~L-ܯ?$d<-Yjkw83~wV=M󅨆jC]c}뻼ufq\JJ08YA4Mݻ#LU/K"e:1E*l[nB endstream endobj 2524 0 obj << /Length 1929 /Filter /FlateDecode >> stream xYKo6W,z d^zHݤpEIJU+-$nw3zp-[ E\#yHH:[OB7~\oO$-p9e8^Pa.͔ժX .`bEQt:uEMٖXTaŇO^=c)NLd$BF|]Ӊ4֑ƖڗLqԹС)Mۚ _A=U,05?rJYl W/$0c=E+MeDY5a+eͮꏴjhn(bH!x1{ؕm|$`7v49Q_m-cd]x//24XCХ! MzHRM!UYg5l/dP޼dWچB81eGKUͤhsb"NH=S<>im?XzumyhI)ֶ<뵭*i|2vg7E&\e2b9#]Dqxn\;29 k.tǺ(W8:"77c8jD`ЖC8J2rS Ɏ;S%J5-kv74H{_ArO B1iy6(d Մ0!9͐ǦPDzdp]揀L:9%r1b(EH250!S3Y7-[2&Pϋ(O< 9tpsU3 7>G8Fڰhئ!5 8(_~KڥnfrUD,= s~BUaX#xZ%6T5u_gWxN+,̱q 0SHe<ׂ72.of< z_dhxp \OXc:m\7U326ΡpbK1:QմiZu4M|_wq: \Ϳ/ezUǝap R$€DԪw&wz(AL Fg@3Ve;iJ~[ G.x\ùSu}~W1*w9ucDW0/m˾pEx mZPA\D;0i" X"b$@_]FCqPkl&ü*{aU<_,ps.UPk~m"^ST"NFXqB2=NTZ٣WDMϨlQ8Il3e +gDXK_K:3p]-ome@2PֶeˑSN跚 P$zp3\H}1#%y:+ӒwZ[3S=״69{y_rExNAtƹaff|.}4-$|2yRG82nb<5dX80bh801۴?ѷse3z.Kl3{z]c[?2D{Lec7jxp'{T2;@$6;s D!#pfkNj1"c!b(~iLӱȟ9Nx=Xc3)"uF;vcvgavLh2e:e7zI ֠@qDzqݝQwܗt*+-D5:ށj? -#lZ÷%TnsP endstream endobj 2472 0 obj << /Type /ObjStm /N 100 /First 978 /Length 1873 /Filter /FlateDecode >> stream xYKGW1d `؇FОi'j%AX ۣځf,>>9#ر4Bh5"u)Oe&{P\V- =I T@xk4*bqn:`22V$12VTa@>qLM:'x6`8bT1 K5q/TQxR{dFcm3Igv 8AEvDB#A%'T`i4>8W2lE*J eQX[U "eL\9Q.0nc2c/QU[<`jEImXX&AmXy* SjTc!|LNoAa ;,XZ,R+T F0"_2bEA\q 3q!dI-KcKpT x+%)T)ZbLG_*)es c(F@avF@6[X23rЬۭ,e/)[} /32ށҜٳM?Vl;bߺWVlkw`1JWBq!9G왛p_}g~~a J uT/Ժؽ],iR.# )=v'!"1jF}U>yH'OHPً*GAԹݶV8'oP/L>٠u/n+`o_2[._׫}v*k+Fi|y*7~u/w{=g!_w3~vM;v~wuBjQ|/:06Hu@#GȜ?2#qpczM =tt6žlɋ`yb9R[cl,(CtuR_ۻDzk e?,?-Oc]Cq1ݾD_ovq?t&ow7~o֛z"+pNHYWZ(B0+~tn΋hMeˋ՛{ ]q>lxS "`~$~1?j3\ʱ crȯ^[[E`zC1p_.y߽%9G,|GJ=nSlZl9bH$ŇJ(cs&FicO"ܯJOO\yaB"yƱlmXd`"gI'xՆpabzܪ+)ڧ$>blqF~um~L+ l!G8I- aƨxY9^vy?EeWBIKvw;ƀÌ_KL =(k~1~?IKD90cFAFc#$r ‰pN`wҭؕ %yѾ`&qdwPXof.Vp1d$ SCAL$їrf69h!g;c #P%$_7oN-]4CaR ^90#N883JeÉfmśO -]G=B.!K5SMo+~kv۽c> stream xZo6_a20sD C4k-Zd]9V_;r) Aw~ Moif8Nn˓_Τѐ$aBg˫j!xNoj]@:_!om;}K|b*À'/MؑΡw)6.RP.w01_Ȉu~ 6DOvǕ"I<[0FBX%^z] ThE`DJnTh勦vQ+d0r% D0TVP>ۂ^DQ0^M &!O ϧ:e;oe~ !>ء0-(e$>+u>)Id(1SNݴ'ʶ \SE 8 777fivfZo־Aˬ(7Y-Ϫ>c`$R^ Sѕ6 %NM.\juSn+Kvv;m[Ne s%cn_2͙҃@s:D Lc҄E0"cq#I]H$!I8jZ.{`\EAiR :Lo6 "c2H ƘA2Qc[oMoH16 IEqKg[bAxc7!g( ^^kU\_Z&5v9jD'KGR$I5Yxhsf5*$qL4  EhqWDꢅ -O>ri x4ګ-!4lyUc)*a3;s3485E"-!FE W Mgf\%izɳhd.;K^\b<8ww,VY*b`jCZU<*fU_NK\EZvÒyU4%dr+֮#ݮ:/hhr/uaɜ4w$*ˍ6 GpG ˴5ym)uo{·P834!Y[0\@1 (UQTN i˄{(|+o<2qI(oDjE],,DX,I <с~atV^@F#Ӿ8v=Vx?0Cb2 pZ<@r:@~ <#Xyu?of|'J ]=ݨ;sН"A$nV G}Q"TdHxܹKIhƦ4,]Ui;Fy`ޑCr\gCjŔ(SpSze3PMB<%>X[<ڠT&s,vsO,SC$p( mqr Zn=+kO?LD_oD`!N)b:b ሰGqC锒PO|uj{h$pS@]hAKTLJ*#XWݟ$'P9t6Y0D<,ЫqL#I4P%Ic1h7#cĎmQ_Qu>+2"B~0N/Hhl Hj쒪g R008w1Ec "ހ\\=N؝qm"h$cCxc1ͯ&wJ}]Dt7&HӽCp͍ v7NxQ\Jji50ⵡZy)swM~Uָ3vdW#.U~o"%&mJ4eZ֛G> 櫓R{?fxB˞Zݗ?$TI p endstream endobj 2531 0 obj << /Length 1463 /Filter /FlateDecode >> stream xXKo8W(oR t6v@=96cD-_C%N"7gD" $JqC)Ѣ X:гg;d&|HXՓ7 9eL~n'㬲C8/|F͋)Yl;oAn 1ӌfcNމ8EtsۍIʏ vB>K5c69Xv.wкb=ӲډiP)fGuu!#5\5y ף<]%O/yz_V|uued3I=7(T"&HI-[,C9Vzy t9Ew/X%#lۅ NvNTE)GQک-Z4Yh钷08x0 LswPRn<6n$YzB.K1!+1aܝk !!WdJ48<%gֹXa1%pb&bU$ԳIM'} xWlGՍe@W% e#_գxz#?zA[u/SqLZ|CN:tEzT,-=y׶N؛K1~ 2⭁YŶtz{o> stream xYo6_G9K :l$*dɕf_;~ȒM'N7 EQ i:KLqNrgEjgۛz.F/(匦$Os:[^U-׳mM;_p|!LM6צ5LQ&L/a9);8~&h١\kقq╾}e<(+(ɥd:f{XIB,}&2eұ1JŻTa k_}M5,Bbj(#R R5wM4۠iTxGc.(n u˹v(F8 kD>^ I,߇ѓ|YCs"`sʂL5Y)K Oj,',j:Q(EWH Aoʉ a}^UJ$ea];V{jl?YO svvKh!oB,0>mw`ƚ2pez767*Z;=>k[].@*Ҫ~.wǮxt~&B<;UXf"6F@і$37p]Y?p0d"? i21"v*)q; 8s`Ƒ|k$njy[v^IsQnX0Fb1"}aN6&ms]5mї )Li\UُnTTޖ+?67H XtbhhΡ-B )R@J.ܞ.Ym"T!л6R*j3jF"G2}8 hoNT5hFzQ*f=dK߻r0+νmonDϚq@*?Tl߇Ƽ+g#X͢h,XnBEy#A70?"B *5q՗`ޖ>Op~] 9)3ԟϳ+iMV Cڧ9j(8&~e.<n'{Xw94 E[:,s\3.qqidcm6ZH)TuGQcL*GfGD2[&9?j^CVi|͂?yrܒz3߃ ΄2Wv{l|ZbW-w_o 1\D{A`Q5'ú> stream xYYsF~ׯXL<$rv˩XܗخL%H@(Oρca;aKU8h5_" ?db <[W؞6w ?Wӥ@N(\]}o!dNY6W}f2ƒ2\$_|[j)UDf7Z 2*g(hGH8";_Tӧ0xva)4KDzr$ozE4LJ˟ ^l ZtG**RdOI%H T(=1kBy$_t svXϗ^*܈Y=Itw_T1֠bfZZ!E@}okLx^R'Sg򯘘@`l j[xpcPq()[ dj^dhnH $eJ{+-,ʝ޸㮎)L$I!!sSڲs:/[iSPausRg85QXmYW1рCu`Wߕ@. f mwhc1I h 3vp);:=,FezEB`Y!;|,)0ga-=b٠L,8G @(z$G}'a#n(x P B) Et)'xLMm)G@wS_lzwr|CeG*$ *C$TX0>_Q|’|:.FȽWER ͊HrQB hELiSt ;,{ш IF/lR!ɷ1eG]T܊*=\. )lhssr @|0\zxVLܧ,II8߄^5x*/v9h:Ww67 P}-0og!kg~TXl|ZZGڿg{]Qؚm<@Cĩ0~Swia~rhP:4;UKF%>~?at8(,B1&Wt " xC$xu¹ɘ~(nvșٿaLGk?*wkdzK> stream xڽYێ6}W2j$Ң^""qIdkK.u3RtA53iHpyں( B.a>K]N-vU7s;Wٜ;lں[hY(™GL߶Y[|dl$ Y*\#£/(.^dbhU663f0e fOx6[B懁Y1mqy Squ4TȺmK)TLyu6c0OB`(e܏IƔ7ߌ~.,]]#sjYmuQuZt1{6Pns7ɬ^ny^aۢ?QתuUٵr}U4V2gyldYig4޴/6;/™/ȶK$+ikW *lIl(PGʢ-= cػIo71l42aayD7i'D?a"|hNX|hy%(h6I) vx<9'oD,1JT>suekl/G`ɩltX:IGEļ$} WYM2&=8ʂGdׯ߾\+{%0RMҍ-)&]_JI.NTD*i Z ^<)TeFjv(<)nv={NMFW2ƒ!-ˌӦأw jˑMTw+=*< h.R[ !VeX)BWHƌ?Y'.'!,Q nLa C*t93x#|ŒDMFjIk`cL"!&3C!tJ3Ր2f6,pM-l4G؂$s lډϛGҤ4rK̝b֊R[@Y[uYC6ak׿q1b7LK#WS,GQ5A3MY<ĊT).MR_FjKxMK}E~R|u`<ou5sMAcO [K Pá>ܑ 'Pvpթj4:a*K'> stream xZo6_G8~J=l:aEbmmXRQ>(SEY>w2Cf RƐr\n9W//A0Hr} !f#]go_Wmw11"Wƕw\yLS"pϯ5gg$tF`.ƭuQ#X$4ʳZF#ka5g4:ƞ2)Jg1ek] H AC{ [v "F3&CcR9vkD$T 4bHob'V-J lopPB@Nn+< ssSe\!/pii[.#.y[ w?.$.;*g]^ۛ7 ֵ{*DQzaQVUNK6bsmLq0u~;ǯtߕ8]j]V2B\tv0´ZL⓻U (Qe%"~Tpb~QO=]g_d'kBNU띁XF `_۵)eO` 94}0U!HDCHt\tL)I@I~R{./mFi QV&f.ɻKʑrV<{6Zm5Ч)2qٻer- _D1kiSjvfjo-n*TԦ"JX (!aaYm'9nPz %"ŗ9CM٥| $y4e')@GI@}:=+w~._I@k=f?b^1Hw^)JSq 216ʽ,}?PM&2itˎ|_B&X͌Cݳzc>3YЧ)&v.q 쯂1Y9BVS5]0塰I2czoxK NЄ )[-QZze(W@V wui (Hqg{W4=K`0#ET#r$}*KvxtJp"'1Q,L\ v; R4ta47 'A,eX_)e^, _na /Vؕv%螹F@g E+5 ؇A\Lnm=F7\{KK@7@KKl&Ao&!ImF˜ѩo2GI ^S zoaͅ#{3FΥ6;8)?~q~CPo\ endstream endobj 2547 0 obj << /Length 2257 /Filter /FlateDecode >> stream xYKܸWmH)@^8"18>h$[)L~}XE=$`-EXUG8'e|ȓ$*Uq/ob;~9ǟ A0\IާAQpZ/u>o&I?C@I1H zg*+Ch'DPH);``D2m]u9"R<5pL g+]0O5Lm/cU7i^,WY$Q+J= L{j#hL뷽jp!LT%*9"DJÉ|V z;]4`܋?=}}#Gqkv{#k]VikEB/e kHFe=suUe\9P4==Qg^A=}o|4()%{HJv-$&mqW!?͋^D25WcGp8+s77sHm;G|)T=y&uEJg }xdP\K|*az]'`w0OE0IB i_j?krknmXֆ ):}..-u] ^f{ftZt<##5$@OrF{G2h@k{}G;S yϖz7FOFzl(4 %7seK/ۺ;L TAF+C\a NFap W]c< \UWbM:=O.86]m44_(}uWyi02,&Ƕack~iݎ+~,d,1MEkF(X V9Z;$ {*0uo^@,n+ [!ߔK"fB7R`Ei[ߢ>U}O͕RQ h7=qxn˃hضUf׾ \AM3R`*X(ʂbO$!D &"@K2_KЭ|+g=; kމw׽x|*[Ẍ$wI N5W`e?u|^l~]k~r S+1kyйSx >{Db<Xvϫkc-Ao)Wj ;aJa 8>AVG7f8hupM2|bśA zs]?Z偿P.34x endstream endobj 2550 0 obj << /Length 1474 /Filter /FlateDecode >> stream xXK6Q"V|*CA(ҽ9hmz@=n}fDJmvIX`M7o]$GYH9'Ћ&6 ;x:O7,&$K2Uݮ|ߙfs#2BF?Ҿxe61,cRD-rvS2v%8'EAjP@ HhvF݉<=M>1Ep%]P(8?䕞qybUtV`GL'TG5$i{% +` 2ɉ-2\ DzWt`l*qmeh&ЂrV!k*9O>$5IX 0 )+tټ=Q1P9h]1T^1X 99`=eY&7xAĿ3Riir(5ցa4F~r:Q@|@v3.zEz׃șQL-#?tQ~QBZr-7q8(G,=_>u看2udJ\pT6ٶv\]7 Y[9ixi 1LA"ӡQG*VִT3>gC0t0S?µ]P4\˵Ehז~'=eDY`7@[Xi/ꐴ[}/~V =6MBѼtKv ?ڙKg[J_}&h|eE@ȍ6(`;d?ġ3t3#N>rko~FRiUkE; 1YO䰣/ʄH!j̽pFyRK}G۹: endstream endobj 2555 0 obj << /Length 2037 /Filter /FlateDecode >> stream xYK8+*+^LfXbpp]]ÏBE73s`7TR*3򥢛Ml2I.fwxncyB] ,&$Or].7o㠻m9Գm,xou,28߾ד'G*_i؆rzNT B) QX,*Ǯ!޵M٣*J< oͿo**M)$J,};ub$DA'&*iT%yLBa3Q{>ĉ*XDCG%,FX}4*jl^x<70%p"(4%<Co~;9S`GUoyhPuK#V֒ mƮxSk;.ز,_iwzt닐VB`FCA%0(%Y=f,'R)V ,Xt?gEH9*0|Hf/bdQτA`:e ?&T|e z {;SqY{;;Ư\P>Tut w aCcD؄ ?of0s#UY10Y*$3%,\xPF&%.ňRCp]aDZl}icsg*^p_m sx嘿X"]bKqIAG~qːc`./ H4|u8:K~5Fϟ?B{taMf/;}t,t17R!JK,*r'F.m<YtmӽQl1q  6H.$& F j$jF 121LRS{݇2NvM4A8ǍE 7ΔGmg^,Mff)>uotar Jp\=q6R'yU\#e}.CJv e +DoNkЙ@cvmNZo8T}DokjE mM6{ì3 Cؔ| ;9FEM3)lD=KK;J{]:F;T>_O3I8g3<4APs ˜fj'^X[HCd؀")w*Do׎uX}kEӄd zCRHӟ†]+f4K|RF/L3tț wuFlԹA2Vd;c1@ujڀʼnDj.)$[43<jcnn\6!-O^!}7,dr>IB'ΚMJ4x ߵKh,+ olp5U;G|,qyV)ժDw^GVA2ؾ(\=Ti:!x;ׅzp>1ͷ}&Ttk|s`ҿ`a;@W=ydi`MJWc(;Y&~5Djg58t64%=1(d^o%D!@Z1g jκB=X]B Zpyp/;p %S|] ˑ5aYZo ~vIn"OPԵpd|gϤw )r뱁d.mE$nVo3 Ͻ*ν7;-;(gvO $J1 riS莶Sn߬-S`_] (jodCQD endstream endobj 2558 0 obj << /Length 1259 /Filter /FlateDecode >> stream xݘn6y -efy袷)ƢPRP,Y#;A #\ I0D1 zQM7$-p9qu;!$xU|HKX[,9vc-v2Bq+u&! :9"uQDb)$M4$&)b%Kc&B-MQ!w~ HJ 8[M#fT eo=bJ*nӦs7{nRi\ A,!DXZgƆس!De]<twU&\V]tk0E}{Dh 4 -^ qe a&h*6J/rAu+1Jg֕|QQdeߗ>}YVt2[)6L AJ3{4٠$F8@:k?\kƥ?اQb(EbqCa2fǹCm^g{~isKȅ;)T ֞UUjQ-̝K#@mKd /^SŽH\kz f٣b04Vǜ]D6xⲁϝaDga@E\LlWG9{(Rx>,uSR|Y@IՇWyqy"; ]չ0o[[GLxis?F.}`$}M5m!/1dAh9xBe U4at,1F|J$`cX.8xϲCn*H++EYf-$'8|bc+ \p;<1#'݂4dx$!9r6kKI(TzH4x|AA:lpb:l'SlgO|2+C ::dDdtY; -Tq9>D 7EBg@ 1,nX|ccX)E^F>ΥQ<jꛉq8J'Ɏ2E6B6=`ŝ/`Mc$",i+L眲gg=9 · @z zq$S^ۋ +!Hnlwvy׽;!& endstream endobj 2563 0 obj << /Length 2053 /Filter /FlateDecode >> stream xYKW{ :'rHlwX#,f)rտOUW"5X8bwu)'WYJIW8H+yWm`f2/+,~?Uu[z;߬7Z(v1F?I}㫭_oT"mi~W״Jh|f]VRc\jԆKJ7֩hZF'1dQJh~NuWۮDkJYpg4;V念2và?IʲIl8j0]l㥵PA?-*I&jāJii=ێYKZ%Qג$o<ݼ_㍉flJ#ir*yDEC;zLiAЂqG o@(MڑL%$K9BB{r7,Ѻݡљ'z D'ID<=".q&HH5ۚkb~fkYE{,ڶ>,'3"IYtbRHL59᜛u[k#Ƥo/{mrM:%3g -M r|y`h.=4pbLL4p҈MxdR怌gzqף {71ޠ;0AJpO'hX! ECz[[h >#U:WLj5p=,kI@0қ ʶe޶ϔ/I|<v>pSp** "I zo"rՄ̅?r~_eu5e J,EpTn aÇ 9qv!;KQ=[GlEX:Y ; %!mںsdqM*ЩS2%W ׏=?XD7|HrH+foyBK)eY`#Uv4)&ÝqWalPav>UL097"'܃ 's$Rb/A{L7}Mmlм$F~ƔJ8 ξ!iKr&٧ے.-{"UuHFS[wƧb|}hL$6@:1.*8i}zc2w i8Ǎs1b0A*7P13;v̄:ffclsIP<> ?B%ҞaӤ{*q+SB0F'ZaMaBb@77iQ@b~sLb?=4;ჲTD7pOg08KL\䂉$[zĵaJ& 3%2r>5郚G˾>8M2iH0rrgNyZ$6|w$sb+x 9X3.DM< 1|8w3793O3sSfYI<9Olw促.>Oe:> stream xYݏܸ _1jI,Ї4\s@pEnQ܃}/)RCq @(ȟ(~J2_W.I2ETZU}9x{*Fc:| 8 = |47ƚ2Pe2߮=.T9i"X41i %Tv Tm:*ۺ ж8:;*Z$m9 0{zRI=d8*!Me"f0Q8$U5 }Qe=}LC9{kn{۔ -LWV\(Szujp" *H?4 fj-Ov7m _uٴ-S[f$/k3g1cs6DAd䁱Mz^j<#Z(跣[CCdw=!?6#fEc1(wKWYɒ%L zvj o5^%"Ssčh={WP "$.5-T0$N*8/SM噠z aGAKf x`ҨlPq\(/p(!*~ 8/[k;sadzVc1Pi.wbU=/ũ}t*dS|ow6Bm!Isb.KD=wxUML*( Y_ ~U@wR x0άe2aoTUGzrowo!"zԉPyTxY!sQs9\C>T]<~% JPb\g.%/ UJ$Ý`?B 4yz,PB(٥I,vxXj΁ʴ-0$H1 CGlA1I )͓\d~ zdt$4 cV펇A6aaȪ0 ݼshrSKL)LH?TS5jf:y$L~h(2.-*pORNjYps.] 7t}?Y#x쏅 *%$`q}h݁M@+*8;/㱎P:xb8@piY@M[/D9SZnH~+COnjb0)vj,#}C>WL.Lvd;,Lk OzEY[=?6v \   N6~K=|r7<Q(̙~iCCpwȝ)?6,-52ne8'` > stream xXMo7W^(rHF{i მE@j$op-^fÙCrIB TB-@_qCF 2%\؍$ 08-"ncs%57417Z(3qT(c8{4-4IBVW?cg3Fg6!, ,,;6த) `;.pWwzȧuB5"s̖C֞2Fڞ%'&ϚIMpGx*N'A?[pg 1hd1 T`aD=:xiCjӆNtpw !0}r"vWE jxѹcn̐+)0*Bq`nn] a "O(d"=Y^֒$`Q[(d4,2*Vќˠڝ0;4;**ZF(Y]8; s\_K|y?_M@N'_azjOϞ֯nvleXzyOwjW>?7xqf!lw{MySI FWv^ޠzt570h{ԜcA hh5C 9& pRT} el3ed: c5q>D_C x:ck'|2G m e ނr* 6Ęx1!hlG=~j5dc xI4<c#z͐qeUZt% Xbq(srI@G u+RPF#d9 -YW!XR?1lt@.zz) <riE/3:{.&a=L5dqF0s14=s>zmU'OS{|÷ goXvןc~yy> stream xYK60z X%Jzh(R "%Hr\[,A;|Hz.P`>XFy|/E,(gbJj]؋w_aGa8'R `sNBr)'#z~|Yd*K Zlxc“ F⤣N8{ )zA Z9OZW}z׸$5\^Z8\߅B'Cq6PI``D ײ@nttA4%(r'M9st tˮ.곸?n'Pc9Y~ hg1 A"J篶׮dYA?@핽@+nK+H9@T* ?( h\m0AQx `شNneB.:yP2v`X䶬J5/ _#^3QS}7aWjl[]Z=NmQV5]m hcg <mB6ڰmDz6jC&U@n{ÄCs߃dAhA3ZMm=2jHF\/uụ mLHkjeW')t*Nsݷ5޹4ֆLFI^;S&'@0JSǡsBr4ݴB髠r(Slp`x$ImM05q>2ϊmљMH~G>z~.`̓'4 SJzmE99F}(8Isggݷ`%H@'ꏘFE*7;}J]^4疛YT/|0‡ct2l!HgRr ``ɤ1p&jgV[L#c͏J;c :W(Y";PK |/7qkr7\li.!qltkUvI^4G >\w@ƭIh.k A6v:+ endstream endobj 2573 0 obj << /Length 1834 /Filter /FlateDecode >> stream xYY6~_@̊,Cl-tuDd.%T8Iv-ܼD7Yŏ/pE~'Ub9o}eLJO3 'n&Kt&\ \\.3_(<..tA `bθ?@x^oqeCP[,OfB3KyT`$Bo7 gn."A Xr?h~Ca/\1f;_c+&hϾ0Ɖ,QS~I``9;Ϧ'Uij*~zKV7i/ֆr ]2p&_HQ_$yL{$皅$2X2|j,'Rznd/z=: 4ԍ3pT}aJHʸ oѬ,NjCܧ-hKΦgcw[gu_Lv ,Kڶ*J,bi<[ZK+/8kW5Jvqa2ȐLi8X<'l,.YL.43 p*Lp"+ [nJ>gWEA\zHժLjH۴C8aC/ƭ[ ݎM|b)ZOxp +,?=-nk!LW2 ?L\<׈X ŖKPGcyFTY!*e t J"mϜri۷p@VHP d=N9Y hhI ^NCՙSTe5'cᆑ!&~3H}qt"gRe]h#a :VVҁy<[S&5(厷A40s&ו8\la.)*C̴<W :>BtZ`:zxfvq֣<0Sv@KgJ՝[Pu;;[ojC`Y-cGgbAQ {瀼s5}Fx >ӿ(/ah <(=<; ՕwEy x5q.eWy:M}CLpJe,-"֣)m6.Ubޭ,ړ*eD\:.٘!GI6mr4ql7W58@!L\Q4hH" ƳѠo.$g X ]esJ gP8vqC{ivr\ത;wU1\-9|px04$ 7&QZ!UJ+pp)Mኋ6fsҸ!Ϭud'Ϙ<"q9Ih@p*G`LEA#.]^_\|ٯ&J*M>ڍ`$+P22TN2{_9yg&UoTGZ5 \u#sE-$mw f^Z>-k? .{z5Oէ>^Y䶫ʾ(=z.[mi# VH)r||R! R&qͼZׅ*o{C˜-Rv&,/vc}4m0MbyKƕ\Y,h؆ΔˎHs%&6"Rުmu jnMEN ܫcD/nC<ěr=LrF勸 ´b ) endstream endobj 2577 0 obj << /Length 1037 /Filter /FlateDecode >> stream xXMo6WV X,[ 0^%HPdIn5`Hp{CrqtIJf*Z_d.r7/K0XZ]|y33j/4IJ)/I_pcnMcIR"1b7ƘY=tD ytB1)s"f')$/ڶЦh?]Z(RH(%֩p^޽5ݶTy E_9zybjE8™&9Mհௌg F>Ty@YR:kXv)q/=Ҳ}f.S^S$w+v_PaLR;Ήۗ-_O/ 9/wE!&/Nq(U ѭZGfgL HPq)ds4>Sw:/5)0·ANt;$'}9QA9рzR4JKF_UL*ίJ?$OK&#cɄd2!"[ KrQQ2?d~\ҲdmNb&uXO9 ʑ?sVo~;+8]P_$ 9rXۗAsHžR~D=d m̃N㔕@+&sZSRZ՞: tn7糁_߳1?nI]ueB9\Js13L@%p' K(wmʼrhĈ׵TtpUg&> d߰DWgNoݫ֝-\UљnZ endstream endobj 2580 0 obj << /Length 1136 /Filter /FlateDecode >> stream xWo6_a""E Cc/Mqؒf_#R$[h;` )~w#W ~|U*%*̿mv+z\ D;Vьe|ylWc~lRJb~$Q?ō} "劑E6]m*!%b,g'K),!W BQI~l:4Rتh6`.2Uѕuq7j0ip㰓ឺz=A'#YP4AQ)Zʀ1^PA _-'$*~G%P\QF?,W4cx;XrXP8{(۶vHi{uRL{iHRg zЯzCMTTL^qc@G(h~O8ǔwKwSf+S)BhU㳬#ɲY&̨<7殀4fpl' Rqym0'<-`4syL8`nTpXd <@ :Z0X|ucgP/6 K)7bZGp 5r Bpr|\Jv(_zr":œ4C=y1 :_H)4~L,C7 MC;BM>]#8u\/\0跁 @ y:eK ķ0\2*Ō\0E,ja%~#\CA1̃&M?(~j>k0ָ}]QΘ1sgncrT{CvrL }núk>-d3{~ahN}P7<؜#`dCdɛ7GpmgĶa[Qa2e@*(Tv8j/sΉӂcYXv8:|Ξ&$}~tC endstream endobj 2584 0 obj << /Length 2235 /Filter /FlateDecode >> stream xYK8WsYhqė ;ćY֖<ɯ*Wc7f2EEb2_EhH2Û̶ t!ʷ7?G,2:.R x;8BN8T" -D AפPu|`H<2e2 ~a~۪ލ:ƠS|5Ka<-0Up؇uSv5qmicPEU LJ 'w)~@fB &-~OYMhFuX`Wʚ^[ Q{7T!x 3 Ә!Pud@i "ݐIVE[v}OUg}bTpdv灈|g7!DP&H(#Г_S%ZTO$ip?ޣnZ#zdzwVƵ)zOԷǖue=,<2di1/W-m0$9[9RIY1爹QlHKf1$!Csa;4ӡ+y|9asg4Ӂ Ÿ~thZ;2Kêر5iXc9f2'캅(ʿ!PhOYFEE͏f%.v??fJ.md,99Yj YN\YE@3 ',Hru@ΩqP(`&L`[ Ca󨼃Saj7GKdȀ>@#M ⱁ`]fz7gjSVk9_y/ c{}$0; i_k dJ^mc>tKسtܜz~_Q>܊󟗥ᥚ3Me)6Ug =lk3xwa$īVkOd7_ML[>z͞0q6u82qK;kl;9>8&>fah JO.qSG&7MgmScJJ*Rc_h@Xbޖl cE}Q4p1-\' "53BǮ­;pa;B%}mms$2c endstream endobj 2590 0 obj << /Length 2111 /Filter /FlateDecode >> stream xYݏ6_aIV%Q)hp"hS$yPl+-AM/E1E W SceT3u+5O(썧|wԷP0 ;9'KV_ CI Bca-۔O^=6ޅ`9 &'31额Z4Qd@+S|w{K ̕a޾ I9oZyy['=+'ԥg=AՠaFVu- (hp fE8 4)"[ͮGA+a7tG}* ʠ4kW DŽ4| Bg1NAG/3Uce*[r;@KX^'ShQ3p:i{5s7帲#RX_2ʣcG(^k2<Nӗg,kr^nomq릪:|-Z Ovl c"/O]ʵ2Cҩu~l ! !O⛢/kCyf 3NGчY1  y.m2^M)]Ɣ9V8vt]6\z endstream endobj 2593 0 obj << /Length 2244 /Filter /FlateDecode >> stream xڭXKFϯ |11`77Z3:I:TCuEYţ툍.|W˃?ae_E=GM)Q';ad?g"W'ի&WODap3#!h'DVBRHTmr9 zNc7מWv]R5gTg~9MMlЍ=aƖ+.ܷSn@yG$nICazhA-!zn)=}V{<D3K|$ޮPg ]] 4+"AT$ o^@'8>4pON07 =X'zGZgf!nE>_Kmx xNp9e*Hg 7{VK+N=Rn{2sOLkQ)eԫݪV ai8T s:][KښB^ua-tH)( PY^@8=8JLZ \`% נ pX-GnDŽuz%[Y[JĂn?[jC9tlsM6V܍+?9){:_Br5+ΒBuZf47ջ|Dn N`JVH/axLl)luP`f z4``URIaXvдt!KY5_hs~9|8z:ldPNձf'\JoU$rMKj乧6iM>pUiĤ&ho^ ƥx1E oR\J/+ eTa/Kl>|m'. bNgǚnNM`FlC`tn{fӯo۷_h`6f9|\\ZkfחKFoÙA%lWtH eOYΛBtev=A麰p'/6,c !)W3{} 0cthe CH*QF]huk!C:7[ `&C6: 9ʹt 9>(եu6(V!4vq  L涎w*X$`Ƙo׷CŔ\)&vNۏ|9xQ#Mɜ 5b0PzW#ɒg:5 h ARȲҕ?Kx78YNB8L i`U2gu!k{= R8]2hy(<)xWHz>"Mm7Jh4&͌jjp\~iRV$=j4=[^Y!6 Wn#zڇ76x͓3qh/zTew2~9X"3|u)_]k>,Y QWii|K,J}46iV]H8F2ao-"bT_i&x7`س/Dx(ʭs tEPa b*5Nz PىwH݇CmQ|!"'${UjE ^8%gAxLՕ:ոl.P]Ǿʪ3b It+L(9{G/ҹ;!]wx8iıŵtw,u0CAa?^<`Q5e!l'ـv]1ডA۰A`#t^%_AcenAhrp vs3qM q endstream endobj 2597 0 obj << /Length 2083 /Filter /FlateDecode >> stream xYmܶ_'-"EJ"8NpA*XI[I;á۽6 Y"yy_E_e*cIT";ޯߞq7/lgϿWj#E_nn]~M8u( n~|Cִޘu(R@TB\J;-VѢv,SJЭh~sd>K(ƣdWPG`#zȘqȷ1()Ÿ/>I\3-$;w&Uvùk53ϴ=zS}C^ۧmH/k-a',^9+;0JFvWC9ygafH#.{[v8>}^+5mnf.EL1*5piʤ5>$d ([Bg4Кk34{r粇)uʔ*NS2",cHsWeO rȡmЀ8ݷM&[>lskGzn:}yWaXq8k3/> F:ytҚ}dL51[1 t x}QhB+KeVϡJ|UxV*KI`E`ibTIJpBy/PsOx?c2OADDD%8:%(yQC$Woe"-BVY&5I첌/,^:.c٨\bXPb[O+Xwd;;4#؊zX u0 ǚ%q3rfo0x@յzacKH X77>)P;T;Ae>/( zyV#|"j`8{R͕>/on5Z~'  0ȃl#Ж]S6 ]!=R3=>uԼ݀7T&r1%o0w :ASG,]HS j<=RN ғC-Jڎl<>= @㔉1JS;fDI8Dn0zsa#jlP_*@tAKnvX0NP~qG_|?s9lJ5Ғs܁nGh!Z\ZS[^ pKh@̩P^V޿n[_#Oh+%Ń::Dusit]. ڭQi?;#魟d 6(ǽ[V4U^ί +| ܺ O.ͱ8?BM2y\EEtVƈǺ0[/&1A>7/2wEw }m<&]xH ؖe][Z}Fo89B9Hy, (Äy_65enAc~ uw=DPh98V~ v7n|dVB!e Ѽamcv׎Iiͯll 8L-ʹk;Ez=կ ΫeqH/7PS 2 Z[ݧF(희NQ ޜK fG͊> stream xYKo6W,rCRA[MEd-U6n;Pu/+QÙ<ي[etDD*gԬw+||w,]˷R%js;gٮ׻ЫvFQ֡2_qRݪVՅZ/FDrەe59~:w E yI ,C<8@N,_N☣|>^2惢۲;׳Q,1L8B&W~gM1Iɍh˚9u< D?J\.1uڳtJ.O>N:x6|gӄ1ޘM9P1fmD*Tj } wl$$QȚF̫ 0AY1IKOqN3" >lz )eBNuw<堦*AQ €mJL%hЌ5q_+[BIhN#&;F(I&0{Ayż0o _+ -{8'joJg-3% V1  ٝcz@zd2?ˮk8}L8|^RlD: UUm#JbniץOV~WOisZԒNy *,`Я#6G:cEB虈afO14^43Q49/և5o s@OOCh _}4zEo DW2}D9h@n -.wá*V.{wW cЖfV(~tˡ(Xm)oU }0S˾7jҚ|nc3="|Nr[2*RƄEZf$;ҙj5$/-;;]yv[ n*t7v V?8s$u} VgM{)$y+m}l\)ĢQb##&9bFEi'T]ضs>S_Z$0#"Z&Чf$0}=lB!YPb׫MIgpia3Wjn޿y I A1n|-C٭VݲАнƾzhӑ!Ntfc$@ 4HTױԋ dL뙾imgϛ;oթX> stream xXO6~ط&IcvV}hQ[Qh!z\C,{w}8,HT:!=|hqtߟDf[ @0I>W$ (#vjY]{g;Щ8ҟ1Ϲ]T[ը*W~@# f&i'ޥtE0;z44$^5Eum%ʏU{3ba*@?nW-Rosc LŒsx*Cb,EyH"~(;芈Ʈ8ʨh6 T~^D0HYz0&*ne~{lF;˷lhRݫʇu^a օ_Bm< '!EBjϹ'˽jԒU[lQ^ǭhw?1KYU nhW-ԎDRzESEoYk.?_ \u8ދzID2Ymxpqj|0{0Ql"AΔ9ԗH=;UCkXGt=H.ebK( ^E=9w35P/7 6]@B c&!yg ܵ*FѸ4iFAVh\.1RHl$Ob| o5{Y4b2Q]6bN̢a\nC|w,Hң:}Mjr.BLݽRn/mS Co3f?f oeQҤwtIǔnc%0w#XAK•ߋDY5YTuMW觫.W%û4F =" N'< +}fxytMJŷܬMylP TĦ]j6X1 ,Ov) xQ9î1dW{ef3ˉ|# 7@S_dݓӅ֊l=/ endstream endobj 2610 0 obj << /Length 1778 /Filter /FlateDecode >> stream xXo6_G8"1`mP`K܇! fcr%I. ?ǻ}(QFEJr{&og%@(_~zTSVǬ*~fIeq,R/xC tԳD\,f~2ߨR~])"sd<]S|\ĦuFw%dU%"c2+[ݯwp2^]ӡdsV)%PND;u>4D^B^!L)$'NU.bKVp<ɾ L\V\U?8He?C|'a͔qmMӆ οfY>ԅojALEm 2޵=lj4)m/g`5f;n*zAkM+氠3A ːVj"inQniJ> DgѕEXY/Cvb2'k5 {'It6ub[ =ן.JP*XBry*k5䫚$yRըg;Q Q, 5T!I%'"s"da-T=>'|;-_E94+s8zaSWP(˔,KH1$4U>ՔlZ5lJM8YS$bJc*E׍!uksJk V@g(26B͏\E*ck( ӸDbUMA7jR[`ޑ;atM_'%C?.q!zUqt<2QQ|<8BrݑSƹ&:V6b Y-,Dm˳?Cų x 2EE߃ fفQ)T˿/&is|D !(S WQTx o)A W}Nx^"/&R)x]6M)Z<:"Om< Q ҄RT : 8XvHys y! Φ`Ą#š3c[4MHFZ F A\N1E3H_[> YSw #@^SL=ٱ 8t҃a׬neNA-j *[qpl[-I[k4m!%WƲuaYs S#8|_Wf5urM?=ﳗ+@TBS^j-s_F.okjT0.'y"Vb h^ LIH\Ld59y*Qe))4BMCrt] FS@a!FW 5튘Jx|ozDmqOok4-xn'9e2DyMu\'p4Zֵa<7ACfih AZy`7P1f 'M[Ɠ⊑nC[ixLlV yHgiDݷr xC2D#q@"l? lO$/Bbs(#~ ~93~{hT=4* [wkt/g,‡}"|<R> Ur y7f ޺6<^!Bȯtq2sZg L 4 N4R\ endstream endobj 2614 0 obj << /Length 2008 /Filter /FlateDecode >> stream xX[6~?o+1+Q-@&%qe[,_PI 81E93BVEX*_U5޼Xn7/dh/ݯ& (~|Eou[FfQ*_?Ig"WC/\4W"k`2;@?u5MyV՝e_ `Г.Qgo_<) hq(\O@28lvǺMKluhl*W(XD )SX~{]`h& %$sWwgPi ݽoy֌$z!"߾b8n.\5g-8F^lGFxdGk}) &9y5PGJ7 =viH!auAg %o0-hC] MGcÑ5wMpFWCn=O5H)XGL!!(72Ixs!E"!Ы%a`52Rm߽Ñz&:Eǀy;ɑ.R2Q89 q"t_;(i8T50 }nO3ҕ,.Y&K%m}cPE>3J)EKqŽBHvXef6R"̗\v€8,LAT]Q9)<ns8&C7s3LS>X5w7V% ")8$SԚYYP`]}|8X8(;e%ͱ={mf 4ْx}]QGn/!1OG:+bX|af]} iOh) S3%ꎏl-%RKNxp E-mQ)<#A&<ϹLX:i:&Y [7I|ɯ| -o{lgV?p6r%./m-@f 0Dٔ*Awu13vA `Sr-tCc rpVq T6#Z^v֧0S!ɴ" :BͷchYJ*!hv306 |6,ҝs?4 Ē1 u> )dZHCWH!%˼T/y0neoRBk]2S-wYc].e/n&ʄRꯀOrb7U!dKl5+އGyy?~P_9%eJ"{.4 L]x.C e-B}C(unzN0`}_j|5;l8(4uI`苈T+#5"|u]! IrW,~¥цWu24z vC=Io<8p?#?U<ؗ,4w4{qL(j!EÌިg祱 &y h݀G0Op 5 SKLaϐˉ( Ph[;L|.ްM qJ/g^G̖]OB^OEv=]h:&,0ѕx  شu2?b*k^*1Xfs# Qɦ>.]MsM p NCru+r |a]5^QU/K }+w VphK;oLzpqS5_vy3O_=zƩlF)Svi;+sŗBi[d"9v />Sm vb-D,V;鸚qS֊>]ߦy,V5ݻjcfBe+xZ O:Hå&-v3āAO?ߥ1n endstream endobj 2567 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1536 /Filter /FlateDecode >> stream xYMo7౽P/~FAzi b/drYۨ%+޵>X} 4[֐[nJ U.hf. !)AA(N-\S($.h(x U؅jMIJ$qtXʵ8GBR7Ӡ(0B|^|\KAHlϐJA]uMR\Z܄inSˎC8%l¤&ڑS67w0adgKHc!WsQwT˕KPWs0 &Z%q B~!ɽCYChE7Њp^"-&hWỚi)C~jJ>敂%C*`AY=Y`eP%sPɭ6RN&OYC`rK.S_$0"I%h٥SQB*2,•;̓ݬcs5HH*e/0jM@BR]AwQQif5JA6?#! 4(H,r'> K] XP F0jBueαq*6 ~)-F|6w&aGWQN`dsN1=Ʋs!.y0 +crokz~uu`˘o.#!7fz\۔(k9mwǀ6#hS:}@8c~P+QH8I`^0yY|<햇K G#P!#޶ ꒱ewp^],>~q<[]")b:$+BO?{q]hn2Z ۵m4e(PZoq 8@ä/ɻe{NH h8P[M dy,Qd#uoDR~)'37)X4Ѧ +Dj@-8(^[mvvaۺ*n_qz|p"ڻ޵g endstream endobj 2619 0 obj << /Length 1850 /Filter /FlateDecode >> stream xY[o6~ϯd ī{躵X[> m00%Oٯ9$% si<sC.b,^$L|zagN[j"ǗR.hL8tf!zՇh+y>[gUU^,W,2DX>u=){r(yG-('1S ]J0\IŢkv5!L"c>\ċ |n~4Q8?# 5\rvEgϝhFd+&+>)m Lͅ]J2)Z4%Yj*$~0򨓊:Q|X1qH NORl 9aE9%SJ٬r3] A ghBvkARv0n ET|ɒhk`fI#{2iV̳ h=8WFBQI)FyW~Wlc QL$8߯_R;]j7}L5xn$xY[e,_+zF= ! UU/J< +JƄyy4E{0胍zw qn&]MtAйTAi/,@@XW%JPI.Pf^f-ֽytKo𕶡ھۂ,W*?)wIZ*rS@Ԡ~ΘKwK"{SBNq4-cz)R(?ا6OO{N@*Ɖ3+]y7tE>AwЃ A L=sZ``6ҁq{)=@FD2郞^,9sixcf\M ?/J@: : ѯmkz#0Saڍ,==h*ȱcI?g4a /b=86+xbsSHƅՠq.B Vp!γ%uɆ_=Rol'pi2!ºxp$j4SM}{Ō,ƕYL(ꈌDDfƙуd&{mE|ۦ7$j/XU0Se[&s"vҰ,G-r@vz4D𚩇1jǭ$͔_E!Y08Nm]$ ].~pok|B`bQWD"` 54_MM8P/l-,2eQ[OMk sb onhcs Q@Vwx B Y/>7ęF~o9'ט@$y 1}^=pe^k6S}Y{0@xJF.%!o3AҬ3VhUm%oE:eͣv! eSbUMI5qGL:{+r]s4ns>(G[V"LS 9Fec.ێE|2C9,LȀET T=½O u1!3@d:",2e $ /1M6wzWǙvrloكi{"ryr;0_ew endstream endobj 2622 0 obj << /Length 2377 /Filter /FlateDecode >> stream xYKPj+IƏxv}ЈTl~DҘ8!v@</4W1WH*67~-7W_|ԊǬ OYVW4~RFMh;{vqG*^xW=/)4O . &y l X5ڒIL8zCeETVNUvxn[ޤ2>*~40wg"<ZR ˨ۍ>rsX (LAf-GJۃ>ШcAYœFMoi;tO}gk#9Ή`@zI4SȼI]]yll3*j $hpDu P" 8C]Y Ozq\@w9f |DNUX0b6;ڒ@1x7|ĢaX];кSU]H;*c"(h#?)..Kc{xPtJobX&2GIq$Znjן\(ibG"+P%1e՚B֠a@ahI֮ΚAx=ehQ.z8RxjLWCq 7%J - ] N:!`A,X\EP %]&" Ў=U(&7FFkr>a}=giqgxÁ(}r,Otia^.U ,'Ľ=}}gST)9ksCKs )`!@!Y B"{# V+%dQ}m.qBE$AO%|nm-,.n>kM/v3d!-y'ՙ$znz|9? O \Lz:9uk%Rؘ4nf{Z%#FP8=B/V*KdX.1èY;G]rLkp`޵A`L2rkcv炃%8"1MR֝)W,%ѠەzTuVlQT9ujކm9z{pu6uaul,m0:-YqBqbK@ 0>4L00MNOTJQQ3xWV֮c%\HGq(i<%w chg|ťr န D኎ L$+. ,_NiX)n3&#9י^ Dk a[c+[xy8$XgK!2@nu$py'u i6d.7kȨO U:ve!xN98) y"'#t;.ļ+,ʞaY,6yyRTp)@WڵI?v(IJ3}Hg)T_/ fq?$ #)eLyT;ln ~ TOz@h^7W@eطy떦?p XWn|\;Σ^c6ZL5_al+LI\׏V6Rpx8n K+`g,߉V^*;hn6{Aeeu 㽼㳙P)n T3wKTqڎ^:$Jb]ݝ/~؍UCGsVzɥؔwn )F2]O endstream endobj 2626 0 obj << /Length 2271 /Filter /FlateDecode >> stream xYKo8WmԀ%R{H&;/0"m&Yvk-5U"EvfঊzǢ"612iԧwZ|`CݻUj#⨌Kv?_y6L4(oC)U߷Dma Jl?N$?hrH6"b0 TuEDJF6TYQGuՏzh-t/-7aEyB]<(W~)J%RoO)+s{yKşLQ"k^w f mk Q\HXPK9ijsz$J_[ ?៎6L ա(4NXhw:O c H:|i䳺8qB ܽ*2a#tU="hZeݝDJk6@+O4 #WiB/Jci#Ug,$flvGo cnN}ukTN0`ij@lV)[0ӡG"rab0UJ(} ŁR̫(;hox0 Up,y ^d\~a{Zt(SAs: %F0•ePD"Ӣקp m7MM#q2d}=}i5iz:@dHb[S=Y`au=^GkKN2  0x@4 m]7xb[Oyb'^ڹ'\ Nv%a M1=8y…=Li˺VSɡmfˋ~a%VL(|0d[mw3N agƷwjݶH8xt"}u;@nMnۿ8LkZ^+AF<]r1C=ݏ[ة]]ܗ~e.OT$b7Qk$gvoW%'Unz" endstream endobj 2629 0 obj << /Length 2283 /Filter /FlateDecode >> stream xYo6_Ȳ⧤$ڦu܇"̓ꪕ|S~3ꃲuP9R䐜BWIdW"~E7m@p3ZxȒ0᫫tCtyH)F)Ƿq&|aտ.^] {j!J.+.Y9L`Z1h#..sϻ6>,VY$ ;`Bl?If9K8ifNd&"KԧniX2/V`Huf<6 FM7tI?PK(&Ԡ@}yC[A#%dČ*ŗNm#͔1АkNoAZrL-5]B-}l8` b ANd$LDQ XUoT* RnE=ME 0ێ&5 ]̽5DXEExlź*層ųbwofAܓ!u{2NM~\h1y<''&LrlDnYfハnTYN*Q Iz"pDnƹvg?*?mI8M=9*q-G%?s/cK. 50O>!/Zg Hݸ,="}3C<hP~| zk(Nnv yBi @<2,ͩE\UVg/ɇ:ё ^!gkD%3+҂, f8b;<&w7A]mrK>;ÝأhM}^K>?:їh#}ӑ+Bne_M3VK,-E4!H~옲EɬmW݈ ۴K=Brdr*늺rKt]Qmzd]ա[̪ sIRQ}=Anx[}w^^Lhw?H}2}G.cƃiˏ.{# 4@g']dU4,/˶k^ Uꂞ9C ׄSmGZt-au @>v8(βW a5n{GmE{uNi=q{CIf^f* L WFMc,_ {4qS൒5 F>p_<lN[ v̌9ꂟ@BD3z?C \PH#&KT1\ma duk%+ x\_^4 Y JR/]|, 38L1vU ˳ }/0IvQ9(Fx ^L8"= Y.Sg_*ŀ>RD§!m, 4=+&!zGt1_+ %m1 tQ}2,4Y/+ nEX$=JGEJZt(Ra~%¥3q9㻳KX&n$ ܤg3<Ow8 tauYdE}j~u)#'^BTpUQx?U@܃O2|+Esi~2wducVn}y#2H"H?j8X3_3X@BCG#b%cK\Sԛ)Mnr aɎL 12DLyߩd-5}G72 gSZkؽKۢ,Fu^mTgWT[LŎC}*_Mնm[X=21- $Fuj;eҧgīOL/n0ujOM}Q=XjPFYuS|r$iٿT]L5gQkC;wXHtd{mۨ >>:x[(\vOz{-'{*;z?SWam(H! ঳ Nnp*BBx)M10s073| 9d Igj y4~?gGTxlyۭ8|Y"?#<yp,Iq v{ؘw,!L|gY&oO%ڞ`08 ?<3"9L $5 r]y2/2 ~Ҥ endstream endobj 2632 0 obj << /Length 1974 /Filter /FlateDecode >> stream xYY6~ϯ0RXyM@"[٦chrHIJd@X1| GWyR\dIbG+|xŰ0<[)W4!y0ٯ~^Ku9gX^nt)*HO ߔ}rf=2$.\vaD;]2eQWlOUwFuYumYFr'"Q/?XY6+JI.%3b+qqMʦkRTW}7'f$~9)l'|_=by^d2z?i2uaH6Nd2 L }?زs!j ;t q!n e,=j|s-=u[wgֿgןM5ZóB^o |X"%"A$lXwU4Ǔty*[7jlXzɄڣ9SD NW*v|'d Ecx6HG*+E$WI T8^eA} >L[V=߳לFPz=_,A.>`]H>٫OYO1Ԣ!1!L <V=%2NE +X1K֣lB\EA}o_'TTzD8t^0J @2*N=/wt|pl 0+~ť! GXB )^ eqTd+ȮFˊBtrns}}+q>I+c/ߩFeN̙ !4҇S^ Rsr5 ZcILK >4P/dw.2`Ŭ),M=l>7Gq;ai@)05a RhI{A5T<`V{> stream xYYo6~ϯ0RXuC-.QAX,:Ϳ Yt8v(Xp8?~YtGsl=zo>xB\D|q!f4"yjj]6m/y9a엷y%[YM̠<SA"B40/AdWZ~@H75457MY ;7{1!,M+utPpF(@1L%܌N$I28;A ν59UrXbyyyzT2ⳛS3v(;',kQOL@m$͗+k|/H-S=ലr˵~jڭ< iB mTQk Q NJQAR6[+ʧ$G๕UїM ڔޔͭZ>U l< ZlS7+Ǒp?=nN2.H10$S *qss}Q1t~Z"@a?>d4`fnxN忽׏jq6w3,SqOU(]Lw6XmAP;[ٖjla蕱1}U,Z~h\*+Msef-7ʲm ~MٛB,j,AP˷`M4Ib3 W@y*F9!0ekJk}m~*T]/x%XQ˿(]fޮtK+z|֒KJSVWfzG/ @ix'!&B%Cٔ me{-\?`DUpnO4$iL\(:ediO'ʮ20wmtST1~gDFg _T- 2+t-z[GZM$mHRx⢯& \BϤ͋ToTr2<RtPe2`b1wT -AVV-͈~jaIRZ;=rt]MX 4ѥ:c󋍧.3|84O PPŚiP6Wuu %Q Ѱ7lt8[+d$ XPo' {~.gWM'i%0/T@QNR/0O[-KHc/6T.x=䱑NvQ?~hk}gcqcty.#LTC簉5Vk$}Eh=̂x x"hwOpYy#z~tsΒ&{ِ{P[> stream xYoܸ_K@%RR!N.50_0dW P ~~-7#΋K>KcQ6On֛0 z#|@+׍vz '//~ADv,^E`<uz5(Շc5ցii[W-}]N]?O4(*9#*Ao۴k ? !'iEݼDKQEa2.Iw#? -fwJgy]M䴼-k * /(zr';v=Zve+oWjsL_n:Vtq:^[[mQPlTun [T:.cKdCiW[z+_AWU6S@,`R Xodzeu ԴlI8f2"u[;}EY"e`t|⇭hH1 gԠPO5aÚ}/g]%9QA2ėKT-3 Y|^r*:Rԃ\X0,ŷLjٞ{淃 +C)|BYb1x Qʬ|1Ͼt3Aw~IGZQ!F}8ϒ!gaOB0?ӄ>`2(7!6 vb0CA@bsKRҔv;D *#ًT>=*|],SQP!ܡpv F_f,xv/f[)$ux@`R*_xje,Js;FY3#@鑡A13ÞƨQ3/ s]]l߀gMoP'3+cTHSv,;u{=EG|w8Q\bm=xmC*X$@$q6V RSA!:U `aNnj}IgEi*jj?-j^0 L$/G$19/J!7a;ujJ@<ɬl 1 Kt ѣgآy\ȏ"-@*>a`h`We鎰 <kiTb{#gGB`Xc8aQ0P9mN-oGu7r(| vOzn,e ,7MBr9G i\-=F* [3͇}4LCcoES-}嵩۲u߾oTZ2 L0Uq`L/ߣx`E@1z^ XlWqu)_"T&b g8oz=$L, 3]7=,1yX)[´(t#|h5gy&%N.|Wmg#fadl͔@H7`@INM40-7с\@`rC%f~Q>GO([~zPvr endstream endobj 2644 0 obj << /Length 1758 /Filter /FlateDecode >> stream xYY6~_GYuC)P.lkJ&3,i{ ] 1gC E/"Eċw?^I[j@WYH_$~"7!lnZ[/WZk/~\5-\ۭm˕=.tMQBtZH-| @HtPB˕ צŠwKH>VDZHJi*C,l] A)cZ)cˬ!2BaG5ȧٻ^J"dwoᵁ/_\"͋9.fzsGDrN+#4 ;c]lZ՞|++-9fڃ=2Q,}2^R(sup|!(-㓅5s+昭cY!B!{ܧpV MRRwiV7(f+quC~릭:⪦7i19ch@1t9ρk'ѳ5sz˄"O;Lwmۙ՘ ~Sr&> @Eln\B$p11utTᐗ49HC,c,8z2(0(&<470OI劢JἏLTB`HWvGN98;,8q?/''1JMKMUlxz&Y`Sյm(We %`1nSPC6vSuWLihB*CnMql<" { Ǧ }>x&tHȨDs^;+HvzmEy'Y ݣ lƇ_ ;d~S swΑ%2HGIA<tu/jI=jΘJHEg`lC UGŹ$ 1I XE(K( GT-GCmaQ!+{!]+-%D rX@) v5w0hmYiZ0mi5'qtz@+7(L,>p QQ-d9<ɫ$x[]4ѻЎRGѴt|נB%dcb8&)I4%te.*Bq#0}!I> 6m7pXR'=ɤllbZRw{;MbJ(=[6]Hpa,1^/UwH\Ħ-t"Vvwm0|DR/m9ۭtEkYAhibM(B)ݥ 9 LByk+a^=ּ]t5zS@NʖPKVup?J]UA"P*/ͨrf&%=\.OTV,5w,?$ iO] c]4ǂUGk z(D J{OFIcnqKkq4VcA91d~u1tM$zdPQH{SUCe 3CY&% <@Kְ> stream xYYܸ~h!iQ(ipNExއUZ%A>UigO#X$_dˍ rP)&p-P?^HnWtEr?M78?5vr;~GdjSfBNn?|v?x9NHDB*i@; ~M!J]nȹgR:]4jᤤ ZV^蘴-YCNml7YCY2 .N&u,*~%=(*":$ i2. 0c'Cp:ztF,(l EB r g0;g6c*+ `*  {v$ |U"|/UuT cy?=:x1qS9y ǪΊf"r T>Juշen֫u@2c;!HdY`HI*X[,+)oIn2 YLB%,XeMЅ,) /M+cH"bz<sca1h8_)\Q; qb dQ kYW*"sq@Hۅ2vsGbhexKb~^VT,6sAD^vzLÙEC$pLL Q-%k$ԩŋKG "'k7pR-NRec|`wl(Q m>Jzd Bg}z-,}MJm{bX({_4'[tN3tn\%MCse1T X nfĕ/VG@EٱY.eyU9 7npc{cL',ɼ93(D)guO- KR=`-%Tj~r%hMSw쀽5Pz,2/} x麴GvVOn !m6dFnVv>Wa^jցSlGdBeQ/\F.IaMKW2h=CfkwC. ؞5+ }VH`b͏w7y,A> stream xYK8W9ɀ͈fd&Yd!ڦ d#SŢ{vhESEX_Q|_$"%*^l|[=.WʭAp=߼z.gf?j[|SZJ?-JݿS'ו.z|/_7|_3FPRdBaܷלnDLf6R+P>ҲVH+0P}5^ ^Z aF,GSe袩{vvtsAlOt +OSk+s԰l4=j+||)E&!V(+NHK1`|޷ !mH* #i\C\W}iM=z,cU~OZ } (#`GSlGֆe[UyjXQ~ 9y| "I(ZU]^NzGlÖcA"hu;Աt.c'8na?0&ޭ;""e 謨ZScںGu"ŝd/Uٞ`ڗFbD?i { ~lʻ:AA Kp4 t/K37~S|0(TauF45Dh JaBHBmឮ@q-訽0 É1- @% O%NH?lg/L`]yh@p)h' klTir5c*5@#`)ۯ[=Fx7+Vj㣂Y$p($d6%z09Cz]y`$P>\o2DŽ zE v}dS,RP1Ņ?3Y&fy>M8g [B٧ 8Yf`%<031s] Kdƪ^s=Jg2V= gVǝ5~s$@$.wvw1:!=e[m f .M?k}8x y3FGڤ5+i Π9b>k*O.D˺J}w:ZU׻ N,*HM2&]E<0tDh8o$xYW9sF%5QN5C9!)6@ {M;TUN%j'ݕO]-&tg#Po&OyCG#8H_^.QӮ-kUiB^_WKq8a0[ŹCeJsA 7^ Pop# ZroRҗ*<7'FNO 1T~p3É;L'g.eG?EjR ]B7rg4)5:Hiȸ@SӅ< +Hkizԅc0Hc{Kۊ{&ev_rKnp.p^kѶގ1`laEj 5/4wa'ϳm_ elVTUlauЃXq=26PPK\*WS^rFE2`vsv\kzA9>ǝ"K˜9}+@+e e{ S0 w0gĠ5žƄ,8= q?L C\YR(S~R (laG#{_"Edу`n>b=#3l(1ž$Ďw>]^}&Jd>@$@|+zJľzs8wwI{ոD#5DD='/vP endstream endobj 2654 0 obj << /Length 2239 /Filter /FlateDecode >> stream xYY8~ϯ@/Cwvgfvo\n;4더2~XoqMcYoDu|_oq7쩅xrV8XJ2ŸTݡlQ5(E;(mmTO3$ >;̩T{.p}\5y-T)Y%wk7&Q Nk,RKm`DiGijcoƟDz;VCY=M=q qYR^b.^ecͩsy3_դuH/H .לrlhy,? %ߚݒsg$nYxY2H+00F{`$9G рF1N #,p 3.1odX'S_n&$-+^0^wwL^a)}S%T:R?۲۷vfQ/ڲpfUwag~Λ;J䓟Xܓ`3倍jOPpfV!9ڐ1 Zot"p9֚nWr2XU}y4)YTZP,B d&K[ZJ k\-=b@P#.t#8{Z:NSl=,))חH^a͒2E\Y.f-Ɯ* 3>\[N;G)`E*ZH~bB64`ӪeM 3qPv%]Q9oA&}UDA%j o `mmc<`uU9k_E7Mf,z rJdJJ ISxb ]QV x{*l2l.P5aWd@ P1Dh"6kl}iRBM}qoMg=dg"4OfP rI)TqH=?-"7J>2%$%䩀'!T2 Ñh"!:m7=Xs!+g`+1 Wpb_ DO PXm .N_if?GLrhpNxg)J,ͲNL H_g֏Ax^B ?sH\#KF.ݹD }Z%! Z&2gBgO%ŋ;;Mt<4qwY|OTDcC ПԲ3kE#6ϥ >ra%`f ~[ܟp^ih`t.n~i)gZ؛A$g> stream xYn8}WQ"HCl." iյ%$'~pk8N/"@DQpx$&XF3̈́篏sAH^J X|r誺O.et1u}wSWJ圼{Cz !Wxӫ?~hTB<8|h]ܵE IV[ =ѴrU4sz,z2w,#5cfrڹ}&Szʪ7$eRSώ7 Ék}rϸ8As~ds=NI^uRb۽rGS;_J¤v 9~Ӥuom X|[+H$qE1)h( `J2?B©p5,ևi׫gؤ~84wVW8<1XY0VAOjR{A-Фfq=򳧼1+$/c6h5h%N}Gd]Ƒ>(,b\ P=!CDez3Ǚ^éE ")Ҿ-|%t"Pe58c4Ij4tA.b/>HhkezhYl>mf5} HFIniz̒5ɿ'ߦD1.1$봪blvGZPupX5o ]₅NnQz&1O2sBm-HSMe?ŝ%RSώ}Gٻ"JQp`}Iab&Aʩ:m"+J>#6sr-+!/ 1R9^kGncYUoб9sq^a%Ƶ0&rJaz9F1aCgcZP"Ao'F1]%;ɚ+ k}?[m˴|n|V&oD,3F~lF-CDL `-v3#Hz|nxg̔ ,٠KkhMYJ_\+ЛvxcMM3zYO҆M89l_[E([9,Dp۸WsoC!:Yb$j3lUM0! =*KМ$͈@MErK+լ m=H/M^һ;rqx1m큊p^Ƣg 4;1.p|1adf\{C{Qk?.T٨"<D+t'4a #y*_: mr^Nma(!%_*˯˻[+`.!r^>O{Akƃ@V|`gXϫޟg@<4t)p~Z'yw9ld`w@U+b'_M#rEò*ob O)2;np[(D{һC[YWpV DSc+)JrӛeR.WN(yHμ(~1@h 7J6!ϸX3Hp!?(l'luzW}7o!40l7WL(&A  !G@RIBQe! 'UR_5`))QMJlߙZkDH"㣳ffD8Ҕu kke/P;\ZpSVIUֿVha endstream endobj 2660 0 obj << /Length 1969 /Filter /FlateDecode >> stream xYKoFW zhHm"@K+D|q~}gv4IQ4 r8;;;;oV|%,%*- ^z~/%Agu_b5{=ߦڔs_JRWDxm֦4}qx!_vˢ[S qGHX̸d cŸT]ӊ)1u(:VvYqiY:=8fI4,wSo EӜV,ZM hj'9s xL?VB{OKu@D3:Z]1DSxb$񩽋0dvUerJ&NQ,#7P$]+-3 to*MP,᭐I OyΠNQ,JopӔisjek9;}8סt+#,T4as !b&L(AQ;vY`c|OBA5tmK9|6W-6lI`> stream xXo7 ~_EER@"{ـöe q2$;?xO$ŏQ΅(jX!Svx(x&. Y](AEJݍB%Z@PTCˣPCw`K@m5T%SqX$u k\`A)0VU!+j՝ntΆ5WkuOM]g]B gW0'U8*X1;'I %Ҫ+c 9e\66h/8'ck`*n c27k)&"5ȬE6a KࢾsFQ1V?,r*Zujl)!@!OF gD#A<`E'Qetk%UK(n9 O<QA@&-%`Ha=)(HL0L=kC{TߪczRW'cH L4$VQTФJ(yW(.]fJ:7Hhy>Db˟CX>_zq؄ ՞-D&ԪE6h˱KupvuX l7WO]O~}e;|=[{2^O?mV hCqx<_AE=QDNo(a{J^wO Qf|3|ކ\uqiX,;j{ |ss|nvMr\qxubyǠj?#7003TGÊTYSNN F|@ ߘaN~CzBЧt9 mE844J4(&L"D|B')hH5E+bs @,2zy7^xK+1cFpZ@vp|^j5l~__O/WtmomҢ2&v])4M-Ÿ)UG.2|'tm~W4=HId|,Of#$>i1C'2$)w9+=NS B"ilh,'X0=O +?sGbäSHv{sH'z<SZ&3i|PF.2ڛ0~\_d endstream endobj 2663 0 obj << /Length 1974 /Filter /FlateDecode >> stream xYo6_@̊}hf" AX,z,xԗM7Na0y/x, g,r,Ts;ϸWϞ_(5!ŒϮnƬV:6/Ab"z./DUbgo=' 3.R)KkFˈDp]ce'E,fL)2e!-׿4 xw^A 4uU8D4f U1nc쌸~ -7%25;$d2ea;w} .Fq'Ą<,l%_mK}˜Yqx d=No!ӠX IRDA\)2 64z\elw[Yf}-VC1T%'8f[˲ApnД^EBmۆ&Hێ#"B0)Y yN`*bQ1\,K"H"YkՑȦU;_rGI_X 2/2=~r`!hd0d<ʦswteSLlz:2pJ/ KvN.^덾-B.h`߇y*3@qᜯO,~d* YS.Ou{04?p:#v0LCMϜV"L]K$iTB$,' {];${@n# h(K]z7)aG N  o݄ k2418Pobs< 1pE ᜀe))jopKy`軾K-ݖ^*fItf5yj_mhkp֑D0Gx쳉"+ k}v$?0“P!Hi8d?ySKOxk.j-㌅T ?wVg"q[qS"`!tءp'sciAY/v(3&hD;IHc<]z¤_A&1H R&m59_qdK .GyU==c0}z掃~k+=<Dt1p0, v̙.2KoQ]wFg.I }.9:ّ=#L Be.&}kkZk݆1TmAtL[H!,=,tgQFֶ)uy,o1 0&: qSك>,H[ H|ã LQ(Oas8""t<2H%%|HYi٥^ey9X֫OܶP@Moa}G N7no K4W5!<>}&ÕdA69]LoiWv0iȉf}^dus7annZ@trKn$^UAUOe" HU}$\~մ+MYj"Wf7Yt@<=ZBnx߈BI~0/3[ ?a7hc^œX_Sjml\$]M :Dv?Iےn5x1Kd64&l| GEߊݧF[iz"Ͱ W-w:w7m}ZK)^g5gNmT0"Cw=u>1 endstream endobj 2668 0 obj << /Length 1720 /Filter /FlateDecode >> stream xXKo6WQ XHUhhZF.Iл\[v_wC0"3  V1U$T6Ylf .^1+`8쇗BXqV]ˍt$ 0ME4qwFC3YpٯM3:W,bge2X:HPd<U5 UרZDʨW!Q" R=ܴ hSYTqShw$ߎUͥ@%3'"dK06Ed-ib2ibKo|I Ť`9K=% $#WzhM¤A&"NHPZ]kKQr2pk춍~ʆ&Mk=ؼM@aꦾxlՠ4áƯ(r"?YP4iIk Ԛ t7lMdiakʟCZ>#!Ɵ&7o2UYB ֍ʶy[!`WeC#! EoHpdQ/us;ICji4ɉV{ dVfj&Opz׊`;Y*/-A/olπU6- ɳ⛣ƳP;Wu7zi6`l6·r*ʜrRpV,>b?<*XD<۟qߨ+ˤWGoMWJ6wZ̸2euU(\r}#yQ<'d$߇ ^ +sZ[-*m#c݂EHKH$b Lij- :X*ʼqe\' >K4b`H1R8tVw&fWUqplt60" LTZm6-x0+1mpg@4tN3Z:-rrG?(uOAow0p",R',S7@)".r?Jfh*q[Sz@ھÂ(]*A];lIHmIY/;~pMq# W%,g,}~FBV.jMYǜ#p:MqTSy/|$c7ђ,,2@ؓބeKɡ":x醴ɳ mgqq'/DTȃ/n}m*z)7>ݽ 5G~TշCV[A?F T endstream endobj 2671 0 obj << /Length 1368 /Filter /FlateDecode >> stream xWo6_a '[iY}j@KtU n~w<ʖ Dt?,,"Vܜ~;>ٯdV-VCUjZ܏/~'"˕leSʹf< 4Z=^ޙCGG,ui3d]Bds?IC,kխY%A3N}Xg3?L@ ju{:I"{aDkyT<,CClC۶zWUIKR7de);g4Z僟, q=ae8n+ȶT&DTmi2i0`+[0%cir~ JWX;ҡжGeXa=L8hQ[ טq۩fmo [zsqSҀ=!zז=? +v ?RndFkTK[TK9)^cW3 DnYVc/ ukvߦ1lix0+M3)jQЋo?,Kk@/RbUkL\.|yO{QruT ,F`N= nn!M<1oE'f:%֍ z?AGy6H.C,#4EezGhoe?A_htyǂk:mD,bd7ao`HlT-`?U.kK%.xY\4Իi* kOä`Pc4ŽFYhrlXsR;6ampua%|/!N=vfeF|VPL1V_$sp0h8Y%R0n{nhmES$Zוl` ,Nʛ!Δt<{Fx݅[\IRFFѱ,>n`㸺gg_& endstream endobj 2674 0 obj << /Length 1336 /Filter /FlateDecode >> stream xڕW[o6~ϯy8RwC7:i#SYr%W<5"Dw.EY "#[jjuk|0:ΓgA`1J0kZ,i7fyv|4s|?eb%*Qb O/u|]Z#C'w1qIok773 ECly.`=r\42:?\5 \4Y C$A* Nr۠pѰezt[LIV# ((("4,b3o7?سKJ~gp`yZ3 *%ggjcP:䦑e1.pm \hK3L[z3Y>x4+V7:mm;%>XAGJpoY)jr0Lډ^*TM5 `d"WeΫ,k.d*),<]4M ,zʽId̮ @-m%Dm8ˢstyf}a/9nj̇E]?,{<.i<,r[ j;54YņWM۫G,jQ}75) yǵuc7ZF޽׹pZ˃Yxe*'QVe^T(h)3'7hj:/ NsU1 h%k&f_iB r]gl֚7ߪ5WJ{؃d|Iw^U|iN{:|pkbJ3s~ rB$W$'qʟӲjT:QF_&9Sd\x{xFh$3"oupSCt|[XV8fC 3~?1|6wc/!ݏ)ju}י^ =~wet8fxʤӦ TLHڔ'ޡ⨵QPR~$ic2=jzGʂS&3&Z7o$ aQ?~E%3+A endstream endobj 2677 0 obj << /Length 1246 /Filter /FlateDecode >> stream xڝWo6~_at%QRk"V1lh鈘,iX?;e[yCD~}I|Y,N'I횇 -?NE@,d:t5_NzrY[e~E^z6Xxo?]RF 5$.#st!:> IƌG1Aa «+ciesi>WŒ4r $IshWڹ D}M}#om٦oT幕~>My1v]Ts=rkV̫'sxOUebz/>L HH3&lG |ROY`?IB79[J+e,EFܻ"A"ۯVZMټL-yHgawq.Pr ƃWrI!Y"Kp< }v ~3>!-`wՏ F,jE7PWKU>\hZBT`Tlƒt|Bos,FyKnƒ/i,BB&\+lO[ڨ6NC{N*3(ڱ"F&NK:jXP~3%i-6RMeff.$=y}p X꒾$4F"L$m,,7C٣+ǪX!* }a,IѠgvͰ;T$,6F6n Sbcϯdk:&XU8#, <3q00&]4'!kQb8wlٹn/b3;4"}UND/Tǣ<n%a:ɵQψF؎OxT19g$BgdR.b/?}_pvj E<]pCh݌f,̀IE۵2$ΧO\F.Zg,vc:&{ J| S6wdѧ. p0}ҋhPUn*ZIi\Sn,ѥdQmh"PQoo_Qk]bnNr?;$XGNH~,}1N<};wc?,x]D oќƨQa&Q~O18 G;W,LF&aaE`8] hoys1g endstream endobj 2680 0 obj << /Length 1499 /Filter /FlateDecode >> stream xڕW[o6~ϯ02 {=$MR@.և(ȢKщP(EIpR,Hr]5^| {G{Ndpr}u]MzlQyljw 7.-W)ԧY^M_;L(}#8C]G& h1 !2Ļ8xRi\9k=.$*\sX iqVŎK +ޙskl .61)p4&OnxѸ g; |ԢYL;.k"t3͖[SX2$yaے 5ViTѷۍϢx|UזL.y >2aH$XțVN6MIAOEU.6(l]L Bﶤ ͸Z,# |z鯉x4@Q$E1DN(1 #E;'Ӭ嚘4(V(o"೑1 JCїιCܫHju"d+}20H;"Õ}\I!ȍlX'$ $?BRq)=bwޡY[?seXE4BuǼ-XZ& 2vު40BFx i!3 k΅pCpHC /8H,yvw#OE n\^|6Ҁp|= HM8#07Wi?,H.`@4WzIK4{.}MWDrZŷ _7ȩDߨǟtcNg7i&rSP`J^d5P<yPVsr%W/V[f.rDX7n$ǎZ Ai]3ܱ iF%>g |P3Lk,J#eVV Rsєn ܄א<4[aupMB V!kCk8c#:&kZ&kޟWbi- 5g]+&Џ 8ago`}Cަz&9>)Fl l|qG%uǑw=Hm .yBdX*^TCmVX<ԓ7SrpH]z;ZAt@Y1C`pEu`"?(kk("s.>QJ /XeM/qBxfe _ќdf4GMw!B{$9a&RQt3\<`n37=EY]̯;Zo[mbnG[1%YW;0x`Y L]w!}=Ojg^)';65pke[ JdJ3E$пWu(nX;b1?! endstream endobj 2683 0 obj << /Length 1123 /Filter /FlateDecode >> stream xVo6~_!`/Pq"%QR=K@,1P m10mk%yxTcgjCw<$ǃ* 4eUVEN* I_|:*x0_Zm8MӰ,tpnXvA{!BL[8?t f(|=pi 4@[pFi mJnRx # endstream endobj 2687 0 obj << /Length 1418 /Filter /FlateDecode >> stream xڭWQo6~ϯ 9Qd-igBeɕ4Ax-yʒuE:_Jɳ(VJ&7'M@qӜ-O~~Ǟxd[^M-s#;]э?R?s}]? "X'30|"84CtB<4BFEn6Nw >!)h6:trɹM]ᔙ5}4njus1S+>vZ`JL x,bqǂmprg$X3aL@ @oҮm ,Dqw`}\h;+ʮwڬ]|" +:/cݙ ՎGx紫?q"N{7EUaNp +A{nOoBur=%l`C >[Dհ=|dc!p턢V16qRiC@ʀ]zI&_@mMG`Ӫ'ؐ!up˶صO 71oX)S7Àڽ1 ֕ EP)RGd˼/Gq" Ę]Tyv_9Gr:2ػ#P>#$qЃcUfϛBEL3vql~'/:(Kev(P5dَu{NNfoε 'o ukpxMUr'AG8drT:ǘrcav{f}:ϊz2NE(x 8<H_/ړkg.9Y|.Ҍ'AO/ߟ뢥&[Qi;9hb4n`[uS;F8bPdHt9y.PQg@0À\-]kyA>տoj endstream endobj 2691 0 obj << /Length 1464 /Filter /FlateDecode >> stream xڭWmo6_a`@A-z it CBQR`~:ґxȻ܉M\IN"iǓUqvOz#f9|<4q6YU-n#TSsN9tT\ɩE,pIN./N; 8؛0N]1x>eGsYTmԦ_."r"5bFh'YgHr4[Rwz>{6M|RB4D3>UrUt mPaw GDR!PɈD1sNa xr!g?j<{Dߦ^DSEl ]Z w8ˍvU# P:1%Ҩ\.dy.KVFNzY)SM&xyxo8^ W%!>>ҩY?McN,T ķGalF$} )swH6Z xά3 uU9 n֨*uoH.дV"W= QzUSY:s>YYQd; U>}RLwn,&ݚuЛ͆FA8t>.+Klw:L,4؅\@ppf}?+uo*TTXS|cC|s>sFI2,_PY^ͯQ|WiiPKUi%mŏ C7Bِ6j D\ˆ&1hD {Bh2QaBX~ .~+@ʊnNc!egI֫,xǧ49cv,g@o2Mz-$N au]5,;x¬4@g+:('}w+1$?SyPHQJ݈ou+HuIi/QPƂ;lz؏SB:҆6?ȴQ&Fh-d8q@c?wX9LSBkV1} 7vg> stream xVMo6WE,D}$:A #qwK u__~I+QCrfxrQ8 ~Yr~r 'o6g?#C0Gf;ڔޭvO; ^aqögm@?E׳`2@.bf H  B`_~+%T0 q q" uTV#{j"$*rBFh/%S7LJUY* _ -F9QD32V h댵]W;ZUBR^B/co19p(oR(=K)l0i0M2Ҥ _|%4@: UP\ƹ%s{*miX1jW=+x_YUᚪiEc(]+>N0CeNӬ,Pd5I$nUbr28QhZ1L!VNp,C_1pX} X=(|6$6h4{VST|I LhUcu-A߫=ej0Qϝsvq)^UA+G 8 $Qf ṖVw䴐՟,64 `2GD<⌚oꑘq\;u/͜n. C7aI\+k^5~Lks5I]d>FWs)H8Quv={4R{[f\8`;-~9Vӯ>DnNfٕ֡ ):d%K N{rЏ@KJÈO)|ձ2jio톗CmF|?ME{vj ȻTp{^*C[hmLNKzuib G4EoM' endstream endobj 2697 0 obj << /Length 1524 /Filter /FlateDecode >> stream xڽWo6_aIbH}tC4zbŐAh[-yx,ʒŏw?b'F1b3nGՈ7 '7IG#Yc1/ֻX'ڔ^ahXdxvV'5~454,ZZ| N}Q 4Bl5 5'8d$ǑOyĶ)}}%+CŒ =*7p:^ mifje KQnU'cPV$C@|hB,EHዺpb=f#3vG<؅]UKVeY ZmؐM:gu+[+K4)EYdqh +UMؼzMɟݚdKڗfkoy6I[q*7K*ğb'  э!6͈hP1l: b  Nu5mQj'4ϳԑ13rIp<6@)FESxN> :!,)Fp]^P4ت,;0y8bYהCLѪ8sF_5jhX9?t}&+Iʓ w;D7%7M4FcfIqe)-!Dސh97vzk)4[Eg khv6l;CiwZТF4 ttUȘ̊}LěZ,PzSFˠI_8d4-w3u܋P2)[?6,{cWIm^S`cfMP p}+ȱm)BA}&s- deTY)6yj̴v ;Vpı 2'ENax]mh9X=D E7k9RW];"L+`7e;9gCX7t}d%I$~C>/TN M&9s}b@r=tbl+1u : l̞M5&S1D?mfqK󾿱,Rl)T~M8&X~7dvt.*(KwMͶkx׾^^|( p'><ϓrן&dVϒћ%bZ\7murW5c\QrnH endstream endobj 2700 0 obj << /Length 1401 /Filter /FlateDecode >> stream xڍWmo6_ad_d DÀM3dh! P m?02mDcExk%JW)IǬLI՜jZy= g'~J Y|r8Uu7| ^J3q/$I_V.m%(i_go6(Ip]MxB8/X1Ɋ8!X[4p,c~قa 4Vvm*ηsZMFnk$mD;v<>QvIStI6>G,*8[}@oDr_LD) VH*5.:+ꬪFTk ZTVo.o^<:-xs_ 1Ih^ {IgOUTwIҮ̿,”,4rpzIyxl7AeTƊȋt! ض}t fM*< \0?9^-Mѕ,6È0 4En:7Xu[ñ SQupn6 1NTRM#XMPp1Vj9eN7h ]ۮ^^zzJx3.>BapH(+G嵐 }Dqt#v8)-; endstream endobj 2704 0 obj << /Length 1484 /Filter /FlateDecode >> stream xڕWK8 W4K~n]}I(GI-Cv%EʼngXնpH&CR^^˪){JEy>IDNC*ucPd:tٳcLE~S)ÚQ䀘"X< 9?_?Mץ\Lu k;eW) RkY8!M` ht H;+d e,_ <RqVWӈ\'^ˢ U3.믿 )`,OA/c 끥9⨏l!+c&`:ӋnV( CZ )-2/TY߹l&\S†Jb8Cc) [N(Q\d_ UXEXBҚv/T?c}ڇ[Ɩ+N5\qiz̄ku;-u@r`bn,łe R[hG F}")cL62wpv7J,A=5P ޷pGtfДE5^lot])U;Jtg_ GGyO?"KXF%H55VXhmdFH yw.nOgy6>m=/> stream xڕnF_!xPEĆ$Xy=3xL)ZS9L6huuuUu3YžAr{s; F3}|:79U~66+>U>scaN n$S J9CoEK\5[PVUwß('| 9W ##vT%!;` *9t]*z-S)|Cv9b8L{!nXڷ+Ҧ)퉚r3HJ[) bU;$۶۵n73ؿ ||L2;usc S0lV.8k7y5Sl8pu&ܣ!ؖvɱ1>I dC-ug@ؓpPc2qyuxa3f&e%o,%{Shu3lQeQ@lX~T#d=cLޕu !1p][3%cVNo1˸k9_/We[ەw0r2TίA @h2oIA҆NxZ=Z!AP܈тyC Z#a_op[ 8ۮ=#S={1e(D w@9/{&LlE따eiO=HE\EaLf#wS!&'f8, bT]Щ|ܐSaP"֞y "7#>"NL󡕚4k6= ݹ}lW*N ~ݶUCDU q;?ɢB,Y8m۲cRTm2i>ahbF _ 0weS4XecQ0QΏ2vb}G䜧wPˢܜs<0&omŝV!@dBp#< # Sl @*Ni+/Lvp˫> '˘AX1 ` KHX3 (@mrp#ƫR*(#,VM&p}(힏S u4PԦCWe$iJ^5nz_/1("~Cǧ>% `&ֽ{k;2x2`\c#.m '{A<>#D|uz'#\2Pn“ `pro Vŏ4 =y߼60C,?~jv'H@jz[ڣQu,vR6 Zg0?1~iRhE?~w"I.-B9\zλIf* &fH aS|!|%:+X/O"S7=,v4p &'c `B,~wW!aKư /d@7;y炕麶c5TVb̢u.LO>pjݬx`A~߽~mgf6MBC'.vj@ .=> ~b AP?~9 F=?lSnlDHxqTcsb ; qbXM @OM*K.CD̏ƥ1Y7Kk B%#SRW{^>\ejp endstream endobj 2713 0 obj << /Length 1385 /Filter /FlateDecode >> stream xڵWmo8_"݉cL^_J=UU, /[6]ݟ1cX4_NU gϼ,(c^B8 I"U'7|xsœ^D$ SSIF C_=YBH_oQA_Vי^geM[wEӛ7ݔNV<7nu+Mu)08!q.a$jZDzf'y9"%wc*Hx$^%Rf DSx2FlP6/amtwvA5 n-isRp y:/4X(n)ДJ o*9v0d)>܎]܌bR@H8̷qDBxOʄ("Q`dc=1w䦱HITNrl˦|{] [P"ۓ!^L24F?Kr):BŎj-)ʀ \_@ Vߡ]Zc-;nvu~նr qoЬJ>UYt>6$;PI ln%U!}+;sK+Yt@ cI4L 1j%tUIh,w <6G!klc$4HwI().Μ~ӉX6_d;4=+ˠwmL(R$ `+e|&AI듿t_'T@ ؈!/Y R`AHߔGhG"CV_hE BHɱ8.nRj\FA}.Sp*&Tćާr<9x88 Ä/=Lx^lsԜڵ]d6TsZ縯ˊ;_d(&`Aѿ>OS cۦB9S]*@'pC_$m{'z @A`>c)َ5@/pW4Ԡ_)`>rf!'|+.UZ@ڀ|BB؛ff16 6ʒXWyaɷ0L`u{D]duQc_CȨ"BX#t Q(_:-]#Φ}؟Nlu?>[rhxHIHqd!y.،'{-x]T we ,-}6iޣ>bd endstream endobj 2718 0 obj << /Length 1373 /Filter /FlateDecode >> stream xڽWmo6_!d #J^R X$]&bo#ѶPIT)/wGRu:lEEǻ.:$aH(u׻jj<F9'QgZ+ɚP3/ C7=yQgfF,M.f^PI2{x~pdA@p(4phH|giDht) KMgnM N sD,r 4/sإJJ2 *|sXnzk(P?~sGb +HfkG"F9pC5ynfA~2K4."Lt*۾͔u K8!.۞(`gnQe2_ ~dJhp#K3ƌ3x6?ڏR*3Leez[%{Qj'Â&`\{ (e+UGPF2$Bx xIŔ̦ly/VR9t1\Vl 5{7txD,MCL{%d&Mϝ_?4F?5WtchZ PϡYi B4]ڇRnDȮ6k4*S8cD׍Fū根ܨ\<͡eQ Ǒ{I`d$ӲUglrfM>#YFx\Y56=3qFHP,~ޠؼJ.+ :L]%w`1)dc++ "3܉.[+eȻpGڢGؽ.( ~g706qC2_>"lD)_0I?g)?o1 y-$ ;QޛiTu4$ &c?˳'fz-կ̖ *(nZkB&l+iGf~pX؄]CίE]Af C5J":an{d)%oaF a@e@ N%WkW 8`;ѷ23 B9b%T_-耄D⡽ll;7#Xi9[x6V\6@f>G|%CeWSO3Յp5D$])uD=9݈-ϪJx(+lc-jKE_XכlRrBt?U-UnSC4Wqazv.<$p `t@\mQ㰊tu' /y_7|ݐ\%i endstream endobj 2721 0 obj << /Length 1650 /Filter /FlateDecode >> stream xڝW_o8 ^`,{ڴ[{iz/ppm1X9YNo(;I(")I<(FI,LGȳ\}?"bv~$';GϢh$]=!^q(`O4yhK4@pp_sx>fnk5^X_-%cV:.^/}j:NwOOD ī7~ L^j iJ )hD؄s6-qL.q/7T`.sN-eշ9`gMlM5$#썦x&68,GV endstream endobj 2724 0 obj << /Length 1497 /Filter /FlateDecode >> stream xWmo6_at_d D0[[Ѭvm?se~w<ʶ\'}X'H>w܋(>*QǬLQ>ܪ z!({of'?MX|4?jV> ygqq$ipvuI ԍ289O /_gO&흩/ߡ+Ĉ,xH8KV{lQ,G!YǤ.JNjIj%.tGҍi$}ƒ`(2GC< z^N`3j4ݢ}-=iCۆ i="lॷ@65 PUP!X壌sIP/ݜv,"4GpL4gÕ| 戠֝/IOS+r]tB8+T aDDۍQc&RƣWi,Ge7|> aT ބ 8UBtde"`R -N;g~\[M{ vso<.m-d">X 3g蝡ir[}DDieMRs>uCr9yaL%FrB#8vu /IƃI ByY:3?rMd(4å=UV@iOp$J::G 9<f̹nAۿY! !1LnG3<1cKKFMn_(:%h `/Zb^w;-ڕsQ?5u]kkU2]Gz!gt+BXKaBp:e;/2U9h,>9#ay*=.uъy4r[s,r;I}-*U{9FGjiӖ8TTO%\_\ɱ@X};{Mr2g endstream endobj 2727 0 obj << /Length 1115 /Filter /FlateDecode >> stream xڍVmo6_!d_$ bIT~hפkfYҠ`-D/.Eɾ쯏)Y-(0{xqG; @IȜeq[X;pX?_97QgB-Re÷As}wn`%x> {w'>gD+i#v:$@Xa91  BCjW ͒fKO%ܷ旼ϳzR.y ]4sY-pYc*n>Q.6`+ri0H\w.YmNES{sA$-B7ֺIc/r0C8LHtB(aj:C:ݶ| g(R2JhQeG̒ى]K,eaZXsqVmQۜ/aJlIGPTȅE#,4ϧ@rHd2%/kQmA j'VJM$xr}sZ>݊l :BttGI8Z@8to >($ [x"UVS2)J^ )y:&-a eŘC9}Y u?S#dBCo 2{Gc Q4P1=E+ͪbm@QDc3w;l/ 7M BDm uWoнq[yCf12UQuZv@&jRDjW E-O Kn|{}[eBe=u0 "ʬ*T7MneWf}+$HOm~i􈛚sOrhʢw;ݡ&De?@#o tXBWU %ŭ׺6;3Q_U83ߡWh~%[ E&^ڙ j}MtGg<P>!SD[b`l_J'fbUVFśW0/Uda5v"?c^_d2ۼaő$!Cɓ7(`fU@K1Z[X9۔ُFvw֛'aW\BڮG[#̧!F,;L̡x8o6W˼\@ֿ݇ endstream endobj 2731 0 obj << /Length 1224 /Filter /FlateDecode >> stream xڽWKo6W,܋I3FNlrHsJܕPI(C e;°I ~E-JI9S]ӯ's=|:ysE #XԪX|uޗS\.]J]a9ǃO|%ostď<'V\: N4+~JEħ!xꪭ L#BoN,ԹkX;Cy~ypeԹ@Z'SZ0L6ښJ־O[$f`iBhLqv]]Y1U{8'x,47CGFe,X5`0P=k[U*K ۈ r~E/vUW[_1?!ˇr]?íC[T:UiUc9# =$qZ{F:91h nurέ˛(M-Ear07 %Ul gÒא{6,fof+kH?4 Jυ3.A!$+&v?=ױҿskӗpZsvOIMEU>|jP&fW#6EcDID>Lj򞫹[ tP5ޣ<%iT'j I^9E]G_.-FU>y(! Obԕio> stream xYKo7WҢ=KY8) $@`@[#Y$FeG\ z$U6ˏ3of@ʨIlJAYQ6)AGe!E*,BT'ha} n6"8t[ YFJFe9e y %&gfڵ ) [3bg%E-;؆u>B";tFآ240 (J Sі/(6[e$0`9 `/<:1 VLRrCGr Eq0edaf7XBF=" C88EL p2` rd8% L.ڒr2%HV9b!5 #!3 -G%$X WFHBd'#@gH-U/tZH%Q,,iV0 ̃2%z P$8H6'dCL b`8 I$I$KA gm9mPd bق̈ⳓdHٮ#2ɠz~Vu=~nz\Hu0 lPՋf5ՋuŖoqs.T?X^dQD]z8SogL^~ 5݊ ]:!X[-eVs-)hT'':^5T*׬J Շ.qcJcDEWZ]=7z.'zQ,'dd8 O$cjv sUHt}x+:#*˴G,1v5hzkn1 )a)o{<s:/IA?Ї84mYξMtД)i 0QqI} ݡ)91`1WfOe@g#v!mξ{;6wi:mb}Ez|μ#LwepyJm\;_].W?w_~Yr9޽{`Vt8їE=j57pUt|=V/Ο<n09@I1u;LWMՖ;|’,,-=9hQ|gh:9gA Tn+3)/ChƷ_yeyI'QP8rj+k}Uf;bt_7o겺7>54Wζ b}k掠 *[[#H1.[jWӫ&կY5nӺ^TpYލi:6e-sڻGzyd;v=sޡb}D0B{zH/1uۼ(_f6i=NgxfpY?N&c9$흦LqUj:zUQ[6d:R6얲>|ćH˼?9di X>Hhs@hLcd1_n#>{Q"|>|n81?pGN}ۿ$ay߇O endstream endobj 2734 0 obj << /Length 1277 /Filter /FlateDecode >> stream xڝWn6}WCe`Ŋk"ƛ"E7i.bhPJ#[rd' j49sBNIL"#OqbQԳAi~tId웚g/ՊՒ7S<+~?}?.1{ /S>݈ӯ>w>}%8 ]NGQx>o~ @4", [uI;+3#EƞհI䥑MuB "LS&˒magj PkFK@*xB_Fx 1 %D;rt=菆 X,BaV|cL>}?p#AupO3,!uIRW5 0B׼L } zI&J"M95s*$rx5 c<p1n?yUƏ]{_ 4a"/..x5kz^UsP.V&432/%B endstream endobj 2739 0 obj << /Length 1539 /Filter /FlateDecode >> stream xڍWYo8~ϯ0B*Vuvin["bA[-TKRiwCH77'IMr!XE{9^Nhq|!0{fg/ޤGJ>U/\["(^N$IOpnVBM8iburՙ"p"8/X1Ɋq~Р>4l9˄ 7BZnfZ$s&Ks".o/~9}s (pir>AHU)Z-2;:@i vE,3tԲ5nj%e6br'aExj@ A{u [NCTCvz' 6̯B11 9px^lRic|#>ͷ3R)EӠerl Fꈕcee~L]<0B$W@}3/^:% ]7pd< XcMmVVe-gɘ|:m5E2Mo[ZeN}}NgF=C4Ĥ7b}Kn|-+ҥ.ֺFXXqhޱ8iR(} 3 NL H MX$ˍ^P}PvEyT}% LEK&Ym4>_>,:+lJƨ1|hGX- .Xw` u*nvnPQWՓ e^[lO Ф``';j(<[[&iQwt=-c0ٗ}72FJ{}UaF KoBߎczx;܀ӵ%!<΢'QCzf{C5aUá*"I%x]f+Dps]@GYftB{E'ai\ֱșC-4 ΂PQ[ vyLGL~Ƹ{‡Z` zTc2\X+uF 8KmOIxV]${)>[ŧ: t7-([l>dz }sR*JP[{" uHP-l5nEҏsU+ `앗OWUmjy@ąj\7djL}mSV͞.L\gf݀Kx3ah#BUW5}e,> stream xڥXo8 _"!mv/:jbc6(QNE  DMR#EM(IF'I,L'Zj s|>0=γSM%dWXN~xkhN taop+d+\N}zi8r3֥|BXY#>\%<ʑ<lf%uI'Wg[%Qixm!ō98`؎1 1IK}J{B"x{i?&a}nE.rQ"Dz@t16 cudÔוYZ(r'Ѡ`5ڢ7[0~DžavBJy\CwD{ <~1NPq'!L%jgVF(޵q\œ2.(9\BE RCVAF1n~ߕt>fmw.sGնՕٗw^W* -Υ\BGq$)yg;I<_j2,A AFH*ϧ'W8f$/bf~X7-YMr j̡QsGM]J9~%B zUnqxB4LUbSF[Wᦓ*:U<@$di? h3*g1jR"I5 ֮0^~ |QF(ܟa(WG5T:ė˵Nhz )5JdBZ&F.cD4g,,yh&{`X  z3+~RAD; s/Ŧ)QxJ,;}Y51UIM@gpu :Ptmoŷo8w .GSvLvL\v9sTDpmv[+fޔČr-(W QJ8:O@:IڍxP@84W'XRMk׮PD 1HEܚթph;xŴo\z&;lo;r ? HG!ذi$x>/ۢy"Z9<8H+K[-qnK5XmgfEW8:ڶr#sS NVE[o6@K6OIGm 㭎 =9iAncYm9m׏x ܅/ﭏ#xf`@7]}EJl_-TFfgF{ǚ.}F5I5 ZڢlelQ-3JfHZFG^8PUjFb _o@1*KF_K8:Ti+Ta\ȬB׺8Hz݇1i.% _. ĂYn`h޹Wbz^wr t*pqQVgՕ}+Ba endstream endobj 2749 0 obj << /Length 1185 /Filter /FlateDecode >> stream xWKo6W2JCI-JKVCȻڇE H y}Y?t4HβYќvWgrur>#_goxF9-Ʀ^E}bb7ăP-S^?/;ZDpF+tY8 AGiFY1B#x63ؙ0#i|$P_RW=ע'7\5 S?!0\=Ez|{E[^y ;pqJb'JH 23Nix)xlEb#BS=e W~F `$bLmH1A2~. ಔ,t>qt ?HG(p#Fy4NTp^ ](eNp!,%jn`y |!ó~.ת,L^^ZpLmbb8}-TuZR icD7u l1J*@pZh>MW#d {N_s4akǢMr_m+KوVCrla@EI$+}yIljǕz[זTM Mxxݡz*gKBSȠLB$۪BNػo`X@n<Đ(~aj<.z`zxr2F{rT%*_,NjE'Y2ι>(9uҲ7CP]ZV#J;Nu;r3"}[v .G!9_4;i%ОL^o E3XB\l1 B}]BݭnzX2o3FłzNqRu9GN p߮EA {V!K7姀2N(=0˖F"퇳T۵e#[{5jܡz4=Lʙp`>qU*n> stream xڕWn8+PqEJ=4Ͷ۴N:=,ڢ`d&*%mw9v ^(r@W X : VLT3pz!T W>e*XnIGױF!4+OvjWR2ʔSO4zo٪E w 2%G@[n+ DYFu~Y@fLm׶;3`kPVfNWW}='Fk0R[LMP97`C2+׺r?fU(,ZA 0D1ΟOE21%d<kv 4Sy4g$ںg G;HہʈTV55=qP"ZʼnG+fX23eft{PFxk"x;}b5U#"vc}p fدP?k!T(&`c7dE`1"z¥mVz> stream xڵV[o6~ϯ 8uɰdi mSƆ"QY2(:PTux.x> ?q A$IUO0:|%ebZ CWEtWn2a$ Y%$qZ*JϘI?bJΏLY~]&h iyBH0WzSŅbbxN"T!G袴e, cp T}77g|lU?2ieZYFv}g˥Ϩߛʖ ɌJWHi^N9}y]M*;ۘ2< `:/x"Ӕ{gnU9Y|F)$h!%\x}Wf\Ro>!4RPwwhOt.(̓S!d:WRB%qfC"cqm3L:"dBv۸>)retք5nM eZնBkTiwZ v4p>`^UX@5f]ک cNuSvA̠/6yrUgD - sATw`I]_E?$6-#t-1vk*u/.TYק.JA^Sp$gE) ^Xdd 5e-{`?uL%>,Mƕwnv0 dHT6_k,p@ ݮ5K(SRNaSK?x_݉OwowJ>%Őp!%|υ I~.=Ԃ7eɌg4g;oIBީt[k쯺VOnk$Mg|;Z #p"nqy~ .ܑo wB'0i  }^?ѷ}Vc]K1q&_pgZB]~crT[^F0NC)Iit/`@Y>CKJ}\fU2)QB"f+E1 ]F-ڔլ@_qo{tIGc@ pD">[y endstream endobj 2761 0 obj << /Length 1444 /Filter /FlateDecode >> stream xڭWYo8~ϯ0@W"Din&- Efbnuմ?CȮzxolB&)A@07/P,fBL%)Mdq7dXN>x/VZfA%ϧ~ o~uN61KūF@ ECKH2 Do:+ީ^ɻ战D $GJ|}k;gL^U沚Ӫ89[(Sp'Jx-_jG;-Ʊ!b{etJN G 2: ؅HX {:uMJ^i~>eMR$QyK\fe1[f:kngjlvlc 0S6-A!-X"+򠾨\̜A6Q=,&I!sծdcb̄wMJ[?RAYD2 [$uؔ4iZ RʬYJSp5-dUg.UuSly ʃt )M+ǑwU b{l7b^YVڅÁũϒ5ރt;NSx !nhTn;ikv,3rrE;gez*i۰TP SAOetQ@MgP q7W$~l(݁ր aEֶ#ea ۬ZD"bUnᰧ4襠~HAv xLNs|@{o/:n! $ē |~3 b>s7R:ݎCG(H`. ky4ʉĭ+rzgWQ`-m_fz|1B+L&N:0A osby)( GanK`?b(H])'{V^c'DRD~P,ޞ}۫ڠ1$r]S+8&pAFӷ4q"- NzUې/?!a$[}zοuHz?-":T,OCӛ|:p+ |raq3P[Bx _^%<ǟ6oBI ,4J͠7X]k]bVuX3`Tܡ=Qy{~XA0!+T~ϥ xbR| :82!f˥;pҡ h؆97,:t5^?X!ޙg!"bמwwr4}iyQfUh3 ne[smQL`IL(L¹q47,2HU8%ہ3W5hBD6\%Y} O")m’ǑywPp3W\^ endstream endobj 2764 0 obj << /Length 1181 /Filter /FlateDecode >> stream xW[o6~ϯ0#ER2]AdP}d&"[D wxm%01C|ЈFrpeT.mo#/\|D^ɞBD4_5GO 6'q¹@~ZVJ'iNA.f["Mg5iD&ϢTbecʸxZkYLL*q^QBs1M /揺xUWռ^4ÌwċWMn7A(3_/K7&9˰)}t>x,V] Ky@a 駩Q*}~fR_ "u+?l̎ܝZ*0%Y×}|,?t̕S@`W~ú3g]U?[}(7OBF#C}Ybr֦ wԵj;fa6B|3J`}Zd$'ィ]*3V*V`!ېCN\0l1.E-t )[~驥?WِiiK}@nk TVz%G`tWwn15gBn"GAqV ;%ŠAel̪7趂fJ]+ӿ_T6GVF(` Q겱׻WFlGG. Wc N麅p~y<>Vw;r4w^R`itڋ1~> stream xڽVn8}W}K.!izI_>6m Ő r(Kr "9<3cQc^NsǙ.m7.>`.pdy3$9qʝVmr c_ÍjZU/UF)iup3e8Ϡc,#d1ar;c֏C/kmb<HT8wڦ}uL|(R" <%,M0~F"<IteuW2X@,'i}i%j7 )W_1BPɅ,>Ef"AMz#w=N0Q")x,I,kU_E5mʼ~0MiXS΍bB#'[-b>:ij/e/ڀ\j 8~1*\`c{ ܋72lv.1k)5n2 \-~s˲C^mSJ"w[*YK|3q0 ؇>K1%k=8Z[ ${>,V\kS͢7NN! Q!IvƐL0"vMjUٷKu.?{lL2kSx,mє(ڢ~PA ! (Vh:Y:h.cP\~TAEȅúiW%&3&9ZH&CPl.W=&d+g40Զ6ipZ(pWgM80BB=zVULlPlynLz`w 5XпYs GPL(+5n#cbM;uwsg^o60ΥvU5m#X endstream endobj 2770 0 obj << /Length 1496 /Filter /FlateDecode >> stream xڵWo6_a`/2Pq$C&-kx(Dd([v&0!xfy2-f"rn5 BP G/?b#VF%-cr-a$Atj:Vj9QPoWOǏecteExrN#9`~*⢗+,)-/5צ%ᮭ` yrQ_ȒQe ]+ٌ.V"n+sPU}oI9Cs,"jM3fJ{ߋypJsPcW,r[/6,>8 k]NOy-yjSG:s.\&£ࠊuGS= i>hW69veyz`z]0^(.{Kd馇_K"'2]|v@ޘZ5'f̶R#ec<;ޘ;G]TU}kp"XVzl,)6K(bmcf?U,Sǩioz[կ Ng4cj`<:tͳ!cdY4FA\ H3CLi>^ifM.iDUߩǾێV޺'aVj{ 1wռKԭA%+VzDp }+`ytt0凜O6zf8E\:&e,i(ɣtxj]G> e +l?͗4v[uJڃ|#{&c/:: endstream endobj 2773 0 obj << /Length 1438 /Filter /FlateDecode >> stream xڭn6=_adIZ!mn]ahBh[,iP-YasQ"IƣlutPǻga>r#Ĉ$ :Y2mcsO~ rީҪg٫V`D,lD9 @=1G2 !*8CSV9"?c 3_1Mb 'w3^aLQ-,J_/vSػ ]Yݛ%({_VOJ7z$S*(ݤYa,8q&rIOLƜ&^=,~LMjYZ"Ejh0g7#63E]/! {awRVHl턌 HˡYZy_< 󐓭c̜RJ9(VgV9~(w57ܓ|{AַNyj 3{;wVc fo>Ol@lS!$/""l@[bK0pnu0ʺZjs*8P"]'u [e>! P:uz B#%}$Ƿ!|h/xhZؿF?huVW M a.j[v+ j3]4qx >[Y7/"OmupL?»_% .ok1}7Rlz@ogP0(S}p?tqUj:ƙN 1F(ecc#aaD—Ϲ2(PT+"%Hҍh{y$:hD *>fK].moYݍvj)_gQy2{_)@W9!Mm@u,旍ϦT\?԰SJ VMDwNꩮͺL==] 1Ƹh:XpH UEw={ mgVbM}q;̸ qȇf_?/ KeˏMɯr*?SX2rÞ\U4:-Z\[W5~:ժ+ ZDzpKgt '=1r 5n SND+k ;S5pg.V Ž A` d(%8gnAS endstream endobj 2777 0 obj << /Length 1371 /Filter /FlateDecode >> stream xWKo8W]ER[MhEl(= %CRxwC9ra=,Dh>Ot4I`Zf$rzB/Ot|qR1i>Y\ Zl:ۄS!D= R` .ml4N-/'/;*49 ,:3ML2.$3Ey!]q܄qIyp+̘'kd ^ez[( /`gyֿ"qe̛&ZXʒ;.T׷ڎy#ŲiLe1qE]cPf20y?M1%yS 7퓳ރ@ 镼3MGlR}R|R?}-vrәvn9PQD$xSz=/*kz_׹-{1I՛^fSݘS2v Ť33dmu7+"JE_yޙXR/l_L+;c+|>lb7Ct~W֦2|P;`P*qR?e2|f^`Q%zF s=u55ot Z1`TYys"usF|Ӏ730>nKPQo)[bB׾0 :%bOU52.L .i,}G`"fhS 9n9ʫۆxm e K&gmvtz~85)CCn!;{nF$^k !.'mCkXk%:ʾpee[W/ynSEq^\\ Y/?; endstream endobj 2780 0 obj << /Length 1776 /Filter /FlateDecode >> stream xڝXmo6_a`&3+R^: C֤Ŋ b-Ѷd6rT@Ewǻ^>,,N|Km3Z\9oq~gX*}^ԭ|/PzWZotL"pi|)xqu`Zy’Y!x-nMԨ}d}$.JuܹI*jeQK#Fȣ|-LTFƼSJ& jb. $) HGwKI Vn }:$Eδ ֑^Y l t_lf>|l0f L4cUFw CkiaC칣UݖS @po1kpatڰʾ ~*"h-.?сKZ^5QwB)Aș0 8lCRLMG+2 袐ޅ6;7" Y*Dv"\ě~4> 9.mȮ?$= 1CWH is1C;7+P)CZuƇ̷ӓgK4DqpǕ .GğV}3f4iT-Tv{oz]N"sn2q`}GM3|c zgw{Tͺ߹cQCMsT` 2jxʕJ ǣ{NkbW{Ux[U{0{d1咽VԤC<_gG=D^^ 3)UwUT endstream endobj 2783 0 obj << /Length 1474 /Filter /FlateDecode >> stream xڥWYo8~ϯ0vVbVe@&$ RE,E% rXp.|3,f(by͊ T}38u#YZ{t/o|w # Us+bg Tjav)K<WTYIuSt}A@ S߽,v)/bݨ+~FTtlEtηWyCfOyH4N̎7ZQhfK|-ھQ}G6t dCF(do{ AWd_wT BtB]8(_L6q^7*X"7,Os'3rr9#Hm)uo'R]K =gܾ)+6dQ-^w'E[f%m9'^Vr.~봂B5dO)Wh5_ja{mz(ܲE/8b;#ҕ!;YNŪVډ aBDž!S%CTOeC 0IQV|vV!6|rm݅8 bQTmT * zRR **|@qo%[0CʖRiҲ0DĻZA Wkb#J%[nSS W nVhCO^AʐYe̟i E Cm-F)Zh8~ RO0@EF[+49<Hu4ZU2L9(bvࢫ:y xfÌ-|?}oKZ^tT$]C4A59^ ]ܫX)amGҲ:wExH(2u"}2(^gT}MIZF .`&lG`t K5;fFM ,i<#_,GBfat#j\%0_1W%"]KqЍeVƀm{o> &J*3e~MZ{o0=a%sUJű;#t5QLy7%`@U/2Jv GmMYq.U3Ry9qO 2gk{Of"$um[m5 71֐?[!.R : endstream endobj 2787 0 obj << /Length 1421 /Filter /FlateDecode >> stream xڽWo6_at/2P1$RR=$MӭE0 m2 ч!uQjm?H",f~bY,Y^pÛ|+)gbXM-VޫM5az܏"A Zb!ۓ׋O %. f"dHX2SIDQfնèai:ET#F,nV:mX1 &?P,mƩ~3P Ab9,L/-+ ZfK]T묦ϬwBs̮un 't{E.WguA#yw_Lb&ÔPQx GPT^pjBT$W2dLkiPL#X*e`MpRnvxG1/}R|Uia/\Lŏ)D:C{:@g䙍veR|m*h8&%Ip.uM=wvuѕ0 6|~BO*N =ϻ= 2ɠ릭t[>J s_x$n @bƞHbm "KBSVMPKg*IAK' }a6d:n! Gx<}zk $M^8pWrO8EN[yzٲt۲ JQMםzjF$83S9A K%d^9}Ziz=x#yӮؔ3ߚA;z]gY }`ݲJC~# Sٵ~F\eı0Pz/XV$^C 8d:t(T,/Jn ݑ:+%&I/jf0d7u@D,vNm`3?✉xԛnBlW> Vw{:ACc@&'{l1f{vzY׭!#,ow˦y`S*d10t@EV>X|5ڀD$D?=I$nSYEEݵDT(&^g%cŮ+j(B<[8!^MT}.A#H2ulDOdiN҇iMQ+ 2-Pz1\ސ11`qaoKQ46%1γ*eZr)wJCn3}8>T[R )C( xKP4<.A~/<8q3x=c4g_wuqTN~4c/ C^oٲ/6n |nMn`'XlH 4럏cqYRY,-4s7eohٔ9$FkhoU=Io@} endstream endobj 2790 0 obj << /Length 1336 /Filter /FlateDecode >> stream xڽWKo8W Č !EآH, $~g8cwڹBr4f8/by$xbqYhsׁp|`qL.h$z!q^ZWIeaPL?e&ۺ|';kM7\t ,5IN2$Uyo-HRεD1qW6D)8!="Zl9cӃ ޏHq2<_$YBr#p1p[˶/EƂIړMĊAAF;~nӷyi^m9 xFg'Ֆu5di<M; wם/wވ ?ImPMon?Tqh}!Nt:t Jb#BA9,>z8`汁en^vO(k#&.Q>45Fb#xa^A{ \ol _xL\ P1O/F,F6 &{ 9!sX@P!|QEx7a[Hp"H肶6Z%u$> stream xW[o6~ϯ06`E]3!MbE >2ms$wHzwnxԛB4H&Y~ᵣf=! n׹|3|Kd꫚/'_L]!\M OgRF~CIÙ WK x%( |$VUx.\&_OX,S8(t~^luaKYJլ} ׏|3ngW$~*$ˇ^ہbIG{HI,"{aBD*"Gf 1PA,kve!Mj n:#;~TF"Y~S沩~^懌{QR\y}\ ؽFGr?f~ 9KZ\a8IzLEpieQY N֓nU#`z,7*7ʪ_=d-V80 ]$Iݪhyct \÷2JŚfpXl Xl:~e7[|LhUc ZMS@grY50$;{7>6d0HSHJ]FόG]oh eoyĵpҌ0 FEʢQhOcHZkrjkW %yFPsoKUպ\7* A5?3 d xOplr'X p-Z4N ǩs)p#!ĎҐƳJֽphkmh㨶-XݼH D#?=(ՙYBw#kS]PM=(_- [1考Mib?Yd(F.L(? *> *7eHjvRhl6NV.+qXP%<㙑Zjoװކ!r a|M,=OZYa{Qā le['Q1߷u >`k| 'ᛵtԘ`~6q`C]nr%ƨ\Qui3NʥjS dMbQEfC>&K-s_ l+eY-?ؑ- .twiWN.i5y}s *;5t@izGl lb*r;;VTm#~1̡$Ic֚umߔh'BU|ׅ5;lu,ő;E-uMذ2eNR!J *ɷk^酑@ Z1g<'o}^MP%ٷwW>fMЁEll.e.hKCgݍ`~* endstream endobj 2798 0 obj << /Length 1647 /Filter /FlateDecode >> stream xڍXKo8W؋ ĬCM{X=(c+.)P(mp^4ܟa(#RzFG-q1|:z.ggf,jU;zb =_ae(ˏD7BE|}u~v5范!`CyhfI1Fd`A͏yʒ0$3]\c 1+;rh*,8n<39s:,Pk՝vNXkaT in4nl8ٍ͓ZX毸 qΑǴ~x#׈vS҆Ih b":c  3^멸[=F3uf"N0-peCW!ڍ``0zٛ6h'Z]8F ֢cwMq I}! N5׾lxvޤ a*J+i2t@"ohFEA cJm Aqٌo aHZ|]4=y> stream xڽWmo6_a`_d`HzkYv)&H\C[ LdIQz ?w=& |Fe6)'ܝ mnޝ/7H/ox"8y.&X|1Yj3EQd3)nR]z: $|m|>Ht(,qX6I2D$ အCOEʒ(". U7Me;rci5%Nο-mʵtpiDЀu?Dܧ Seϔ|4LG&C'!MD`"(׸@mHh֭2%[v~U1zAJ-c<-W=%$880 >*kT$nE1hi*^{YhW."hC$\T.Jcυgid^z{lC"{>͢XTC6gNL,f}hw'KZ>sMS^/gYs55$ Nq`$@`IVjqx!AWUŎhGyĬIDWgW|mרAy WU_C'"lYvZ}yyԌqO8f}vԔSNk׵SWT2(} 4>!2_O+zbϯplv( yB2#䒊@KuNj{A.s;z^66Z`52kiT&B؅b6ρh< cNۗ.Df,\C#?TkL5̅khwo{H endstream endobj 2804 0 obj << /Length 1046 /Filter /FlateDecode >> stream xڽVmo6_!&5Q/![ڢڤaiGly~GiKy6^{N,cQI\RE4_Q'mWnޞ17IOwo%%-Y4]MM;5M&BxLTPp՛N&<$eɗgO+x QV#mv-^! $r 2Ug1YgZ57}LfbsiS;e+s"S ޜRIP}$OxJ(x䨋j`7CтE}IxC5TFy6wxI4kR'/UV4 *<4>׏jd} yY1 I?UwGL ٶz^m,< ӫ˫WxnZolö'ܨ=BDNX ]N팏U I(.2X<糣^; 2RJ &|ɚ9B{T0%f/Ė~l%yKDK±,&yNhCaNzYݶC"ezݬ:|MO|ೌjBܺݼj6' =BxFCw׿GK$D@ںDlZz1, F:", X7ႣW H|}Y;t+{jNՖNn"XyζX謒 V8ˏԶ/0A[qm}̍(;F(Oc{ (Ȏ++>忺bqioVV縱-vlvXb%:X> stream xWMo8W9I@%%Q]$."pEFmeHtR!)b{X(| 9aI օ0}q-1b}gӲ 8U& _߽ʼn\VnKQr3_^,Fyά|F/< 4O8y^U݆,dʮ۷Pzh xaܗZDIi_~E0Rpkg(/8a4D#Ot,Xor a 7| ; \cͪw-'>n ~[Nw-Y24TJi]ˮl; fI^C\}kz#qJ%+xG:揔Kk9۷VΤ}_v(dB棸!qrd[WJURr:& )o"FDɈ^8% (MuNG킐m^Bp0lDz#tQ=.j5~~Q$g |RnϢW怣 %d4dXc123stm"`Dm5Y YW6b^m$$Gn䃭8pV r{nff6QØE$0#vNaߝF`d(,"IE|5>@8Ct@ j+b$NT$G䦜SLβ($"ozL IVSu42x?\,ZUkW@OjWQ_9;GBy]{87//!)Pj36`Xݗ/ӕVݗ ?9pj7nT\U>)}<8|%>Jn6u3PV^wg Ԧ]gw%9$4s)FMmBGʶAq[zPqmD0K}w=#Ls ޻=\BK|-joXpO9r ^[nz]AKQv}*ΖKԨ$աMQdc785BhЂk endstream endobj 2735 0 obj << /Type /ObjStm /N 100 /First 965 /Length 1659 /Filter /FlateDecode >> stream xYMo7Wא04;A7`[R\_ KD++ tܷ37$W.yJ٨\NEt&  ȓBWLT)3PgYYʺP62Pg8C؍ $ EeH  xX2C#bQ O}b k4&YY<$ XA%}[,@CHJVx+:H0!z=RY *LlW #AJ7F#N:^Pى ŢR6U1*X',%LC! ` 0(9=- AVIeOP DY5p+FHh%3:#HYdN&(bT䳰HQ(IQQ.&?{pY´5I\ TEH*Z R KhrK%cHQj-AJbB[RvX@#X0[!vdA<,<mx sH]䚘hs0d]I~JvG wFUoO͠z9ϛ񼕊 Auڴlش.s7un0-Len%3 Pϟ -ũoƋw_tD@W'Q%iE '0Bp$|#x9l2@FJH;4=h>4ZڡŰ(}spEgލg J'r)pN]φύ [tsn+9!ͼ^F]A[!mqIre۵V2c};MZ=}dT;v'N`\ƻ~hۏzxU F@YW@?B ?wޣp> >c{{lϴQ ~_LV3G 2ܱwy}ڙ|5wKR>WAdX|D}7iOIJ:iv#4=H}: AGvMSꠉ)+SO endstream endobj 2812 0 obj << /Length 1672 /Filter /FlateDecode >> stream xڝXOF_qR'{^DBWEU>¹q#pп3;R!o;Y#g5 GDn8K#KVw3"Ϗ$h8OG7HΖ㣖gMmT5717su=-\[U"Qs}2̿.-{mr>S/gIp懮KGQVyܠdHDGu7&v{Y3}ڨf ,qMMȵ'ԧ2aIY$ɿiWuSZnQŴ,X˳y/ Ņ*ۚ3) TW0$eKE;lE̶cNUYO9Kw>)t.o(_e%Dch$i4*K;; r$_ ڃ&whg+зPkێƢ]^DKZJ6ih*sHxibn+l$;4O)C`ܶEw ,j`9,? rJy6Ѱ42>iܣ` 5@W}ZO:ʸ!6T}J3%ߖHHp|)=Ii>خ9qzKh۔/tTB՚w'Ն?xgPqzSqSz^fw),|kirp/MAiSD w'ľVrgqzM&i"iCVfXj kW^l_8Y^^!cYySK&^j=T́ص|:?uvA6O(q_ix|MЗsNA+)"ϳ \>Wgf{BZ},2[oMkOcP׍ L(O:wCEcAgѨ`NӠoӿnSU'U Ɂף EG7 p-}&ΚsQ+~BSpeUexoΆ-PEN#ma)> 0 056|g1P1ۗߍJ[Hg4U|N^Y=ijZCYYܽ*xs?2j +BO5S`sj5D,(њ\WhKxK8r\ʆRwk k endstream endobj 2815 0 obj << /Length 1705 /Filter /FlateDecode >> stream xڵXo6Xĉ%K!mZe#;q` <{xwDBƒ|H: DMǩl=Ӽ'in2"!d$E@ mcQۮwx/[XVm6k J73$D GЂPqe=#8lMs=5 :a$پ"C 51 [E-|8}w%zX:fw8. ;_,oa%y/$*k)/o.oB+܅q[-mz uyLi7'IC4.7ZHз4%C=/L[| @fFɶB|+(ʅLS{&M5*9x<> ȁۍA%`Ι''/SpWt9.bhE?!E;g m< xtPmSl"tzF4Nئwb|leno4х\fs-p\wOih)_Ǖ-yQOp >7o!kn!B]V0ъkp乹. 8X*]qr+n(n`(qmR]Ļ~NsP UC TW#6JY Cz|j^L9_ܦ VGZ3BM_iD 2ƽj^V\7_Yfk+]bT\ ; lq-3|WЯ[BLUG#/vɤHWՏ n%R+\Z x.`*ʲ5>\I%`k,&qA| M TckN9r\ӥJ(FTC=*^~v`CXtw'C\ݚ|8òok ? endstream endobj 2819 0 obj << /Length 1078 /Filter /FlateDecode >> stream xڽV[o6~ϯD1+.+.Mѡ CQt(EPrFY< [4ut}<($9(9J]pq.,,^IIɢMVmx!$'ƥViɄD_]4=|H#i<< ZDY!(Wֽͦ l}6iA,hb$Oxq׵F9kGjo4BTz_Qe諠)98'_1gDDi )E*h2_rBuϵ[wlAn 1ZJF >mݣf,Fpe>.))h["9^2dݮܺGݭ r $t!.:xT @dT5gv^=X/ƣJ9W)*qŌ5!r׍ 'y?}$8<5:ePD J dȥ DAѮ a+]ݭ_W[zgq l\ycFS4Ϫa@RʍIQ10Lk5-?>WYZhOl4=ժPp˱ nq,.ƌY,T]Qre.F¹$6ͮTyuMR|Ilszqx\itx5lUЛyE i Vި,\ghgIyBy§< z,4]ҽ}0LF«湫_C?7y/N%T*|H7Gn-$UwsI|4xI+kon4fnj8LC ;zۄa+'T~N}& ڧhk] VԷ1csWV @ߨJ6esQwI*38 M:x M/uX|`XjSWtBHVצ6nUb9Y*[,?G endstream endobj 2822 0 obj << /Length 1435 /Filter /FlateDecode >> stream xڭWo6_ae2q,uCڴ[: oC$ $?;e;axxNf,cu^͚,f=۟xA0>|zfgYUq-wȾ8-"xR?._\iDP+t3fe3tB͞+$_iAJKwFw<ѭ܆5b$E2wXj(CX:h,Sm+0 ENI!uop!&F{>.{3H0BA,-Q(ȭ29v+YVգ4saq^. ~+5p߇Kq-y{8/m|zMXflR /8J4A#!$&QB`5UmZ]IDH ͪ/zҌ, $8mt7wiBRtx8}} ԑ$jRW^kPb:* fpϬkB UǫK6<@nKb]+z'Έ_&TO!l(*þU!S:?9YA}UN~,e5CA(Vw^ta j `VL-QX~MsA_`y{@whT(E ,/N7Hu /vs^eqJ_RGhH4ۋbuR0󸑌;. /L ,v%ؔZ:\-&KCS8~WoU#Fyqr06PfyFI`\? @A~s5꓿(!(; OG=P'}Hl;!_dovp550qv{,/"ѱ`r |Bj m>?߼{FjRw?䰷6 endstream endobj 2825 0 obj << /Length 1854 /Filter /FlateDecode >> stream xڍXYo6~ϯX@,[ \8bAAһ#?Pl91 Ch8᪕?* 86z,awQϋutθYF!4H>˂s=_VJdQ[Ix͏cbǡzb9U- EEnIWKFl)R gf :!whJ蝡7xEŃkUy,~{\,I/tWeӗ^RLrp6֏qC^Q+ZKzUcUJJ%zu5˭8z`Ecv.E6/ʭ jA!#f>*W LSNa+TecV,6AƜCsٔAY)81G.tCR?7u3o XK1D*pEI)P :z-=0q}Z RxU/tU0}zܵnp{"6Ge;" iēbWd{iEI64^5VӀyVu>?2@fy˻δV |-<\jnͺE`_)S}L R$bewjP1K/-,1 , eS` 諾+V7 d_q62W6 y;&mc-VbACHp~ʆq((V>!RĨr~ߚĻ- IV$L~p-z"Ѽg -&]zƃ|g߁[QT' D =8 zS^YHp4%q yOc4#BaQoylVdʤ@9m玆)h~p_N0rj>Ύ`2-OK O%霃K'w9mX4X&BD d @dcT`#]jtDqf{ DtAb;NMtJ9A`}2/V< M^ Ui[pͺgo32}I-zGYUK[Tc4fy* I2eQ:tR^ĜDGk€̺e˟šzn1$"٘uN GNJ_#Ya`14>e^irC(=:01.n;aOxu+tLN*=M> stream xڝWn8}WDݺ؇\)4n⥨6PCƭEP% Ϝ&lBM2:Id<vjO.Wh(h&徫bٻ^zao>wxRjYrqQtev>\,4Pg1t#Qn {!x? %IM|8 opQs5Y#iHcDhA\$67ZKa$ UIq] YRT \lM[Bo8B?JHd9 I9%y 0Q2C 8 *>H!yb`HEAǦwAѸnN,qrъ>-0z4 14x!YܻirVKc3TIZmCD! (7hYkj4kA'E{rSȽRj (\M3պk`Fh!Xu%Jy ~ԳK<kA5KeAȟ߲z EC(!2C$2BDZϡVgXoQǙ쥳79Qj[\gruwci a~uŨvo @h"Ȭ[ǿ"qK3hVmZg8ŋ?;=nMUiNbHƧ#ʮ)|8@AXPqv+J%w$GrlʛbB[2fG/*aӢ^lʬ[Q؇g`s<ٌhk7k,A9!:(OF]{tQݲm^n[_Cb|I(4ESMu x]㗤g3N_$>}{D~]?@g~+Y@ 60 G#p܍q|zbx^[ &B-Tc)'#'.pUGW~t^7i0="KLwWkX7/V.o3SUJj?fKlPqmuUӧ|Nnj ' endstream endobj 2836 0 obj << /Length 1177 /Filter /FlateDecode >> stream xWo6~_!I"HڰiHVƆ+٢c!dPtߑG9Rt2x' 4%rsFTz1(#͟g] 0J Z`Wͺ8MP~Ŝ;|P+UTQd!c4mz{/DI$ɋ"YN4E}E"̢5JSʐ~WZ 4O껝Vxnl[ jp&g~jʅj^iԞy_ DJ=p$KYr raRR8xR"ifJS/:nYwP2> b"q^ &(v%/j fۀKǞe .)7]f1B2b+m$ C +!yBr@Rr@JK]oM NvSI٨ŕV @`JV[YZqg 2@$:M4jiT;;{{o:i*X~Dg;; >FZ7͊zMV-#~oeotvzYÕb[P_G֛(VB/tY˟mCx(r"4N[o:;'Ml ڬV!l+mWVE;|nml(Q1jb2!Q9=́+l_夨ms0[4j[`p:-J\?*kT=Bn 1Ja-?n?\vلS"!> zDm ,=꺽S:V)wLPSkWX:gXD~^SF,:߉,=1e~a?@_ܚ2>/H* i51 SQ_F0/kQ-sp][xcnBI)3Nb tˁoRWRCDۮ̇ÀpQ(^CEfPaJP9>;Ӊ'U0BT5|IԘg;IYW'd^W endstream endobj 2841 0 obj << /Length 1595 /Filter /FlateDecode >> stream xڕWmo6_al"3#R}HfkѴAked"E'Mx'NE&{yQNB"XI>)7OB?kdv$.^D 9YvU-JuN, ?Β$ ί^[V΢,K@J9^||1Fё֡WD"<)sO<2N‹inÓlp8 E"3MXvt. N$?OlL?w]*%-X4ʃho>Qm]n{~`FǘٴQinь;g̺̃9&zb yPNڴԭr\\U+5nu뻺]bU+;lD G5ڟsa-=@ sr;[lg_4cic~\e឵:cAcl8ûq1n-l]]uCX!U-k싫D҃S|N4MZft1!;~B =;:k8Fp ŵcnBubL֖ %5"SVuUXSwi>W$XL$zxHTq̇ lZLJ1*מ$1BGbk%-޶Y+i)`8XYOy/jhj%RY(o\m)l0K*Y5M _ѨфuKݶKM,r4[ p)ki ٥JZ |?2N2 m==zV#t>… WK 7~ tIQ̖#$! ުQP8eU  b着>^%'?rxq ˺T%}Q<-80MV3p*oth!i<{/&Li ,A8Hvĩc>:s]vzʩk!FM;Eg:+;gO-Nvz՝HBCDrD_>\ao< r}mXe4~Џeh ˜*# C9jn{|?m>g@Xe]0 ;@ssD@̡\|/jh@86GID<՞h\os\6(yLK*4~_79vE6R^DD~Oൾ' +ծC?_B>!]{ZnN"r{۟>3>&3a_q7MW^;CvW_ QS@Y4ޘ%^ҩ;}ӢDtR."d豅3UL,XهwP>M;~#,IC@E]+"+T5wbQ*d88ve:G E|`->*x@Ϡ~b`= endstream endobj 2846 0 obj << /Length 1904 /Filter /FlateDecode >> stream xڝX[o~ϯpB;s;JrZر)-+ieme3;Cupv8of%&>IO0(7 m|z#Fwyxs1'r?f(jʦSfadnD6ʨjn$L_8Q;|^LD'De$<FL+N~ X^}Y3G]j _DN VѦJSU+Ul[lsQG:DB:| vprpe)3w?Ԫ;gZ v;Iv6z% P,FRӛpuug-n8VXao^mUթe,瘮V}u4ck p,hO4!1[EHÊf:a#tU$PRV[HVD 3EΕX$TKyj(tDXNnc,$Zn~R/Yצ#?Y̓YFWb*F\_ȍtN6b=y7ga3J%:H{4 $}^?,4ti[ڢ¸,aVTCĭ|$h ;ɮB7l-pԩ5 lڀ%=ѕzbbzw= P;a JIcIЅ*Y<"KיG֒)6YqI SŽtn#WmmVT>2L`YF8t CHENF):תEljCo[mKveiظmABpGϛ]xK!{6ueܥ ,iCWh$Va->j^ #;Z~Tn%rӄ`PM0& Q0(u&!H>Ng` / IsvGMTUduͻ~6ʴ5ԉܵjU{%<[Ow]}ր\lByy| G>\ _B1?]+^/!Ro:jT}χpH7$+kKO;i;`nT2i[Z?Qm\zA/sw <cd]tB ckUm}( }_t`q;}GuSݹVߕU C_d/k;XjZ;)N>v{ `GB$y9Fu[NIB* /Blcb-ncˑ-=kb?T,026Q6|gaXWHl[s @),s endstream endobj 2850 0 obj << /Length 2030 /Filter /FlateDecode >> stream xڕnH=_!`B)z =ؚ; MF(RM`>~D9 =ԢEe^Ta킁/Эp5|y]-TQզ^'8޸*I`}\iWfki+\yER򿛏/.7Y?S;NuPI~Rpi50rvۮEO UIԛ;|Ժ y3w2^6Bdmvbw *n+\5niEzI2Ŋޣ&2.} D@7}ec{+\nԼsmoS1T]lX~kEU^ͩͷWqwoY&:]a wCs+a0{f1 |Q?骶;z[qNi˭v U~뛡:H~wKBGR `rJcqV4ƇlhpA[ko?LG<-(@t-m0{8-~2JQCb\}{_KܙpN؊4)׵3qЍyk O٦ojgNY)I}?15׶V ӱb Dymo?8ُPD?[u` .iutJIޭy`*Z\wm vyn}Os.e C;5HæY}m91/-#U߷VåŻNʍ TaH+*r` Ыݜ<n$: lTǐsuW{# :HGY1B=ﶝfoiȎ0T~;Kh+%YѰdVrj>F^h<7g:פ;qArX%e,; H*R㭇IyfԻKA"'[ ]yuEz7cW'xl! Nc 8 65ZV)r l(&J[ Y<&@aX* XA)H6V;҂_4noxZ:cv}uNQA8[%N aPSm+F @3v1^sAp1Ltk(T(O!jcj}YY@̝fJ(F gl)T+  ]RR9!:ADez{5,n<"9OyiUEiRgjJ^`FftmvQ|-iMOyKK`/jAPhtc5dӗR%a\$$.FՄt'S䍻ׯ881fMڈAzՋan_b_0?'c5%3 Uߵ4]DU'Cc_QnU+J!CeI/pIpj?[Im^2ꂋ52groe`X;Zw_KBŭ\C-0JFRL{sp=y援% 19>aI]j|OF]W-I`/mR$ 5Spc=`oKɌ+ uPڛ%[DЂ!.]Q. ODf.> stream xWKo8W D,)ztI}5Zmʒ!fTisâHp<-gY.fi]<~L \ΖWCV [lΙfDQIJ' ;{.ޛ+Ә0 L% TC™zIsŤ^CRd@%!sm7|nyTvM=ݍ۠w MY<ളڸ 0 3FM\9= A!YIO(*Ir*\iPAHE@J҃Ɛ _Ln?Z< S! #?}Dή[o@Js9 &j Mv5ݑNUlK#JS; Ჳ@,,u;0eَ$ddp)e]Ս78H'BQ5!"d.@.zCte}^2DFuUM e ="+3OC)n@a!~vxQ­7.ц[ړuX`+Szf{LHssoiCnO]-$'ٖ̄IYwkdYT?S1aP47>8 s8n7^)Pms SE sG!1b).AzNJP93U¨8LMB0MaPyIShGDph\>9;(ݗЄq~jkݶlaF<{~;w 2[hPʵ 2iq8X.[|Fދ/( M 1P{1_4COhn> stream xڭWK62")ꑠ}d7 v릇4hi%;CR~U:@X372䜓2-Yf13bP4/gk!4!eRxoj<|.rmƜx9TD緿x+,DQ*o^ N5^C(-H1ȊPzj` Zs9^%fJ\qȊBrMݓ׻jjY9#DW #" ˹iV^z ڋ.nm[xC#A89zY/<(I1}pG!uFXBȳgx=ގnyk85!L"Y>PhJ҄NBi"gL'5,u|u) imU @!yg [9 :"WjKa$/C^&N* UX ūTxF<_F@CGכlIEBa>[itדnE4-d %yә5`I)uQʒ}ҒLD/8$+a\i + We= M.1O~=ov~^vj>/u{8ذX/Z[g=SRR5As@$r&]NYXKiv(`X:m]xY뿂`47 U2<70x|ibB#d iHy/C\w9:ua pDSLaXkCړPJ{wHo'vmӳC6ݣ;?b*i!s>#ԣ>ZxUê]QOQͤs,V^0xY#|p M[^_w$ˎuzĿ4e!K3tR.{熶XYf^\ > stream xڍWY6~ϯ0ZЇn6"A>}%͖\ήQ347YpVIn9q>KED%V@rr= 0uz=55q oWn"SHG_yKL3dmÃQmXFN40Bn/YںS,LDYc2z^_|zGSC<.Kf{?ɦKٗ,ek[HP\6LJcZ'ψ{78 T}G嬌D G('x vC DJgLɧt8!_ endstream endobj 2874 0 obj << /Length 1463 /Filter /FlateDecode >> stream xXo6~_al/2P1~+0$vӭA vi[d$4?#rT="}:}ݑ< (c0$y Z\p9==ͫu%9`75>zh!~^v1(.CX)օAc,~?{;9DtFxY0`!c,# "M% $I|೔$azVjE\s%40ץReV?#!! pC@{ӻqT77U㤺]qqJb,LIH2Noތee2OȱzF_8"B[>N4٭+d3ZH#yZkf_}Q bh*#.c4&Y>ј g4 , a392j+]BwkW$/%2FCIUu  k-oLJ.k#% &KH5Ni%P^$H^UMy,6 |\`n*ԅt DL_hcXV0k$ f #.n%D{FEf=X+jdި7J5u,^.m9PnQl=J+̻5_0&]o q2TD x!9D qf$=6R-k3P6fVo'SZRinN熎S= 8{YRn̤􀩧zOZV'xf=hܫr:K<7WDcmUvcVX9ۉ?ͦܶv3m*>Q~y5鮉 qG;'Vgv/7r> stream xW[O8~WT/D/8مE:O3󐦦h*q h8iRh_VHر??6(ľb/&tG`(iF|;͒Vx"xwr.ܪ{UUOҀwjg/ԓ|Q9 OQVܼo" ?j;Sc)C0r52Nݘ89T|Pn; (e#1o)S)*5~8*8"O-R-z\nX:3c5A04*q7Ҥ$KąFIpV9H被M7Uu XU E j[ܸ\A fZ5r>9q1lҜwS#$J0ǔEKC3C\a2y, pA(Dqbl+^%%H=[B<M^UVUgYPL!?px3 rj!#7Mήqz]Vg68fRj7"]xdD$0!<«%#C/dfADN7)Re6A6F06Z!3m!&~ycu$t3~~IjLrUo.';TVyfۻQeܝv;UYjCzfdxrWY+J,PIV5yQ1DSPWFjt|Rg7mF8޵+pb'vJvovam\^v]LJQ^t=6Uor"]\a!Uչc~]Ӵ|z#S) Ӡ'8X/*i>>:z||$u}.y iYfep4 1"YsƋDHi=jc(l2mD(`N0I{ awӇ325fJgŸ~W~mS?]~q/ 1Y-]&cPICa2%EuXɨsx]!UX[{w_"SW ӬR[ɨy<ì}<|osEdPt 3 sgaf6,Ae7qb^U"A(6s3ui< &͛ endstream endobj 2881 0 obj << /Length 991 /Filter /FlateDecode >> stream xڽVMoHW @Zzf=8j>;*m  ڙDM6$XF%74{U ?؉Cq nq_|mw,_sbgB-Vν6+Yy>co&Ener4mh RJQDE*nю~P{*XtF7 SZѸ=TfinK?ojñ_L _+,.zML#2?f5߂V켧8D_y we#Ԓ0Da\poix>(eomX}ycJƌSl?Y$ endstream endobj 2885 0 obj << /Length 1587 /Filter /FlateDecode >> stream xڭXo6޿؀U"[Ykڡybm&*$K(ErLJr<}?$4 Ye z5!' $|r:'bry=Tu|^eժzaeGS?bovZժ\$I=˷O^]F xw({Y0!s/"&ˆX┥ԏknl)[٨]]Z5m>F¾(&~ E+[NT6Y-?,5 NͶuX3N9xގk F,nGsS2XІ?)T9[ e7 ;j;Gb_]WdhxnD)8V͢UM-)K*]= PAA}0ԥj 9 .t) *zԚxpiRz2Аkem:͛)KU`A&emSD*@;kZko׊L016,ROiȦ~u!JAʙHq9E_iLS+6¡=VΖ_t"Z;޶KG H-g ¨+;qTBB֓Rnۧ׷|,qؚ>I8ފ + >̨rHHTq6i'7cp.|~;_{溆+t~ 1Vqdy=.hn<(`rC.ũSݘҬ]" BӶ vou]| ~(O1uŗ+ {Hw~+҄1ȳZB E߰VbI\a-+c/d\t / bM[˅:,cmo}{ G@M w"뛂PVmhײ%iqZJ Fn>=4۲2ζ*PϯA ([tcYjU/ ~nNffJُ50@_(t=\4@*bNhS<Ϧ3i,].@RzЛ.[ MFg{ǀAIT@~IxP!3ql{qlaH %YYJwEE7 vFm ,PO} Lkc3r>Nwt N-R8iH_;wy 7*pK]g:WMyqC$ug i);KaaDN3:?ب3wZ붭ù12fU(XW|ljlF^@< o+uC(k&{^kq'8u`w;5N-3e ^czYi^D X&f?G(s{ׅASr9+f4i=螅w=`0HkfyF;1-fq,zu`߰0_u3͏#U.QʜiwGD?p=WWk"-}"U] E3vNXlAzKD"\=+_t*qX endstream endobj 2888 0 obj << /Length 1189 /Filter /FlateDecode >> stream xڥWn8}W}Y $R}&N q Ah#hPt/rԈ-̙ `(OA: ͮ\b;ʿ'^2!]VrٻZ1q{ٙ$ Χc1c &YS0?Ҕu~s2o(꩝A,S/Ī!kVLMd3xlbp9! bG{ J+Z)(QNH^䤻dA8L;@ۈxK]pHP6v$/>$ap"F ͟/Su @O s;}>;ژI.\x\tξ-$_+.C@QoA /8+?Ok~I>Z^tx#Xs6M &vU%4L`5uBuEP7:D7Sn YS[qboS*ڧvzn)Kؗk*_FݷCc5k:0(; i(ˍd݉bN!wMl, Z音5F2f/޽]́|ljk- wO/ZC֯Mɕ}x#=Б_/kjKr\lS7iY1'^!{mϑ̅701+]B :]ንvm&Mw `b8Jm#=5TZ7}k*[cHHvl$ b)$gWC5%v(I 6 59z2PcoJWw9V֪r$v8̕-'9H7X)];ڕ#"ynaBKv%"~O>MC endstream endobj 2808 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1868 /Filter /FlateDecode >> stream xZKo#7Wda,IHY dҎV߾_QV`ɝՊRX,~`eg=)\2|[,gyTNy>*XXb*x 1βU13'O’T\aD 3Bee-"(0ɺ0l=)s;wт-(B6ȈF9LHóDD&9c4/Y/wR x|(StE Y!˪TaExGGf#\ YX\H3c β*fQ,ePD<$eC,h3,iX{PAVYyT(X:)((g+ d"2䀩M1%@y?6bX}*oP6Ta2N vP,@X(%xBC(uBL*d'EshMgP. REg66xL:1$CŒS%A]-+*eVp$*ׁE\`JN2ٲ/ჩl5 TƀMb =yrV=Uah~3xabo ߳f٩'OT 6ϠB%a ȥܾ+D2;ZUϟ>SիC~_U7T]+dYnn7 ]{&kFz岁כ%-[Ϊoeވ3od)ENHO +r~/AZ索Ǘ[޿ժ^r7m=m5Lח7zrS6,W/PCմp~c>&dMc׻w6oe2 xaAiSր@v G)) i)&qZO:(x<ݐcj蓆':DSAK8eRLLQx(QOс1w@wT䇞ޒ*PB }੮T_U;_Mu9&o狺{P$:Ha().<>hHcluB C$ ztGxL)>8\m08F7F}n!#snW"Zd=UvU'=iWF1Z.Ind+_c(|>f},)-#z|֖H{Le폪lzr4<" |]y׌dbrpYd9NtF 7W4 8K#?N4Qz'<^09"XN6.tn.mm0-qxuu c\wXr8IٜtNr-ґ 1*OdFAC"-KJrZI;WwE^} )ob!{h]5]Vu7ӳz1v< w Y,)iOsG$ǼwM)S}BOzͽ60JrPJYg|IlBzkŋnr+)sGr6;EausrpTߏGEiNIb@koH{dNOEӼ_G`=& |җ;'#\ѦFڒ\?1;Qf=|7J/ì~4i ,SH=mfh#RI52> XhU\-j=m_~i9ߏ3b& ib:7$!iϘ^ endstream endobj 2892 0 obj << /Length 1206 /Filter /FlateDecode >> stream xWMo8W݋\))=X@ qRȒ!M;P(iN{Z j4y3|QtEshM6 މy$|)IG2 1"<8ꥲ| a9:Єli40K%,0[Ǖq)I,%o> $ǣ zW3BQEUC`!hP20V7w>2NL`OAxF.cGZPKL%s>YhloSU9KU{~gTZymiB2uIvWj1$B&7bivt!aħG"Y!hH7p*Zٶ \SeTscIa)& q1\㪶˹GxirJ7˄qJX ¹/SޟkJTt(?>(Rߛ3%)Mr1ȝJU?xef ,pG0A'ݎ8{RU針k'Y!0͂і\_UTUZѲ뮗n-#\^VRu:j<%ٽYxÕiS ..H܉AJ{V1!>uzYPJao,(|ʚ)B^FL֢BVk۳߻1Ah?1Q68#<(ƆǁƱ 2^!ufZEU6|Vus{/].F HyȞfZz+ZE "eBߧ +.4zA5oJc໫_ɑg) 6(Uճ~{nZzҸꨛ"eYUH]H~$YOy⧁g:ku~vu ЩG @Ƅa6+[zԋs[$87[mD/^CW33sC7Pj3w:T{]>/};ߐkҍ^Fےٷ&ۙ?>;v珄|sȘ ǎWbf<5܀tn߸xs_4~ endstream endobj 2896 0 obj << /Length 1579 /Filter /FlateDecode >> stream xڵWo6_a`%%R5Mmi k1}`d&*K%9G9v<wb'FeI \1}s$';̎^)5|)zθ$I(9HĘkL]$NS#'/_^϶FU?;|^D8 |撉D-]w E$u$L5e$8$bkZ?Xմ?pE!9#^XL 5no9scœ][Xp۠"U!D8CɒTrǨ7nX C5I *}m"9s"f,^/mf3Y%"Dj 鴭gDu-t?r3[̉e=*~+XP1$C!`cb隶n[ 1r<Čܿj>H]iIO\ڙ^~-`'ʻqh_Qkn=P]"jG{?δVp/DZ/SÔ=Yge{fc͡t3Y䜉lrE|Lebu2>[c`QQN}Sǁ3oK.;A:t©Bԡ%,Š 畔[W8'k,meu0&8 j?4Cn(]U]9ߚ}8Pi(8!U?hK"7#kh}Wvzc |3B9sh"ƏٌasITAlI0ݒJw4`}T4}1/L7:]R8*AkωW(ƽn«1_ GdpTXOk0x/4Nz%|.w\7HE" N EG0YDM #QExo C>񠥚C)=q&jX]`6OȵyBqw MAD6_v gq . l柛RJe'ї59>*Vla!ވ"q8nI6lMB_w}]BU/7nP]ħ&A]-r@ sߠo]e44+{:Wk"C2O:Vi5$DBM \gU!h,{DBlC7g A endstream endobj 2899 0 obj << /Length 1538 /Filter /FlateDecode >> stream xڥWn6}W XQWj>8dhP#ѶYR)NCiKuQG䐜9s1yGG7J!eO'蹠4O'^Dшz$R:GM7ӂ7c7}a9/8q/fB*c׏sLNΧK#?:Ld2/r[ IT),y[ёu]fcxƓ_P3=E1_IrPX܌N7fb ۬kAjvsY#Zؔug߻|dEI :&QH1a)&$'izU+󳢲fO*-De|{XQ^v`mrgLjO`9y?6Qs(̡:x[ 1E!YS*S#0:J=boHPEUC^IBĶDS ܬc']AporQJ g=X<5hSg~DE6E^К](s *(A(QkKF]A~&n2t0 `דuf |zo:Y-ḩNk[G Vw/\)y@نUA !8]SI;G?7}}B Pˉ2uָ&Q(ΥX+pD9DcL~t&zP=IHskߺL)#,oYY 4-΢oIq(񥮗fyÕ\5Kx13('XP=^0 T e!4.}D(]R|UΥ? ÄIu~BX;/2^Q)K52/Xp0ob1a,0!gBR)K/ᤐCtxpX=v f0>]}|=mx%~gAb͋Rm(o׼4'y^u>꠶0LG?dٍ(JA"k,`!y֙ Ǡy<L6dia/dkKfv\rtU!Y6<ݖTh"8D6yn~Ñ][Z endstream endobj 2902 0 obj << /Length 1292 /Filter /FlateDecode >> stream xڽn6=_aeq(R=$K@ 1 MȒ!una@| f?sβ(3@ՌwDoy8&g2? f!rc-Z֮9wwEsywYֲ̥INŧNh'joKYY4bH,^~*TfKE#5ۻ&:~v5L5gwȺMΡWbviE'%H,K`my<]-A}JE~οHUXA׌lc}/a9(SqGJӹVm"kjRFM[, Җb/rOLrS/v1yP< h5!%|b-:njhyi9~qM016}VTb7fB~^h*\X:wtDZ'Ywoȭ1}CZt!՘;zFo>HOxvo:oKqoe/ՏS xp3uUN'h X"eG3qh6_lS\ _@Yw^v6TmӽJzƉӶهZ@vsD٣Rʷ8Wnrk0k8ӧЍRBϫb)BL^jLnЋLbJ:x cjzp }~qXGƮI*hJ?(D̻'q{ endstream endobj 2906 0 obj << /Length 1422 /Filter /FlateDecode >> stream xWKo6W(J@Ĉ%Q[&,v$^vL[Bdɠu_!>$G3y|3CI ?:)I$bR.bGՋ n^QcUNhL|_t6Ure$I"8O˷HRsU[0bYeYyt4eYG b Nhi\Z-V`lCM0u)(pzE=s)9*o|PZb K#=LZ *=x nԃ% Kb8/r ogE1m"30W]t7xXL//^ wKiVMglHpt^F~QHsZ[D,AHA:c_YysI ))sӵ.1I:AfQCFQR)sFmULAOEtRBl YţǨ :CqB8[[f@}V X^*ܹ{3.m9@ Ah+]۪ҨrX5*Y*{7Pi,Agw<:GvF}y.*,l5=+GRmڨvagkqv󵾭c EJ|( yIܗ[姐z%K/W;& I!x4'~xlmh6 KԪyC`yl=v|=cʘՋfC~!#e> stream x]o6=^d D֤V4MxCFc!)Hrv~w-jlHr, CG٬؜hՉd</x&-VCVwug=Q{]Awfe-WITɋ^hC/L"P=)3͒,2H×҂vMlO{e]t0Woc[ $]cPF:ީ"$ؠҐF$?a:itWڭI$u]>6* <(=]њIp&'!sHsFQUL̳GMK]㦣S} <Ȧ N1`]љ'!0OȰ+ar{ ޑw&xƐΪrgw!ȅK< =,3fA<+1Za gmAl@G; YJ!+?zזGA[hLKε5q- ;Jy\M)-GV^5r8byQ꟦"R8SJTR0Ngl_"ǹܮMS0qSi읡Cy킈ˈ|x_ Q2E^׋,}!)u~ZG8}4u=)y/{kz$B%ci;wa@Z D4,C7ue 5QHAQUA*~OwSZ,u[Ӊ~ O<|F3[W/QlR]_EYZo,x-}/Nߛ)8X L(g@#&o2L ޺Cp8;&]-1K%|,֣RJy?@]R{vD(5 GY#OjEiw-j'ֈ} l;ˡHA'(0X]ҫw=^K ag4 iQaFWHPY:`o FKg nrgxaRv IՋ]02JG5^fY ]b%D 3}7fJJ {dEGwtluSڨX 鑸I~$U\  & }'c's Mm=+#m,L7vh^ f1G)V/zԮ&k(eQ2s / GJX0S V눪d 4w[zmJFpwa'fn'Rߢܵ\A dZAv` Ute\YXo߱"Bx> stream xkop_B֖)!M"E.iF1 ZKI"KRgwfgI% 8ജݝ|?>K™%*eAv\N_j=!K„nnWMZ6/A|>Wxgle/D0"Q-+Ó'b% >O^+ƥ"b&/t$Uڤmj-1NjÔV,Ż&m8zkMcfDk-.rnDC=I&)QBÀO!t  _Ő1šFhè=g((.{OJC1Ya 1:a$炙{ap:S "%6 +zG0F7 #ؼF&h6{Vh#Ђ~Q׸z(-Gy(dؙ9ESY=4~0 ȸG y݊q`,vsڄ\Y nț t4v mG1;)Z8Ptu=\@SYM4dC 83._|sHKIk8:uAIJ?!rGt8Ğ#rPT2l 7`t-tTSȐqOM@O1uKAtI8~ZOW{.=X۪ T[4) 1yVšc^م ޤy (>0|=fM˷ 4ɮy"ڝ/5d_緰,?|Qn`=h.v@j6i1TAgOҽ_GObz5.YכoW -Q3p>`(bL2avvs*av8SDTJc ̈.3,]Up-' yM^)joJqUWA0*f,mվnq,IpoCaghןNV13I2pW_uyO9n<2vSu9eͮOjẼ͟ԛokh$$v75ϴb7܄,nla}scnt>0YSYsMj*ӵǣ(pX=lH YQngVCvfP MxdW5ʮ~Kfa ϳS& (ԱX*cljəSߖ(˳+| !~u+b>S=?4PDʑ ~^W9Ru(`6UHKwrPeTV~LwȰWaB .$&/c9F+FP!Mchxpps2;l@9u.Uq(kY56 B A/*/SDzsh( ':n TI hbK|3MeZu3k%t7~>ZClkmKئُ6#dډ@9)c68Fh@)rVj422kyMк -_2M%&:/scp=Ŕ &=n8GxtqtvEvO)5laAPn Y`E@Ot TЦe0*A<8L$}qImen: ?5,^Pb eW6:NqB>n*布_= QIfEhһSueI   뼢AuR>Dg1|{ۊC endstream endobj 2917 0 obj << /Length 2333 /Filter /FlateDecode >> stream xYKoWs X ę f gl f-Rɐz&.:G뫒XqUWF)j{vݯ_l_{E+Y͏VvQJMF71m^mFj@dǫK#)_H|J^2'O+LQ3/=gEhˊΑrnߩ!}V4ku^j-cPaaGW.1F w~4}NZ5մ5^kٵҒGp¶>޹Hk 9)u G'^7}QWD #CƕtoA ﷕0ԽsdvE7N/s߬yrSˠ;5MY䙛O;z|&>"]z*n<ϊPLD?#a>>d̴k@5 9uv9X"qn"CJkgJoEP+GzL4n[#~H㚔acUE1%|\+Ò$I"Tb&sip`%ӶMQ _݇z7LO9[>&h܌IgPt !,6q-ʍ/;f&@^6wfZa(p1|Ib3%3%G.DLB!\:q [C HM1 BL) øݓpoS$`)ѐ,2Q3{WG% :F/6r.4g\Gxkn]< =Ւ r8Pj=Nbۀo/L y+, džIcv:d*W1!O*`,*d#0*WwWsYxI gr5iz䘭 YLl|zh"6jF$^ŀF?OU2bO  tɿfjtkDNq=!Yڧ\"#2-r}pDK,i&Q0%w']Qx ׎k@ F*<^--aEn#0:(Z.J§tbޭ,y0{ qeP &OL+zoJ#Чb]fCgωRTKD8u3 3ȀV}-s8^~ G)e,\-$\c܌=x2s/9B%ɃtJ mNX3iKj?aĦ.F3G`:mrVj5W,ⴖ`t=N0ExAUFpOgy 0IgY>4cWTΒ CţFD[o;b?wGNiiKtE۔*Dxmk9&gVǸ,+40Eإ+N`MyAIs!s娫lÀJ GγR΄M @.~nE4U0!*hr Bez nLbѤU^2ǔ.xA1`hWvRҐ*L_nŢaEcB?:b?2HC^Ũ=cj-Y b@ͩ??mWw;$»k=x32h;bFMHw֭q>\JPSBݭC)fQiY& V(N>f:ȡ!hcdb#tL Shflƌ0d7im4(l.R\3KrW|p1-NCcoH(׮Ϗ^b=GToM}we~X41Y\ g5dHO \9-u%[=t!;!4TV^p\Cc/rG?$!`3WqуP*p ;@% -a } +[4;q'#49B86|oG('.`bB ^PX`INFLTmfaxJ-S- ?&R8,CtͅG%P endstream endobj 2920 0 obj << /Length 2768 /Filter /FlateDecode >> stream xr>_e䊛%QTfRԬk/s%v7cԥx_hˏ1H$A O^UǢH.tpEz'ooRW2EXȫK>q% ~G|6{ә4׻(MU8zӻN(z#u<>&/!E$z(jEo7>B2.pvv<|`l͵ P*;Ҟvt)!# &UiJJto hHDDAV-줌DRI|(ۓ IiQ{膿],xe8=H+(0A9 m7$Bv{=Y@ߔhA/=ox!r,T$p3$6B^W£_SjEYqL2\B!eG: <'32]>-J#<)N-hR-Jaw<-k{Qjߢ?w;V MV՛Uyj)X7,^v`wFOӦhW6=_G.qR>xd=,޹M={BKN-K{#M$ h P2t\R0zKIuv9/ Gs fYmAJF+KeNFq b18݅NJa5 {ٹ`FI6Lh eE"yv;2L!wB _pB"sG"YRNpHGw:]Z=!eW|ÀIo^)IDO ^`뚈[hAL.ڱ֙2ͨd h?mmn|ZRњ崂Qv@^Ok9 P,Vp-&FGR9>%=2$V8mx> Fgk|Aw3sbtZ0\_grUg1tq0QЁ%祮oA6-!zB/۔dn ]2۹JiUuj]{T!}{24\|&؛.ɻ|Js |4#/ԾkO9N~W“#&<sNu2ޜu7*;c'0`5cW#!g|sDK)>ޜGFyǝ_=)Q7y W6LE UFGÎ\˗iler Ϟ|c4E2c|]EE>0vUn- .WfOKFTX7*lNjRhJz5'b( Ss)uy5A9s9䃺[1\,(hJъ vW6~GO qeR 5 ]OboEizxX +ǡ1{Ix RktOqgj]z/M/ UZ2uPl:$sb47%V?cl)ܧ/u;;'+bW;>O4Z޳v # KK8o^hG+%FLEisC $@۹> >34us4|0k[3s:;:w<1'o$IJ>М9G)9s)S{Wo̸G8KX .[ɪAqΘv"ՋueS}^wLWjU;[h\[s7~hnPj:EX]*5B%t`}JBb_uxa U$3{ x~~K&*g_,Z6q3 )Ư;e׳vQЂ] y&Tpԕi>+yO% psgmwτ}ʿ7Yn PgKeb'{ d1#fϢ/OTUl[Aի$tRĮ>zJWmTm][j@~u@jwd"&0h@z`o8wpL`8_VA0n/xz'06?0$1ϥIaD) V}* T;%;81 &TЍ]ᗻ.>X}De$1%=[ }B2h霜E."Z…> ]@5C5c߲[(S0Bt߹"_0 PQ\X Th}]2-<Mi$:䈹[p?KI "\YUƼ(Y6Pl]"@9'Rjff\6&.ğ펄ءƸF.5[-~:Ue=`^d)niSgw!MXx6RS͉g4_]-^Ϲ_V?߽,h1d뉺-=y,2%nzV9hG ,* endstream endobj 2923 0 obj << /Length 2211 /Filter /FlateDecode >> stream xYݓ۶_鋩G֝$qQ'I 'ѦH |뻋]@s~*?bUū"I*-WUl~E|%/pͫYqTŕXm6/AF=$I:L,x;"|z]ס,D"ֿmi& Cί+J$Q zyF"II2Q,Awڠ׶%%.V̢sX鯠̬R3xPFiY ŒNj/DT}i4tLjjIy qԹ@)U ƃ&  ;ӿ"fq{h7 =0Aց7=n[Y}hRD"I;/PaNV tK)t+~>?l"m/L! zBjlՖȪ5=n |gs=2#iC~i)۝q-[5wzKVOtS6{;4u#m@ewmrl`K0 H[HFAGE!^h$˒<7eeU~[*haL v+s]%)߮tp]]P Q3*vZXAd"բHO:W[b҂lm4 [> ab< q}XqޠG_O4z5:.x")#4ZB]YB&,Rux3omsGA FDWuO?phPC G징E]q3MizS&` [_ܭg%FXj_t)E k#TdWjkph3X*譵|%E(.\E Gl)Ȟ~}7y{/=LGs7šBgH9Z:C9=(}']3SQpUg/OM/G_\*y#qL>z3!ԓnǢߊp|'7ňk(c+J&8) `-`>'&_n#nOuut_iLDF0hsVanX?HK-DCщavΊ/WTH4@oAbGETdY.lp_r(xX? L8 0 WݷztZ7rXz~xs^qsn[jPzG n>l9|Nӽ;'˟6&Si4][D,JSRfܡ9 : :IVe9ߟ㯠1g0jS)¤N]GOr{ {fo-`Ϭ<x9]Z0yrGMea,dV@"{ Q *טIb; )rlYD9$@).a*(;/>w[U,3'McHv^G3 O, 4%> 5<՘?MI'egZY߲t]vRݫf.`sj)LRQZz' wCM<^zjj4S) endstream endobj 2927 0 obj << /Length 1372 /Filter /FlateDecode >> stream xڥWK6QV 4ho=pez-@ =u}e+Ͷ7~3f ?&dRocA.x&6fl;Uќ;lc!Dnc)UϏlcnc$FLvQ+9xo x 4$X%<,kDŽ&$[-ʻ,ză d$Sq8ILwA}20 B"o34 Q@T5Ӓp)C^fh Bkj'Jz^ִ$ɿP/Nkn-[l-1hq%a!S!euRߺ=%koW7-~(*`g<SsX6OEט&|jA7qi( 1EweT]8K \a @*|YLy,Aa}O)ç Eߏpy3ukG.+{#iCgŇw%EWn _Ff*ET4d erڗv^+ .*8h_e KK-뒓QE@!~,r{\׀ du\)fKٴ-7bwl3 MHI72RgDa5Bn"4r8qUa^eo`y4HgMd4Xe j}$!ݹa_ KT,(:F67e T-kߋ2nkNa- {]ǖk_ S$Uz} $)Ȗ$=`e!ireN(PPv{rf =Æ~ 4j?O8zl|{ _&T(!d:{M_WYq8iU 䂰7tv`џB0}c|V |pqĉ4ܝg]̬AgJbw.J"!5sxp-hxB=-mUy58u'DJirbPjGYA8쫢 +eVfqvHE3 ž{iAZ\Cj<*jR\eer,ݡ邥RJ(ULw?E'Nn44v5!΃ۛ׻؆~DH)|?v5ʟξ]sQPϱ/?dO>6ZIgX{ۋhK7zBOn;6vH=#5)0aBmw\M!49N3"Ř%G2ba3;ˤkڛ@EWdj*3y^$`fkaj) NgCs4'ReU|رJR%?8;<2Ae7Q C endstream endobj 2930 0 obj << /Length 1303 /Filter /FlateDecode >> stream xڕW[o:~ϯGV ccڴթړUՑEή"0όg ,:EZƃ=o<Ox2*T*kW1|z!MW"*(doWv&SiGi&JD)*RbYkR/٣{:"OA.*rHб-%>afʍuv@SSIAVw\hK:L,xl;>u?ǐ7t"^Hv0q$Q7|m:WAgb3>k;t}N2)}t'* Mӛ>'B)8E;2m BZhi3Y~u(4CSab(хGM!d޶[FSj,A`\;ٚM9:,<ςmP^h[c}9Ln4IB#eE1C1C ;ƺ ~a<568zқ[,(P7' q^S( 儞rUa 9>SUI(H]cSAϷ/< ;sV2cCp/'`0X6OԥټM2?޸G%H~HeW[- 2|wCoxJfy Mņ4*$ցlX%c#(- 7n{:gZ<`^HOֵw!(UK7RLoܜTE.qT$rH?!$WH?cdmFc~sDVY T*FH|_vo*8J:SC&lPz)A-A5E&q" *R4Ug~I7.zokS*=P* ҆ZYd+ۻ> _0?hrҔ5lIu@r*X 6| c[y") 9*}:ߟeG#`zM~ e"8ܙt'L_ ҽ8언ˬ J3fqǧϓV4$@glSt3< AfEePXHȑ"[Tj7L;086N >Z"l'Z4o/@+<|(Cz2t{a5F_zn"1MSnSlSmNӊT-4 0Bܝԝj~9=^nf?wQ~2fi~p^r>l6oov endstream endobj 2946 0 obj << /Length1 1626 /Length2 9213 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 2950 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 2952 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 2956 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 2960 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 2962 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 2964 0 obj << /Length1 1457 /Length2 6520 /Length3 0 /Length 7517 /Filter /FlateDecode >> stream xڍxT6"U{Dj LBHAz7i MzG@s=w=dYϐO h>A~@Q\@!B66#(NfA0[4Ʀdp ( B@DRd8EȦpBBј}~pb.$d hۢ!.A0!SvuA#2\(`AA0W[_?!a00.np0 0TBZ /py v.p/(`A*ZhO4/E[w[(C-@E^`P $GAajsp"GEB@sp=UU}QW1AD⢢"(k#/WoS+`)`>}PO+BAA B P8ΰc?kLPO#?A_Op׿[,`fW>!q( ((( 3-Q ?Kuꉂ p|y/9AKijh,5# `øXza>GUXE]G@9s:V>k93 z1YE5Sh܅BG W5̡ jֈVS`NLhFa++&/؈-}.oOvktQ ?VY:^6*@|%)ʑ6Uu>qX# ťbw}=(-0~"lyޥMlVe4 z0Fa{WR Z6 =uf_A+͘g[-o;z" SA fYovEߑp+4\yyz]'XMI 猴62tnKNP83x_%:L:E:a %x=_oZ%!49ڔph$@v̧f~XS?ηe0L>,*{*`C8W{jq(T%XBaM"m)-m:Z=#Mg_-.$Zm5~xC1&.V.KiDbۉ`Y8?}:LV=UӖhoG)4A8* /~0}%;ݴ4}B݊i`4<~fLOHZhZvuk9B-ՇPsGwo;ArI~fk4w OZ/UKx"`Ċ=3{9ڻL~0YzR$AUAg uwP 8f1/_~߼ŀ5zT2{8cM~{bߵ/_l7T`8]=qIje=իM&~+ 1AԧpoKOaLɩ^ _+zR)5z`b|1n#! ɴ5opiX;{ئvE}BE X}Pۙt!=1z0hpXOGs|EFt0j^Q/:~ܢq_B7]"5pXͣ+7Z$_-ĂOwԊߵi.6qe|3d7^}Z{$چOx,gnmX6XD XgFKbYǴվʼԖ_}ڶs^e}3VBld@l=v1mKb^6\ Lwyߤ(7޽\Iߝ>gEχ\Au6YTEJ, ^Ťnr/GUĂ5Lz/!pT<7pvM ?XoZ}tkS4#o-+UoWh[SZ_wa]ucjXFA1B0(gHy|}I{j\beP؉`V ^Yh;Qާ|e?bzM\><)qPI8㤓Cj¼s·'(pI/í,r?q\KTarہy"9 kS;>AţՈ}c]s(Hg#szv눴Lt! #dRb^nBJ@/q-oC?53}Q>V9XP3йr$c@e!M]aITsm6w=fE=hu/,1(W~Z]Yn); oO؋pI|ڔȒ]bObMralFx/[ɽdك{<{[3F)余 ƖI4vOe%G(K|}1 ݵ4ywq5+3& {GDWo %~\緾M*[ZשRH\q0X, QaZMc<=YJ`00 mB!r& |Yuq=9Ј@4֭>ڑ .]էV`49g=W.lJp&|j) YcM*"|Qr0] W!sk={OJ瓗GäL˯&4G3F%LгV)a_ZMgȢRďm>u4}>PeOZ3W:v{$zqKe43T[,}=3 & ~>1c~ 9Qd2QTۺ}Ιz&em NqYgI!6ZM$L%Ye%i@ai FX<2n8D++A_屾.I;?w*xR@$ՁMR^.{(L qWf.R_9JtUWnfȐ`rl?6(]Pֹ i'fyBmg)ò{is%b5kxCziYHI@ ~棜D9T#hf%deӑsj`dR𭆬]4Mdpy+LY(\2J荒tL>ĵ1#O ߥE3·[Rj;/d*62NհY Zn&D@\ȅ+oxf?ue>Z { :R} ;jٳ~SjPy=AW>V97֗wi?A\di$;33Xl~jy+74wUiɺ#Aa(t*Ū6W.js9LY\u3߲okk6և?wgoP\jz0sIBu^=˭./0~^R]s,QQ$v3jrEHYI" h/p ;E.+Nt<tWzuz| VnH^2M}-d,dvEԴᣫ/!I*,@M<3EMP tn1j{i?a2W0DHqG ,'2:RN?|!XM1OJҏ(v@.hSb_'{F(fCnyVQO&)\LQU `_F_S۵7(S7gK7h@<H"d2M9R}'1.4(4Oͱ0y \)ζ33助"q#_=f~퐬3ַww&`[,[p}yYdg.;B W6~|o7!ywjo09XFuߺnߩM%CTZEh(ו+bNT^&F4λㅄ[Zc,*13T sX-OJE|m=bcG°\x& L݉'Ӹ\{1$]衳[o bY[赞RF3k. GM XmL~uxCXg)"c4ǟڟQ ZxAkROr(b"Gm]!w/3N*j&PyfxUҲ}؟%t]9Yf4ܷI;%#},a0;E5ݘ)v/+9#Or{e}%kpyX'Q5QdJ4#9<,KL2{,vwcUn3Z WXvoNDmèe0p]7,ƓfXq!UgD{6}ar> 7Le"e%lz}j_ j #)/;r3g|Mw|n;zF?d\p R2|lxn5"L&On|k7!2RϷ[L}g ׆y,slsoֺ us7_D"˜z 쯞 fzІ߰1sm  \.-`'F IyP*}tAKpKƧMHgG;N}Zo|w,U6~ M:w C7.wy &BS |AOES B-2soYHM۞^L|rJ4gZ^ۑb~/|H}Y%:U Gj$:sߠ#CqMx*0؉Ұͩ"n >Uj2& :֩~-k gˮ|}攍+h܈"-yOs ؏ቧ?|PvyF|JXZNhZ,<-*e| nt@,}(5 8hԏeY)U/@Ǩ$A%VGP,Ln5۳؁Dw~n >O-@U)6B O\! . ~u8y򱸨*D,T=LYg^2Y_ hǥH\p(-Brwi'^E&ێEW%\^"<+z':wh־]~mZ_po<[ݠ>XֆtzȕVI,*?5> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 2968 0 obj << /Length1 2881 /Length2 20706 /Length3 0 /Length 22335 /Filter /FlateDecode >> stream xڌP- ~pwwww$n5C  I*`ݽGE$fhvtpcbcfH(ijXY9YYّ4m@#Qi\\mp2IP n`qYYczX W$* G'o+k7p 50ؘJ@7k=89hnrnnN,,@{WfG+a:F5@ rY~ Pڃ) imBv6 WАS86VۀOsllW N@o+":X2ڹ:@;/@\]l\]m~+ R 7W_$m\@{sA6ʰpwbrqvIc!Y\3en+/%/1_'G'% %}T7BbcXؘ@V6H ˿1]lc?#Y8:y6Yt$e)_pq;*x9X:& {3c);=憬\_lߌe$ngohocxn;5J wʹ `eo#m\m@6nb_{fgRutuXYG^.s[ ɿT wF)sG_K Xeo!0;8].H "K7F<߈"_ `,2;E7FE7sQ\~#0E_ F`.ohF`.ڿo\#_;wׅ _9;? 7; пrN_bڸ>_A~g2f@s[W;0s@na[l r/{>  a>@x2GZw4yu['Fɴ3!4CN~6;xZ~-)+%'&dGDNoSCŇbĈDL~O~om!{yT _z~j>6[˭X)V+m,UYkr87&bz3/٫RD$X_u9jMv^|J|WXԾx 1kB tkヤ~c=drXxv.|2,ouPw4L^3XzzJ~2 GpaPWX;R8?ӧ{k6!~A,j李9r>PU;k=7&OKc+CgZgpw>a -2켪Npe#`tRorL] fs,}ݵ2r^ʰ/Ikٓ'*✦¥ ra%<Cї4W#tc,SZS?oRܤ&N5H2Ϲ/u 7&{gc-d)k49f#Aʼqv6Z+Xc+BmT䝃҇rK#AsRZߊ14Ϫg] P 4f#D?ɍtM\LlG+cw}i'ypȇ/4j U|#Y:#on'VUfGF}VFqI_rk!z QmT'ݨgUJHr=Q;`?[;Mj/աexDgrI,{?g"h]G8Q%E~޹~_az*9mlJDf>Y]asF83[j]U_i7JC]M0o]lW7&U4.uaŃ]0s|Qӗ2ӚJ|p&V_<6Pƻ\?Q# m_Ǚ(f3e>ftES3^A6dR%"f kz~mz )b VJ}*2_gHVʔ7 ?đ/AWR^&\$;QYlqј83^3Ty7n?\;!iWJǬ 43qT= l۱f$G #S_1)W-bS&Jn?>E6Vץ2ڇ%<%Hoboȴa.r  Qgِ,z^ᕿ 󐨍VlIԯ0~)B[3T06mNL![AaiޗOMi7x=.~Hc<"AgͷVisFƾ2ǻ MG NV:N>->ʼY|K릎o@L˶#]=gv1zdxpdE+WUhDzdWEE5h:ǃbEGG*V(p6e ̽Rաgetew8%tNhot5Q5>h*&)~D>ŻD[HW>ޭ@^;f" {8!_>dE,oy˧$} _+Bedԏ;4a/7D6*gW : r.bMK="İ|wL|Ѫ$8 ͶFMVGp͎&Gzd]S#`Bqc@]m߱BܟYivKct +srOm*n;Q9/AFxXݟq!{?fL!I~{e&791]f2wuPCahΜ=b֋Tw;Lg=u׍d`W}UHF'3"0fMv/y>!ӑJǕ{q;AD&SX.{DhrGpXK&˜oQ44,`Bѣ< 5+z6 =:єM[7Vf̴H}UD1SPiTN=?qx1.'}17rv~U0Z&,4x"0ֈۻU µ7KRǼ3!K&K\=x֢ 2jՇgg#T! }MHD&Y6\oסԤc=[{\G)np .̨}`35u_y1 $m.I/"1p!8LY9z")_ƶʛnkK M: ) 9h˾uJs=,ަ^'8 yE6\WJM#"ЈN?[N4u" ZĞ%r*L 97:@(2皓u]~Z:`&ZqߵLy*?{?#zWc"΃5` d%aA8=mLMFNM/~YsɌB[oH_|fjBP5ߵEWR0CmJk~TBԺ>L1{ݦ4\tH!Rb1}kN@ar[])Ѱ40d\.8I{zx%Ӌ0IN# Z1Uipיxh|- CLK ~fŒYP<}<4.ra%q _O^ n0̍X8)&NrqiۄJDPx/!&||X֔4'gųݦzԥ;2܎0-KB(ʴ=Z.Fl.'IKuVs!UתﺉϙSAjj>eh$Շ(Fz{nLjvz;+Ю2#7!hwQg⓾2 q=M+t%z\M`DDpD^$%N֬U^in [ [;\߯Rb`&jt+ C!?D =koDe?^ z0UDp=ڇjDsuv>qBBZD+tgU$?p]ñpQrJ4# 8O˃o&6/DQwV{ʔtr)*FJ˸Ai6ިy2ej φ2hwge(+I9$ /]JƹRP)@qzk"uA{vXo+V>&rdž5j Wr1sXRDN[;J#Vgn$5/i-{ wgsxqPMzH6M- ~ .pdg@Ҏ)W_]2 ]&4$>B Ey0}5$c*eRLYUĔc~ƝK;` ƒ;ΐLZŭwcB2,K8X)OgBxdX)r;~r\&*k|2? :oX_x[<-+FPRZE#YL&6@߻!Ҳ|(]0po^1BuIDGA@^GEꙖʛ׮X:xŋB&brSM^YOJ~Q!KnaZ+ısΊ#o./Q3Y}.ܼ'F6V#ѱ&k&Goˆ>=pז(z+EP3H{ E@TVn$Kp&PLQn'@f6ŒFʳ8vc@S%VCJqBGw/yy4Лo*9J-ّ9$$T0F=qGDzfÁI3G|:ZwsJ_p~6_g`.4 5;(tJ`;`nX]%(qtܶ;33\ yT ߸ fn-?* F: lBb^'K|ʊR=xx#h<1R5ɟ'2avw/MNC/H{XT`6|DZdt,-RB>-53L'RO~TTF7@x4z+MYzdQ3΅{1%clz :B׫Zufaq-XZ? ^xfڨ`OヷG`7imik(GX9hs9z8g4. YnO=l|8S n|`[Zmgb[ M\P;!\@Ҙkj"'d!}7aΊ 7%+NhH;rBbd,g8QZg>p4ZM4M:T@JEHW_;4Vb=tD˗rj zWoc1K'EҸܪHJV .^X0k ?@fUQw5lxAP3Tp(i)x⟢6=ҧf&5(N֜~1=i2˥T(I[­FWZfURxQ$ 4ϭ+"HAcr|.qvRO| g mW[$]@[5;5arb5ҨH$ٺIDzr=!5nZ*(8_[#4&w&Q7AQ?p4B׼řcr2.6H(+&j(' h vUcLߪ|޴%£GфƍhW -'\նR|ͻص\Ɵ˼){EV2VFvgZ6ԨY$a5tҽJt?v' _u4pbWq] Nyv},Z*VObwS 7!kJ9tV%p0+tOl~\]+Ir=ԡ{aA65Jը .x)5,CN_@Ta 3mڇ.vۏc#WhY Mx&||4zlI6Sߓ q +=\&/sѣ/2!KLL4P { ֥SJ4auئŋ|MEL,[ZEW}bF@I cbh׍IqD\^v%L!~DąfNi ުl;q EYl3RhaFBqd5,zH됺(U{Ȼ36ive}C rd=l.dFk9mr@] ,z6k#oo0(6[_T3_Ue8ؘ.(>abS!~Nx!D ײkB񴑯X^R=w ͨT M$*A\xv,֮2q AwxcGCOz"KU~KqxW!Z̬=*=~~YIrv~_ʟĊX"lq#K?_ua[ Q@_ cD69:Qi-8x_i۳2*jDm.cܡ!UsN|\`EьiTaՔyhr# .쀡ON{,(7̔; 7h(:-~A) WpqM04kl8iǣ/f4]o>b׌>Kd=ewo DBiq/K?1L/$N1wFeG>_;倢D.{d|:@p2Gf G:. 0adؙ),yL*0uޑlo_#,Z dOyq~vb&@ _H}J<5,'(ZW2c'4=MsTtݩ~J|+z 3mc&rX{Ǫ 2jsFJPvwޜ;jάa= } g 8N|ўnRB9&\? r }BfGxQ h~ rǤW<'Yɛ~Kp.WB>GXK{7m"%GKj])1ߔj?ILK-݊ZV.S+izTh= ./]}&,wFFͽbWoV{_^zzJdu;X>D c037]]4OӑqtvbԢ>Xi솱.mq |6.5& |P *h 61Æ%8we~tiljnSOFhZL䶅8\>.--/lp*'/fF"zDZu"1m&ErW0zG"n= TiI(t|a yW)b_!ٍϗ2Ů[c`ƋAB,z4NTdiXX`Xzq;njGZ!ZfV b#\:ϔvWLԿ- BMz\,yrBa5Sh C_e~R377%rlލ7#0 %{+H[Si!*/\وHhXRw@_NoةVߔol-pM-Ye<ǖ{ Q"Pz8A>GͽYj+.w:W[4AK e:0`! +hh?Ia&%b$CؘjMBΧ!/e9ɠG3d4l+c8+u t)e]"q ϣg9c_R2Pu{kS Z]RX'Ӟ$Me^`I"[&o/T iLaiF^ρR{$Fm[G͹ga^aIz&WEx7e4B(c:2>rE-j-9xzdzr_~o#4w NLBrm3նKA ]K1K1{_%3<:0X7#.>ft`Po!Npc7 O GûeKhjd">6CcStőh5wMKd 몹>j9I (fo80.Yx9>*@&Mu9zX͇rskP'ܮTIǟa Ld_?D5:zgu h9^_5DEñf  u}[beJ0TI*rw}Hnۓ]"m7g{rݧ%לOh! q4u Vݳɴ~a79q!c3ZaOeW:WzgkmA6- GB~zgO p\^`,A#(!ҩGTtUG_]xXJFvgJa6AFʿ:kq+-[{d-h^)Զհ-IۡwU_[B.)4fN)\I=0mk\2l%;oo1D+D wL` %{~z4J!H2 Fa͕ CF=j8d^wI6)e;Kq ߍȜ pwXƯ^06K1tO[@'Nb!uR*b4Kw.2_<^FIlE@懡ۇ _``~e3jw4 - P<q&- 8T=oB&_/e1 {Q-NK0-c`Ay}.zn(gW@獪[bJmLF*TMqSB7嬍dE |Q(xfGo};" [^kQn'ƕ- aJ3;#Z =rw{'NY_XhM㺡*NO(R!RZatG?*1nIb$"Z|y͏dyXĩn9=.vWF]Nņ_%qP2/B'28pc|i%ކXf!_n1DTl6>Zch'c'?A}Ι|k>LIr%x5%ˢvI:?:(!0M!֗4NdHoOW'j8ܜB&ajap/!sh†PlO˪6&۽3C$c%}LO#6ogBnUylR"dqvyl\Rf'~Ն B'Mc LȆvڮ~빁|uK%^(r VZK?ُ[ L-yd XT46U#­p\V; G˾Hoڟ)'~p@WB`RCe"`_J;1N2F^- MCqnlq$Yh}"]&58JK[OMr*|RݤFPeJuD8_0t n}m^A-p0:EI1ves]֐NdCfZϐQ`B2wXTߙgjWpУ4&-uji#JΐyHÎEw}j񁲾 7J6)׎ DNzuǟWs;v&=l>wuSpdNO9cTȱvPʦCj׭5nTRGan.]mAnM` @w: Z)"&]#8K9rF6`b9H74] iɲKk]Z샇`}ٰ<(MC vV8I'(U\Qw]g2HوȲQ_[^~|OK, \\-za# N$ rdaB㥟p 0WYUwÌV# =~|Q`y[`fb^nΑ'-"p˝2UDURt)Qːu5P.-R}?OSXkKS86B?~,~k){Tg^iuj_(' RO6UFYɜLZBhE|,'RAg"O(puSz6zu38CA f ۤwxfgGQi=G<%B|O|ruY BJ1m1Sm[1e5!NXa.J$|Q]nIJ]"mXSSyEVmwGdt[ 'ƈ\+2?bR׀Ͽh'mXsmbC`8>s 7}hBD+13AMBKߥ$'犴CʇZ·)PB~vi|tKhe)B@BVl!נG {9Tѭ5e(^}2hfgj_U᪽-$ D_wD^Oq Do<:g(-ȊC'aOIJ".xo% ȯ<ڍb.A7,gwdL[~rMqG.c$:$|!?w ($Ky=sǠJM цOG}99s'屎i A-~<5}:f)Lּw+lCwxB.9'h[uh9z+ozG;5ZIl=2`- 8٪ߗI;08GQfKv7-y^ [n=zL0g)l* pfX72vXgM&bYxY۫K?"9d}Al+{薈OκRr8JrfYI+:j H1tˉ1Nd?>Eto䐑 둘U{% qBHNcvVbeN`zK`kzʵS'-@et(XjN Fy搡PA۵Ye95fO`-pkb猿wK&vA.n؞b #0٧e,㇗.}[E{  uUT4#'`MpE"PCM!K)^>br͓o$_]PJP~7^bsG";ph0'`3+B/0f rQڮT;)1R8FM|02UK.D&d{ }(b6;tM\Ï za讣G0-sP1f.Ks^'Y8<O5~فq{Z{CߛARëJYJu;(vHHG \% $\(yqzGS0sKn_4ا 0k3- <|ra Dd^0O($js9PQA:A F!۟uZ*C\4 xwzz/JC «cdNv%/=H8gSYX)a4 idϪ56\ ͏\4eM3jGG淎 w&Jn߯?QyV&nyFYŶ0^c}FT^Id>GU2m(iSN 3p W]U>,Λ8ʤ_ly4~9۟vW醴+~&d X=,r+ok1V2MtT)jOďV3 @IoH{^w7K*e+5 t|.M9vWf5{llU54ؼrY2-$SɧE:h0{l`-a2|&Xӻ!IgDueZ96V3±{;3uB~`;9YQ@4EeMgFvk J!^13jCVqI&kzx\Z^oTV73 OvN [FWU-r Ds>Wa 䑓k+ρ:!iW]:'P#{q"-`י n׮U]mUF]˄@c*ى䲠$`PoZWfIuv=Vg& Y@baOec $AW0Zx.ydPWM}jDxs /Sqa|n筭^]slқֺvk(8{I{hl'Xbz[Þ|gOwˮFH {ǫ=jWȎ?VIA<Yo 8lrk6J(K A|F@'% Ԙ¼tWgM-l"hJrP?ZtвJ*!?f$ pXli= (:X.8?.\,:Lo;Z͍4_]]g!-0X: :$򆢵[/+ UFRҷv{&WԖ(P.+|c%g8S@^(WI˙76OtNZ 6jw֧ѹ9knN]$1ݝ@da2=n8lvNR@&/<끚#d<0fJŞژ/ B%G>Hv R./v .0!rU6yco,@i -㑹 MrLFGᏯZ:;=.V~'*>?ZrV>#0 HUVH%c&'+Ǎ9I˾~jњn-( ;sr2OL<%4\OzUx[ڎQH; ^v("lRgmWAnCz g4kȱiq!\WSqVxg"!FbՑf+A{EkOq\--diJTԔajoc#IO3Tԓ憵D݊62~//@RbjN zȩڽ %FlARr)e ˬQ <"6X81C 2}=Rn(9J Gxll&δr%rQ8n 3W ޯ !7#7Qd]z#6lTn]FiC=!l JW ݭCHub tXy{ٌxh U|RёWs4em8V d>8J$GTޖjdԔދ|q=(> ƏǰݚnçsI"X@}F(p[:"A4AU<|!hJM_M=Ɲ搌$MU`W01> Ä.lZ4ze"&(GaձOo&T-d_OhÿCR,&G(,#nZ8AO.2.3V[ȗscMfk )-.7lr_tׯ wG>nCI MqZ,iLBIH5G]Zw/嶺U+Qu VwMe";!2V${c*i %Tl }Tj!CEYa/! E?+K&JE ´s̀RٔLf 4Z{@y]Z4j[(wv.M![vq2-}HW\vULؚo@a-RK\Uȗן7a`6E4;v߾ۜ>!ޱ`7"/ ѯE{@3'N}sW6w~j39j_M/ d~":mm_[pWB~ϰYOAutRNy̢E_0`}M5?P5b "hC!퉶,d3|DuI®Ă\jZNV/4 j5 7ě*?Ă1԰E֑b\D'L~5PdT].Azپ\64=|v]sv}fMeܦ|tF"<&wh;NL)S驮k+N7eTiM(sտB^Pl9&J WgrnmT lA# C9Z)Ő몯d\,}l𼾶f]!\^Ncre/HW=ے6eyr|h嬣Z@aQsK/L*h"N+u' 9Zc$$rۯ-˙h'Sa?ZvxK590/*k'r0ONDF`^DV f<Ԉ-$L{܂]6B[Bo|˙l:"^`=bѮ9iJ8Njfߞ$㮻AB48 =wt"Nx n4xQGyaDZk A>|Ltn.ږ 7V ﻯm2^[05/4m2C3(n_@#ʊĭ QjXu|r0SJq"u'i&&셨Y ̆Gl!3t{N &:&+MSCUxGxVXq''llo!0ݭ|oexL5Ă]\?ݯ7‹7-'cTY- )13PJ&M Zød/ b+->Q wE[|2)v endstream endobj 2970 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 2972 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 2889 0 obj << /Type /ObjStm /N 100 /First 974 /Length 3256 /Filter /FlateDecode >> stream x[YO~WFڷh!}IȠ<,wmHU$\r9٪#Ϥ6ȄY*Zg26^PgJJ"ᙲds8#3+Vtf%9g@b2o:0,p 'rGll&%>gBrC=DFs^g "s*F lu $'# J p 'aW=";aQ8Q|I`2`gL4&bvٴ0|'H2#YIBKq$%04J*Mddn ")JRG)S,;cC%H$ˑHJjHE]%|V 8UeA)%3rZAL+H]5Z ;'eh *5!jC@{0`8A4ȆM懬[ EXhV΅8Mv nM2l8y];h` 31hq t7BloHm+ˆD =6 ,XYX 6"] GXHXx!v)񈍇w~vwt7;wE@ϔ:Ɯ&ҁՄ‹?sVw[D_i"-|NtYI(ljx!dfM[m*lE:˱r&w9lձoe[bX:r.\Bdc%6wc޽/7=e] ig =E]Mpw/a%<xus|# RwRw!ҚՄR<@. W4el齌˝ +CQù IOw!2BBٴjAj[&NYEY5YcgFfsUgdufq0*؆[ԌԢREx4"U9aDLFiu2CҐ^8|\O $RB%-s~$tn_-#L1fb_;Ԧ}Eu2ΧVFc\=Ffd4r^c{+P,:KќN\%(B"/&أ t'1Ցԧ=i .>h&ԉBVEUs7dvD>i1q_=A tS" _T 7.mGIܟp"ٻ& Iw5'zZI]z5Vex>\0QlT4# T~ XM ~wOo\4np;!(IMj nȷƜ1 ef2SS,O_YF׼ 2E=-~ Pdys=sTv|{QҚQO֒[rٶi#,7i _UW4-x~WrUBRg,z@}4qwu8_$NLԩ?q uv i+ ɢJ!bK㤫Czc=r/u"D }LN֙<~L:)AU*yJH"VVZ?Dі"F&;鹹a_z6$}5mZ׆++MB_u!a?H/^_>bWpw[N @ “9 b;lusXt>]FAGei?};0;ڄր^fƞa=k6k+'a]c}6`%{2h|AJӣIS!+m)M_ۡ~/JJ?bl=a=eŋ (ssP";v.ׂ]Gu>k G{nA!_vjPg#}cg}hŴ_ BvM*׋'I%X%iI%k6SInG^C7ˌX#Ѩ YD1*ZQY5z5,3|j.nqY;__SbP ;:˨evu]ewI^Bt-Dze$'&aeT d2y7Ҧ8̧ם$҇]Rex7zO:|~neSr ߏ#[iFGpו[D鳳\ˈLy|e1RmVB(; bT&@Ɓӏ͵7*mo+d$ME@q0mXL)Ѱr6ʛki'meߣj?(&MCg7*F_?^U MX4\#ME~6FIR0)5&!vA|cZPCP:vho~ JiPCͨQhC~g$n䗪%hQ~~gx)܍*[R~t Fש_v*R0нoPU]bUߧfnP[|]8FРE;.MΰCoteZQIyՋg\(-һ`I/v4 Cmw}xP0ˊ&ˆL(\[i#o^=_w CG-9j|&nkX̾6RAg0,I >oU!0z߹(`*b&9¬DdDdZ"mAw q+F 曟?B`|w}x y< 4zgh $ ?&MCJ endstream endobj 2974 0 obj << /Type /ObjStm /N 100 /First 985 /Length 2156 /Filter /FlateDecode >> stream xڭ]o7ϯ}HQ٤it 6FkH Y%gt,[OnlHcCT\Cf ^E/@ YO ;LHپ]LՁtfB% FR4Pk֨GQ0)H;dֈEJ=DzX!!FQyn|&PCQÒHbHG)$VGUtDH@tln ͼAҒD4qJi!4k)J}*lLcT1A i tD6BiClBj2!RDJ ӨdtY!bidPtܐuHGcj+8j`EUSVnVg$ ]J)Y.:s`j:sf19K69[3,$FЙK,桠tI#ʉ΂PdH"JUXG["uDHGHGT1Sb6׈J(Hj\Wy(d%y):Bl݃NHPR9gagp}w;zwsr*뗏?t' }w}KFÜsmNS{NOR7ҵbA}"/KB kM = '?Scו i++wɻ?|2a[+mF+,/^|lɵe̷(>w߼yj5yӵݶɩKitsw4Xʯ?~r;zb?heӏbX{D?-XZ/_2 ZE-yݴv/K-Yr}ɛ G.-"Yd^IT"O 'U`xl _y]ۊ{!ۂ@~܊+Գ[eb {P[oX'SJVusg?;=r=2@N~+y:rL"*ߍVΞ٭ĭĭ#AV~ZpqV~l%z-v yKCpX|/KrSxYmG;з8{-,QYً%FUY= ldo~ =tU?˃O)`[|+͋[9ĪzOZj{խWqZy "XU `^^H /f> q2KȚ}r98./A^@tYQT}y/~2%"ld}/^ժ^>oo>˱N־n\)5N{$7P1+uOo9J UJ>M?S3ɝ b?u]SW nRpkLA"^ B]z<[{<L  0k'%/@(C('Pb%+(XoGPF0O{(r  7 iQR 70%i.*U)uGeѕ97|dOKe.Anp|r's_] 'P ]`&PPB(C!j {{M4z(4tuL(CIC(MG@<<6Mqo8l4y c&P&&MG@<<6MJqi'PbMՓ0xA*#(O MCKi==AZ&FAq(AvP<}L4LC(@  7Px{(2 @ p%O J@=B > stream xڅˊ\G SM[4vں#o 8g cWr !Ax¸'CONeWկ|N_!xn,i'fbW'1Ok /f]\Ũ1OΛci ?9spDZXV~r5?9[a|daz% /??[[Û㚞{__^jOߧ?_/Y_{Ww \})7v T C* jUj uPt@Q-&Ph" E(ڢHBE*(Px@"- 'PH (ܢPB* (Ph@B- %=B-N({@ZPe(Pp@[L(8`E (PQE TlQ * (+eUhQVBYwQ?tբ<yr lP$!RokKG/дri1]  &Pk5耢E[M(2HEE (RQE" WiQ$EZN(k6S ok@=PHC jAyM&Pj E(ڢhBE*(Pd@-$PH (ҢpB+ (Ph@- %PpB ]QE e(PPvE-N(8`E- &P (PQE TlQ ZH(k@YZPր* (+<'NARm CS CBL1 endstream endobj 2982 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1706 /Filter /FlateDecode >> stream xڅ$G˄_`̂OfY_`s0/.~+,u՝B_FI hcFX>y7׮asnަ t֡/NP'*89[Vتd:| ebƭ9ǚ>ǰ~a>|$XFH7&JmJ[ueҋޮNPYULmbSXP@AV6sض &5)⻨l*[|B}#blPYj!rK6lr6ll 8ػ]V;*:[9T:[9&:[9o6 lr+l8r.r56 l6웊16 kGV!ususX^U;];cnv>ܹ컍ܹ&/Ѱ'CSIֳ =^oB96wo*JlyxWw%av"+b>lmkWb6 ~[.bNbV'M+L:L/??~Տ >|;no㿾/_?~ ހ~. ¾ sKJ'`ݡfDr 7X3Qg2)3KYFf)A6R4K RYR4HA#YR,EK)RH, R"Y J)H#E)HRA 7R8KR )H,K)P#.PBRBAh,J)#HP)e)ˌQI[:PP(%HρgWx< RniFerV߾{O Sg|4JΥ]+Z%_gJ_+f}7Ih#EYJ E)R)HA RHA)h KA)A4R$KA)EiHR)H,EJ)p#)pRA 5R(KR )H,K)P#ed)TJ e4RFBFRF)eK\ .2*) 7`k_ 9Q>B@;0Y8k_e#D9(%ZrDfG|h222̿$?אrȣ y5e!q +0<ʐGy\CM!4rȣ y4Rrȣ y4Rrȣ y4Rrȣ y7Rrȣ y$F(S!Ѥ:r49;=xۃ:u4(!?rG2M#?Gi!C$ @4@@*9pO_ _WG  0}ut6|u$k\3d)8G RV#ef)2H 2yr'k -҂ -j9yӴ`棡 h,  GA4R$KA)EiHR)AJ ,pw"[A7O2κA5O2ʺEA= ,uQE]w­Qq]c6C3 0[w |OCl89<_C͸[? endstream endobj 2983 0 obj << /Type /ObjStm /N 100 /First 965 /Length 1981 /Filter /FlateDecode >> stream xڅM +t: /`@ `{MNҶʤmW*/I=r $̽NX e&(rb(2=q:Tj]Ǜ 詰|܇*3Tc(*M"ڤ YeSj*ł.,R5P@]XR ":ķ0e2RFPd$S6RdTR&7],s!]\qȨESGXĢU+bY-Z.ZАP *D^|nlp"OGb1#bMA>P,Eۢ .>@2gP $#Jm1H5*̙QW%s桫lAёXTF'-dH|Hܵz@2QB`$ ʨhɼ2YUeɼA[ VC4>6t$KoHf!PAJj.dIe JQC ِz6\\G+UlU1M] :GԴF4JCn(xD6֛$3\\AkEU(q [eR,I~'8?߾|~_:'O^s(X`^< )`^#A眂^BA-TPRPB(@ (C!jJ1PJPj(e=BaPC)!6Px=B (p Z@!C(dJP( = d%/d%P ( (J (` X@C(` x(B {(#(x4]!̧ fg4 yA `N*/S"f( } u!9 4_}n"}W׆WB^e!yW5* …W yUë\x=Kc1 -/v  <S#dCBS(!6S @qx@P(BJ^@ PPB!lPr%(J (` X@C(` x(B[+!8K{A"(`> Z:(3 =M¦C/ A ʡvy0]] y =ޣgK=:յy<ǃUZ4}^>/M3԰&M.Q(WtyxWAciB4}xiA!l`>o6}0Mx7}>R0]hqrCrʳ1/ ѡ9\LK7gc~{&L3#:^<pOc`[&uz=Uaa KW 3܋y|ه|/|jyg~cԸ'KНLwnruǑO8ϜWG^}Q5Sbbr=Gy=:o9Qd9;Ƌvl'W}qd.{Y{_{lnfse.;C9vkAyԓPQ-6([t{5-'raP]/sC܃cmP|a2bGӱdVZ.E$G5C o^O5=}TtRt ,0wE?Hi߷s~㭇L葎@dr՞L#1O_uoSV~{?Ro24F>iToqWX&}Νn/[?OrgᜑhΊxΪ^ԷqS:ڜ 153@]w+n1b/O=řͭŪgMgųo&Ϥ6VMYs|BȚBwo쫛 #T endstream endobj 3087 0 obj << /Producer (pdfTeX-1.40.25) /Creator (TeX) /CreationDate (D:20240207171658Z) /ModDate (D:20240207171658Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 2991 0 obj << /Type /ObjStm /N 96 /First 991 /Length 5034 /Filter /FlateDecode >> stream xڝ\]۶}cpϪTOror78UJq$ ɯ& p@7i|5Ajyg{ )PdRQ ]`AgPdRf,zy!"Lx% QlCaȠI`IeB1(LhGz&SfTrc .x`|@ LZmF !A!MF@,f*$u*>S@{2ϔ|@T4…̴$ȴCLCR j3-`eFy3c4"GFU!2+rj-$EfuAdTf-+4[Rɜ ˅\#eN ;wy0Dcd §k=ʼu@x99Q0"Yy(:4 =kza _|,B  ޤ!€MHOa E!%)Byd[a P"Iŀ7„Y#h\S̀7muoڎ'cN<=\ o6ar oFa" SЄh,,NmC30 c)|IٜB s\XxRoPHȁ7h9GFAXC`5AQg~śr_3@r5šƚŚÚ^0Y'ϾnC'`J&&&Vp )GaV#6¶ V8+ ''p+2r,rpU )sINJw3BEa%b(iT& *HNHQ1Up0d y -#!8x KJ0"5V"heCX J`=V~^m5ԛr{|9)ZU]l*80〣X34nWPݷ# ^Ǻ-.ovO^@Щlz_@]WPuۀ:odU?"jfڦAD' u#Q`$_aG΃g5 . e7T[f„v{2XcC2p|@JRh)oaCv L  y4pMO^㰆p,JGX|xly eוr@0RNlˎD2QveOfUҠ[QڣnDu95+) ^ վn\ kT0rE8y3ZJg69'U9-5nJ άagF/L`l>L;%<˔ivܤ`b5_)qm"$'x2ulVOdUw_2L0}i2P)M*lnRqOdi̓a髁}cU=!V 0"!&:?8{tlLmyڸEh+f`` dʺ!b[j[>n)@nT푗xz4#,9?ۿqZS;TuCHX#, ^mGvC_H$4ƭFXBs8kXyv }BF@r~ww$` a55gxg <~gr~%=A.>WUCRI?%9!euB('j TK;XrCBDkas(e8X%`.;#`{w=-iuR:QiPC$2XiaJgS/V6;Zz/ _rڻmH%!i>5Zp-۸}i=evpT@Ӂb]L 딿ӪJ<?]mʎ.BpI!K􉙰C{ 6HΖt-=;8*8[H9zI'8cљIo qu|YYE'CUT8Ņ&CڛRې ʢOΚW*Ki',Ahɳ7qj(; R)',xUM zϷe"v (?}e%7Î[4 YaFXR95w=s Rc^/;E(#|X75plm-fc~97 Q3kkE6VabtnsV370h*_ajCڱ[@7*bJkP<$jZF$KalZv"R#r vepg;`s2>?5س4榖Y4CmݐDK6槯QWx`QHPv8G}tߵ(KS9OnIU}3&9B-f릩:sр+;f! U~.ijuL o0N+N53Lpu4!{ff[Y LNLfV+&}*ẁ9pj`+wmƛxz 2Sd&o9BjWc`Ost܎ky3JL~o^2~~0`~R_[pù`WnXRX6=;?l gȌ2MiJ m 8s<ϖ[\?P'5r&n*!ʖqɯ^ݻ!hi/w#{#oIjW|{rfL4sǛ|>җ+2o\&xpvr19.Uիv{5Rk,6AK?ekOͶW8d:nݏ\ }ܥ>4}ۄлI|]~u삎Mwի?ACdl:x]K_ܦ#.7ӀvesO H>/o+™L.d:X ŘU{ #>=S! hm)V O^}rK -}$HPaJJ͊csRjEyZ~r9ִ:H'ti. >Ή_PA>;\ /OU~KZTҬna#R"|Kſ#G&P6G6TQXށ̚DNG@yMv)ǥN^pUGr. + P> ~)m/ST~~;aܾwƟW7["|v-}/"0Y3I<@y8r߹.ƞ_*pPW$W-Oe7<Ʀ\# toqbE1};L]oA,}x+,PS+(X.8.D[?ZƆCE! .O>)0BaV8 9B'?{!&/U0VX좿  kvW^0%S wW%ɏ٣dzI'9ВQŷ{W?̛1t$)8CK1ʗ3`.s)K.Rq˖ޓ7b*Q{KP1dQ_Šw?_w5LN39֌f;`š k&lx 58g:0aÄ 6_B$woX鯈L2?-c2v2|pY8fxi,`?u宽]y'#g/]P{;)T.[[_>.o]}mqr*˾yًuw۠A9"P 0$ endstream endobj 3088 0 obj << /Type /XRef /Index [0 3089] /Size 3089 /W [1 3 1] /Root 3086 0 R /Info 3087 0 R /ID [<9946AF85CB46ECA4D2AB347C5F036E6A> <9946AF85CB46ECA4D2AB347C5F036E6A>] /Length 7308 /Filter /FlateDecode >> stream x%{lY]{mOb8ss8v'I'8\lw'N HKO+A zzTRكoQPѢRAR@uhԡT=p{O^pC`GQp '08F(8 ΀` pIpSnip .{>`<`,% V*X#g9h2F)J =|oxiZ"hSV Jf)6KYRlb,f)6KYRlb,f)6KwX%*)VIJURꨰJURbX%*)VIJURbX%*)VIJURbX%*)VIJURbX%*)VIJURbX%*)VIJURbX%*)VIJURbX%*)VI>X%sۓA֌ugEPhZ=)qu)Kq]tYP%ZAvll lt]`{>A?8apq0N!p S` 8 9p\.qp\W&upL -p `̂9̃xu <25r>A}*ypX%YO@6S <X%ccX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcX%*1VJUbcxUUb9gXg{5x ~4Gܼxv8@Gb\%/1~K__ ,`@A VPmtl[A'v`A/^ApG1p `48΂1p.K`\WU0IpSnip .{>`,% d%cMhc-Ghtc@v0ЁUG`<Ox i|Lc4>1i|Lc4>1i|Lc4>1i|Lc4>1i|Lc4>1i|Lc4>1i|Lc4>1i|Lc4>1i|Lc4>1i|Lρ``_7 4f<~qAs;Jn8:O,.IŬ>f1|c.s\>1|c.sMsi^ J2h` :A`'@ z}`?8~p 8 `C$ps<p\2 p LpL[6p}0fךY]ぇw,X@Fj`Gc,6:?YU44g,--mķEh 'ihxs^hyX+`Xg9=|Szç>O=|Szç>O=|Szç>O=|Szç>8}zç>O=|Szç>O=|Szç>O=|Szç,zX/}[X %0Yr7Q?Uܔ3sEm`g*'Mۛ G\kԖ1S[<"MQ{H xɻI5+5r_ys;.-mDOD zћA z{@ͦ=-PjlJKԶR#De;5}yhEMQ륦yL 5G4 j3"3X=2CQeD(kAҥ2r\0eHYF2] %#VNNjeFʲԺ'3>H^~jt֌ f2Ҙ6̴s HhjtfF\2Rvovqj,#Qj}ed:;NmHwv넛d5#IjcqFSQ#FF3@v%jL6NMoч2_Ft@+:KԮRdLthWݤF4רMSiiSEiYߦK"0Ǯ脙v}jKM̓ޙʄ>KMCA2B\FHOFiI^Fq]MF !3B: !δ!q5YgůFF3B\WBe[BDw&# jjPM˗>L/ ndRAK Ԕnd`4Q7ۉ65{r Jvd' ImH'Llv!=Qп {V'l+u=QǴ}':}'{#žTaOP+#aOmužSkA=Q3%=QC)"aOP4<À'j(9{禆4 IC, '|<tE !/žx§ȋ'jq/~5'+''#'aOj7aO.R{-x54 '\E=+;'ר-#žLR[Bž\=A y@T(7>@ꋴG Q:HžРYN'4PCTx KTSР(4.RӠ鷼 U" @a_vY ;Q-d+Pp4 (t&(< +-@aJ8 ;.v:\x(tp *p5d`RÅ^lLs "S2-S2-GChn%`]GQj4Aǩ Apw7yƺLs !V inrRgj4 RFs }yj4pbGM־̝yx Ls uhZǤ'khnNKNH <32wZ.LswZq w1Y]j4(RngY1{Ք21<Sjx9!S *ԚztZbF_v+܍,"5ud PGmKu#ۀեv";MM]jr JM]j;tQ[ )0/3 Ԗ H®ԙ+F6(Op] y(jP:~A@jLGawԌZawԌtawE sP3 c#;j<Ӏ;4, s9 jϐViSE@GݡyOWawj;I@G;4!C֐Ӏ;4`yv e=S@ݡ9@, aw{ 7v"pwtaJ"uaJ0tqMp KdNABd];LɂۚakJO \dv[6-Np C m;t&v۞sv@nݡ)ב;awu &@>u !{awk &;4* M!ÝLpyv;`C.!N."F8c@aQ@aN&8J!a<1 UGpy*w2@ثz>Wi((RDث4@!UJp 'j(:4]D^N&8NKGث'x^N&%i{U 8R#U5]NW"v-`)h(^US8ZfhaQ; ,^U"a>WȇW:*?l22Ͱ {CO~H U~M2 ^w! {We~ =Dw" {We` ۑA#7qt!=Aor [:p=nA:s 6 p q+#akSe=үAK=˄=b qgG5% qG$ :Aa 4$A#r7{Dao9g7{jA=/ $aoF[Ó #jA#R S}GH ͲFA#n5$ao\;3Q7{Ns {-`7{N-! {ChP5 žӠj H 9w<5ILyj"žxj($aϙf:Ažxj: ]žs7Rԅ%94(=CH (aFaKm%9?5=(žs_,žK\ӃV@s:Hm{N!H {N@s 6gwd=|ȹADv.j5=.@^}i r[<t5~|Qr#\L"`,]LA /]@~X\nkkC$5>v9 _rhLsyAZ}(eZEQrК>^'Cq).q tY7sIHW&iirH <7.o44ky%U"ʢ2]0 \c[dyx23_եubUm'fmMcOi >JVE[| A:A-_yd`oX_U5WXH47` vJ?3w?\, W,Xa1r \,V˽VX䭌sC)}2K [T+,V+`2 XvӀ1c}Sj6`9r';+z9siz~]cKڔgJ\1*za̭˘ Xى1fZqm7;t\Jv[nט7KracYIc9-y$9dܘN02Cz~IџڄsK0Hd+rzcc-)l+FRnѧ_d]yF;[ߘV\ U20ZdKy̘Wjm1x(yh}9di}V>ɮVoo?08oLS~h%hm)v|j?i5si*e {?/g㎣)r)}hg #u(Nrѐ)\kZ p]UUSE}6i +h5god?3c / HjYd6&UuSxEdUSXXwtSf 1}n3oj?d2Pm$_=` $ۘӏE)|zpŸklw1Ͽ]Rߔdy뒚'$ׯY)z&6Tj̃K?? ` }&+I/kJm \)ު]@Fͫ&޽7L5عE+"GQ)c4$n);?hc~^$>S<ަI4œeyQSC3'?/;\烦g<\|? g7 Iq46WMs>S[IMG#t<-C7z)]$3TIV\\ǔK5Vzݫk< quJ[v.7.O...إݸ ]\3C}ެ)ӫ9S3z`Jj޴/ՂioբiGzdZ~إW˦uW+uzjZ߲WkC zдf ȴn]t4?ׄ5ͼ4:jʽGzcGKY&Mm7Fh6`ytюFMEc#6.'mM6fϬe/17e e/s,UZc첵Υ-ڦ :MǴكkkiG%ْkkKkZtQ;b6][kZZĢEZĢEvZĢSK6ZҪՎp}mZc֪֎=f?+UrGZ}׎xH˵7lkJ+Tt`;!{mPс~ZҒ؎0?ۍhÔG<&— endstream endobj startxref 476010 %%EOF apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/000077500000000000000000000000001515050116100223355ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/000077500000000000000000000000001515050116100244065ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/000077500000000000000000000000001515050116100253525ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/API-Alphabetically.html000066400000000000000000000134711515050116100315730ustar00rootroot00000000000000 API Alphabetically (Tablicious v0.4.3) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/API-Reference.html000066400000000000000000000047241515050116100305540ustar00rootroot00000000000000 API Reference (Tablicious v0.4.3) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/API-by-Category.html000066400000000000000000000351341515050116100310420ustar00rootroot00000000000000 API by Category (Tablicious v0.4.3)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Copying.html000066400000000000000000000077421515050116100276620ustar00rootroot00000000000000 Copying (Tablicious v0.4.3)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056631515050116100311770ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.3)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    Date-and-Time-Representation.html000066400000000000000000000060461515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html Date and Time Representation (Tablicious v0.4.3)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074541515050116100324560ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.3)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060021515050116100315640ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.3)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Durations.html000066400000000000000000000046361515050116100302210ustar00rootroot00000000000000 Durations (Tablicious v0.4.3) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Example-Data-Sets.html000066400000000000000000000102121515050116100314120ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.3)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Getting-Started.html000066400000000000000000000064041515050116100312510ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.3)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.3/tablicious-0.4.3.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Introduction.html000066400000000000000000000072321515050116100307250ustar00rootroot00000000000000 Introduction (Tablicious v0.4.3)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.3 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Missing-Functionality.html000066400000000000000000000105251515050116100325020ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.3)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/NaC.html000066400000000000000000000075701515050116100267120ustar00rootroot00000000000000 NaC (Tablicious v0.4.3)

    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/NaS.html000066400000000000000000000074551515050116100267340ustar00rootroot00000000000000 NaS (Tablicious v0.4.3)

    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/NaT.html000066400000000000000000000075211515050116100267270ustar00rootroot00000000000000 NaT (Tablicious v0.4.3)

    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Table-Construction.html000066400000000000000000000070261515050116100317640ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.3)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Table-Representation.html000066400000000000000000000100161515050116100322650ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.3)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113521515050116100305370ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.3)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Time-Zones.html000066400000000000000000000141161515050116100302350ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.3)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/Validation-Functions.html000066400000000000000000000117371515050116100323110ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.3)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/array2table.html000066400000000000000000000102671515050116100304560ustar00rootroot00000000000000 array2table (Tablicious v0.4.3)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/calendarDuration-Class.html000066400000000000000000000063021515050116100325630ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.3)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/calendarDuration.html000066400000000000000000000205171515050116100315240ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.3)

    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    calendarDuration_002ecalendarDuration.html000066400000000000000000000077061515050116100354000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.calendarDuration (Tablicious v0.4.3)

    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    calendarDuration_002edispstrs.html000066400000000000000000000062061515050116100337660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.dispstrs (Tablicious v0.4.3)

    8.2.2.2 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    calendarDuration_002eismissing.html000066400000000000000000000062061515050116100341200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.ismissing (Tablicious v0.4.3)

    8.2.2.3 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    calendarDuration_002eisnan.html000066400000000000000000000062521515050116100332240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.isnan (Tablicious v0.4.3)

    8.2.2.4 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    calendarDuration_002eminus.html000066400000000000000000000061121515050116100332420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.minus (Tablicious v0.4.3)

    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000066021515050116100331550ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.3)

    8.2.2.6 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.

    calendarDuration_002etimes.html000066400000000000000000000061351515050116100332350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.times (Tablicious v0.4.3)

    8.2.2.7 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.

    calendarDuration_002euminus.html000066400000000000000000000054551515050116100334400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html calendarDuration.uminus (Tablicious v0.4.3)

    8.2.2.8 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/calmonths.html000066400000000000000000000064571515050116100302440ustar00rootroot00000000000000 calmonths (Tablicious v0.4.3)

    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/calyears.html000066400000000000000000000057651515050116100300600ustar00rootroot00000000000000 calyears (Tablicious v0.4.3)

    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical.html000066400000000000000000000175711515050116100305300ustar00rootroot00000000000000 categorical (Tablicious v0.4.3)

    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002eaddcats.html000066400000000000000000000057521515050116100326000ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.3)

    8.2.5.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002ecategorical.html000066400000000000000000000135751515050116100333750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.categorical (Tablicious v0.4.3)

    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    categorical_002ecategories.html000066400000000000000000000061451515050116100332400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.categories (Tablicious v0.4.3)

    8.2.5.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062241515050116100326400ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.3)

    8.2.5.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062331515050116100330430ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.3)

    8.2.5.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002edouble.html000066400000000000000000000066451515050116100324510ustar00rootroot00000000000000 categorical.double (Tablicious v0.4.3)

    8.2.5.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.

    categorical_002eiscategory.html000066400000000000000000000062641515050116100332660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.iscategory (Tablicious v0.4.3)

    8.2.5.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002eismissing.html000066400000000000000000000061171515050116100331760ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.3)

    8.2.5.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062221515050116100326450ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.3)

    8.2.5.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061261515050116100331550ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.3)

    8.2.5.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    categorical_002eisundefined.html000066400000000000000000000064401515050116100334060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.isundefined (Tablicious v0.4.3)

    8.2.5.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002emergecats.html000066400000000000000000000075621515050116100331500ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.3)

    8.2.5.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002emissing.html000066400000000000000000000074371515050116100326500ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.3)

    8.2.5.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    categorical_002eremovecats.html000066400000000000000000000074371515050116100332700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.removecats (Tablicious v0.4.3)

    8.2.5.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002erenamecats.html000066400000000000000000000067611515050116100332410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.renamecats (Tablicious v0.4.3)

    8.2.5.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    categorical_002ereordercats.html000066400000000000000000000072131515050116100334250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.reordercats (Tablicious v0.4.3)

    8.2.5.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002esetcats.html000066400000000000000000000062361515050116100326410ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.3)

    8.2.5.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    categorical_002esqueezecats.html000066400000000000000000000060761515050116100334520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html categorical.squeezecats (Tablicious v0.4.3)

    8.2.5.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002estring.html000066400000000000000000000062341515050116100324770ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.3)

    8.2.5.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002esummary.html000066400000000000000000000060261515050116100326650ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.3)

    8.2.5.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/categorical_002eundefined.html000066400000000000000000000066311515050116100331330ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.3)

    8.2.5.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/cell2table.html000066400000000000000000000101551515050116100302530ustar00rootroot00000000000000 cell2table (Tablicious v0.4.3)

    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/colvecfun.html000066400000000000000000000065311515050116100302310ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.3)

    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/contains.html000066400000000000000000000074131515050116100300630ustar00rootroot00000000000000 contains (Tablicious v0.4.3)

    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datasets_002edescription.html000066400000000000000000000064621515050116100330520ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.3)

    8.2.58.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datasets_002elist.html000066400000000000000000000065001515050116100314730ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.3)

    8.2.58.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datasets_002eload.html000066400000000000000000000062251515050116100314430ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.3)

    8.2.58.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime-Class.html000066400000000000000000000063571515050116100311120ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.3)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime.html000066400000000000000000000176271515050116100300510ustar00rootroot00000000000000 datetime (Tablicious v0.4.3)

    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eNaT.html000066400000000000000000000075101515050116100311700ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.3)

    8.2.9.23 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    datetime_002econvertDatenumTimeZone.html000066400000000000000000000065071515050116100351050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html datetime.convertDatenumTimeZone (Tablicious v0.4.3)

    8.2.9.1 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002edatenum.html000066400000000000000000000057711515050116100321520ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.3)

    8.2.9.2 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.

    datetime_002edatenum2posix.html000066400000000000000000000060621515050116100332320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html datetime.datenum2posix (Tablicious v0.4.3)

    8.2.9.3 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002edatestr.html000066400000000000000000000065711515050116100321620ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.3)

    8.2.9.4 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002edatestrs.html000066400000000000000000000066431515050116100323450ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.3)

    8.2.9.5 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066371515050116100327010ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.3)

    8.2.9.6 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002edatetime.html000066400000000000000000000134671515050116100323120ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.3)

    8.2.9.7 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002ediff.html000066400000000000000000000060611515050116100314160ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.3)

    8.2.9.8 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002edispstrs.html000066400000000000000000000056561515050116100323720ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.3)

    8.2.9.9 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eeq.html000066400000000000000000000062061515050116100311140ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.3)

    8.2.9.10 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002ege.html000066400000000000000000000062211515050116100310770ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.3)

    8.2.9.11 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002egmtime.html000066400000000000000000000060351515050116100317710ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.3)

    8.2.9.12 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002egt.html000066400000000000000000000062101515050116100311140ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.3)

    8.2.9.13 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002ehms.html000066400000000000000000000061041515050116100312730ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.3)

    8.2.9.14 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063051515050116100324740ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.3)

    8.2.9.15 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eisnan.html000066400000000000000000000060041515050116100316130ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.3)

    8.2.9.16 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eisnat.html000066400000000000000000000055641515050116100316330ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.3)

    8.2.9.17 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002ele.html000066400000000000000000000062411515050116100311060ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.3)

    8.2.9.18 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002elinspace.html000066400000000000000000000066751515050116100323170ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.3)

    8.2.9.19 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002elocaltime.html000066400000000000000000000066731515050116100324700ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.3)

    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002elt.html000066400000000000000000000062311515050116100311240ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.3)

    8.2.9.21 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eminus.html000066400000000000000000000067611515050116100316500ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.3)

    8.2.9.22 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002ene.html000066400000000000000000000062221515050116100311070ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.3)

    8.2.9.24 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060061515050116100324270ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.3)

    8.2.9.25 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000062431515050116100331570ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.3)

    8.2.9.26 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eplus.html000066400000000000000000000066451515050116100315010ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.3)

    8.2.9.27 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.

    datetime_002eposix2datenum.html000066400000000000000000000061571515050116100332370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html datetime.posix2datenum (Tablicious v0.4.3)

    8.2.9.28 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062361515050116100325330ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.3)

    8.2.9.29 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000064531515050116100325300ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.3)

    8.2.9.30 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061211515050116100324640ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.3)

    8.2.9.31 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eweek.html000066400000000000000000000055241515050116100314440ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.3)

    8.2.9.32 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eymd.html000066400000000000000000000060721515050116100313010ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.3)

    8.2.9.33 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/datetime_002eymdhms.html000066400000000000000000000060271515050116100320110ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.3)

    8.2.9.34 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/days.html000066400000000000000000000062101515050116100271770ustar00rootroot00000000000000 days (Tablicious v0.4.3)

    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/discretize.html000066400000000000000000000121151515050116100304050ustar00rootroot00000000000000 discretize (Tablicious v0.4.3)

    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/dispstrs.html000066400000000000000000000065521515050116100301230ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.3)

    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration-Class.html000066400000000000000000000057511515050116100311400ustar00rootroot00000000000000 duration Class (Tablicious v0.4.3)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration.html000066400000000000000000000122201515050116100300620ustar00rootroot00000000000000 duration (Tablicious v0.4.3)

    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002echar.html000066400000000000000000000056371515050116100314640ustar00rootroot00000000000000 duration.char (Tablicious v0.4.3)

    8.2.13.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002edispstrs.html000066400000000000000000000056671515050116100324250ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.3)

    8.2.13.2 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002ehours.html000066400000000000000000000057601515050116100317040ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.3)

    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002elinspace.html000066400000000000000000000067351515050116100323450ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.3)

    8.2.13.4 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002emilliseconds.html000066400000000000000000000060421515050116100332230ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.3)

    8.2.13.5 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002eminutes.html000066400000000000000000000060161515050116100322230ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.3)

    8.2.13.6 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002eofDays.html000066400000000000000000000062021515050116100317610ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.3)

    8.2.13.7 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002eseconds.html000066400000000000000000000057331515050116100322020ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.3)

    8.2.13.8 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/duration_002eyears.html000066400000000000000000000055061515050116100316650ustar00rootroot00000000000000 duration.years (Tablicious v0.4.3)

    8.2.13.9 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/eqn.html000066400000000000000000000074221515050116100270300ustar00rootroot00000000000000 eqn (Tablicious v0.4.3)

    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/head.html000066400000000000000000000074401515050116100271460ustar00rootroot00000000000000 head (Tablicious v0.4.3) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/hours.html000066400000000000000000000062531515050116100274060ustar00rootroot00000000000000 hours (Tablicious v0.4.3)

    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/index.html000066400000000000000000001317131515050116100273550ustar00rootroot00000000000000 Top (Tablicious v0.4.3)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.3.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/iscalendarduration.html000066400000000000000000000062131515050116100321150ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.3)

    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/iscategorical.html000066400000000000000000000061671515050116100310630ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.3)

    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/isdatetime.html000066400000000000000000000060771515050116100304020ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.3)

    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/isduration.html000066400000000000000000000060431515050116100304240ustar00rootroot00000000000000 isduration (Tablicious v0.4.3)

    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/isfile.html000066400000000000000000000044441515050116100275210ustar00rootroot00000000000000 isfile (Tablicious v0.4.3)

    8.2.21 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/isfolder.html000066400000000000000000000044341515050116100300540ustar00rootroot00000000000000 isfolder (Tablicious v0.4.3)

    8.2.22 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/isnanny.html000066400000000000000000000073751515050116100277330ustar00rootroot00000000000000 isnanny (Tablicious v0.4.3)

    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/istable.html000066400000000000000000000064501515050116100276700ustar00rootroot00000000000000 istable (Tablicious v0.4.3)

    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/istabular.html000066400000000000000000000061701515050116100302320ustar00rootroot00000000000000 istabular (Tablicious v0.4.3)

    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/istimetable.html000066400000000000000000000065441515050116100305530ustar00rootroot00000000000000 istimetable (Tablicious v0.4.3)

    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate.html000066400000000000000000000122021515050116100301650ustar00rootroot00000000000000 localdate (Tablicious v0.4.3)

    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002eNaT.html000066400000000000000000000101031515050116100313140ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.3)

    8.2.27.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002edatenum.html000066400000000000000000000054541515050116100323040ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.3)

    8.2.27.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002edatestr.html000066400000000000000000000065701515050116100323150ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.3)

    8.2.27.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002edatestrs.html000066400000000000000000000066721515050116100325030ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.3)

    8.2.27.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002edatestruct.html000066400000000000000000000070751515050116100330320ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.3)

    8.2.27.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002edispstrs.html000066400000000000000000000057451515050116100325250ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.3)

    8.2.27.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002eisnan.html000066400000000000000000000060221515050116100317470ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.3)

    8.2.27.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002eisnat.html000066400000000000000000000056461515050116100317700ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.3)

    8.2.27.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002elocaldate.html000066400000000000000000000110331515050116100325650ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.3)

    8.2.27.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002eposixtime.html000066400000000000000000000062751515050116100326720ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.3)

    8.2.27.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/localdate_002eymd.html000066400000000000000000000055221515050116100314340ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.3)

    8.2.27.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/milliseconds.html000066400000000000000000000063561515050116100307370ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.3)

    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/minutes.html000066400000000000000000000055671515050116100277410ustar00rootroot00000000000000 minutes (Tablicious v0.4.3)

    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/missing.html000066400000000000000000000074771515050116100277300ustar00rootroot00000000000000 missing (Tablicious v0.4.3)

    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/missing_002edispstrs.html000066400000000000000000000056651515050116100322470ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.3)

    8.2.30.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/missing_002eismissing.html000066400000000000000000000060271515050116100323720ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.3)

    8.2.30.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/missing_002eisnan.html000066400000000000000000000057601515050116100315000ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.3)

    8.2.30.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/missing_002eisnanny.html000066400000000000000000000057711515050116100320510ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.3)

    8.2.30.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/missing_002emissing.html000066400000000000000000000054321515050116100320350ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.3)

    8.2.30.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeA.html000066400000000000000000000044621515050116100276060ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.3)

    8.2.31 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeCellstr.html000066400000000000000000000045261515050116100310370ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.3)

    8.2.32 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeCharvec.html000066400000000000000000000045521515050116100310010ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.3)

    8.2.33 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeFinite.html000066400000000000000000000045501515050116100306420ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.3)

    8.2.34 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeInteger.html000066400000000000000000000045461515050116100310260ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.3)

    8.2.35 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeMember.html000066400000000000000000000045541515050116100306370ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.3)

    8.2.36 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeNonempty.html000066400000000000000000000045601515050116100312360ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.3)

    8.2.37 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeNumeric.html000066400000000000000000000045461515050116100310330ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.3)

    8.2.38 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeReal.html000066400000000000000000000045401515050116100303060ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.3)

    8.2.39 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeSameSize.html000066400000000000000000000045441515050116100311470ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.3)

    8.2.40 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeScalar.html000066400000000000000000000046041515050116100306310ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.3)

    8.2.41 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeScalarLogical.html000066400000000000000000000046121515050116100321230ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.3)

    8.2.42 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/mustBeVector.html000066400000000000000000000045301515050116100306640ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.3)

    8.2.43 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/pp.html000066400000000000000000000077051515050116100266700ustar00rootroot00000000000000 pp (Tablicious v0.4.3)

    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/scalarexpand.html000066400000000000000000000072301515050116100307070ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.3)

    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/seconds.html000066400000000000000000000062751515050116100277100ustar00rootroot00000000000000 seconds (Tablicious v0.4.3)

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/size2str.html000066400000000000000000000064731515050116100300370ustar00rootroot00000000000000 size2str (Tablicious v0.4.3)

    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/splitapply.html000066400000000000000000000113441515050116100304440ustar00rootroot00000000000000 splitapply (Tablicious v0.4.3)

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string.html000066400000000000000000000160431515050116100275520ustar00rootroot00000000000000 string (Tablicious v0.4.3)

    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002ecell.html000066400000000000000000000057041515050116100311420ustar00rootroot00000000000000 string.cell (Tablicious v0.4.3)

    8.2.52.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002ecellstr.html000066400000000000000000000057331515050116100316750ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.3)

    8.2.52.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002echar.html000066400000000000000000000061761515050116100311440ustar00rootroot00000000000000 string.char (Tablicious v0.4.3)

    8.2.52.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002ecmp.html000066400000000000000000000075001515050116100307760ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.3)

    8.2.52.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002edecode.html000066400000000000000000000061631515050116100314460ustar00rootroot00000000000000 string.decode (Tablicious v0.4.3)

    8.2.52.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002edispstrs.html000066400000000000000000000064341515050116100320770ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.3)

    8.2.52.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eempty.html000066400000000000000000000061211515050116100313530ustar00rootroot00000000000000 string.empty (Tablicious v0.4.3)

    8.2.52.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eencode.html000066400000000000000000000062741515050116100314630ustar00rootroot00000000000000 string.encode (Tablicious v0.4.3)

    8.2.52.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eerase.html000066400000000000000000000057741515050116100313310ustar00rootroot00000000000000 string.erase (Tablicious v0.4.3)

    8.2.52.9 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eismissing.html000066400000000000000000000061261515050116100322270ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.3)

    8.2.52.10 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eisnanny.html000066400000000000000000000057541515050116100317070ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.3)

    8.2.52.11 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eisstring.html000066400000000000000000000056771515050116100320760ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.3)

    8.2.52.12 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002elower.html000066400000000000000000000061731515050116100313540ustar00rootroot00000000000000 string.lower (Tablicious v0.4.3)

    8.2.52.13 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002emissing.html000066400000000000000000000061121515050116100316660ustar00rootroot00000000000000 string.missing (Tablicious v0.4.3)

    8.2.52.14 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eplus.html000066400000000000000000000062371515050116100312100ustar00rootroot00000000000000 string.plus (Tablicious v0.4.3)

    8.2.52.15 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eregexprep.html000066400000000000000000000067451515050116100322320ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.3)

    8.2.52.16 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002ereverse.html000066400000000000000000000061611515050116100316740ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.3)

    8.2.52.17 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    string_002ereverse_005fbytes.html000066400000000000000000000066751515050116100334300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html string.reverse_bytes (Tablicious v0.4.3)

    8.2.52.18 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002estrcat.html000066400000000000000000000062331515050116100315210ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.3)

    8.2.52.19 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002estrcmp.html000066400000000000000000000065211515050116100315310ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.3)

    8.2.52.20 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002estrfind.html000066400000000000000000000067341515050116100317000ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.3)

    8.2.52.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002estring.html000066400000000000000000000070611515050116100315270ustar00rootroot00000000000000 string.string (Tablicious v0.4.3)

    8.2.52.22 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002estrlength.html000066400000000000000000000072031515050116100322310ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.3)

    8.2.52.23 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    string_002estrlength_005fbytes.html000066400000000000000000000066401515050116100337570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html string.strlength_bytes (Tablicious v0.4.3)

    8.2.52.24 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002estrrep.html000066400000000000000000000072111515050116100315350ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.3)

    8.2.52.25 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/string_002eupper.html000066400000000000000000000057261515050116100313620ustar00rootroot00000000000000 string.upper (Tablicious v0.4.3)

    8.2.52.26 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/struct2table.html000066400000000000000000000067201515050116100306630ustar00rootroot00000000000000 struct2table (Tablicious v0.4.3)

    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table.html000066400000000000000000000260301515050116100273300ustar00rootroot00000000000000 table (Tablicious v0.4.3)

    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/tableOuterFillValue.html000066400000000000000000000045161515050116100321600ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.3)

    8.2.55 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eaddvars.html000066400000000000000000000076741515050116100314400ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.3)

    8.2.54.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eantijoin.html000066400000000000000000000070131515050116100316120ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.3)

    8.2.54.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002ecartesian.html000066400000000000000000000076431515050116100317610ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.3)

    8.2.54.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002econvertvars.html000066400000000000000000000073061515050116100323600ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.3)

    8.2.54.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002efindgroups.html000066400000000000000000000063601515050116100321630ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.3)

    8.2.54.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002egetvar.html000066400000000000000000000062411515050116100312710ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.3)

    8.2.54.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002egetvars.html000066400000000000000000000061341515050116100314550ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.3)

    8.2.54.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002egroupby.html000066400000000000000000000074541515050116100314770ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.3)

    8.2.54.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eheight.html000066400000000000000000000057241515050116100312560ustar00rootroot00000000000000 table.height (Tablicious v0.4.3)

    8.2.54.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002ehorzcat.html000066400000000000000000000062651515050116100314610ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.3)

    8.2.54.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002einnerjoin.html000066400000000000000000000072721515050116100320010ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.3)

    8.2.54.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eintersect.html000066400000000000000000000064621515050116100320060ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.3)

    8.2.54.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eisempty.html000066400000000000000000000056451515050116100315020ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.3)

    8.2.54.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eismember.html000066400000000000000000000060771515050116100316130ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.3)

    8.2.54.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eismissing.html000066400000000000000000000072221515050116100320060ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.3)

    8.2.54.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eistable.html000066400000000000000000000054331515050116100314260ustar00rootroot00000000000000 table.istable (Tablicious v0.4.3)

    8.2.54.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002ejoin.html000066400000000000000000000074161515050116100307450ustar00rootroot00000000000000 table.join (Tablicious v0.4.3)

    8.2.54.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002emergevars.html000066400000000000000000000072471515050116100320030ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.3)

    8.2.54.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002emovevars.html000066400000000000000000000070101515050116100316360ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.3)

    8.2.54.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002endims.html000066400000000000000000000055761515050116100311250ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.3)

    8.2.54.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002enumel.html000066400000000000000000000060621515050116100311220ustar00rootroot00000000000000 table.numel (Tablicious v0.4.3)

    8.2.54.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060071515050116100326740ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.3)

    8.2.54.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eouterjoin.html000066400000000000000000000075321515050116100320230ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.3)

    8.2.54.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eprettyprint.html000066400000000000000000000060071515050116100324050ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.3)

    8.2.54.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erealjoin.html000066400000000000000000000077601515050116100316130ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.3)

    8.2.54.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eremovevars.html000066400000000000000000000060721515050116100321740ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.3)

    8.2.54.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erenamevars.html000066400000000000000000000066561515050116100321560ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.3)

    8.2.54.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erepelem.html000066400000000000000000000066311515050116100314350ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.3)

    8.2.54.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erepmat.html000066400000000000000000000064541515050116100312770ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.3)

    8.2.54.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erestrict.html000066400000000000000000000105341515050116100316400ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.3)

    8.2.54.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erowfun.html000066400000000000000000000156361515050116100313310ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.3)

    8.2.54.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002erows2vars.html000066400000000000000000000106531515050116100317530ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.3)

    8.2.54.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esemijoin.html000066400000000000000000000071721515050116100316220ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.3)

    8.2.54.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    table_002esetDimensionNames.html000066400000000000000000000105051515050116100333450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html table.setDimensionNames (Tablicious v0.4.3)

    8.2.54.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esetRowNames.html000066400000000000000000000061221515050116100322460ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.3)

    8.2.54.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    table_002esetVariableNames.html000066400000000000000000000075671515050116100331630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html table.setVariableNames (Tablicious v0.4.3)

    8.2.54.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esetdiff.html000066400000000000000000000063271515050116100314320ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.3)

    8.2.54.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esetvar.html000066400000000000000000000071431515050116100313070ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.3)

    8.2.54.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esetxor.html000066400000000000000000000065111515050116100313250ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.3)

    8.2.54.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esize.html000066400000000000000000000072111515050116100307510ustar00rootroot00000000000000 table.size (Tablicious v0.4.3)

    8.2.54.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esplitapply.html000066400000000000000000000070631515050116100322050ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.3)

    8.2.54.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esplitvars.html000066400000000000000000000075331515050116100320350ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.3)

    8.2.54.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esqueeze.html000066400000000000000000000057101515050116100314620ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.3)

    8.2.54.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002estack.html000066400000000000000000000072161515050116100311110ustar00rootroot00000000000000 table.stack (Tablicious v0.4.3)

    8.2.54.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002esummary.html000066400000000000000000000067311515050116100315020ustar00rootroot00000000000000 table.summary (Tablicious v0.4.3)

    8.2.54.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002etable.html000066400000000000000000000125011515050116100310640ustar00rootroot00000000000000 table.table (Tablicious v0.4.3)

    8.2.54.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002etable2array.html000066400000000000000000000055471515050116100322210ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.3)

    8.2.54.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002etable2cell.html000066400000000000000000000062161515050116100320140ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.3)

    8.2.54.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002etable2struct.html000066400000000000000000000071501515050116100324170ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.3)

    8.2.54.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002eunion.html000066400000000000000000000063751515050116100311410ustar00rootroot00000000000000 table.union (Tablicious v0.4.3)

    8.2.54.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002evarfun.html000066400000000000000000000102621515050116100313000ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.3)

    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002evarnames.html000066400000000000000000000064161515050116100316210ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.3)

    8.2.54.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002evertcat.html000066400000000000000000000063731515050116100314570ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.3)

    8.2.54.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/table_002ewidth.html000066400000000000000000000053521515050116100311220ustar00rootroot00000000000000 table.width (Tablicious v0.4.3)

    8.2.54.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/tail.html000066400000000000000000000076111515050116100271760ustar00rootroot00000000000000 tail (Tablicious v0.4.3)

    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/tblish_002edataset.html000066400000000000000000000243741515050116100316330ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.3)

    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    tblish_002edataset_002eAirPassengers.html000066400000000000000000000075561515050116100347740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.AirPassengers (Tablicious v0.4.3)

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    tblish_002edataset_002eBJsales.html000066400000000000000000000110401515050116100335300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.BJsales (Tablicious v0.4.3)

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eBOD.html000066400000000000000000000102621515050116100326160ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.BOD (Tablicious v0.4.3)

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eChickWeight.html000066400000000000000000000113051515050116100344020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.ChickWeight (Tablicious v0.4.3)

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    tblish_002edataset_002eDNase.html000066400000000000000000000111721515050116100332050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.DNase (Tablicious v0.4.3)

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111331515050116100351140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.EuStockMarkets (Tablicious v0.4.3)

    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114171515050116100346200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Formaldehyde (Tablicious v0.4.3)

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151041515050116100345370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.HairEyeColor (Tablicious v0.4.3)

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eHarman23cor.html000066400000000000000000000102721515050116100342720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Harman23cor (Tablicious v0.4.3)

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eHarman74cor.html000066400000000000000000000103471515050116100343030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Harman74cor (Tablicious v0.4.3)

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eIndometh.html000066400000000000000000000110051515050116100337550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Indometh (Tablicious v0.4.3)

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    tblish_002edataset_002eInsectSprays.html000066400000000000000000000104441515050116100346430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.InsectSprays (Tablicious v0.4.3)

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000102561515050116100351720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.JohnsonJohnson (Tablicious v0.4.3)

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    tblish_002edataset_002eLakeHuron.html000066400000000000000000000104741515050116100341070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.LakeHuron (Tablicious v0.4.3)

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126261515050116100354120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.LifeCycleSavings (Tablicious v0.4.3)

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    tblish_002edataset_002eLoblolly.html000066400000000000000000000111021515050116100337740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Loblolly (Tablicious v0.4.3)

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    tblish_002edataset_002eNile.html000066400000000000000000000112151515050116100331000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Nile (Tablicious v0.4.3)

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    tblish_002edataset_002eOrange.html000066400000000000000000000115221515050116100334250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Orange (Tablicious v0.4.3)

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    tblish_002edataset_002eOrchardSprays.html000066400000000000000000000124741515050116100350050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.OrchardSprays (Tablicious v0.4.3)

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    
    tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102161515050116100344620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.PlantGrowth (Tablicious v0.4.3)

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    tblish_002edataset_002ePuromycin.html000066400000000000000000000124711515050116100342030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Puromycin (Tablicious v0.4.3)

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    tblish_002edataset_002eTheoph.html000066400000000000000000000142601515050116100334430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Theoph (Tablicious v0.4.3)

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    tblish_002edataset_002eTitanic.html000066400000000000000000000146031515050116100336100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.Titanic (Tablicious v0.4.3)

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    tblish_002edataset_002eToothGrowth.html000066400000000000000000000115311515050116100345020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.ToothGrowth (Tablicious v0.4.3)

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000140771515050116100346650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.UCBAdmissions (Tablicious v0.4.3)

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000147431515050116100350460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.UKDriverDeaths (Tablicious v0.4.3)

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000110761515050116100345140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.UKLungDeaths (Tablicious v0.4.3)

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    tblish_002edataset_002eUKgas.html000066400000000000000000000103671515050116100332320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.UKgas (Tablicious v0.4.3)

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000100531515050116100342770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.USAccDeaths (Tablicious v0.4.3)

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    tblish_002edataset_002eUSArrests.html000066400000000000000000000137551515050116100341170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.USArrests (Tablicious v0.4.3)

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116231515050116100350520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.USJudgeRatings (Tablicious v0.4.3)

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111061515050116100364600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.USPersonalExpenditure (Tablicious v0.4.3)

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    tblish_002edataset_002eVADeaths.html000066400000000000000000000113251515050116100336520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.VADeaths (Tablicious v0.4.3)

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002eWWWusage.html000066400000000000000000000103531515050116100337240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.WWWusage (Tablicious v0.4.3)

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eWorldPhones.html000066400000000000000000000105141515050116100344560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.WorldPhones (Tablicious v0.4.3)

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    tblish_002edataset_002eairmiles.html000066400000000000000000000072301515050116100340200ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.airmiles (Tablicious v0.4.3)

    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    tblish_002edataset_002eairquality.html000066400000000000000000000125521515050116100344020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.airquality (Tablicious v0.4.3)

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    tblish_002edataset_002eanscombe.html000066400000000000000000000121451515050116100340030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.anscombe (Tablicious v0.4.3)

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    tblish_002edataset_002eattenu.html000066400000000000000000000114501515050116100335120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.attenu (Tablicious v0.4.3)

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    tblish_002edataset_002eattitude.html000066400000000000000000000111021515050116100340270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.attitude (Tablicious v0.4.3)

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    tblish_002edataset_002eaustres.html000066400000000000000000000102211515050116100336730ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.austres (Tablicious v0.4.3)

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    tblish_002edataset_002ebeavers.html000066400000000000000000000106431515050116100336440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.beavers (Tablicious v0.4.3)

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    tblish_002edataset_002ecars.html000066400000000000000000000116711515050116100331470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.cars (Tablicious v0.4.3)

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    tblish_002edataset_002echickwts.html000066400000000000000000000114221515050116100340300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.chickwts (Tablicious v0.4.3)

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    tblish_002edataset_002eco2.html000066400000000000000000000116651515050116100327050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.co2 (Tablicious v0.4.3)

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    tblish_002edataset_002ecrimtab.html000066400000000000000000000164001515050116100336330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.crimtab (Tablicious v0.4.3)

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    tblish_002edataset_002ecupcake.html000066400000000000000000000104731515050116100336310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.cupcake (Tablicious v0.4.3)

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    tblish_002edataset_002ediscoveries.html000066400000000000000000000106211515050116100345300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.discoveries (Tablicious v0.4.3)

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    tblish_002edataset_002eesoph.html000066400000000000000000000106631515050116100333350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.esoph (Tablicious v0.4.3)

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    tblish_002edataset_002eeuro.html000066400000000000000000000116561515050116100331740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.euro (Tablicious v0.4.3)

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    tblish_002edataset_002eeurodist.html000066400000000000000000000101131515050116100340430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.eurodist (Tablicious v0.4.3)

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    tblish_002edataset_002efaithful.html000066400000000000000000000121121515050116100340100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.faithful (Tablicious v0.4.3)

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002efreeny.html000066400000000000000000000121051515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.freeny (Tablicious v0.4.3)

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    tblish_002edataset_002einfert.html000066400000000000000000000116021515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.infert (Tablicious v0.4.3)

    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    tblish_002edataset_002eiris.html000066400000000000000000000121551515050116100331630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.iris (Tablicious v0.4.3)

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eislands.html000066400000000000000000000104001515050116100336410ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.islands (Tablicious v0.4.3)

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/tblish_002edataset_002elh.html000066400000000000000000000101731515050116100326750ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.3)

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    tblish_002edataset_002elongley.html000066400000000000000000000115411515050116100336640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.longley (Tablicious v0.4.3)

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    tblish_002edataset_002elynx.html000066400000000000000000000113351515050116100332060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.lynx (Tablicious v0.4.3)

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    tblish_002edataset_002emorley.html000066400000000000000000000121341515050116100335210ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.morley (Tablicious v0.4.3)

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002emtcars.html000066400000000000000000000124261515050116100335070ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.mtcars (Tablicious v0.4.3)

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    tblish_002edataset_002enhtemp.html000066400000000000000000000104771515050116100335150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.nhtemp (Tablicious v0.4.3)

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    tblish_002edataset_002enottem.html000066400000000000000000000101411515050116100335140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.nottem (Tablicious v0.4.3)

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002enpk.html000066400000000000000000000113041515050116100330000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.npk (Tablicious v0.4.3)

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000103631515050116100361010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.occupationalStatus (Tablicious v0.4.3)

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eprecip.html000066400000000000000000000103651515050116100335000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.precip (Tablicious v0.4.3)

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    tblish_002edataset_002epresidents.html000066400000000000000000000111711515050116100343720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.presidents (Tablicious v0.4.3)

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    tblish_002edataset_002epressure.html000066400000000000000000000112301515050116100340560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.pressure (Tablicious v0.4.3)

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    tblish_002edataset_002equakes.html000066400000000000000000000120511515050116100335010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.quakes (Tablicious v0.4.3)

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002erandu.html000066400000000000000000000111311515050116100333170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.randu (Tablicious v0.4.3)

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    tblish_002edataset_002erivers.html000066400000000000000000000102631515050116100335250ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.rivers (Tablicious v0.4.3)

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    tblish_002edataset_002erock.html000066400000000000000000000110441515050116100331470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.rock (Tablicious v0.4.3)

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    tblish_002edataset_002esleep.html000066400000000000000000000113051515050116100333210ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.sleep (Tablicious v0.4.3)

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002estackloss.html000066400000000000000000000141741515050116100342260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.stackloss (Tablicious v0.4.3)

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    tblish_002edataset_002estate.html000066400000000000000000000130011515050116100333240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.state (Tablicious v0.4.3)

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000104521515050116100355260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.sunspot_month (Tablicious v0.4.3)

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102121515050116100353330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.sunspot_year (Tablicious v0.4.3)

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    tblish_002edataset_002esunspots.html000066400000000000000000000105111515050116100341050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.sunspots (Tablicious v0.4.3)

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    tblish_002edataset_002eswiss.html000066400000000000000000000140711515050116100333640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.swiss (Tablicious v0.4.3)

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    tblish_002edataset_002etreering.html000066400000000000000000000111731515050116100340330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.treering (Tablicious v0.4.3)

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    tblish_002edataset_002etrees.html000066400000000000000000000113431515050116100333350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.trees (Tablicious v0.4.3)

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    tblish_002edataset_002euspop.html000066400000000000000000000102441515050116100333600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.uspop (Tablicious v0.4.3)

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    tblish_002edataset_002evolcano.html000066400000000000000000000112131515050116100336500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.volcano (Tablicious v0.4.3)

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    tblish_002edataset_002ewarpbreaks.html000066400000000000000000000111751515050116100343570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.warpbreaks (Tablicious v0.4.3)

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    tblish_002edataset_002ewomen.html000066400000000000000000000113451515050116100333420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.women (Tablicious v0.4.3)

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    tblish_002edataset_002ezCO2.html000066400000000000000000000104511515050116100327670ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.dataset.zCO2 (Tablicious v0.4.3)

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/tblish_002edatasets.html000066400000000000000000000064301515050116100320070ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.3)

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    tblish_002eevalWithTableVars.html000066400000000000000000000075651515050116100335210ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.evalWithTableVars (Tablicious v0.4.3)

    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    tblish_002eexamples_002eSpDb.html000066400000000000000000000077521515050116100332450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.examples.SpDb (Tablicious v0.4.3)

    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    tblish_002eexamples_002ecoplot.html000066400000000000000000000150401515050116100337020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.examples.coplot (Tablicious v0.4.3)

    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000117551515050116100351620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.examples.plot_pairs (Tablicious v0.4.3)

    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/tblish_002esizeof2.html000066400000000000000000000124271515050116100315630ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.3)

    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    tblish_002etable_002egrpstats.html000066400000000000000000000104751515050116100335310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html tblish.table.grpstats (Tablicious v0.4.3)

    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/timezones.html000066400000000000000000000077701515050116100302700ustar00rootroot00000000000000 timezones (Tablicious v0.4.3)

    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/todatetime.html000066400000000000000000000070061515050116100304020ustar00rootroot00000000000000 todatetime (Tablicious v0.4.3)

    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/vartype.html000066400000000000000000000064671515050116100277470ustar00rootroot00000000000000 vartype (Tablicious v0.4.3)

    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/vecfun.html000066400000000000000000000066261515050116100275400ustar00rootroot00000000000000 vecfun (Tablicious v0.4.3)

    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/html/years.html000066400000000000000000000064271515050116100273740ustar00rootroot00000000000000 years (Tablicious v0.4.3)

    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/tablicious.html000066400000000000000000026726411515050116100274540ustar00rootroot00000000000000 Tablicious v0.4.3

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.3.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.3 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.3/tablicious-0.4.3.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Sign

    The sign (1 or -1) of this duration, which indicates whether it is a positive or negative span of time.

    Instance Variable of calendarDuration: char Years

    The number of whole calendar years in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Months

    The number of whole calendar months in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Days

    The number of whole calendar days in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Hours

    The number of whole hours in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Minutes

    The number of whole minutes in this duration. Must be integer-valued.

    Instance Variable of calendarDuration: char Seconds

    The number of seconds in this duration. May contain fractional values.

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.2.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.2.2 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.2.3 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.2.4 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.2.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.2.6 calendarDuration.plus

    Method: out = plus (A, B)

    Addition: add two calendarDurations.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    If B is numeric, it is converted to a calendarDuration using calendarDuration.ofDays.

    Returns a calendarDuration.


    8.2.2.7 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    Returns a calendarDuration.


    8.2.2.8 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj.


    8.2.3 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.4 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.5 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.5.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.5.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.5.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.5.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.


    8.2.5.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.5.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.5.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.5.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.5.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.5.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.5.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.5.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.5.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.5.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.5.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.5.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.5.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.5.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.5.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.6 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.7 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.8 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.9 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.9.1 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.9.2 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time

    Returns double array of same size as this.


    8.2.9.3 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.9.4 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.9.5 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.9.6 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.9.7 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.9.8 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.9.9 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.9.10 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.11 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.12 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.9.13 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.14 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.15 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.9.16 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.9.17 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.9.18 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.19 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.9.20 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.9.21 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.22 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.9.23 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.9.24 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.9.25 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.9.26 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.9.27 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns datetime array the same size as A.


    8.2.9.28 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.9.29 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.9.30 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.9.31 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.9.32 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.9.33 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.9.34 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.11 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.12 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.13 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.13.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.13.2 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.13.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.4 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.13.5 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.6 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.7 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.13.8 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.13.9 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.16 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.17 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.18 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isfile

    Not documented


    8.2.22 isfolder

    Not documented


    8.2.23 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.24 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.25 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.26 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.27 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.27.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.27.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.27.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.27.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.27.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.27.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.27.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.27.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.27.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.27.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.27.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.28 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.29 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.30 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.30.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.30.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.30.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.31 mustBeA

    Not documented


    8.2.32 mustBeCellstr

    Not documented


    8.2.33 mustBeCharvec

    Not documented


    8.2.34 mustBeFinite

    Not documented


    8.2.35 mustBeInteger

    Not documented


    8.2.36 mustBeMember

    Not documented


    8.2.37 mustBeNonempty

    Not documented


    8.2.38 mustBeNumeric

    Not documented


    8.2.39 mustBeReal

    Not documented


    8.2.40 mustBeSameSize

    Not documented


    8.2.41 mustBeScalar

    Not documented


    8.2.42 mustBeScalarLogical

    Not documented


    8.2.43 mustBeVector

    Not documented


    8.2.44 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.45 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.46 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.47 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.48 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.49 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.50 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.51 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.52 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.52.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.52.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.52.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.52.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.52.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.52.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.52.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.52.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.52.9 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.52.10 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.52.11 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.52.12 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.52.13 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.52.14 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.52.15 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat


    8.2.52.16 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.52.17 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.52.18 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.52.19 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.52.20 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.52.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.52.22 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.52.23 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.52.24 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.52.25 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.52.26 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.53 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.54 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    8.2.54.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.54.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.54.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.54.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.54.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.54.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.54.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.54.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.54.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.54.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.54.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.54.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.54.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.54.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.54.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.54.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.54.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.54.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.54.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.54.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.54.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.54.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.54.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.54.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.54.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.54.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.54.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.54.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.54.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.54.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.54.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.


    8.2.54.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.54.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.54.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.54.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.54.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.54.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.54.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.54.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.54.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.


    8.2.54.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.54.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.54.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.54.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.54.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.54.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.54.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.54.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.54.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.55 tableOuterFillValue

    Not documented


    8.2.56 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.57 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.57.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.57.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.57.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.57.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.57.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.57.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.57.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.57.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.57.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.57.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.57.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.57.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.57.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.57.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.57.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.57.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.57.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.57.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.57.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.57.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.57.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.57.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.57.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.57.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.57.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.57.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.57.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.57.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.57.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.57.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.57.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.57.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.57.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.57.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.57.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.57.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.57.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.57.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.57.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.57.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.57.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.57.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.57.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.57.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.57.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.57.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.57.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.57.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.57.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.57.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.57.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.57.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.57.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.57.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.57.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.57.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.57.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.57.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.57.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.57.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.57.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.57.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.57.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.57.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.57.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.57.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.57.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.57.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.57.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.57.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.57.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.57.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.57.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.57.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.57.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.57.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.57.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.57.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.58 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.58.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.58.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.58.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.59 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.60 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.61 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.62 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.63 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.64 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.65 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.66 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.67 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.68 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.69 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.3/user-guide/tablicious.pdf000066400000000000000000016665141515050116100272620ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 266 /Filter /FlateDecode >> stream xڍAO  2 8nOCqm E7^4du2OgHY3g(5a&TwT+Xoi m@:i;y0}؍8@g0*֗U\uo-G`>ny$ǡբp+6M=ueA(,F٥-ug}ڏgaJɁI^Ҹ+V%#W Tk(ijڦڴY@6Y@Y>y h5 endstream endobj 13 0 obj << /Length 668 /Filter /FlateDecode >> stream x}TIo0ϯHűrlRNUŭ2ce#cL%|oa KjZTI;lh]SLy}k6wR&,i \ RVEtɟiqAۼLgu@~?DxfvfD%p<2Vk yY႑$/yB ϣ] B8ܗKD R>z)c9y _H?2Cf/H]UX@ozŠP"P  *z ӓqvQJZs}nP†Ua ڜ0 ^aCE~4N{fi46;~ hebA1<]Y{lt>@5gI# @2}C.u'hJ~р?]o":;%(bqqV⢟WU zDB/m];OPwHc e 6#^6{ y.҄bw=<^x-yodyiT-[*ȽoXT:ujMSS3n֤<>ڃwlYe"*0Qgz6nG% endstream endobj 35 0 obj << /Length 565 /Filter /FlateDecode >> stream xo0+|L1~Ͽئ!!.8ڴJ= {8 h*). 9z=7 vE0,Y-g$jDR 0;ZK9/e99cgǖ h Ee82qo249̻0`w9~?qx%WC^,irԙo7yY! (w`U2闿˕z?0AQBlHe`*4)jyÁεnWw$`@Q3&) 4< dו눨l۹B)qpR#Q~@z1H.A,eG&@A$)Lq. Uz:^ozH2h<c\~!=ڃJsWU vJ{|w>&?Tt$^hjؠ0xT&*>wwu%U2ONuV) p@  q\l}wx(\v*W??.P endstream endobj 124 0 obj << /Length 1480 /Filter /FlateDecode >> stream x[nF+tz{6$@b sr-!Š y&)n-ؖbTTUoq!I;j~3o?`uߘno31@'\d:se'?|4+)yoOh~OVJ@!vr¨:.#" /+R/EO"J8_'%-UZǑ#"8'h?ƨMxѭ~{n%i3 AMo(E L^I^8B1C5H eP&a2a#sZ銮VI#(HXHm%ȶ<@d&1؊ڝ*MKbs5ݕyy>_׍ŹuPϠ( Ѧfw\ ^/~%ƠC@҂m[d3I[e2Ǥ0YLÛI6tǽ%11f0UV7>7^5% SdYI;8%UL;\:k9hHmZgm#:y,FUxr~?d,+F ECmT| -QR*^QR3R`SDEqt^cYrGv%띲ҿE: \׬#7`{ )[;tm@316䈊L ڣxIiBOwJQ!lؐ%V'!DoMIw25T_%t1M;(w )7Ļ16Ws*s_,>WINYƝw 6խUVwmC _2;T$U6-!=dlQW%UɃZv*ΣStM_M=GiIUC\ V|*/J|,5 H^'Ԣ58՜[dHIۗw*E1~[ѐh bܒ[s [[R{O:Mf;GW;<4lLV*e*V.k}F9xICbE}0U/)T0 ڠ،JxHr'r8x(bo/F]u}+;z"ѴfIyTfݱd'FmO{s_'FVvn Sy1XϟI]YHwQdb~.heN傫ӍSO 3lqjlhL4\$W=9O0.@([;?eI[Z{msIS|}aIEf1i^ glopa4MWfOj#m>+?"ԝ.1pS94%b] nñ߂4[ݮ<|iM#Crb{o޳%U}Ӏx|tD8Ul endstream endobj 228 0 obj << /Length 1355 /Filter /FlateDecode >> stream xKsFfgz9nnrLlz (gvlcuϿ"^,4Ҝ+Lt> _7w[W~\|"e(Բh= ~e,Mۿ|^4gY_9(2ݢ{۹tv|6E\뜤e/{IF+.Ιһ/fO?|j닢9ќqdplSlkdߔ-#\~ Wy><\"k5i1,)} XMxP/ ƃuӯ m|)8Zd7^l3[oU?P.)ů9^ %(5fhڂI\&]3pG~ *VHa-ixv 99E8>1/KNGҽ#WDİD Mä;60d`y[%B-4V\NV*Pd 4M^ t<\2-y>K\"N5۬zJpҮ 6?E2vskxZ=t2@am.e8_Flq/vnXrFHpjF=6uLsO͍28Fa0w 0ڛ||LLhxϋPSYR'ſV}^",ޞyܗѶ6xd:޹f>ڽ#nݥ,1yud`! 2oAPXZ$]ZaYv]V-fvTS]scM+ʲgQ#![4zjzv>jGx4 _ɲ,h:3 #Pd]9cI7Md*4 %R4k()MzW67ǖԘPSwI۶ ڲ4g<*õI`He- b+jLK4`+ @6b!~$>m50I"dpxdc`B 5ҭRZ{/ˆ|] $7tXzE հN 2L_zyn `9<7w:yGת3!T[c}`$b8W'HR;Ʒ +e"↓gV cO 3A~~u+Ȫ!: *5ؓpgO'J*:SM;0Ԙ>fRfXfɶ=9_FҀ:fj+֘pkatxb©!F9jXI=>чӋ- endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2400 /Filter /FlateDecode >> stream xڵ[Mϯ1pXE?A$aDac7X1DZNtG"IB %I DK $A hUCo(F=wN%0~ɄS2JL8 *;Z <O9j U f"Z-dPK <]L#HBA gt}:zA$RC!8 = PdEEIˡR(D J*:Aj 4[UTTOhJh HZbAamjƟ@QJUGzʑ%.P{w@CwFci IwPC9lgD>1rzt~݅xw:CNߝ}xw?7 _TT ~wx}D~E8Ҿ_Gt뻧x*ޭ/ mIbϩQ+ *ϩ\O+KA k=b҂d[0l(l(l(l(l(PdCD?_~tGީh, *%2f4jFD l72mlHZEN:s8F_11eJ"HSNqT՘0Xt"k9dH+w ZM=6H&Ѷml*#IĎ5sbwHSt*㙑pj> /7帑8ѩ80fL#il_3i6Vexik5y3QblYFM{:Jj6i".XL2cz2"4= Q:"[J'd?=/hE 7ҭ>, Xr97RS>Jd=WziWdėv#8nc;z`O$K*LX{VN9;z0KL_s}*US>C!c a:?(X7J۫)}tX Xjl}ctdkb\k>FY\  ۸>\6RY& VB[,,]'lSSjn.mmؚ y2yFNH6ѓk*NL\wr8=! 'ڔ[vN@ɷV h_hX[˛5:ԸЈM+l[o{%TPl#@3恢X7hSFC g}HXN=嵣ItΩq#HErY"e٪qqN]> $JItJ2ϧֱJ^itΩq#ߡESLޤLsNOH{1驆p{5:ԸGlޥS]VꑯELsN迊DsF^=z#95nl8aꖤ;+ՂmRo&)}tKHhDl5_8{vΨ6-}3iƽsFl/Qa}{Z/?Yj"p4/̆}\LZe\et$A!IwohyV_J]8qxH ${M r[/ܘ@L &{ r{?ܠ@P&rMܧ@nT w*[Ƚ fjˌxW 7,;- rkܶ@[ܭryܽ@n_ / .nunb`71M &v2:M ϻ ?ծY=6=G tYlQN>CaKo$R*tʩpݡivCh1ևP-# endstream endobj 337 0 obj << /Length 1365 /Filter /FlateDecode >> stream xIoF<̾X)==0ji~HDp`@jǷ?&ĒDsVd2#gWÝFQw>HPXI90N7&<5$c? 0%pi*Fi6<|a}yp,[wU tb~?<҇}!/|>a/E Ҡ(`8MF9ՅW ~ʯ/r@Xo@+ 4bp/:bNhۇ 82 uGۥpk4( pU6$/CsB #&@Q" u_$xDv/fN 'L4Vߴ߈#jES!2|&!yŨ~KǸ +s"pX ݔ_bhl +{w樭g+ F+h FfPכvp¸ 3.aQ} +YM%4 Vy_ ,6m/ζ4WWid9nkE CjM׳54VaMZl;A%=<iN:;[|kX|^~Vkpn"g5YYǩ621Xv#ۇEXSoWD Y7֨c"ѶCxA+¸裻 tY&Ŵw@h;ԁmzuajr^֜\>'e N믍U'y&пɧ0Kz):~E|7Ӻƽ(=b cfVRZRѼ;c`Fء&!u3cW[* `$ܶxbl1MWMNX"M1tw$d}Zr]{^ȅ{X-qt'ҸYyq<0 g9 .D+ zӸ/ K6ЬM3t a׌ Z@-1EX aI?X-'*VDv;(Y3AʽVN]RkƁ:fLzEg6j3cꬱC 5jA U[` q endstream endobj 230 0 obj << /Type /ObjStm /N 100 /First 901 /Length 2058 /Filter /FlateDecode >> stream xڽO)xL.E;|I!"/#ƮZη+NMvL̝f{+ohVuTzx\c+,:*cJ!u9D'wu,u9<+~,+KW!k%xTYiA) 7˳t}gYϋOk5F+  ͸unRXgi/>Sϲ\g^uV֊+FE_ :D5L ,-bE6̉m ʆ#vcH XIELRQv" 4Ԗgihݳ /!] Z !!x/>wmV񀫢V➯ˋ}xP/X7?b:D*jWCUkיy0fL;z]zYZ2cxnD?Uw 4+OoΨEԥey#܌~cc' ^g:WtZ׵*Tƫ3f]ۣ@UY Q1|s݈1<7c8q1;Rse\İ܈~6*甭bZ1`dC}F /L*0Mۍs3&]O޼9nFZe ͘w0!/$P{2fL22*Y-)#&%U41,1 4B18ʤT.bxnDQ1bX`PvVyƓn1`ϩ@zO'u1`^}y:r/0 $LǨk볎Gix%Ɣ(UefL22cK+c^6W͘w0o8jK2bX:b߁&5ӷkKrs3&`i3K81<7c( `ˈd܌~cp!>*j5!\\܌~#1K fU3ScxnD8FmC}7^ZeE ˍgw%蹇o25v,h^-0 D-wP_\v9$1<7b1m7ogY_!FLv7][;}'3fL;j!{iNo R* @o1`D{ɊY ].r&] o7qއ*FѨҞe OfFu?[3d#1`ԉugm~DchcxnDQ:R݋]Wу\܌~cǼq%{Lf ͘w0@<b0â#V.cxnDa81KhX=s2fa쮄! 7Sx\M:^ٕΖo ]|s`Fk]{^=?mWe^}5v?p7wxr~U9O~w: jwO uO?%\ݏ?} w)?hjOn$sTY\°܄yvRd|Ly f{Ǯ]sg~t?߿ endstream endobj 445 0 obj << /Length 1362 /Filter /FlateDecode >> stream xKoFdv$0ٙM#bhdHu4ݐLJh{odo0yw+DD bh4 *9O߆u|H |ΆGRA3`Ԁ pD)!l1LlX텧<I~H#Kg/V1EŸR|o &7E#F80ш2*&WNswn6 7>-YZ?wvhԙ\ Nc]k4Y9-{`y5<Y#8͗}-ιMK1E5m{;#ޏxrmJMOX]QZI®uA bs@dGxÁZO𤔤[2nc췟w<%0Npd8ٿtX缧vZ2ӍцR̦i7459BYd1:SM0*i+ՂjOmu[),I m 砏 '#{y(ׇ^A:{}E@KT+y[Ҝ)*!yQ9ezΪf)DҺN`c;Pc GQP,^->aP;MC&qW.k|7!3@'YU,mZ$B.vHP Y2q?iXΗHPxȭ8ibīnyV#p\aY}Yf#:xH7Zſ/J~&JiPP2VCb[̓r/2:0VZ*Zy,yL=I q[_IkLϧ$Μ)MɅ )(qRvϒgߍ!8'] K'$bOj4ER;i^nX.҉; Rf4cBN/@Di> stream xڽ_c#fa7yIa2c|ҭ!­gtuNRu[fQJ+,rҍPRQrcp|BĽCH0V,f} U2o>dT .M -i@yty~d7h[b~Lcb?g6.LMF'XQ;Y!.~0@"'J˰O:.1y(cVa.n]:Q1`F  AŦIŬ+#4)wUBL0fLe M,eUZPFgj8)AMsR*5/k`xʆ@.Q 51D0 $٦b+&N͏C",B4%|8]A+/ZoCJTի?qW?ʥ1,1 4B/mՎNHss#&ݗ笤ɈaDJ`[ךF*E Ju"^,7a+mCkg }__jŸ?z̛-^}e&>>|~w)緯ߔdzowvwxs%xÏ{:| (o?=-qK)Qu){2q|{{#JrFz#F7Boz#FYYYYYYYYYYЛ7Co z3fЛBo z+V[Bo]()JR({#JrFzzzzzzzzzzzzzzzzz1'CCCOB/ƫxU%br\>`{ rh|O%p 6JPW˽?0 g SKWYta n(ŷW߼=Cc*"FL;?"`V;@uڎ1[W@y˵zu~_oU8 endstream endobj 554 0 obj << /Length 1419 /Filter /FlateDecode >> stream xKs6oawUEy X^ b"JCa_JIW/^`!(B#4EN)O#$Q6J#ǣ(^ʾc2[G.TulJrcC]wf Ǐ/MfSU;uϾ #uP`ʽȯ=ѕ8ơkg?.ӄ3Hr\ *}c=)oLf2]a[0QTD.PfJ)η!Tg))G_(uaw"2DK ILclB;u\D އ 8C9n'k$~.7?M1TD$ 36ia^A5_{kg4vRA\֑7)|#q9&M)= ALf(C)+3V6-{e46_SbZ?9,dêYa,BX ֐8…kT 7y8@`wճe;Pr%4 mït$̫['0*yFDz2Mι~ ¨m}>= "e;_cNCZ>4AkL~ TB>"gI;yF) W Xmy;BJ 8I'ɋe[ NIo6lqښxoEra@x{6q8vڔ#qˏĵۨNd|MQ\%?B0Q'l"^7Xypm%o?91$W2F$71j$"}q*KNS#ɷ|8?!]%> endstream endobj 449 0 obj << /Type /ObjStm /N 100 /First 903 /Length 2067 /Filter /FlateDecode >> stream xڵ_S貽jf4# L qoZ0/_Ρs} 3״dv v^=~;ҾVZ<"2X+])Mƃa:Ț\xQ&J6,$"$}wr,\^|[)ЛS,)b)O'YGf5K*}§(D(Ѹ( >hGE7CQt3A5T(/FNT -UҼ:I><S/NZl4;u.>-YFW!2؋3mQ`(*#ȳzË1;0hvQf5ˤ]|)tv,hx(9ԳzsZrpyc:%ˣCAyc0$y/ݩ S'^byЗl "4L"aL"oێ!C치"d{ O/NC9|:O?ۨnX ^-7b߁8{R^r @ro`;1E ύw0:bP#Ss3&]XJUr 6ss3&]T*ymq NFJ8j2w,oW ˳lO_|)/_ۇ˻fzn__xOTwp,_Q^cfWY⯊]R/H9,x\GZ#г7Boz#F7Bo z3fЛ7Co z+V[Bo zu^R#H{E:"^eГГГГГГГГГЋq1N5Ʃ8z1)^ߩu_9_&z2N+r&gwfh\°܄yv!灩 !&f1`DL3wv'܌~ZG=R=ڽs3&_况%#^,]g}yZ*{nKo^J endstream endobj 664 0 obj << /Length 1435 /Filter /FlateDecode >> stream x\Is6Wh`_r394'992c%%ELq R~F 4?(Q0Ee2+ly>|Mʋ7%J&#7׻I~;zOWK1{Ӯ)"H.)0ǫJɔCx^yʬXL</Ä{sɉsM,|N/';,[0@Zø]L 4X3LyZXyzb.bUs.]'SkyVx!7W>: j"D`yOPv"tyRςL`d$C\ e^~̽d@1>Oz9a ''I %sb j;F],-H@;(srP!"I8"6 QNټҋ/FPc!~T'2 ߃*صfvT$u*T̝Pr3rOI 3ھ1!iqӸ;bHDQ{x(C C6їnߙ E*g; 6ǘ "Q}>U5=v]]h.iŁ@j[eHe;pHA)U "\[3+p;1"q6Q̸R) d #pch OF&d ܝ%|VQF|Cl[npZ [C='=Pϲ<#iG-X;..В2X՝!t3GG7s$ qTdM{' Ho;N<$61dl@ҒKUֳ"ÆNArB{pG}S߅ e9 TbCSgOIӼBA)*0DzF[kz`PwܽP׹MZUVz)J^ʿ`Y2s._TPR]:u=c&;$~U]j뵴mAIe("03v &unq B#جL6:j(,׫DBSSnTݖu66uH,FP@fP#d7<ڻh#k+U@m ztz{ΰjUg~dl}4 P6%7 Xax_b|P1B+hi7p]h8d}ID]q;Yݘ*Hw$~l84G$Nw<ޖ53?^J:>.}[pU endstream endobj 557 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2058 /Filter /FlateDecode >> stream xڵO]ShlT*Uf`&$`^$1^8& C oSz;t;J+CW!2f+J*<^q.s5?.ZYu;i~oV2 z!Y~ MG:cC -66frf|yJlPazQ6p/ 0fX07:eu KE h)^OqᅊKV[~ 5蠐Q~ ƃ$ " G@Eț$:wp1"!H8eIj~ji5:m{/JOqQ >v.EkQq `+$~HFVfNv4Oqv5tna)S,eNe_R?=JA?4FpP8(-b8YlM3TDy$ ߇A"Tk~wXhM>⣀~맱%2?8   -{p(C|tÖ!_:ow럟~wCxmO>?ģCl%êyUY}[^*wۇj7ߜy^a]=Gx8Tg´b2fL;bwmD0yy#܌~eZ1MbqD1`YDGl&Ɍ>jǤG<4J=1<7cHvXCe7~?})ow/_?~9~T%4G[t_ \ſyڥ(Rj8?GQ(%JrFz3,,,,,,,,,,V[Bo z+V譋%E٣(GF9(CBBBBBBBBBB^z=zЋz=zqqqqqqqqqq7Boz#FE|jħF|jħJ`T = = =}'(XEOJ>E%y^#PE꧹@?df,xa޿HWύw0E`F'1`?1vF1 d܌~#lޏ{9ܓ-or#&M<>H3ѓ-o@XnDz]>]ˤ"GY~|tmk\OA endstream endobj 780 0 obj << /Length 1498 /Filter /FlateDecode >> stream x[SFzM!)CӴɃ" A]H/hIJj[ 3X!K?%_$08P!upnq~wFM쉓39{s!D@02ؐ6X!"z7!I˳ڜq >U#9HG՗4)ghVaW( գ(ۗ7]VH^Hz{?ozo}D+XmW`0GT`BU iRFyCE[$q QN/IdV?JA@>Q }r')7!v|ş׀|2_` q KjLybr] df'3}%cm%Mvl\dHMy\=Ry}]5h(o*0g24gzpb 0fu KZ+3!OYx(l/ƚbxhq9-`9E{!tQSldY3bpȷYcG?MbTn!aaR/im,Kb p";pCA茲 c䀦lG h hB(lz~Ϧ<`#)JVrf W Mhs:,{kUgġ2ENLv,M,pd1\OæZ<l W' .ٝ> stream xڵO)xL.H@0`G/1 H:tPE`5V+~Ů M@+ G,6kTR휈$T^ֆԐW{O6%QaA\=KHgD_Y̰Dh H\jI j 'Yl-4q5 CKU$hPâ*AStc5uu TWFġFHAaF1+.qd)pqK01ZQA GĀ1X3F7zis|w epdWo%|" $9Q壜*{Yx7gqNV,<]^\tr}O_w}Z>\o>=*#ԩZDߵ-5_/m~!]_?WH4wsf3j!ZMT<s2.;+gZ&Z\d-cxNƅ~#|0IJτ R3d\w0r˂IQx-cxNƅ~#I&kMݿdLȷ=$ RrѶs.feZ vFvƨZ" 4s #3[;ec-bxNą~chFggU3d\w0bVfj~hs2.;3V\e2k7I dʄ0RE{:u-bxNƅ~#֨7t#Ns2.eRͪq Fܭy?6:ȬW+!pG1<'Bshq4Ce-cxNƅ~rfy?*s2.; 1Jƚ< lg=1<'Bs%،9Iks2.#wlX"vɢkr" 3!atX ;:BӶ6\d1bxNą~7!0v_e= 1,'Bw`Q a#3d\w0z: Bc\\E,'B=Πkq*Ϭ$ FL%;ܟ'!npNH};:WKwɸ`ĴelӷUSg817\ɺcq_?'Oo~PP R^|DY]73\O̴HiKFZ#mZQGGDz#F76=+%R#H5i"푆^qqqIIIIIIIIIIiiiiiiiiiiЫWC^ z5jxobY ^ z-ZггггMZ\^H  uFv [ AR恖etI1n9 ՐʌE,E ω`T,}+,<<)='B ["Sԃ[~DqH=Wnzs2.;7{\q tXDm'dB;Ls<> Vs]Q~q^w>67BGuzK endstream endobj 899 0 obj << /Length 1584 /Filter /FlateDecode >> stream x[MsHW&3=_={Knm6qC*P#V8ߑ#8Cl D) G87Gb9J#_={u 8s܉kd z's'r4@[#)b(!0?^0mݞἓو ,E'iI{Ȅqm?mE1<k?8`b]v0쵑3ZK#_yŐ<6Ȑ_?<-$ʓjiF% g\[u (,%2kt g4J0M۞qkE (J#ahVwTi-`Bs[8 'qS0'|s6U!5E.Nt&MBtSz% ЮS-s$vYEi<օFhMxpk8ucx[^fm-Zo- ts_dB|I2f;( Ei 2"<}٨ ,LvD C]9(e .ÐBnJsXMsbHO7M2V#K\ hW~q2i섭)MY 6^'i=('pc}yW[q;a$Zg~ha]-րnQg$hDAӮDdʓc=KlfdZZWͥ)-E J>e)JjP`ʈt i+LIр_>Y_rMZtˆ1 ZC ߎa8$xnLjZ$;59gKʸGAg0lj]aFV=+nwG2(u`DO{ kܓ%3ȖjED~O8+DƷXN=H93+ >&2:)4*X9S클r$Є؝\}glվCM'٨X ѧ iu1̔k^cmMGx>G3O$[ktۺ8Ex-RkFР X9X2bnt}Դ@aN+NmV|1r 7je_EWҝ\C+ B3 rT6Y^0βI8(kn&VMR>Qe ;(MIr@4_0#eW+NVEd]4۰/59ZV(&|TO*c7tgM8v\^oI/F`i }$@ﵿW<-"'A0aJhY4~[WN*ٓRi<I\<ø JsѧLEZ;Tq:kqw0wἙd0o, endstream endobj 790 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2115 /Filter /FlateDecode >> stream xڵQW1yѨTUR nY!㽄%˽Ϳ)Mu/ QwӟKI%BVCɉQJUy-5({ϳ4GRۥ A*$&&p2I"P!MdDaHjH_:qR<p;Sm8WIT/-ա~'.rKLFb.PX܋_sMe(3ڡ,!M< M-I6[D.]7HSIzUPJ$iAvAS[~'eXR6T Z6Qs`FNHj^UyEyMOMXjo p魠qSQjz5ޝ~+\Fk{MZ<ʥ#G5Yq9{9Ml;!hcȧ{= o^|GfE?^YXH: Ϣuq1\E0F 2'\""Wau!x<)WF^eOD&zHo/7_<^=}SzrszG,TKV4)fqJq޷ŋt}|z/L~'> S`\3?0JpU聥qߎX[)dCdΣԵa9ęO6Rkɘ{s2.KנFLbZznq(&ŗ!Yt)f vyMs_Qcs".1o+֫j5[&9'1d\3b\'UQcZİ vDL{}fOw=G91<'BR&u8QНm,f ɸog,vI6$cHK2"tcxNƅ~#vD~g6yܟG=q v>Ў(`|cx:J!A9!=OJ96ɸogTF;"X5ΞqZ vF"q@ϓs2. B-7B9㤜c vDL݃n#WFwI9팘O{E ˉn#qLˈ%wL-OJ96K'\hvA#F‹s"./޴kG8gSqRʱyNƅ~;Xٟ̌T}O*_snv p L{R0X_LrN>!LYIa:)WrXfx2Ŕa:)Wn4t>JHCNʕ;%U,\sy3_&|e:RÝqL$0+ wJLI VLD|`'Q\iSb";IZr]LrNJwN؎LIa:)WԲgE(tR4)1kmٹb 6Q3/9FGCm$͟ E=r^wo/[%/?~;yvc_pop7t}szP?r?'1>?}?ủoР>Zs;og.ߤr+[̹CVZ7hߝr+)%G)Qj-ЫWCCCCCCCCCCCOBOBOBOBOBOBOBOBOBOBOCOCOCOCOCOCOCOCOCOC^ z-ZkB^ z=zЋ~g~{Š6 = = = = = = = = = z#F7Bo#I C?X褌xIebBChm1cxNƅ~;Ӂ?GDRfk:)L'JÝR6OoD\ tR4)||> stream xڵYߏ7~_ދ,Q?(A\(lP5탳;)؁wh('I,%GRjBj !G+ń~ )P3>4(~3êEB\B(dOxHr lPaI͑}Ihd 3 q P!,PV̵$RjDI2yUKdͩ~ x!@0a<"R-U2$J%6R$JImy=U+|073) 5Q$r X@Z&+V,(&T s!K4SRXr{5Q)CkZ-\GV(g֨h VʊI̫ Fp W`y qH&IMEH ր^)O4xL R$^AF).X( z("RlXx+:EDůѩ>@! wvR*x!hcpfc擘|qʙ/~8f0njo>h f_ endstream endobj 1001 0 obj << /Type /ObjStm /N 100 /First 958 /Length 1056 /Filter /FlateDecode >> stream xڝVnF+(_$vJ0`XqCr|ĶL`H\ +_WE A.3ZβLeJg)o T?* kxv it*ʲ+,"2|*66) Kd04)#>+8ʕ|b2e-+ЊAQ2Q9ː a獜8;^L\, E⼜UqI\P1rtUzf̳coBEc-('=shZplYDE0+JGeHb]`;dRVR!eÇnhV<"*x^|xn枇^aZ:HhZV#J賎Ls+(r/g ) 1Me2 yE庠4U=FC)7ǿ?CzjwW߫/UwZwÇaeUSbEShVnGVuc&?X6Ue1TmösvI8g&~.pL熯M{^> stream xڅVM6ﯘcsɒR$ = eq}QvUS}o7 ki@oI4'"(hE&'EKFURb!D 1*d5ME:59-dÎdE!RlJQ|*)Br (8'X'xҚ"'B'yiY{*aBR]ΦMdDCp49QݏQ\B(181d,1,dTk'Bs0q0\+Q{$Օ$F5ѧ=jo$9zt 1J(2(!ewMЂKvr X(ƞEl˔uJY!|P vMv2iR,2k'콆i˖hy{Lؤf`vz%3LpXK'376uRfnlTfnl YV4d"Y_~| c˗/:|=ڍ'e>9;s(!p\`oo9 P1~x͏#!Pp\Xy.l۷3֌}+s+RM]޳ԯǏzsʈf͋Ji¶93m>//?}ޝ4ϸ/ÃjGhG fyx{~^k÷ oqg|+W򯌖m@G܎fG{s;_i>=O6#Keo3߇˂6aۜZcu~}P< np9nS}嵩]q[  {SnCy|Sק=\W0Zi3x/ endstream endobj 1395 0 obj << /Type /ObjStm /N 100 /First 953 /Length 958 /Filter /FlateDecode >> stream xڍTˎF+_vAEYHA]NJG냨אƌis~?RΔ"o)Qg@&k {aÑs(1" (2dcMF&"d&XC6z>:2'Q`#qYr.q 8'#P.'s ʣ0o$ϐEF(H9fSN@Ѡ/)JaPi R(sUJd <|%4TWQ,hq_"?t)<_ҰG#.SX0VEXrly]xbl!s= 7,-̊wnx8s--0hqF wn rJc9.X7USї}/m޿->t!v:}6Ç͹ˉ'^S4DV_|}M98S]x1y 3g]fќ~C5%෕]BjDn{ohe|Cկn֙/mx8]]^ kettWu]um ,~sNYau]> stream xڅUr8+渹ETrڪ}K)Tޯiؐ/=%e !嚆LSsx -bhB Mܸ Yyb#nTH#cC:qؒ iI iY3TKk2%vҞɦMC֢QdCh_KhEMHLjHf'=c;e 8Km̒,p" g Il7^:o4hͧ>m{SiL#OC$5 L(dЮS !UZb0&|IQu0?/Jd8^0&8ڔO,Vm6u/&K|78w[\N%~xq\/V˅u8šͲrDF"|b7+o4Ό[٢?١xκIRCcM^PM1,ݯ2hIm2ARw WSi<3 Z#jV.~/W@LBs˭`Ejq]Ρ8^jvUor8SrɊ5?%XUoTQKC-W_ދ.XE3C&85 {> stream xڍUn6}WyMmCSEL阱bΌ,Z]̜3#VB:_ I7FH)O^Hh)Wj:(@9R ǡR<+Pt1bsМ 9G)YGi=r€#FSHcǎ512][a-#^8H3498A%ӭ,m^RukWԳ[B\!}|G~9!Esca0g =uhLP#Z6 /8*s%Wyx{pNL6|~F'nsw2tߟz'kϡ]]VKZJm^)smp.CjT֕ n?CخK3!}u o*]SucpS~XCoPHpscpSe3kmis.^clS:-.d؅7t>~⛝PSTi`]Mnj5YOM ?; endstream endobj 1998 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1075 /Filter /FlateDecode >> stream xڍM6+xl.YIrIҤEp"sׂeѕ}gW)ӗ//J( e* %_-d!ɰBℴEcɀ<P ^ּ m(%Z&Êrd8a$Bެ0RX͒8u%\AdU!(LE0$#7R .0* 4\dxr.*X%[舴EKXD1סbK W<b "$/KOTab*b#Y7Z*#+B .Iγ ynVau,W^fz[0]ry6ǡ>+<ِghcW]?~I^l?< {Ts.=.?]xwn}A۔o] f}ҐZqMHyⰖ"e SS.Rp8& #|iB6~%>olMQOmn3)Ķϡ}Y<|G\O8ME0Я|O ?"4i endstream endobj 2354 0 obj << /Length 1393 /Filter /FlateDecode >> stream xڍWݏ4b D|qO R Dyf}n󱊝3qV']o>ĦN6ΪM$;6DF 7?F$NjorQ<_LDo_=3OD'GVF<yGʸ|Z)`nqf5&I,lMAKJf,~3nɂY_Ҋd]Hx8:M,$c}>LVYR۫ή፳!B%dw h:'~$Q%ڵ1̜]L{d#@&q0+ً_ uŐJC`_%9;APN?_)ת] I9k5i8Z5^=ҷ!on:"9F1"BB(3ͥ7ELߴ+X\&P5/ ?+yW(5PqGnxDdӣ HY`]z9E-+ꃺ?y%WkFaTT,ϰ˴ dQ#,|}2s_H]mT^b>:ǵ$Ҫ5.X`hhȵE͓DX*],s?& alN~!;cCCVX](M|"EU? *n > FC-7Q tg$Ӯ3kӂFb}QˋpQr$͡e2;KP|woՑ )lѴaKC_l BCGqǩr*>9A>5KgCYqX\Ľ̸ WKYB% ! dhy4=WR6U\BO?XIkE sfwyd!tP ObF CiCTw\A(^]~׼~8JvXd2(r?ͽ ;ET2{XuGL֪lOa4L`C&|MMD$> stream xڕUQ8~ϯT 6>U]oBήc!-])<3g(,*V.1B㏻  ]Nʈe*#BM?k ߥ,y ʙ.%R,KD*NmO'k5c/iV'=f蘗쀿G{9ч32㜴3/^H OݗeKPr[7-+H.C,%ph!pHVw  2JXNdberҘGW .E8tP8ds#o9]zSTGmInVWע\zpvߦ鱵ˁ9?t,&+4fxA7cF+&D_Y굀0YDE܂V%daP3v2P+>q(󶀓+V6'SF1ya^r8`UboYN. յݝasrZ})pZBGr 㝟&- fF@"c`vպGc#&F]( +֠nZ7693u[nZPM;Avڐ\~]@|[FJ |& endstream endobj 2366 0 obj << /Length 2845 /Filter /FlateDecode >> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2371 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xXo6~_a,biZ,Hf[ Zɐ4_h;Mb9r؋t}(;1!2<%3ފyAo˸$8ƍ9TqF3a @Lj`Ƥ#L(( yL#9֐ ɢђÌ#fb2f5(\Ŝ$+ed)bf`Fk3E+1֞qBLI4,@BN8$EX`9iCj]‡>'4iAUdv9ECG>8О,<|r}xMesag^ 6z9O疾CrIt܆Hڿ}3,n^_*{!o'B&"ۿe;"߂CndZjy~0o1@BTe>zQ밁 ?ofլo@ n},WtU'J)gu/ce.CM5}'U=Lr඾d(X&:Ǻs4(4úL-L;5᧽g} ڴpOOvrOÇuFr6 M2fӪrOAgyq?}/l;%j67ŗP}*M6-e)׳=:Cq&7ud,_kثn?ϖ`\k5b}99p_ͬA A>]b]CcUنm0p:04d{FEf& ֋HjXPg@v8bjqb] & gD5h2H_W( 쌢$EFi'ʄNĸyy2^<]Ŵ^|VMc>'//BRŦ>|!G8&<"ɸ*IΚi:b~}.Ia_aQ͛G6:ޅ.qFNǟ qX\tz(>0Ƶ[`q}KQ5`( }~5jvn&7b.IDflp3% ߶ixO5Ub%W --1oB'\iN,ފc⊪m=a-DwO|]`wQw֤Y@Jī~6ɐfrSC.c˹ۧ/ap endstream endobj 2375 0 obj << /Length 2524 /Filter /FlateDecode >> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2384 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2388 0 obj << /Length 1902 /Filter /FlateDecode >> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.Qڇ6iUj ;3`×Utavfr?EE""߿=_p t+ \Q~q1 ,b] oYdֿxF|re2JWPq4/W&VJK*(1[,A סT*aƼ4 ]Uew˕RI7ƒip,ݎ]e *^|嘕YG%| 軂jZk#J2mA]^CTIFBI*z&Pa܁LSQ}˕ax?xg$yuC!۵M#:+تU"ѩ^v]C(3([)8:t)RM WNxcI ΂?4~\M% #,zā-+!cr+[m_**+v/䜾Re95Э5 h솠KHL-*FE%+I`/!)bx C:UWﺖbNP". `A(b"tdJos[Ue}? %wxVi>B9 - UvtC `GPH nRsb|;%koC)]5: ,=8[^b EKp[;=aS%W`|9s{8vfKT*Y!z= OX3C!t.g7~tFLL!F#k߆Izrݡwsȼ9l̩RЁ6TA]Qr#;@)-0C)rfu݁_ r:kӜ,'BLsQɘmӣlȯǸ$*X*6M>[4_LM\_+GyR7>I+ xl2` =PJO> stream xڭWYo6~ϯJ@Mc߲Mb,}%:FARI_*rA79CE,("Ky}ratD ,b]pJ .uˣ#D:pARP'XЈYuqKڧ.K%;ܔm#Qݢqy0&r'6Umen]<wNA Su!\V˩~+UA:,]X{}kB4"Sc;ȋKƘ3(_0OTA]YzW BtnaIP;iԥvqR('w -Lu%fӸ8rd.4$1V꤬Ux: p<= a%EGksQ< vĽQ3w9ۈĩgvDC]E5Bce3$iVW!C*qeA$"Q Ȝ$a:H,˦he\JTm}O2@6W;lBJ3mgtYcf7d/.=AbU'4^E] )v90z1KO/\qBrʦjUU/1U$B?͵TD5~Ӑ1{ft$6f` <|gN~{.UN3V-q{[4愅|]#ߴֹS?6fHs#esHN? R(:Zʭycc,dHx. 1ugǟqCݳ%$/O6cS~ u54#MI$<2v7L^s14,NGmYUCg9k.K MqoۭNC;p0YM`z%$<}drJ8> _vYXBIq Tx/TP]kFƲaG;~gy)ҷ?b2 Sw*^u3ns~y8o !Dv)8EgMO-3.b0&iBҐ`ʟH)NrMzeiv݆mo67Z.h\^8jʁAV'YB"3l>FfrDtTzW7f 'J; [8 endstream endobj 2417 0 obj << /Length 1045 /Filter /FlateDecode >> stream xڝWMFϯ@ HCqLVQrDkgsجi$Xl2>݅ xmkCz EG,I&R=Ei͇(څ`,Z>NJF$2-מj}) >/}z<"In\XLG¨fM*N\ 1 BKDZ5j_(`3S 8_ڛ\Mݼ82c1e|A|U+g"“icQ15]7s%׹˛&XbEX oܳyU<Է\a=@J* ғ JfHhsZBK #Rl쟿w 4%HWxJz}5Tj*:%k|.-ʇ"nX 9 =0y2O|N10>KMW7MHc]f=~jޕU1HanӕH0ǀ.(q J0mvApbQ a5Hqt)Sy[úFϮE Vy%oo mJP)c(g:-V t}*۳b tVG:A] )O?^ 51yբ߲}Y)8}PSpZDj抪]swr|^ ?l;ڛt~Lj[060>uc&>{td}þX*oiMs8 xgh=ء6Mu ;EŹ!OL͹( Ӭܬ $\|{n-9E;S M|5mzQC @3l|:&k桓C1‘snJInb_G v|2 endstream endobj 2435 0 obj << /Length 1114 /Filter /FlateDecode >> stream xڭWMo8W"U&`Pned&`K%jHY%'bg޼78,xU_n 0YQ|$"*WǮʕmš8&o~yB~N|ke]I?`M"BX}g90ѥ9i1}N~vZ_NNzhN4:RCda4 f*%U! s6'b#ђ90jɡ`ǝ0g_7Bkk)_5 vŐ+MU%v&9#?I f%vr1F_}0?ms?|U{!6=Q>\9EصgmZyeQnL"ĝrS"BKFwf"$X,L&ksgģŌǕL))yV*W#}a=E'%c<^8mz3xn7C~CT& UpP=THŢSfQFgZAfԨd[ךѱ/8{Dz%;L?wӁ b a|#'u:%oi4PUh )tTIkaTvtfvZ?Hյm)u`ńp1pgyi<ӡV4Á-wر,eMxyqz$:I23B65pYBZ|w/WԹ Ey^ukPeY/dFW6n;Dm_ZYv9+iAˮvBn Na@ה#J *y܏Y yk]*}lȈ4(nM24xuU|ik~FiB3齽o!<ɝS.$mż7g78 疥1b]]-zs_N)^uφ( 04gUF0( TMca3 `[80 endstream endobj 2455 0 obj << /Length 1074 /Filter /FlateDecode >> stream xڭWێ6}߯[)RH%ݠEQHa6QY;ɲeFji̙3?8H)s 6:>.͛{$+݈]+0m1ѻ?Jֲ\0JR1"4|v˼ɓLpf eRIJ Nb -i< "S䳔V\xi8 ?|*~;Vmfqg\p!VZ6ԚZ8!gUsÉd*g~ Р ;)j}Ä˨+9V&9ELiSuu(hw'kvRʵ3hֲFg(rEf. IU<;'Vʻyz6B/r5eJ^A@TsE_ {';h d/td<ɘ/ sEBGE†DhN]>o$ lr1ҵQ#mcO@9q:`$3X2FjoUj^y~W˧(ĺ&WNEA).-yntxf.lƝg=ʱoTp=k~Has0ѽjDĦ}v0,>zqJh̩[̲,,AAjTM)GwV+1.I0KYұpQ*VjOGZڋO!l8讘+M(!ei4hs=/;@V/3(aPD]h?%{d'<d0AworB');QVYTETGkw~{(._J|Oan)W뾥~ ߇9C] \Ҍ}/]NBIWW~ɧt/w+iSu-,!ً1^3ݫRr> stream xڝKs0L eM2iN'baH~,1V [zOҙ}[n,nNz9žz!re=/ei;R|8~_<ʵ,eI!>~^~,w>9!')t󀹘2M$@MU_&>X;L]̵BJͼQ0ĥ\O<P@B[bcDn8O3=TAR\(|'Toy&ӢVJoөUOsTq4(i3AHS s&Br17hED"&'CЎaAA8Q2ca|? EU a.v؅=WU$Dd2o*үZ(O^ c *Ms(soԄiD JOfBPsov]89tm q \UQ P>01DOa.6zClz >Dx4'_X! Z0+Z|я2Wa?B-|:W 6] ]ɪ~OsKvn$Ew%<UcT(!5c}yس-@L jSڜ)eU2)"[=ZhJ:RLS}wT> stream xڽZmo7_YC_A&"^| [,vWI_g(mbbIťș>VT*9eX+0Nl?yQ+Qʱ |") +6D=-$es*y  0`h8aNkمE R3A8 VAuo21 L$#cB”aPXs`XD&Ԋ"Cv3à(jeNFVYSkفPnޠ L (Fyΐr!ыmʖR2FAZX9H4`vebdQ#RHDΔ)o`!Xyq)9Sx !j哖3AcT0NCU"%cxxD /a )%l`mphN Y̾`(*FvԪc^ץlx,I3S 򔕈M᠉}>o8KZGMY6mz98N9fon;5f/׫[ #_^wzϻayrѾXjLx8PH DzB]י+ⵚ?ŹaVɋ8q/.D<6.sX=fbܮ?G'Zٲz~э-\tτЏrOPߕ/HNT{0?H%oV5V'W|? ׋1b3(e]?_8>~,U۬ٸ^u_DKOI6iVf&)t"6ȸ_\blO_^0nGS=jDq=T vspN>98 AaPXpm s(` IBȋCCfvlnn0Js=,xzJz) bO !CC0n*[A`j1^o7ͬ]=| 0l.4h" RNp3t } 3{x @MFA)S q?ASg_g#X l22xP 2(MlSboEh S$ko7k}%qMza,irnu(wRjvm:}k(%d>˪]HFMDWf.=f>VnB# =NCp;GA暶?6cן/妒#z p#{Sm/+1 xƠe|rjNƋڭ`§ MBF;=GEO-@ r 2OY}% @ڲX#jptP~ވ~l$&& >GHDh[d%`X&$_]SgRQ+Q;M\Y<*_MpS 8NS)TTh@PL-Aq2);؉4:ŪRdxQ਼3HѻSb@P DB>X 0Ўպ_e-`R` /`"7g/u o}K]r4^V ^R0Ln#L=qk-_I<oh[Jq%U rnBo*$+'fy7uK8 }hgi;,ha_5;d/M g̫{lV@ڜMHC ;_mv\W$p GyyF)e+e]GL85)%ܠ\uZ 0>×Xw'Wshh; Pl [-` p dqBʮPv2H]N2Rv"UD)9%Rj݈&n;Gi,ݜ2͍3dZȨV%)8:M4K7%rR\PQfj1$,9AR&Bnu@ (_n&ߐO^fnΏr)2v9k:#CS&L< q3 %RV&jծVw[^q>.VNjX⥔S| p7 ZHHj+6JRe\]Gqb-Z@h)>mA,˼m/VOwBNy_s4*W.@ V.h Zݗ _p/8ʾP/CEɜiv}-|Z+hW\jwmu71Ysk-ͼ7nQnnǻZ(C񔃌> stream xWMo6WV-`1=4^VK**i㸿C%Kk>XK<{,ǂ$:w'ԍ7~|p¼]ɛsFIJSPmp͚޴HW*|'lMkܬ"0ECVWO㚊g-GkI]הE5My8 /o m~Պ밯/޴p&!%Ab%/A UNɡNqnyD!r%igQfjkK"8mfWZO b8v`_& d)TQ G}v6!R*f}w[L'SL]_]ߊ]X- Xh'\Ӥ7)Zج"Iľi`tX=2/F 0#$uo54#jO׊KBUiHbC%-54ytvm~!nNI3շ|40LN7}sYtiȥD$ wfNP:C_I؂vEӻ*Lez F;~]A*emQ4*/[k鐘2\4d4P-k%O%?XK!D|g ihп#yݔ|WWR+2f_)FLbԊ+h<aqšiH:!T_KK8b0ʗp`_xÖYzGϑg !25&4 3ŰQ8LH:/w5?wG1\=/(vLC((^~Z fKo1҉3+x:^ xȣC%C/lCWwU?ܛ<\ffgMæ,_̿,~Ӯn̙foeQ#HQE(Vڕ_QԾs L#NδzQqͰ{ky_O[ɣ;{>9 ͩn]l[|lAJo&h endstream endobj 2494 0 obj << /Length 1567 /Filter /FlateDecode >> stream xYo6_@{ùCkl(<6mi%AͲ~w˜;+AZ)c&4򮥡KѹevRn?j2O`e»ܑhtM"@""e Q pG;6Iܼl;&~PZӫYx*}  6n  uo|݌adUe͉&?]a9ᷛ wr&RB>|"&>ARfcM&>#ZVX[E[A:Ǒ٦ˑ(O|GԼQ^v=Ft2'+Ű{a:ãfmXF*?D}Y53;ZD!l@.(Z9SxP{9(}>bA{7& ]_}mMc|t|8Xdp,u@vN)\A\N$!̏;g/y.1( O]o<O2stSY00{ҼUQp3 ˅> stream xXK6QbV|Kzm h)AkѶ==EJM>H&3?n]`A)cܿQkUr>/?-G'ӒEϢC2.BD_%*Ӥ~IU%Jf״u!F JT`+~2(E *4UZb*E8¡~ps,"b  y2@M~viH<ф]{_DXx ,S9S4Op½`>McfוJVUJ5ix p?@bg$"pZ!pq@.s7Ksmڭ2/MR(K'PAPLPq(=-ǬfK7ki񏲗}{N2bסoLQ$ɜ ~CYv`}ҁ.]g2-l*dewCބmdw!F'ϗc? ?qyyɀHDR(~YTKӚ)8AIy10ňFk>J(Rץur}\y?y|߀V`DRsFTSeU;mI:ݛEU~_TnH|Q0h{.oTt#Xg]sfjY> stream xXK60zH)RIMdKMjd#wCђCovӠ@Ryq曏f"iDUlfr?]_}R"₏>䨈j"f !IfOEiz]?maѓ~W$pƼnˏK^48u 9l5G$Oa\תZTxUܡ";wp-1Rc°mm[ܑw˂U9.YP[s<8.'ǭ,$omu\R` ]‰k;[Apt474ʘk&\Ovp4*JSB5u׷êoZRtW;0ᐶ)ׇ?@}zBa/K(ϳ=4;m}vggʣ\__/-Z M?/7~-[Xŝ/JԽ.T9bz0iݹ7Pnyd  Gz]~Ϡ= . <:?9ee{*}{ ^>=6eݎ)S@t \Z<CKHQ0~(h;7!-ėCO),s(O DbhBR̃7ᢞ\> Ӧ`PŶi:^H LMuۨ):ÛOrլ[e 4CUY'ᄮc)#淲\u <|F:ram,AcmoYV[nS3i ~%r]k(@i֣%nvrfHCwرnhCr+.ppƆ4#9~`1燒G`.05`_'@ʺg^|]cccKRl N ڴ$ebbmjhΘ.<1 H+YmԵaPiTQxމz}3o3x9TM`oOpm-NL~3Ӄ2 D˾>Гxuxb7RaRmɘmpHp gTtVT5%~OAbF:EZ/3tD/ endstream endobj 2506 0 obj << /Length 1800 /Filter /FlateDecode >> stream xYKFHO"؉HQgmYлoS89QdCCuuu=z,0#Q#yo/yD  Lf_^|(9..MP %8vp.⧯^յTWJ"pLݻ˟.~g J)|@:&8)Ҍ#¸˦ #]⢫ڽiP+"g8pij_Ԏ:89e#ỉ0 ʥg@k ͹_c ;(! aw]8n[G~IHl_<~aZCDL%8oKz Oi'Ҹh'JgbjJꑡL ~Ӝ~~{_7q+f'B:N9=;jnFZ^{5dFט'[ uқE"1&C6C+zZפL(R:*r+XftWeyg>.]: 4,5;R#wr()r:ҿګk'P d U ߒ21eEOM7 ļ(1># ϳux}J6<3y ,y'vE"bRz_wXÐU KhHU[{&bB$FP-Yo5';prEӘ:us\œsz4Gz#z3fJZp~Y E?~hw·jПX&ra1Ho,I/yhe!fa48@}۫d!ijTi#q fEo 8=}*U 27d< j۹A5EIRDF6O|[_j&|r̃zby W;u%b k1(?8"8T&C|յ!xb.jUHϲKL*@l(30P;SauoO@5>+s:[zWS|5ܳjqؾmkoN',*<,]n/.\wPbEޔtU}vIJhɦO'P )KxXn.0޳#2tC<ǦxT떃~yy>/]HuUDOZM>q9T2)I;/qo(o#V.~uS42*%figQCFgc45 ?n Hf֍jFڦ} hJ`2=Xuy<ܹt'( #(8s͎ Qيlr|ьHT995s̘pk?Zҋhl-&ld`;4M1]&H2p25`Vt:sB# swەM_M*`3Oklu6lDWSgok!z9є@.-+;gQ'ѳzK}0z|Piٕt> stream xYێ6}߯X&Qm-РAksm,_!Kgm. 4sf ]$.dqNrEbv_^Pbf\疲S/SSv7A/GPu'"?;CO`5m˟m7'CK $)aa%C.Fg*6e(c<;'gXAIXF!Xu%eNM[{3 aFW}ϫe ǪPQL +KM)#wejzNcg^[9m|gkn,£f6_|BhȪW]uOVq OmQ]eGlTkڻΖU4&$9#bz>4% ˮ3$H?sfNL/x;2v6KypS,GM`VfuNe|a v 5̽6er"۶iZ6 &YS$鴼ۙ|e;;YWkn'<\?:J`.}\O849hǃɳ?WO endstream endobj 2515 0 obj << /Length 1988 /Filter /FlateDecode >> stream xY[6~ϯ0$1wIv6h,!̓bsl4b{)P3AѦX 0d/ߡنt Arm'tx7v'Ɲ'J $9\]WɳSqӛvB$?;)Uڴޛ펧Lфo|y5T?P8yKo sL&.#(v4OEoM[]ʺP"HnvA%[ӟ#K! ɕxhNQwqG>Jh J"s5*. |%%S~ `j+SvNX鮋3`Y鍾zWvX~aq ) ҄ȐITH躜 C揃!ﰢ>a`25W&U.}ՙ":v iv|ڼZ1!mRRor6u.U_BT.ih[cUB I8a/gτRK ٴշl e `MRt0c~:̻p>ָT.Y׍>0 46ʡdr1үF$ZFZ1D%QlqP xG8XG^8"r a˾˽UVH<Cd bʂ<Z`KuԟN]tSPb5Cv(8D͵s(8TeЁ3A [!n]tX8hIlM.)rϔ =ο%g .d5*? C55p[K8%l>SLGG kȾL!fצEȶ5na|5 pf;xz' ܀qH=4N,xL)|jqa0ap5fϲ?SLe hJF;RbWK3%B׸;]~ߍ6֜`RQU:eA@!^;ɵ-`BID<6mQXP\XR0;-cP e]r1?EFǀWh%ǀ%zX4xfB I*8[yh1]:X TM}y[B-2S,7*e䭟-> stream xYo6~_@ő)J6`~ Y>(6$OHJ:.+0%xU,f)'9K6 >AW̠.W$MҳF*z@!"%I*&{@>)E`LBbPQ6 ?/_l[vpXb?*Zݮ[o>U •!)|^ mo(?c"^0Dz$jA uxv@Ly.]ԍkKCkxz:k*mס;ts3 v8pW'͑;)D C dͨ_0>,6͌Ɣm[ -3NP--|7=t aBRfC|@#!P+4~%&C bptE*;pӢ"V<䟵14ᄖ'&SiHUW;!<%y-e0v%WF_?/p ${"bWťϩCmO2~XKa grݖVmᆫ4j'V ^7iN"JVted-?N`dj;{[8jNm?yho9*%Ik]3u:64}r SgI3W]PbY՗˩JѨ -'#Ƈ_,-ē}15-oac2Hza,6 .IHUuǢ<%7w!WciC>0*޷ThB|bCpl?к+?"X}BQqWN]0" aV:TU%g/ygJқ?#׀MS?~7͠A%7UF;_?9ͅV&saOgxֻH] AwvB`mbS[1sj\5z46+8bK?BDxqʃv*:@raԞANŌEQMAի;߃.x h$? >X endstream endobj 2525 0 obj << /Length 2091 /Filter /FlateDecode >> stream xYm۶_a.sD .h0ۇ$ڒ!m!%іb"DsHU HWPfU_nۭw/̿?˷Zxʊ\f6y/ORaNkxcMe":M|xoGZg33b%K,ug` KJʮ+ 8?pyy3W{*5"5~|L%mͱ{ ~7`0jrQ( / Y.0zkDTlc~F]ByQISiܰ~_b㔌_]lh}]BJ^E=`dƪ)'Wv9VùktжT:?1}vu͎#lk`, eyh<9P>./0[ E u7ζѰxh4DT-ɘ{!\ňP_ $W(8r~. Kͨ'ZhgP⩁,?v4ߴ2XV/S. HdGvCX91H A:,YC75UID!ҋOr'zAGFv 䛲B%{/=_? Pč?eMė\Kd'.LA`c5Իƶ `K- cͅ]1Fz ؛&vϔ1@7th{@Mr*w^" "2nTŴr9 MP@?Wd~MA1IۓAr؆s"`̠sT?%V͒n#W,ItydOC )Oy\_Ng m*qLP mߺyfkIi4KvGCшl"gE!#{Xz:Y87@FBx cK6e3WY:8Mh[ ;q*qoT ₛ}J"1nƕ`E98FsSe(~`T5u&A-%?a?eb2[Yi8b=D {z)cVi_WhĞ^'>Z2 `>z״}ULqbـVC5q$1T9H>lbZ:jK|f"~}ڇ;G5a0*/43j*D}TJIمH$< a$\.Pӥ*gẀO;D:WwѦ&fRk^<7<pI`BOoc9:ϓ{ڽ( ._r:|,<F s-wvg)dtLrlݯkml^۰?yt8{oB껳o=56$NNmf.#qKmҭ$N텱hWf_ Kf?qII_dhddVw6~:l~X endstream endobj 2529 0 obj << /Length 2040 /Filter /FlateDecode >> stream xYK6WTbVzHM@Ф%ʒ!I73DyYXXSCr87UWY"WR B ,x+ݾud(g-Wo>_o( כ8NWMUd*^D+ÕJF"X4b.JMԦ2//0VUD[4zJJQ$^OqVWP&Muꫡj*̀Zj'j fL]v^&%NPѺkvRI721Bl&8 Ye7u{O$ tsֽ]ewk15αS#ui{`Cm'c6/0):YC6!c=3o$tbLh5ɮ_ɕtTD'Ϟ& @\@7yWu׎mI+[vCڒy;X jpEa&"ɺ$:0wytC,q8]=m[itF9;In!&DDa6ZY`aTGN>tM~ZXݢt %B\/2b޺EMfht^-g:"Zٛ} 6L,gaaN1/)k|8;T8Oөy"{!$x5&'};QLqF_45: }qC+Ϙ܁s3 +4Kya}#*MD.Hsܲ֐w$-hեӹMݑxIBww_S*Q"#@*%5 @h@DYΊ2VPa @^e{>π)NLF' Ƞ20 pŠ(u>]V2rԣ;#ٮϕDIqn>.Syc}{+H]Wq`ntb}ГC]n`? ftS`Y2' @}zf} kI$arl@@HA]G;,ꂿFư5e#UlE" >Z4)X7Il8B5S)d̘qjIb790F"o;CqQa&J= $RM H&Is;[|Th#Ljߌ6tSe\R53c,YU%Bck5= })pL-H%@c`AL/od ޖKlSlI䖘g6/`һ\b׾;F10շDc-Lj;{ЄE.4$Cճ&/% E:YT:3fSHW]i'${dy6+X#wyҽ0)0 FZ].lJŽO(l!9-fDm/rdFI:O9HTd`d$VX90ZPPg~U88n7=3E햢te՛ʜ3]AѠ]]Ga *EѣR+"^G 85?^? cNI*$^$~ͱ"N5Xpqi4܀sP,29e6 蓑I |?K/ endstream endobj 2477 0 obj << /Type /ObjStm /N 100 /First 979 /Length 1956 /Filter /FlateDecode >> stream xY_7E%@K л (&Ij1"O?vxI H3>7фL aW__$b8 Tr>H= xgdID)qRI)e/aCЛP^ A 9Ɂ 8b%ܔU\*b E9H  PP:KO)PT9K2!Eh\cp(gD" x"̠)a7 '"ݝ3U\Q"1L`"Ŭp 898}`2V!A.' ژTl84P;Gտ¸A81(u"noSᬶd+y#P>SG P"n "EPTfQ!R2 x*l$[ee'r%(3OJ()Ti@I$8n0E}M}S8)WEAD8`+D"* ]Un]$<{b6iӚu7wn{nwog_Eoސ-%-T]͞yo̯?/ۛEj?u3? plៈ7+pH 2 ǻ4C V h=8VwX; _ lqr4)e]Igdms;mdͿjmMMNMmDu R::Ƭupa23}AӒŒfۿ[-w[ &.5,zԧ6}kTX,ȷhV".? 0Q] пhm5Gh_TcjwvmVDReMvx]E :IMT@- Ms RA8Iջ/t82HДHkKL~:^鸙e/Cׇ|,Xʱ<I i7": jݥ]67fo=[V|fS,z-).\(k: ց_c, %W5UۄQDB!XN{hMWy yqu G=("<^2t'Phލ#RV8|W`1t1tuv-K+)ʧnl@t1 lO0jf{umewiyIQ -.G,$f(㈑1(?xY9^2ܥt{sEcqDJMWS2tޙܗzϧ $.lqDm$3U4C ?H)/\ 7/@?2K# շPKF&֏73 DXMV7n}۾_ q1^t~ ֮TbDP\WMgV)')Z6HD zKd9邭/!exn4KvKmf>VIщ!}^rDJ}C9H,bqPP8sSM@݉ endstream endobj 2533 0 obj << /Length 1870 /Filter /FlateDecode >> stream xZo6~_a2Pq/i +Z4CAZmwGRvEE>ɥQI*(_Df4P'`ؓmr#4JhrW5>/g٪8q( ^;2%TF㏓?N^M:{:wSlD9=]\Xa$%|ʘӬM1zV( ʺ^- RBHRE5EnWF7VG!(Id!lUDr8Cq_IBfratvg2&RD29#ڧS颾ЄT)QNr ?jj Msv0lJ{k djJ[Mf D d1TV녞Z+mg|2irhm{ݬe۹X4v3+С/fv'U7EVy%oc% 3Շn*/a™;4F}y2Y v`˫^CX 5% ( }h[0!{2D jO2q|))s7DbM[;pOP'_W+5s7>A> gyS8g&C`~ޓ<ةMO!OR]&&[fL:a᩽$U-UHc恥Q?C1,LDDpx$p@'{De$x#=xܪ8L}AdZIa32NY1j m$1b0q|?nI6Dň[~3T[|4~y⫛jߦє.w;KGRNZ㡩Ιa֨$ qD("?̊:T9!gT9mB{ASwpۥj+2J8y \"b kKf\^5qKs4yQd.+m̰\b<8w/nYlUDRK)G*CVU<*|ZۻKtEgPXS2 f^ /lh7-Vα}4:˱qVV8Wfaxk6GG___m)\YUk+U$83umkc;°9io.1]UQN R˄9v7A\hy"Z.m EvQJ۩w,M :a~Qtv^@6v3V?0C6^uGt yK\{^avg"A8@?=N-Peto/6~Ǻ_ԋLlzkL.j/K}k|DRg]I6%u0UJ;1HCtR͜%^SxT.DCFqSy\D$b:mr?˱'XvHFP%O7۾nzt Zn=>Iɗ]X),FzJ (C(9ݥ$9\;lsu5-Tx)t %{PŏVC@q5T;!Gg TtK,WW<` B?{ы*31g Ei+Nv 2FGyWܔ%tR \'"c""آ/6$ 5vIՊ{:]kްc}}?n};ryw)>~ endstream endobj 2536 0 obj << /Length 1420 /Filter /FlateDecode >> stream xXn6}WQ Dx' @ⶁ hSe^+؋K3H+rmvnhf8< I':O$H3V'8u]?9Optq2Γweq՘jQJS$c/>Tf=3Hɇ_'L{&g-S$^N(0e>;HM2.H:/Ӕ+SRH$#YŻצ@*oQ7m<xĹ茞CF"̇i00 F?a{/=p]%*rf):K_J֡Ѩ۰r y0K{̲fA4Տ\"Ǭ;5Vfu cD|Wy(r+ L^F3tr0}:Q42VʝbI@hblb9u+8سj&{'N/X#[fDmTz|l|2>[Hlaա`-뮍c*a'`48Xji5f 7l$ TbLi:kD5ik?WY(Z|`/ fqMŮܫ--7rA-ީKGS="zغfSj[ z];EOXSwEepٻ,@aͣ0{PգouˢړE *%}eqP=ßrr8VCסjBIzhU|!Xm Hq+ 3f;9c};# A'sx (CL&_*@PZylk̕~À/sqmcz|P#WpNۢەtåݠ <RF:- l XAq0ԹK@\L>"bJwԋI+agmeĻˢcca6Rr0=:~2 endstream endobj 2540 0 obj << /Length 1763 /Filter /FlateDecode >> stream xYK6Q"F|TIS4E䠵kJT_ߡHez,rX %z8|͐Ƌ"KR1Xﮒn]؇oA0IZ]='(K2X݌U6m~Ъ^ƔH˿فFjV˘̓W59!g$d)JIcqN̤JIX&ED^bb$zB:0AS/;$%Y%qG/G4ef~Ƨ'"xKHH&RQ$@9o[eX{bZ|Bueiv.^u_T7V8wdck(V]x%d8q%)8E>,%r5 bWZq$T|uWcR<ݒ+]ȇ$iVȧju( G8w,S7f!tiN_@Jeu$bD\=N  LjS_O=T# pl y&Zw&ApMVJ .v0F2D0 [#֖BhDO(a"& Z>&o7;ź}6GwO;UWA2Dl y׌:ޞOQvu9|ߛ^C (LLO%4cሯEK3I} rj?/1J0存5z w8 29W$1dp"R71 = Eոܻ~Vz]x %cmOH }2CW!лQjԌ*e~}qC79Qՠ3N3Sobv8wwWa +ν=65Tz;Z[, p ڍ۵uGrlNg+0;"BSPY֠ON8?D=njwrm9) ϳ $iث.gVryz_&۸w4S˜eibnkwZ9gi΃y2ӓv;@>Pw}så۳}7ϮM/>y;:鶢CYcAL bp.$qie?Y]~z,qg{@ݑ@lIpZ v.k $>V_Cu[!\>yzVaGw8iw:Q ^tkkW޹jWhػCFmCng'y'xQ(]w 8Ⲃ< ॽWLu7o endstream endobj 2543 0 obj << /Length 2110 /Filter /FlateDecode >> stream xX[6~_a D\)6ۇ6i)n}$X(^|[| ;֮ɒNbbG"T)1pVx@[@փy1qgy$F+!T\Qsd YF]U|5l )񇧑^:,ES6FA7^5/c ;x{&a"/hjry9:'6p'j$/A}K!=,R&Q1f|%r,#< |{1 L !:Dy@%ˡmhUA |tWDŽׅрt2惐ĶшqEs@{D$)čmmPFFP7;"Ld9`(V0|poabp# wSN>1T&SWַN'GD~p`]w_Iʤ5ca6ve 83TmzȈ8]a /b>; ͔] p2>,gO 9 omosc23dQp"%i40tQ0jI ;cI` lw'Rmc@Y/֯ )]޾~B65uԖ/trm='A<vA>9\D{ REB0P" \{ "( 7'E52TЏ;A{hXn%w@/ELi?_i)8n)lH,&ahJc$t6#{AHq}.nWDE\9C4F] )lj>_!!-b@OHW=x2tuu0%xIs\ 8q\@_؎g{S.5hM6!T0~i}oki(米–xt=9({=BdRQB0}0k^yfE$xCH8C1|^-nԹԎ!anJWf,^ 2iJi~UzJbˣgJRB=5" J ޟt. ZB?sfQyiů^bV\חZr"PXrt + xu,;9^(4yU䘐(GL8pƹ@n&HuɠT=G ~su }cL"_mXl9r/(ڄQ/imK3zq-Tٍy8'DF 2GY׻w.7Ώ.lNǵlB9 endstream endobj 2546 0 obj << /Length 1840 /Filter /FlateDecode >> stream xYKo6WloZbE98qH6@$y*WHpך]E‡Qp8O",q2'YdG^vݼ&Ogg?ԄG,2>UeM9 8PJ\\_+skJi(R@dg̺='3Yń,uǒL 9 U"E^X1hbYNB3)R[^(9˔(t"mj:(i'=s Z+hdET7]"߮$I&Ϊs.JnS-#%` \+NgSecŭ[NXStg픢"um Mz"Ljw)KEgC`d0".7\/M^NYVOGQ ';)S-IĒ_-};HfV >$~OrfS|j 9pĪެFvP*0:46 '|9뗀 k>YX̖v{طC)_ٚy&hlYj}L#mfKj%CErnѦ~CvRy 86fT2GQa#8I NS^F"]Hɠo>M﫦';mj=Rӈļl{8oz3Ȱ˷/5 ]>@w>!^D0_i># endstream endobj 2549 0 obj << /Length 1630 /Filter /FlateDecode >> stream xY[sF~[ьٲ7`CR7iL&K'kC-@[={^Er&g,g|,ƋBR$XXg^3l| GOWg_?|$1Ux}%VKR,}Ƹ Z^ZkIy`nA&'D=b.”bD@ !Ҥm^H%gkBs+i#-|zRY^n #9Q|+&$c()n@',ٹ&s:8w½0@=G(7ۍo`{R@=K2.3aW0Yۮ d#_w37AڇKzɦiܴVTf"u^^)R-w=`jƎ۬j))>ni¼6MR%{[5Iڼ*,6.Lr# Y*y}U]MH%!VU \UER盝Y6n2.7:~KlJo^ -mT:hmN6jUQwy~e4Lf臼50R߸Z]]jWrcO,X go{Ā{MA 6ؿ97 ԙTY{ٰ;p^n.@{֡}/e,#U]fVeC(q-2;n@U 7dxGiaiI>W]48`jJ "V8DBAQiv)bBvA mty(M>He~:U82C}J88v67 80q;5aUB,^x[e7&ds~IX4I{銁ܓ{cɾaҠ+hΆlJZhgC,=4;$jD2n* @r vV/Uﭚ;Ǵ ^CcRyTӯcXޟw ʼZWM7}0RYwPh_5ac$-1 $=d:z2,T#9 G8& c"I1 +ddf^xvPdm! H YDݘ0,lHXwH WJkp` 5-Bg/ԯm)ɐJ[=ƫ{bՋjЈ <hS endstream endobj 2552 0 obj << /Length 2260 /Filter /FlateDecode >> stream xY[o6~_@)V`v `b:Dڕ%$${[&}%gj EW={ʂdJ2Rn+?5'it0mZYIo<>Q%8x/ Pۃ(3W:ڪ,g2+OΔe *pi)Gg$SaZVq2&O.)p*hq?ʨUE%xJn`yX Nqv|rYw*h[xk_ʄe3Ehr %N4Q_J˞5&PF 4 }w)` ?zJ4ίødABB,.:D&aN]5!Yn.hny~?/kyw}P(1cB͕ "tFjk-T*po. 7e.200 /7<6F4! vor 6Y ELac, YJ B~.ME%Ǯo(6VMߑj3tJMC7Ӂh  #W-n̮.N9(lסZxGdҹ镪UYH}CDkÂ/yt_iM,*]ҘBBǕ̖RP.8MJ|BgF8P _f M7zF< 2iHhjަtg_K[$0EnTˠBj-[]Yy o]b=J\]+5O.C!:G v32-OϔQà`]e(6l~! #c N]?4 R{x" 62csެƁlibDx01FL ):yFsXcZWPdekѳj}+m>9ä˂MhfxRv\D]&,yLG] _\3y@hKi"]vm5 [<( 0m7Ҋ1 )}auHt> stream xYY6~_GXUm)Z}I󠕹k:I_E/^ -ij8KK7 MlRI&iśWW@(楔,vzy=tۘso2v㍹5i YJeq}wՋN#C &FiA(Vķ~'!P߶GyW7ioQ(ּhBq wO\vce8RZ!z|wdH I4>I&mWC+ЛrB=tw3ڽ]|teԋeD (2")ˆ{E|[FC>M?#fP!AKX4`!HBSYFPObDrq=3fa/f؃9;<'SNvBbDDY7*LbS>$tTڛ!NͲ';Vt ]}Gдo Α݅PsO?UeW7)q^{{NtfS<R.!rM(JhK/0ѡ+kEHn|id,>i;{c9i/jjEqʉZa,'e>SiWΜn>|3ٵ_!"r.wO.G՜ҟa^Z<gaS!ę * <̤zPG!{9'pHzNr9|R?D<&OLB܃ tǂ\Yfˇ7G~U_f'x/LUssAksФSڌgOZl4C-?AȮ9k:{/5MRp}a,?n'ynZ5~x +A,J 9Mfw6}H%q]ړÙmPG됱 I_!p~TK*QP /v'sBKO,,:IXTer(_Add~۵w/&|CraX i&\KP<%:I1yWO6s풃hw,g,.0ųAC ~,0rOmي~`9u=-pq {c\uЙ~pr_TkS,8 ֩102#pH$ՋyLNLsaI2R._7VmdDRu3Yʜh&XL\{yB-킸Kw.*r\oU@Tk20vAVe.eXh :oV;ɽ,xjr[3X-48Zaδ1PS9%ZX 0L){0= xEX 9:|j0n쾊f<~ȠeJZ'j'0Y%'2 ?v~U$g:FtDE _B~9B/!Q q?]hsι`*sa7JT6؟kg&xt;jl-ooYj endstream endobj 2560 0 obj << /Length 2022 /Filter /FlateDecode >> stream xYK6W450⊤(Q|I,Xs}д83R[;~ȢZjsc [l>EMH6Hfno~yi_ ΗR")vIڼ~/鷱2Ϸqꟿ7ݙm,rHߞt=ߩx"sp`tʸLw m2US_uײvՖGVa@N%*gJ7r߽I3w BpV(%BI$pw.ʖۄb<PK^_,Y29?>QITMU;$gR/iNb,Ѡ*W0е[P RP-|dTu (14%{p9f0XwtϺu߯##/wl訣N<m?(L_;-X ZF } wJ"0+q} -v=-Min9fiozg-k'cUݗ-YA4ڕ=JɘLȁޘqx(E0_ą3,L ޸͕mJA42w:\h zxO`@U8 h͊@FAS~be=z}8'C3-ή!&b%?}/[EeC^,Aof|N%(/f<z ,:j] F֥^Ӏ]fWV g#ZiQ{Crbzb32W@a/DA'gGF`!uAUn?` Q`/RptJ"~'NÈ4jO1TPϚA u,C^籎tj7ُ^8Bw@U]=9$w@,x]m*`:PW%F w>ij ؕd:B]GKz!κ0,!<C|p/#,#X1} InU:=„i=-EfB#{mٶA [I4SA- L9 f9k )Lr렣޻{St7PMWx/'B:NZ5\}+T^ ;#,-H\ujo_ 0 ? saMݕ#[ģ%h0aF@pj+5Յ]!]OQr) 6Mgsβr`iS5edC=+zfZn41L8> stream xݙK6)|[dGT$%9(6+Ėzt~Έs%w, H$S97C(a+KWJڝhZ\͛?X跁A_W?Rj(Բ0j_~In+W7BH o.۹LH_Wl9=[g1fYi# '1ba.i魭n()dM%ZKW0hMqQ\q?NM 3>A4-5rl]Lro[H]j4#*\K8?U`1E5*4Ȩ1T҂P z}(:?8vte'T.r~x( B(U d3"UuwJ Tk{BjG?@>dLN.45n}܄Y #ǭ F Olf{9ͮ&;'֝) w&^OnF0B0)u#&Q8r/:7nvͻtW{aօcNVIz`7ŭ4ሱ N^oM^95DPѼ,Lݫ]aң}`!y]yW0ư`Cc: aM- ]|Gǃa؜ Tᒪu@0yMj&a-Rɉ@dgWs,Ϯ_ ))ܣ }XΚV~%Ut֓4+, gW z.B-b^ @c}Eo\e <2k]L/Z"A]ޘϺIՠD ?ArH.;ՂF Hj)wYWI]vkg+!raރ*}1rKwe8'09h'puɰ1>exA2( GݢE&ⅻv+,.3?vO"`N]Zv;Ple⻪\H/ (zM!vwpdR O[0W.];(edE6<l*WJ/=ºE'}zZ$R(+p@"?rRbj"oiF ?_2_&gg{J>]ץs+B5ecjb)$)L]i0$aχQφokGJJ*V&Hlᔬ!97ؐ6'Sl3 DSds 2;_/dxd4- x+xso wXIÏ[0E- ?\Qu`)E{mn AM c\8e7c9%!h&:(yB j p."dJ|6  B!y*` ؂+1RpdH% ww8wx̃3<-|n endstream endobj 2567 0 obj << /Length 1833 /Filter /FlateDecode >> stream xXYo6~XZ ˊ#@ڢ((A^qj#pFZɑ'E0$ ùUrDkEj{8 =^ůg6ptyscV2Yn*X ~7mu>[o?;.6F%҄67r9izrvZI-BPHHvPB*(ס* U*0[f"R m;woҠpk#mugSaLН 0_9Xy] |,:7&݈41uv2xCc8R73=X|<2@%eX%V'İ5RЄKgGB^#TL%7q*OJ#mmGy[i+ X$Z䍥_5#aSo* |ئ" aMk80B^S"O-먊&ܗ,kz;2p"1GU'rv4KZ!q h_85# =巠S7Џ7}֎ mClQi,NI'mYvFgZDB[$ ͳu7Truu|v+6[4"Dbq]Î(TAaea :"nbޖ }1>d\ʃ%khPOh$A$3J/+Օp3wnX@6ߖݞE `|-=Ó' KhG`L-WyPi״TzD;XZdJ0S9ž2;;ڪjbvB)FEe1"cnۣk; )Nz{::qDDCRѓ=Pٗp{r#E՝W 4j,faw=ʆ^/Pe]x v!G=HKmSI`~ӥ{Bw}U GwtnosKށh"({<luE"5wc|>] 8 =XYmz?Y$4g)*GEIxO}aǞyLFʾ0M~urtn}U4Xh-LNaȯ'A0h4'_rΗ"L%w!<̖7MN͇a  {_08v4xIXD$}mRi:/EՏxU:e-)sqEK|ˆl 'mmm $ȉ'x7>|Y`I&M6t׸TgpdN]!x[S1s<2Ƞܖ,E 9ϤǕt^Ïa<|$Cp(wqgc{/(ym] s`#KTS`bDh+s7=46|`ndSr*ohi@>-jÈ%͓>nGY tq5.$g?uc<׹l8LeY7:wwKɯ:#<~(̌`f&F-n8!P8O7Bw cˈ1f{T7N1+4Jr/ endstream endobj 2571 0 obj << /Length 2076 /Filter /FlateDecode >> stream xYKhj`ňGMpfMK-ZjҎ'>UZѼ,MQUz~UM&6i\gMvÆ}#.pF͛?0f##Gncq~qdنZ~G}Wچ*& dov3izrH@Lmd,"PK2-dIL(mhvOP6pmXt*%HYnv+OĘR(d 3"nX|2RF(D_Jw-GBA:6F]U1=\ $Esц=vc/AEaV\!s<ՠ3Na[:s:]A»]DD h2YS$%q3Z{a u;p:W]`_L:X}pg,B.;෤؍xwd}b_o;JSv#F"(0KƂNg`LXryPEp!iwESp7ݡGA^v+Wd$5~єŰ/E{{Ok=(dzo=!Tչ,f}g;j.) 0KU"/hIReѯz)7T[ޥlg:ʢnCO!:t{=I 8E^yQrsD-v>.gVs;9ona,Uy;Ve𙂌#>aԤFuoIOt0~k,]=ivAY`o-G0+J}Gu?_̽h2}ڲd24sԃ|v#bCZ=2Q gLȵLP 1ar! j>|=v NejKiM^+dR[];1ȗLM1PVLgx(Z,'׾K8OOI*hl|BpkiSLai{͇Pf+곙~LTM3U@e@|ywtb 5S3^Ѳ5?,*.NE̋ .Q趕.sj Ty0IL[,xA1Ip.27H.Y#$0fvq1q?I/.BJi(敠\Q3UL(/2N endstream endobj 2530 0 obj << /Type /ObjStm /N 100 /First 964 /Length 1316 /Filter /FlateDecode >> stream xXMo7 бh$~IIAC[YF@8vz\0]扢HRȹ)ʡR)PW o[}n  JGjВ|v  c[T Z"BvABaEN6f⒯DX Y45_HBFQ*^`{9{>iuxkXv%|Y|1Äƾ u |[CĂM8Zɭ>ҭս5\qwP::g} `?ٵC9cx3p5f4,VX<&;25,Kg0!Aήw;ͽX2Jx[["MO\+7P0q gkͥ˘=G#Q1H' 3m]Q^zD.0Kptcp?ʽG_9yO%+3tt﮶'pwoa&/j&77^-篆:c??^~ K3,t~ٞxi~AߟK@j,.PbAvHU@>]vI}mFIxѨsZBl².PĚgQci3XJ9d%M]wC+.PN} 4} S8=@4]1*2Q%/[T% 2-} } Ęt6NT_yF9u Hk%@DR{@F>0y?m6wys% 1QҊ\7[EAJִn3\-v P>ly:]sdr8s_X@\# aMcKR%f 4DSi7-}q{͟N{:s.`=_8nʌ1,{'aqa.7͗ ;tiFX;lD `\D|TDlyy9=G@i8'FkRS\82%.LP˃ɳ˃?-kܢ7\tSJ2Yo9Ad0LJL!S@x endstream endobj 2575 0 obj << /Length 1682 /Filter /FlateDecode >> stream xYK60r Dң@i^M ė Akk%dHrwCˢ9 Hj4|PHfPlJjw;W O$X\BOX|XOU-VML7Q@zDn}W-6NM5$B04 LyD"Ȉ'Jw"ג.ۖ5^SNkpw1UTղj=I.-66 .dj 7s1v ?"ԫf湌L=iktwVy٬HY.)NCY5UsKkh`.U64-BР~BMў0>i5UFuj ћ2!> ǫ #Mדun5wެhtCf [gL#UP_ Y/U o!#OqM8gxz?ǎ'P5I-ۭ[6oK.G |.+ȹA -Jk`Nޛ+'΂ܵ8*;sPn֔B+O K$?&6LѧP6_zXf~W*e7g#򏊾W] t)߻>yAR^fy`?&)sMaN m2R#Zi2IE( ػn;Pjyڦ I)`.XnkiI4piXO(̞-~1Ma> stream xY[6~ϯ[e`K}ȦI1& Rh̓bkl4K&_CRmڞ,bD??"d2]lϨmw |y3fV@QsJ-%b}7j]|^h+!D>_Tыw8+ڢOHzj=T?Q8MyE:R.T&6}"$#AK ҘϬ}їRzdQm/y="UQrkNI,FKn!}v%OϮ Enpr<%=q,?Bb1ADSvf"i,V0RE2jnz,;|8m*oC6cD%W+$ъɔd"E/;g3mW5 ,(1b$4vN 8%$dOJ1}\YI iSzcM HXnqp Ƞ9*q[+FYjÆB=GZGp΁ FYB][佣8Cu`MUt4o#~ zS [4 L7`R//E0Q)R o~`f<ˑ`^P:`gVX;ƨ-0OXe}I6*>I!N5?){qscIe[tDmc[$dȊM>t/љ˄$ *n7}ԸD`<`(= #eMhmMtFFD&Uت)FVrp@c5\ O c0 S1eDWӕ_))RbІsP1)-lUVfi?Qqb8Ct.L"TwI[h']l _&H 55\A59'!j97|OIv]cPnr7#U\I3~ &0T|cEC;< ѧqzM]ѻ%PC3j4o2ʼ7PsvU&,!Ip)~hk Gϴ Zm3|)2Zgij.ksɮ4ܗ(u]/קb@fHn4~^$u4SfJ&؈x|1.so}otracjlLJ}@ֆEt=uʨ|o\dѨR릞BN %:ztgs'TK\G?ЌRdGKS}^(ҥ.CT*y$˵yUSl&jdwr.28\gx"" Լn# @JF |iR~8mʲv:|W GZ4&-fL#Ա*vP(\T7nA΍ ˅y:\%N/Ă: 'A[Θϡ0@XL6soO`٫^`O8ÚQ!x4LWؿi^dL}p+OWLZ?'Bjd) N"t,p /%OxQ Zý57#ز=1k]RK.$Ixu'0e w5z^7 VC+`T;g7 JB"tD`Ѷܘ3KrcM!)Dv5?}N 3){fͅ6= c @G7qcH6Wx+{* 2U_0չ}ekm:wL-$D`Yk#3#9uZqCCڋReϯS{ͫk}DgOHz!@K`%k8oxv'$\FC^U~0!,R6omJ;+SZϓwfϕOɍhi endstream endobj 2582 0 obj << /Length 1272 /Filter /FlateDecode >> stream xX[o6~ϯ[$ ěDۀ6] X0~kȌF Qj^Hx]Vt(Y?<,I&f,j7ΰ| zq[g8B2xZ,gumT)13ƃW\ujUf*(2EorsFr߻xEb̹燈G.8ToKvŌ432k?+M9 F\s8$s%(PPP !NǑ=ɌEjbYHG|8A=bb3r-&HJBdlմu9\TQxt]v^:zGG~ʇ%$:1)4j\ط&3c& 1Oa;yKDBFl_(Z̀y:ƭM6wsH%/sZގg glST<3|zбlbe#|egMI6 6i,ȷ`RL"*K>K"xF'q2>|=듨r |_41(>dK,!#i!•q [E`D e^T֔1oMbhsmV0sRJ8YS8B9 9kzDžPtQCةeՁJȲS6KMzo_սec>3/:x/I|:nKUUb$@xA'iQ{=BJV7+oL6L|k8 ep9e>Kv^l| ME endstream endobj 2585 0 obj << /Length 1039 /Filter /FlateDecode >> stream xWKo6W=Q@!RTASh"k#ӎKrH"n{ I gfH ddrDm qP/`<^ %8#sU{4Q9G(N~-'lXke ^)n"}m WS`#Q_]QWEF (΄`vcw;^ΥQGڎP$ H$t4%LA8P/M0K(~YRD] g<{Y8x,4/u3c oL([R/pʦ`{H]c@PeѶEu_"!>foϬitzk5/,xx*%tJT#Re\1.Ϻ1dil=dmtzZs 'hjbBX*>Fo첁p_U , 8edHC! 69>kۅFIb^5u_=r(3r^cu4؈UʀYqT m{{Z&%$EOrlV~"3~uf endstream endobj 2589 0 obj << /Length 2029 /Filter /FlateDecode >> stream xYK6W4rY50ER$0] VkzUKJקȢf;f #>JzG5$nd8'ymĭE=] BlhB$Ӝn=몶pqԕ(ѵ5(SN@~ \vd K(n(K4ֻ}yhMU蚜})iSfl5F$b1#b ɢmL#\g ^mƣsS'3(HJr!;ҿ;圊 B9 a"zDBI2>~JDiPhH²g5Ĉ2b'FA4'9W^s< S>TaizQN-z bc0 W:Oc1C8;`l\ 0QSVH>J[1al4tfGYPuU}D2?`́Q3fsNjVy65v%|cf=ɡ#t$ȄdtLma4C0*Iz]pl}5CtussmM5 1[+Ww~S !p%$o㚉z 5& CI4!G\7&6='G0-t92F䬯<"Cj<k$2=Q1$3h:TBtGXg:ن:xvHcp:}1/y#g9tg!} ,̈fxdpE{뾆__c<[yR_^bEٵ> stream xYmo6_a DM .Zr"̖ Jn$R͆Cwe *ϮVcǔ(1ϿUJT͢$<__zjXHpR]NftiLA,<%Q(ץ۲YJShYL`>hU?^sE_Gfb:91633GˤĕIR+zRD8 u҃ :QE|TB(xc*җCϦYlpЧ'A 0bA?C{5O2hTHq(b Y:ኹ~ݦE;Rf;9fQg_I]/ڕ6mJRa+IL1)ʰ:f$jwV+0zXݦjy"ɫF]e)r$az\^-x\;$Rc DDd+#yyTwP7vhdmusCh0vѡ1= EaCj\NB]76]SX+2JԵTPjXZGUg+{u;I}h\`8ƨLNה4FX b@18sRZ )%Ѱ-aֽr zӘ+\aghy^3n%Lҗ9 gJLʍygAi,Hx)9Ăfr!Vt%a%zoB%L<uқ&r]W݋( Y@1qyb=6m8Ǧ%V=*CF1 UVP"ф]:TCca2n2..0A=НeV"ȍW*{e(, /wTҒ'Y!!fNmnu&oo~R)us6΀"~e<(M>r6(_ bv1G#q#J!JWO!dYɀpכ-bg>:hV1GN%Kb>)PI7C JmF7o[oESGR8Ÿ`.9`"e cr7X$ }@Mez')z''gB| S:ǣ# `/t纱VZrSݕem&(rY>e}HJ|i$x73g}yT!W6QӍ3?|xn}a 'Fa`F0G9)lq*ɘhJgٗC4_ՑWm7~e.;kav0X '+9EVBv#5~~O-~0$.[;j endstream endobj 2598 0 obj << /Length 2450 /Filter /FlateDecode >> stream xڭYo6_Kd҉Zon95q<wVڣ gd:;tp8bbSśmFUVnR~C?c8~󍈣*n7ul>o4*si]Y7xGjju&[A^}3$CΧUs(rSY$Ҍ \[QFD9Q)&߄OH"-.R¬,IG$B*̧#n}G$IW[# 1`T}A.?/JaGeRQ|b9'y~ހEVFh]b;)E(\#j@)[{w]#a&QJC dfzjՑUgR@4l УVBF]w{}D@q+o;*EٔjXRG%;goB~dU mzPM6@"yU2FL"ƈrTC '(^p@, ")˳[pЉ{hx6,tGHkWs5<}54Q^|4a@4b;>Xө}"=IR@)I/fdQOw0g}>'BjUнF|T8BdPÔV%8rH/$ʳ϶%DVuk̳*8=K$WN&XdiK= %4pEg挲g%Wa^e&Q{?m0|4G&<1;{|xV,)47,-oYR麷Ѩ/u-oˇ\A5'ѧqB:n6!wԔCAdNF |0G:wPZec}ً|~ٞp17xVs4<᠆MօkW>BV0晣W"l47@ʖߣ 9Zl)i -kݡ]vVŚݏaBJΕ\ Q[GxrfLL|q{eKdټ;*do'd8o,82. SVBvt- V,տǐ\ު#NjDmۣ/C9Åa9]8ϽFr*. W#p{4^"-]զ?j2q:Kt2|G1NfOk1,t+:-ޮڇZq7Kpj$3_,8G7qx;!/7nvY=QF܃Qv,Q%V^'w4$MyOp;u3~t_ Q$T >^,dQz.dvX+zM3qk&>opLY3Fz9.ęӛ.$8~Bj8[CG1D㛁Ȓ{:5 " ˱_BfŸs]!8Wոo>;= 25τo"&?S9FX]a{+ ֥gbsl@9B0?Z&uDmzpDlgM\2V&aӢ@܃_! {n OVx+>0gl~ &YN2> stream xYܶ~Ţ_E-D(sb.`uIt[9j#i}qpg( 8DQp8<",ZRLզls_p.dWqˢwSRՇ}~L~fgsؘu(RGRxy= Hpq^%Z1.1xwY֘-[)z-tpG/uϻ߇bК*? ش`N ?l=+6ktj;\9nQ?<(In_8<=u''hɏG˝U.>'3SmMbf3wNMS6]i[j~*ڮ8:bt%pvN9%m؝-, `F-|rL;ZI&R rſi HqӌXDOǦo/vCv˺ nKX^Mdi4Fu7n +0X LdZZur2]%bƣ_7F;є B_(|+Q |QBل];L[*0Zӑz=Y(oe 6!w[~F3w{0_ص/wEh>ك#S`E1 T s.o]Y`&%N#M{ 1D zR0V`Rl.VFKt`"mʍ=o}\sX'(*0s&hq3 aGC!9w9v1yivƐD0(4q<5?}/M t Wzs@ĩ7^9q 㩝*3b/Z_?` ̑&#9D剠e1 ѿo35=C)٣~pGZ@㜌D$-JV~4ZrHYv4;x(5xـmf1_{j=~g16x1c2%*.g Y}7sY"i;74l.L Q%\x)t+li0PeR8YNQ7<ɯĴ9`Gi ZwkKt2FTj6xOX^ՍnS"&"[2+t4̾hA{\)<-yY8H @ʈ|oAͼaZ>Rs@{2~^u" Gg sZ&dæcL>t ї& U "QKM]H Kt9.GZH ep @e``w{c;IR :lWh9 KC~/!#HҹI {M)!%Oy9m=КhvHxۘ5*w(On0Wc^ AL>ƃBR}Jekd;zkskt!{Q6|P9}9+uGvu3;S] ہ=m4d 6f'HYR vmU^^W04Pi_GiiTy*;<;>5`.BD !!9wtj(bH:Kcakv^lM彄`adD8.2>i\LMu@C* ݲy~E;^ϛiudj[,sqD[[J?-{~ M-LJOXɕ7V(Gf4aThԖEiyCc~hD80eʹ0ďcT1z-VqHhܫ⫲V҇UL|'V՘ ۛɹ" ۫3Ml> VpH+VlQ=,$s LAc8wNJN cPs@mWU'B WIQӲP௽l endstream endobj 2608 0 obj << /Length 1688 /Filter /FlateDecode >> stream xX_o6ϧ0$KR"%ۀi :yKL–|IӔ( Vuc(\3XbU$d2%iYUmAL~7j#e!<*1Bs "VP1:V̓!^:e;$Vs5컦*7^~[%T5mc9ǧKʉ)ڕ E$@Nr_nK0>V&yN˧O=|]fڳp1xs,@M)焺7Uۚ(%8hư9K4 pIGE!(7\`]BY4,YpqsZbt ѧ'@bzuwUSՠT5̇Ѩe ̹ǪE'Z_n{t]$4l^&"=$d{AyN(l ;0x}Fo?eDo I2eX#2C3N/JAѐ y6TMaz*O6 k2#ۺ!y~ ]JS3(RH(mqN!DJm6ljlknhYbx$2JK>RZ8QAoea < WݰL gHN|oyl?,z͓gVKS8ʧDrIZpk`Ǵ݅̾a;̛f.dI/F9pۖw m\ nnS\A@GؘӞuۛ7}5Li;͜zWյD4m= 6._rL!L[iuJYgM *ԻHЍzHY7 ͇=cͳmwY{=R.?gS$yAN(R:$ͦ#&cne)8j{]PNdQS^%o.$[7gtx+$9CAn}.,cؕ ۺQ|=8 /zWszbQ6Аp3MA -OK׾n< l* ث+Uc +#ؗ|mˡZT?=z.GLl~2CSs^Y#18ݺFCpxD-` sgBI-eExò#Eݛ&rH{MSNdO{D[ endstream endobj 2611 0 obj << /Length 1501 /Filter /FlateDecode >> stream xXo6_KA .ӪJKdc,- fc0qv*"e fU xūR1*gݬgE $_QgxU7]~ۗ]QJs1ƃ Wʦ(ÈKO?ޮ=9!4NI>N(u`S NÈ'$}W57JJR,B,]Ecߵ6K Q9Q/EX˷ިNR%l" % ưԱjZYε s|EYװf]c /MUL6|ovK_&1 (uSBHbfC1vy /E&(q^AiTN̖U铧fn*cQjvvH8r"daS\lFɄ63O(_Uߗs](Uc~ .dSA Gr?`3OO]sK;ײ5_.뗍4|Y n&Ɏ AELtT0WYz+h`MToB}=5=bZ` Oǂ/R *.y{}OǠA*"db𴛎F= ; m'%/tV_mwd endstream endobj 2615 0 obj << /Length 1715 /Filter /FlateDecode >> stream xX_6 OG8,=l:t> ê$EbsӏeNWy%Q$??R~|V$ >SKwGUYc? ǜƘz65/NқU%yeߗΞ➉S%seE*8,|})QLe)u8b#;6А˪\P۟"S`L@G_v\E"#X}FIT-x?,KO5}zd6at̶ /bM||7EqxQ GU.ѓ|</ otP=H\$5n̶?0ȣYJ8NBK^T$Y5CNQK+}›U`WE_ [B'႔9'g!" gǕify RdѢAB-[4DkR9"\a*;4e7!DQAkx4ic\)h(H^Db1R!1pq l AyضxR FZFRc^yy1 tN1ofX6\G{TzYgrxc=wȰrz0I5Ъ)hv,Q@UkF֓dNïa $TPVZYu=ǠOF|s͛N=kY7JyX.?`\U? :_^(-MĽ le~'? P[bYT@C(>A+8O{ 0ǪnB3YCIt鑏) ]~S!CB݌eEIvc. N&Z@@AHZ۽.> stream xXAo[7 W]d)  +6mۂ؁ 祍_ܾ{rIO$E~(Qf )P2HK j-ekP3U4dU録JP1h Z*j$6J(bf 844Zh!ۚ+vI r'c*}pV">_HW{`Af( 3$_1+FdL% TeZ1_]gcWBl暘.a~ʽŦ*[;L&,C3Dd.ag׌02WDV- @ )]X&r=7>)ȁ/{x*,rPϪ >@*.5BsH$suT Y%e 9+ R$Ԙ!9 ^K~\'Od' XjuLΐ"#+\\ŒbA$|rJ3#P$J`ڸkyvr2 mǟ+QًؐP4,nĄ@PyxZnI"u?E) sB#t߬WM87O _̞}c7 H?6ݮ:cvWWOܗY(b9D Dp@bc8 Rq mstt8eJ&wA(ы(0Zǁ 48t @iTda凉=8(5JiPx58PFq\.2(\,m#6̘ą!ɞ _L)އdFƁHAqH&A& R,`()Om?HZDzyεOP< η7 X0#gww6/W˿fWeޚIݙ ,CGoٜ !2E7/ WgdpX\_.6]mq`Ӟܢ߬YFK1k}-E 2A#)Pq q n(Ϲj򘊍'n(D6m7&q $+O,;|R=qËFECvl <$VPXpGWTζwoq "ޛ5nj|tRi IXs-'ueR!(S8= [&֒ +;eY80㦖M&4 do<3_gȞş/yG0t;Y,ࠍy_pY_-?ny ֓J$>o=e yƁ(Ppi@2ax;QC@q@/T`Xt+FNriY񛂿\шBƜP8߯J+%n}P¯ӄXƁJhD O endstream endobj 2620 0 obj << /Length 2157 /Filter /FlateDecode >> stream xYo8_1o::[Cw-z@wS8xr˘T${NAJYʝ@֪y:lJ cSx4K3tQZ M2vC+Ɂ{D~#ic] t0x[ݗ ^軨(Zj(@.Yt 5) %;A) <fp5pI❫Wo!?}8q%Zҽ̂hLw &w8),D𱸀=Yهzli-z]qpah=Z;=};_$ϑO6_V]|Pt z/\ݍ3Z+Aw ? m(\p(@jnjV%' Eϵ#Ќ,z h׸RcHJ)4f!ոPbUI1 ]?}֫Z쑑|4jGJ0W3tw lk;)AxеCdjm B<&EZUco wtG |oUP0.H2o4N9C_aL9bU>'i0']*C;[b֯}H:+J#3L U$[F~A&LMt:)+HrSTǶ׿_Evlbke8Ácǘ'sjVGk/<-Ė8xOxqia6S[C$: 4 */?{Za'5ŜJ["5wM݋kE`؏Zh;Fz|yUbCo!P4oM4;־rzIX=] ~ f1t+\ֽa th\7i SOq"$](S[6o$OEvx{P^yQL|>[C Y >ؼu2·5 Z\ Gz@P6kύߖCSoS;\=V9B5G];k5 8RL],`n_. |O+ y5 #؛\!Vj&$&Ǵn<E EԇC7Le3Н⩕mLdS)N)5gQ\^i|Zە`[؋X^;vG7M?X$}?jB7 mɰh6{g.(0vM4\l'g[U> stream xY[o6~ϯd ī{躵X[> m00%Oٯ9$% si<sC.b,^$L|zagN[j"ǗR.hL8tf!zՇh+y>[gUU^,W,2DX>u=){r(yG-('1S ]J0\IŢkv5!L"c>\ċ |n~4Q8?# 5\rvEgϝhFd+&+>)m Lͅ]J2)Z4%Yj*$~0򨓊:Q|X1qH NORl 9aE9%SJ٬r3] A ghBvkARv0n ET|ɒhk`fI#{2iV̳ h=8WFBQI)FyW~Wlc QL$8߯_R;]j7}L5xn$xY[e,_+zF= ! UU/J< +JƄyy4E{0胍zw qn&]MtAйTAi/,@@XW%JPI.Pf^f-ֽytKo𕶡ھۂ,W*?)wIZ*rS@Ԡ~ΘKwK"{SBNq4-cz)R(?ا6OO{N@*Ɖ3+]y7tE>AwЃ A L=sZ``6ҁq{)=@FD2郞^,9sixcf\M ?/J@: : ѯmkz#0Saڍ,==h*ȱcI?g4a /b=86+xbsSHƅՠq.B Vp!γ%uɆ_=Rol'pi2!ºxp$j4SM}{Ō,ƕYL(ꈌDDfƙуd&{mE|ۦ7$j/XU0Se[&s"vҰ,G-r@vz4D𚩇1jǭ$͔_E!Y08Nm]$ ].~pok|B`bQWD"` 54_MM8P/l-,2eQ[OMk sb onhcs Q@Vwx B Y/>7ęF~o9'ט@$y 1}^=pe^k6S}Y{0@xJF.%!o3AҬ3VhUm%oE:eͣv! eSbUMI5qGL:{+r]s4ns>(G[V"LS 9Fec.ێE|2C9,LȀET T=½O u1!3@d:",2e $ /1M6wzWǙvrloكi{"ryr;0_ew endstream endobj 2627 0 obj << /Length 2795 /Filter /FlateDecode >> stream xZKsܸWLtYΖ!w*In*!."9: 9K)Gh|^WJ@ea=p3-rL$_>QҾLn離n;]~n Kބa䝿f[7&ёEۿ?{y挌yq(NUP dqBgrF:$2wu)b3uQIbXâuqi])R|Ҷr;$ޱC wȻjl}Yp:^ūM)?MW(/ڤe  nw| P_qFhF7q{2mWwGI jp)h/vk6| h_z}i5*nw%w (r=Cn\.&GܳiW`0JpP6e{e2Xm8P 0/@^đPҙ]كrxۜJ;ouPͬ7iuD漞JFMzqƆ/hA:O Qcpk_^-c(vt-~엂ҤJ##6ZUa$l-N&*C;=i ŋHQpʖ=.(9up_vK}wrD]O$ ܄K#Ji G0cU\z>D 1f=6uo 2*{ ac™ 獌*%cAz12A|lMqWtL*F`ŽUSrJxP 'bDfϞ&qX ;N9)U1K ʾ4"lqf 0:Ɍ1؅Uac>0XOUG!ot~}uy:nYί.^^ܼɒV(ĦgNôao VuN>nNx! (xcX>$Ԅp,Q9teQmlO(PMQ.`G?Tm(!;̭FՊS^.*Ց1f)a4tࡻ.Dy˻R8}~ViqW9. Bӏ PrF,Ev k6¹q\86GF">qH~GD*aDlΉl jWf`9g2DK5pHtnʮ>l]@&;ve]pMx?SYsp`ŝyS k@$R,춦z8"'ٛO‘4X8na`|려0BD'T—~ >q 4tvڢ`=ZEܣl@O{c VWSׯ(k1A amj 2P֝XtQ7 G (XAؠ:4\7xZp3n%-1 0 $ʷL<[`ynwMlHQge/-Eb$o)/N휄Mӧ-QTX~c8exzqԣ]{|[P/-K`j"nJ)nyyN;`'c1p_)g[:tD|@X. w؄95wHs:ј,)cYKpEg\GM0: S9*M7bO]9:nww*3HػL&5K~F+4lS .7_~?Go[ΓyYXx`{y65Asc>tyTuW䴲0T?O g_ۮet=}=[~Ta^ނcgAg EMC_RS' ZWWibNp7%XnSJXN~?Cg,@{OtK ^F1.UVuD^SdO/wU] x.G( q"1Ҁʨ(TgT^ֱ!F\R*C5U=$@8c PFf B4K_8?9Δ؟ `,*3 w,͌6lhAOEqLҟ_s^RjQ%8 ZZ%&\$=:10e2:r}E ׊ho 6tA(;ȋ endstream endobj 2631 0 obj << /Length 2322 /Filter /FlateDecode >> stream xY[o:~0I"]!iⴋؗDjm)%ip$+u{N(PS!g͕\ 'WX%Aea*/w+| |.0#Λ͋oh%L6Vry{ծ  ȹ->jU]'2N$ן7z񏍕* ˒U Bo7@ꔟQ˷ˢEnU'(s'Elu"'/ˇxW1V%o?H,z+pՒiVeͺD +!Y jP t_wy[ۃzU,2LM˖tBL%4@f^ |d%:HTG_y'pei+Nw1娢#$*/:\˷͵~'"zڀoKyW_^]/gjjԙC}\2@#sƇcE֒շ}$g?(tGO <|ބT=oS%<ZO~[1tpB~h1 xZ74 UP [ ~<Č  fGSF ZK%ӵ_*ڄlp Bohy6GVV]pbxW.ʒK>ԐEVTIxAzḾE\?(XݽbgRCIby ~kHE)5q=VuCӞ6f͒޾1U[xHfj@kH0Φn_"g![83P[-h-!J#Mr'+.e;|i`>via`Ov($w=[D6LǺ$9+)2Dw'ځzf7L݌pgОAz^Il&STݤto)*f^/zǩcWuW5!?I:&є` ䷼?Q`Y1v?8ơ[HUv k'Kx"L~Fkt+jtrF읆ڞq'~~߸U?dQeF
"J, , AwL@X *Q>xfn dJÑs%p>ܳ4e{ZfCdRWfAiaq] hX-+(H9gÎ4&IԤ@PX#N ]O_qǩw1~6Ap=65Z3 ~<U6cNcc}9 4dԡ> CV"fi^fR7Jw#'tfK;-l̬bݸv=KAvPWIJ%Jtnn3Ua{EvUD-cylv\8lGFJ%k'FMv44&N]s uN*E`s>ftIKHQ2𙀨Sb; Bb^qQ){:>2?uDыm[=p 闻 Ҫn8τ>Q Z̧c} d:6+ ::|R"8 :kGp6߼EsoXՊ$=,y]+:[RSTd5:VbR.ٖ}.vK8yNeiS>/ ǟ>뛈#K33uJ3&CelA :ڲ3q`1=hyj(1\%05?5$xQ&oByo"ҿ&bX|uS/ϳ 'h|:03kLv}a32/L,@GRv\e.cQoΌkj͓ k!F؋0 *VYAsE3M0Ѡ0cf+Աi)'`R9*i>91JKG33FMXip@kd_"5[ch:曹.-Ae'TE8fIL͡JafwS@źj]'WhD; xJz%'xK]$'뜷hMlTMSDo{⼛M( z>il-3nea:UެwfYDI7 endstream endobj 2634 0 obj << /Length 2159 /Filter /FlateDecode >> stream xY_6OQv=h>}pg6sQd[dEy-QI?2]<]hI.EyIh{7n[jBo\ДiNݔzx|/}.W$rB&_TNe\1MeH|d+Ql2A((`dYr\'w4{%EYVù~_hg*_S*-~XJm]lU9.)/-n2OK/ xU"iZ7X5àj^\rB%jt}co}ћ'ccʈ< =Qs$55sM 4KzTS2ȪI& /Cmnx] 88SF )- /碛`ai+H- ouY7~vKϓ1j:?YoIMQDKqؑ endstream endobj 2637 0 obj << /Length 1933 /Filter /FlateDecode >> stream xYKo6W,z+R(vޒ]R+zPh K yq4X0di,ֻP .:v ʳ/\A)f;ϳVK? C/yHz]R_Zk2d| S Hp=! @=]Di0dҥ/cV\72^& KER76ۼM1,z]u<],y~6vyL5ű엿 d0':b" W8%"psJxO.9-~`1?#p!jQ/y%D+&eI&^F?t]RzY]N"&`G^ RSoM(-~gK}CZ]]ڏ-}rI7#Wݒ{7F(Qnhn!dYy-AGMd~Yaf&[wǭ0&UM{ģw~:C('+>t%&cT16x$^UZgFMUq%xL >duV@(eq炩@sU*lK'JP\c`Y[TlWtE14dD`!31=JPBD wQvm7ZZ՚Hee)ϨkY[)FH! 2ʑoلoҷ_'hnN)1LkZrHJv כ/[:"͐Rf;̞X1e(PNVӸ4}Y"wQ`Wy"/,MڀʭtzRN#V vÄ=h_@9o|Yۢ) ҆I!ք㚉뇇e|o4:TS+RM ❋dxfb"u`2<`#}6WyGlQXkඒ< O;;nƠl&!p3UCg=IXV._Keb{9 G(bArpgT>U+jCCBAJ2'c0Mb8r6G3hxz7bP^e V{ M2&w:+bNU5қ:Sd|mp(D:lr[*sH[nS]/^?E/(y6Ĭ5{ !]RV: (fQzF Ʈ*8.@#aa(Vng"csن_ #'[c2?XT:Y TсFVX$+S@$nl Sp[уJ _P) G)pzaꌈ (`Q=!^޼'@W=bǰ:hwU{K˗W{Cn!0f`E9IȅEGΧLDe18KŤ^H2V(BM/Ss%ŁiToTC}ttPOXeJ1T?Tꂩ]%!a¹%"e4Juq%!=аu]e=jƣip^hSPA36g/0$u8Cxj1]%m9\\NNimƝE SӞzm(,m`|=h:<6/4l0ޔ317{{iI?5 Rܸ\8Rgw=OC[ᓵnt ˫{‚qi)`GL~6#CSOGp k"а6p|U}Qe<8v]<,{>RMה-& endstream endobj 2642 0 obj << /Length 1822 /Filter /FlateDecode >> stream xYo6_a2q⧤}HvȀCk <6+u$We_qt ":w;ó ʓcVsfS:cJinjs3Q^FV+9Iyq6Xzv yptaJ'20eF a1$V7s%#DI ,&1nnS*Y csNԢخJ,dL#I.Cl0ͩ9 qI*'C؀yh#,"%(M[g“ T}C(&HV)F0dž1T&7M)wH1NQ. ޕպ5Kzn83eegm ͝EE#GdzLmc>חkK?eo*kJ(wVveueƷ8:a,V`3:SG<}]kњϻFR3ЖFVi6]mUP )4wySJ<sl{seV|?ŀ(sRyOLٶGKz02I/ EpIvCeC,ep^^8PA `<+P}D!X0e'1A1s۽le 5 `# u09ho-l!*vT0_/eHg6V~ۖr}j(!P{պhֆ(;dFt]tEoc:{v@ XXjա*aI]q#?۲Qa8[+fz?9gO)I@RWy[zWZeJt-6\[E︬2̈́_M4l䍪/Rm IK9+by}(! ogK[K7r暦ЇەH֍m0 s^@xM [r ':E~5{O#Y&G\]^rI^3{ɗ.wn9#Z8.'ZںrPtys_Hgxw=׽ړbˑIgx0T꟦4}!ShŽp!7*ʦt%'1nuȆF_t_qgh\uC v ])&{4qT검F)dfT#> bA>9CnZߺMY[pyg6ʔc W"`z[]E.شjvM 9lz Z cYjd7`__cf8"vokWsgQANCؙφgq!HqBsFi?WU|ldS'0QݶX56̪R1l).{EK]S/Όub3ȢP]:*bs;drs&M݄M}39U%{vnM;&*:?IuDum ٕ c}ωr)GqMy2ſUo>&#\osM{τ]U ^5<~響C"J+A\fzfn;An hT؄<j,$Z~8X ~?9+gB-AeIoPQ|gh^'5W!L 3-BkwS endstream endobj 2646 0 obj << /Length 2055 /Filter /FlateDecode >> stream xYK6Wf*eb éf$z'񁒠'9c_h9tIr~|@"WyJ2[N/"ޮh҅@zכYX|96Շcqvqdס*-mzסH7i3JtXE .$$2&|D}4;5G?ah;jje,OWP, 1NɂG( 8˕Qhz:%GH'Tpj(K$ G*Z:\2!gtP`ͮ˦^,2?H TC&@"w4X>*벦WqOY,8-E쉘dDQy'Ƞ*6(Hb4 hUmuzWqf[L8i{ OZV։n攉':I?8LFi5Xg /YH2YF]xY kyA}əHG`h0<Ҵunx~n}E }'ȴ,B~k񤍘r6"X_mIMi? m\L{0eyZur^gT$m]j)٫q1$sY~^=ЅUvOd,&$a|ӏ9|۶V܆i:c(fkcR )09"tTéFp Z1ᤫogA! @w$ɦTO(jR*ۊѩ_r@S^z9|k0e%h\\ _77–U s{{`\tö+ۚGV6+l(FKas)0Ṗ%P'pJ.Ԥ}8T6#w ,ٳ*x7Wq8&<3HNij{8ϕ)Իϒ1FKɢlfj&iY9]cr̘,0g?djkdiz}* G7Gss;|?csWVWf&Yzowr=cjVU]Z8qU֌;~un .%YGű"S3'g Z{"C;p]wFl_Q>6$֮Elnܼ&7vj7S]U'zi"l:L>`.[EO+Զ&nK`N`-=+z$tzqZ*&B,)X3MN8gݝ7]t&]7{myw3t0]Es.t*/{c?Ok+7E].)?U endstream endobj 2649 0 obj << /Length 2004 /Filter /FlateDecode >> stream xYߏ6~_KY)8`"iڦNR|,x {wif<37,ڤR,֛b,.|Ɲ\Lճ?(ˢon檮ͻ]~L ~ X߾Ksc:f(POϾTB<8:-6\s%:f\dfxDC~]v0l%]ÀFO*fY E ?){ [l8gRnUDv+"[135 IN_B&3Ew0,MHW_Wηp{p-jpqNw[y}4=lvduM= 5ς]Xav^-͛,hob|7.}ބK~NA8)e<7MZR"EZ~j]wU)l`Z` >SXoUM\Δ4}D|ЭSasQgS䝜Bw/*e iXuۙ{B4FWX8>%gR T SUʇbp n='"t·m@Ճ;OlᡂfoV4 r,ɃgX`ѝN,tXqMy U5p X?Ùd}M.xf|'#?DċDq8]O]9y(/7A^LTl&*'ES楋l5?{/S,^ȕ&"G_pNY,X"/PvYZRw^ck-Gk"fɫ4[dѼ1C7.xKהY|ގF?/-!'-,POhYGL 3M0|s^&NK'mMIB| `2002W^4dYJ.WjWfVzkUyv+v,q/w‹ȒfEp`D흹u;~΢!ފlkL},OWC{{s`|N lSk5E݄I@[!NHs\$Sm2 X'֛] ȜZTꤰGs?~ BGN r1\3.L]r؆>GcB_[}noD|9[*"Kt 'u_DѮ7gtxn':[ujxR<x:&==z7 zHb*q *=NP`$]v:GnpMj\wU9Oa T.[eu C NfmV15DJ!a5ۄTC8s5"Eo-8%=L輌ft4(o{ {WSMI,tk#Ǔ ;iMю[M]}DMJTMQ-הR{Lv"5Oؔ:,$%U_^.@ ν^QcvwbSNoº.E{l#d2? #X/1B;,Fp/D\8 FsUbv.-@i7/q endstream endobj 2653 0 obj << /Length 1945 /Filter /FlateDecode >> stream xYY6~ϯ0)QGhs l1$hdV"K=;!u8&@4@\E-"gI/6; Zz>/;JK/VcQhVN`t~ԹUQKWD\zVOygQ+!T/x2ɴ&Jmk2w)Qk@n>ps8xގ3ص Fd0@A p$wZ0 ҃<0"wnA`TI3<ŝ'$6ycM8 $U2X{-K{ptÀZ6M* E;e:ۘb й~@i[,Z苺N76 Jhݥ(2ӎA |HŅ3YAt]fS׸0jΦ9wve}*V\e페F.t8hHڟioIkMhLmKM[_*TsЈ@9(VX)VZ5]nSߔ#?cA.a3t_Z駅[sPǟ"ovCd$jypc:DMmfo=㴭jBImKslʎ4 (-Y6 "Ek~X2uUϩm_%<wE AS'֍jM h^5}08(N^yfV]϶EI0""i+ RU֨ kdu]G5J 髈tsڴaϰgmAZFidz_ed`x|&0d.'=9?2 }d;RC5nW,DA~DDbWb4ӆT !/Woè;׌'e;>Dh$=aQ7FTB'Cgs^zU!A ZK[+h?;W.O״XRsdI)hkФon}4iQ/{oHpD{Ynd}3TE* BЭQW&41u EJf1~Ăza.8*(da<5 y_:W5 G93s̱8? r} :}|?|B>V <ڝ"X.X(!H,|>U)*? }VA.Oʎ ܗ<>.?~#rV4JD5.W1͠VP3:e_uζ'l>,fQLiNzGplzaex\QTuVtSzJub\Vd}@p|2׍w.!;3dEmtmknڴoGEiUKPV]VTp"mV=+vEUCmnJj5Wl:0t"J endstream endobj 2656 0 obj << /Length 2331 /Filter /FlateDecode >> stream xY[ܶ~E")E\7I] v,҇8Z-gFFCQ,Sa9$;7.%d Į}+Ű1^ͫ7+ +nnvFNe4>BDXJ{ZLo4*T_4U>9D'kNbZyD%!ҒR̛Iס{8hJC,ibT.p2^ӵ>^ƺk?gxRt/e3-]D.dyӯ)K<ϝ9~{4䃈 dfc -y\uMc&`4e`.%ES 7Jdx2y!A Ҍ @[eJ:Yds6-6:݁ڧYto CCLqLũ^k :ZBBb%W[95;X UVhZ6ymb;svEF}̣ jǒ{0@ Vjq,4A28!L\8n^%2z`S75wa,@ ]w.4vh3I;96pPOA* s>Q[hқq٧ &=L3֗^G_ B H4 )s0^q^t*3~^Z\+d|\գ 0F9O& (<[tHyg!f)z/t/M1?ICD-%^hC,/:kۺEp6OPNK nYHIpa%|" Pd){Vq Yc!T l²>F̀ z<1 EHP>~g%xmPDFGc"h΃ <_#gh ءLBp jL5t8*𛊑ɳ@`CO6ҧ XTd9~ЏG Z]]E;Q 4e^.(H訲f|:f8~U>2F/?-&!k2uU,R8 4~H=ӗjv}} tSKhn9ӏe}@9o TN j`æw`|4hgh2u.]hm;tž:}bik{BEasxu[ `NdatX[kE&Yt}\ZG_=0>}y%BolA9qD}g^?ۺFSޭ_$\# ܍枞G/;?tk9>̠zgܤ>_`a^ wƍMp`Ts8ozd1nIi9p_(i A&45*8Src([|1]\?! A!O$=,RYޞ|P׊3Q/p\dk_Azu2-gK)vAK$L=G% m 5!Iu` JE endstream endobj 2659 0 obj << /Length 2287 /Filter /FlateDecode >> stream xYK8Ws6#`bdiAmm8[Ţ$RM LQb#1",Wbs|iAx- W˟^q;v>z/N}.WR(qRJG&ޖ-M\8?_aS ! 8XH2ŸT$۲?u4*pwXT/%xK΄˾P+E:…MmI{Kirӗ[oOcY/Ev}B &(\oB 4hh o0+[d`i.D2Q>h2B68h~6vA,9D^Xj<?X$:.E}u?ߓqwjm(ve!&E_N t,5!0kMbdHmt Siu3)DB.ox&fwsp͙VzZ9ݠ81xA#30`}E1mVR1HW+FdXGc3^V ږ Xt"YJ]:i sEۅS%,ײ7&ҶhQ"0 c®B)ԟ*&t6((L{F]ơJ{?~ q*,r/FBY$L䙟2{xlx]nL Ax 0 zMYkϙ뙟1oE_ 鮚C- q^JP-}ᐂ?(h=v|WNUDx \:z_[dm]3 \G|Pqy}0De^`ttTQ 2\w8򡉀p*rǐ3Sx}.-T̛Ʈ%u44[cֽ<L{iGy8Yq9"ڝ6SXVi.ﰫb)Oフ*Σ-B1ԥW9Ҩ=`lLgm>q @K:lU Y UeBeR<*W 3tX^'1+̾@_ %x0_h^%<}&>hҰI,a\^RC!ȣ@y@h_`TOe]xqs s8wpfv(©* <[ ;|,$bxwycr/ndbօ9%:C"jp?z@uiKsCUŁq |N33 @|h16TոOeKKΈ Lz&Y'JB 1y,;^S!,\NYY+XqsW+.aXއ`4q0mPjo7@?#Z_hA*|o̰QҔb~9!a<^iBywa#{7X^5G8r A=2H'SREd? jC|<Cv,3{1,v] fg}{Sc(p0c#Ǣ35圠 ,d7Sj*4Tx*d_]~99txfH}*zp )c z.L^g*a2:P|?+>6euIdI(:|,9Vx ?ywn1% е<1r{Xj8Skl3(%+<^N(]exb=`<#'`bB 0052N/evxjLSjP!kmk)Th]pl뼣Ճ9<«sͦʝ9 #I=HMoxƳ&5NZi 5anvWش!~߃P>_A!9Zw?w'o+MS_b~+X3k7mL ˀ^;iu\0 ;a*T+*8[fc.us]r`5{j~qK!U~f ZW;ir!~R)jJ{+^nQWCǀ~ܶo=e;&. ;*?WPBJR1\E1}C><9Ӊݡ~5rN#.k'0T9fnuޖ[?AD! endstream endobj 2662 0 obj << /Length 2094 /Filter /FlateDecode >> stream xYK6ϯme)Rr>1 $tsIrP[Ė I[*g` bX*?ʣU"js|9j[?o$N8~6f%#G\m?ũ:86߽%­U*M$ݰQ!32@=.ɴ&2"6$*YmUMmqty8DB c77p,(E l/EnE!9,:r)#dx@5e+J%T)Hǥ?F&ZRCjP%%d&,I`:3Kgj\2L -gI#g(y^ &Dn Ci 1o{5%P aEGK5kbɁ۴^zՑ.k,?54_Om~:>J)c(3sH$O槫 385K!Zh&7pz&> M+ fM븆8w/Y4#R햸.,mtjэѯ!i ˒y !W,U|)W+=*p$!/ܫ- !}|bá` g/˪5Ԃcb(y]I[[EK!{q&WSUUHf!>AA`zSI8{vJIߵɶ}9B,Z'ϡ4/Äyɖ0H<10UIqCyv&D{"_FN^bΖX1mz_rcICش 8lc $JgP֙U9wD;l~WE;"-Z< =0 E3J~%+6\Rek$8#bl9u$v=keAkXlO]st_4E "JrVfg$OSѺQ R5qRіM Xh&2oomDI-LuC%=܎ﱂ6_H "mr5(sn1 "REj o |`%c6kpa6WpHg 3Xh,@l51OVN` TI<#"y9@ mI\,` E\f+6YyPk>jzx< Ms8~P(buR&V(aƌ%%:?q4;8 7A bOHyK?v ;/!;ާb43L3 +#n@)HTB% 2.TW]>2Jp]jt_쳣qQ]Tj~ݺ%g[uڵ>[ScGgުw]&r"ڽe}!ih$i"_5y1yxAl)G endstream endobj 2665 0 obj << /Length 1944 /Filter /FlateDecode >> stream xYo6~_G8")`-:[Ê4Mlɕ$_;ˑ][t(xxHI?>II,dyvBWϸAI_=R$HjWu\{t[ra/;{:.Ҕ&/"Oկ~jTB<8|l]ҷKCIf8R̆LVՍWdQT$?bT$#ɂ,P, }ZY<ۘz 0YU3]elwἚRt&~dobk:3[τcl 0YV]ZUmAb@:i5vY̖PZ;C]>S}Bfu5~ 1 `J0^x08fI*KoVD)aul$E_F3FbL J: ۝i25jZO( |A= hCQ/BG 0L3'w0_窱{_n}j+4l&*iFStc 3b$=L?HRچ|i*%ƣ,CAog ;ƝI7fY?kF['y1ꁈC~"< M!mfo2[Պ7A 9QN1_Lj?v4Қ1pS%UCc"0b_ q}w'bZ(pH `(xA>U{riH %KT6_ h兗Ә\rѰlJ:Al/~QO TJ V 8Q+UnW5. s}WQސq28>J\',<yztWLQQ E?)|~|'lv|tա>ڀBT(vj{OI&a{}d(H$l* |8a}pl݃-:m/Қobmo$B`>ĪΊ|4#oh08>zKo6>S]kLH?Lpdwj8'cB56~$"cvω i#]>[w6<ZFp[i]!oGq7x2QG㮵e">Q߫ 4wȤQPar/C-?Z~3tPieѨ ؞QChڣ[u6/ֻMK.mFo2d$іĭ$j=S7}= =Lߝ edܮu4gAK: ΜQnk3?xL$"(-B˒_QὦlW!y48b3g]MBZ0hh3Z6jdY1O4ӐptqH-XU]>5]"q?nk/[8l4E;n E1yu +/{Y endstream endobj 2616 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1411 /Filter /FlateDecode >> stream xYn7+xl/ə! i^Z Hrhk,RT2}PM`kpr ]Ǚ{YrsN.sv]ʑ&[] Fq,qff\a`duAN䊚] p,E +X1bGUBr1l>q $#V6nIj0cQ1 X"ni4TYxP̢"/CaDb5OM"DHX|b18KEjE,l43_ذjgŒ(:b|j@=udb5LHĜe H9T01,)/ t@d'84>"'TdXMqj|(2>5cikS.Mzq8b?KtZIj+fJNJcEQ`,4#D0 Y9`r%DZui- K'Y 6D9/`jaXJf 9r&" %Gp%j` (EIdbp8;[,_ c=v_~5Iٳ)׫;;ss$;9/J=}`o*|}TmMHÛa.s|;|޺oa~{ObRV[/`<||. ]]n0@X>_vkmAX,ܾ߶럮V-/֛f=> ۢ/٣AvQ'7޸k޿nV<\O?~e;|oS)3@([} 챆$%P7xeG߯ZfM%xS^$Ps@ȒShk!>oOo.0Rlr*#%+:y@ L),푱$.gY8R ,p bsۍ.0pJ\wdxGvh"CA)">F4Z bKc 49 ]tȬ6]`x% 8ݗdɠ]v3vh:pT=qvl/_j6VwwO^[bn)[N֑:=NҏJ%4$*^@KM} 1]REB{~kb|uGo,S«dݰ}YO]D%ܗQ(4$Z8Iυ`$9fq S#t_Ց49 @OyEHc>)=:1F4dJ?8ax}(mFNG69'>O}R@3g:OPYFԡ#)Ǖ] r72c֢ endstream endobj 2669 0 obj << /Length 2347 /Filter /FlateDecode >> stream xYY~_7S>x-d5GbCO)q,gu`jVWWWWWW}U#V4XJNV& j_nfp%? ROEm{CvM(F/ܛ;Xo FvB$~ YWDy *^ݕ8C1fZ&^=:ͦ9Z!Qk;G6VZ},PW =@hۭhvЙfh8F(_NJ{ٮ/2uW45z-r󒹲ZCz3n-c>8F~ -$Ckބ]JxY*Ui Rˈ֠xQ; ? CI;U7p,:rb"ӟ@%zU$ WI `igK-}/:rRd]î9!]S=${A w8YF*r.!PdAg`;3F]z> upLH@OGf~$ĞG, ]7Y<},sP֪" #HF+<|Dr3̶Z@8OwChE-|؞Lϻ`{RHK00#Z5-^#3Ǣ9v0f[K@~3\znGZQ"¯ i"0 Y7ݜ]˔{M2k}@Aؐ{Fr8"O1bIt#`vvwmo ~gcg/݂@~~*^uL㑾'O=Hfc-ύ 8fãK#숑 H'DɣAg^9\Zǃr)ZN=W @^ &'Ϣ:Nze\jj+ Y d'bW4COm(sX%X 5)|{l']{+F= YxSQAqvSkeozWP"XتаgEv%XEh"DG@6f~KP :9?= h}=/Ɖ*pX wuGY#R$?ݣ'(GJ?fTfƫ!tO׆j"H~ :%Ք*=F$MWIک$m*N G?aR pycuԻ <p]!-bB֧6 0⟙f%l晗(@t{CLB ,ӃHEkLoXR= },̅+5ϻa߈ŪH6_n/}YR:e#šzl|LK'$m՜,H4%k҆JR2~۔CnT(Uӄ cs,ll ZU|EB"fQ$4ϲ-.Wy?yφ#q]ĮX+5\Ts]u*9uVYE ߧ6W7HHZn)jD0Io~myj/{r@AUG~M)wh:b/>kk(p=gP8@ endstream endobj 2673 0 obj << /Length 1918 /Filter /FlateDecode >> stream xYYo7~[V.=6ї$kHq;^q&;Kof(> OpKRL曣R M޾7әHN?^~;S qOptpBI%qH St#0_deM%Pm-e4̄`\iS/ P$ iSsj-p i}G5Ѳ]U]61G6L nwbBvQqlj',Fܧ!D2stOAϔu]:ܩ4K7 h S:i%AbS\M+8nȀg)x]Xa]z}}@},}.ut{3FHp7-hha쳙"x͑ZòUlJQdgf^lAEI(e^M^ 0P1S;X] ʢoN-pFor}58U符ٶed*یk˜ykꦴ Be}b{<ޮ%H Tr\Ly .Jz_\X6^:b@hMYؖ8sZuN8GrY .~(/芿YʏQy($1l]_7 hp@Nsk(A1bݠg)mp~݋3f&[؂^=wk1i_`՗k8<bZ2E v.GR+; mlIAԥظKvoN{א( Ǻ1DǤd|})١B)Y%lPgԫ"LE(>-{8jW>8*ۋ!l.GLm ^e>KDP+̐~Kh&;jA;+6PT۶%l-cifwX2ZHrW@S;ur\\划v_A]i=:qR}ѫ\m_eCo $!5)Me,:SZʁT5ꊻ,;]۲=O ٙ7 ]50+imr2eXuK5';sCkNЅT!M:!6-̧jijr[Z&fCf(Wm+ ,KE2*hKW;yUR3Σ`#3t^=Nz19T*?)@.eV 9|s>OaWM |p Vqy 8" $2?Eh ~Tsm-ۘHcE͉, ea!>d46PԈaoFԝ Pg,>q aeYfbm=s@!\n%Onnw vtEoEkCA]VEv)?N59=vxl֣8b&t؄#_FaW$;ml3Թmv蕵q5@{=wۼu;p,FNn\K4S"rcϊrt;Ga`5~~U]ۂ6TcYdui^m̸c.s? endstream endobj 2676 0 obj << /Length 1885 /Filter /FlateDecode >> stream xXK6WQ XH oN[3["RiƸ)X,Rve+HLӫw4x+b {[)w,Mʴd%z[Q?BH}LFo&ޛ{ӛ2LQ?껻Y C+1.WYDFک'2K2ѨIE+=2 \$緟xhSYRJqSwDMu2aiRf4; 's}̢Ə{^!#MGs}F @}РLA0\iN,@<*Zf;/efmmH@>t@7;eY0x;[< #}5~43}>Q붐\X.@wвאLz؞.t[z3!Hslq093@!W P$@&ZcQqEmCᆳ+v8X/4]$|!!dQ5L aJFP6y$-S[a;o/siAT'1TzH%.D*.:4,_ ]Yz%}_:D_Ȥi0՞uzv ߬C8XU}`TP WhlP S*a0kDY߀Y!,9%LdE50  <zY^`Ɏk<|TO$ra'ǏO5؀g6a-OK,3Z9̀n:g k ku |2^ Dca4dpVVN-4?co+pg屋( TsCc;%m =Ǖha*M]|S>Ϊ}8?N^CcE^ z'KE$0**/}3pL(v;Iyྮ]v(PDe H0QWTFy Eq\x}7yDKeqĶ_q)̠t~ZCC2AyLJ+EmO+W|-ogQ`oͣ9f %g۾CY7ޤ#hu-'Ç# NgKqRq _XeT1q8^IZ;{uUӹS5  t|Ivڴql:} 􈠖-ʾ4&lynl̆:s5(4\920t+D+i4 /ԝ|"u-Ɔƣ=oo+kW1O(;=* endstream endobj 2679 0 obj << /Length 1180 /Filter /FlateDecode >> stream xWn8}W)0Cjgfk C阈,?-9J``lDF0$*SlrQ8f0H0Wmi'$ywI'.a^ <"{^M2 L%e S ƲM=쿲We{b1e7{;]iQ8%KM g Bolf,P?0qh#%⿁- 4. (ޙePNؗq#tar/8p).%b3-x#Cpd˪S9!FF¹_2ТăYW 3pT=â͔6CUM2X(s*,S'I,h2&/8A%gO/OB9"h J)gn4egjU`۞fuM~[Cí!r+w}YBiñnm5$Mٳ5Ji]o-bw hC16XѬkˮ47SZ-/ ܔ< ޥM$$Hw_)D endstream endobj 2682 0 obj << /Length 1250 /Filter /FlateDecode >> stream xڕVn8}Wy7⊺YJч\bhM "eR*K.E}H2nR᜙áȂh8$tQ>\E?ϳ7 fPM1Zg? Gp;D[ϔ'/ =] 7l+wj\9(N^[ĵ>%mi]U=ujxՖ9 `Y} A m2B ƙicDMآzyYǃ'ia"S? CLA՞PӤPPk’aiRosX Yt ET2 c4 rń(V(_ϓ o0'5gtDuվāWѵ<~~$ 'GKD)(4T>Ҹ>sD!w+'?i*b֬yBb]h,3Բh B-smy:\SnqCu<!$kl*L6U3`_{3dbMaoH^c@4[|ݽ^lLExo_{? {qk-ugv_ z.,8Rk/,Do3Q3O`R91T =gWW'-F])ooXTXs\45jQBތƦJԟOE,BrʦFJl/.iib5wUfC녦"OdG/'}G,j2^a/.N,ZhuGb帏+V/86, endstream endobj 2686 0 obj << /Length 1327 /Filter /FlateDecode >> stream xڝWmo6_!d&+J^2C״Emc-1Yr)?-GY!D=wGz!Q/4I2XpqZ_gO^pѐaNtbI= 8I{7r! 9 OӝOE'3eGc<.IBd9HDxJ$IwJ%N#nf9?ԗqQ PT1&2-$Xug%b'4Lπ8>BYdIx,h><:C0#2E9E=-sya~4f6qV-WD_U-viٶ[D4)\>d[h@| ?HӔ$q/&Y YOx&[=VyōPڞݗ@`/Q(;])QK2$}( s;% Xsw"E+x@iFrBf^Lr A/Eoa(<-%fT8rK˫)j<Z cێimEgb4R왳{Օ,Bd5D狦#^K};#Ib܌=k]\/ZƃTvPO|?ZB-~MVX{e 1Ϥ4r3\C4 3vmRrbMkSPD@2-}>Qp& i( $"IYٖJK[ϦZmߙsJO.?bu3ΙƘqb 9!jQm[Վ吕 ARj0Q[k3T:TJCs+&:J/04r?s+ce$aq\^{5ނ= C{}TfJ-̺o޴IYkËQTէ{l>4KoGG!*T)kĔQ N~$w:>t4BUO=)ma4#zTZwGb`x]Pwk-G3Q0 o\jSLc*G}#%53A? H0H?6}Km;Ғ0}{6DS*8Ji6Z- oh*4s?㔄 W %wH8.Ӂ> stream xWKo8WE"V[]!idc Vbl6RTt9-5np87㘔IUrCur#ˋ4hHʰvjQ{+\͂8,H?~~o+> OwG狭4tH>.{Gee9]|1!Hz^9֦);c9Ƅ6~ p:?4bD4F{Tg5 iĿv-vɪ7\`;r@24٨#X1 {}fvD`gWX5-Il͖ٻ18 Hk~NUyliGM$jgU| il@.fv,0{Lhcv}צUFmn-YonD(}/_FYX`7ڎX$F[\^ƍf] + ,u .ykrd3u&CtҮK 0Kz1:x$ONbQ %*8F̥ljC݉|yJ.icPP;=<+aυ s.lrp&EpmEA<'knߗ(*!۱jGoQV ӓ?p2׶&R\Tv^C칼N[[0ǔ Pݰ ߷e^ KhCn뻔M7;(D$s/ sC.OJSHw{ǯp7-3 o!Qb4d6}׽r:D?Bܺ}q$ 6!QC%11jdꗾs;g/m>~ȳ)>k |%d:O 5 )G?Y._2$ ?c1^!X}ĵ> nпXY A鉮%Gp@ W-Y+H7/T # endstream endobj 2693 0 obj << /Length 1204 /Filter /FlateDecode >> stream xڭVmo6_!`_$D=>$K@,6V m1kՋKIwǣb qc}{!wN8i<ʜe}S}3n|$/g?^DZ9wCU^i=?bܩҪY*)7ɽgo6c!NOe! (H܏niҢ]#3ᴃ>AP"L-ro(d_Nh ; FAȹ ;`^wPD<:<3-*5+dU3\ 10ZQeMmd;R{䶠?朶WengqlT'(6E2Zm7jaw}/ n eO]j5j6@wVhB$´<fǸXiLeL0,&Ij'Y82u}aT[ +iH ca}Ta;v/&bƃabKh, %p5<Ⱦ.18%= ,RVE2h7C%M{WAK8>5XaIjW #,h:_aV;\鶦xmM08qGpJPY|m#uKtN~]tJ@=`O-SRp Q{f#u*|N)IwT&U`܋8j%Va@\IĽ-a;wV®Y1~٘w䩅U P,Xeo(pg` ?xoZӨ(O3ԊySa'{?:F[a? endstream endobj 2697 0 obj << /Length 1273 /Filter /FlateDecode >> stream xڵWMo8W݋T\Q$-$i1Xt{-:*K)E'1;PUa"@D:Q' 1EXU=8ؘ;G9s$ 2̖P^ģcnzQ7ߣa*Rj!=?L($>ϮϮf5yx]:t$u4"EEK٘ua3q3aJ,s|1,?eѬH.h&bhƄ!{,k;߀0AVޠM -F&ec CX| /./r̫ۺҫWn=ݲ}/]Rޘ'C?FQ'DIeD厒쯱3E$&1%! Ia8< ])<1J@ "D<Ta?kt2o^ՠ?cPQq~"Fw 9A9Y̥x>Fao6|m}p yy)s5J%Fy{ jX/6{Fxޓ&{g K,T񨋺؛CJ,e6`8uEnB% =ݷض@lYmF'sWԴFsm8^S`B^نCQU0<Ͳ&0Irm9z(K{fmג 9*f}<~54Q~KO3D6b->3> wlk5TYɝ  pʋb}*L##0oh@y_aB䃒` lMsJ{BO@b!tGBGh; hs,\w&[+SOыgQ/}Q yBh5ؽߩVu73zYՂ(o$QrtvwHځH|xH1ޫrұk֮ew4nʢ>)R!HRYe7碮ndwp]QxBVv5- WyC( e+%et1^orD;=Oz Zͧ4wC&cu1.JiՉ5\]?>M3< ه綹*lIJuU}65w}ж"LEİ"싢u#{ҟA`y P υ^k ޯo/,6(!ew%F8)aWVv~jUC1qVu;6$ݯԾ endstream endobj 2700 0 obj << /Length 1514 /Filter /FlateDecode >> stream xڭW[o6~ϯ00E] !ۮAbXMDŰ)If}]h KaρPq%Ě.0p]W@%XkD|@HhDe#rKZ g?JɝCW555x8SzVOyj!bTZҘw"66c-L|c[)}]D_{^JmKP$NsV[(S`? Jdd6LloJl҈&ܕ ,MX I~ y0Qϓ1v=+{hfk2k൶fCYj(Kr\wV z.YL(wwXW%p̵-j_ƭk>4b-;lZYl^+3T28yUq1=|,kLO(鍉'?#t| +77H}@5> stream xVo0~篈K"5ĐtCWکCi.1`5Qⶰ~vRևLH>l>ȉ3 3z-1?󕣿i{I abj8S|Es N=? {vwe6قl=g@wKb$8yP]!D!@Ah EFά (Y2g,~-dʹrMjϊH`Ԃ~ DK4R9_/MA+! -C18PGr* r9KOLkװJ[sA@k&WR)) X\Kbm4zU~ !@! b{o> stream xXKoH W=@5;#^8Iݢ.ƋbHc[%y%NCJR^vQp(cȪ?jE""+Ϥ6->~Fwj}ӛ X()z3]zLt}w⟗ցs~>iLE*N/ߝ^ QN;Ft-i8G=o3uS#Af)> X*5[u5VT[:vu4;r{:<ًcpea["%zLZ]g Pi++4 c j9dS7/g@ 6Rǁ{CL^i:(aGVArT9fg 1Ic2Sv{#Nxt>6lQ.% * 4-KA$tJ9$s#Ox9}[tf~4UʤX9ͱxj( H鼯ϊmB)pdrhmPXߦ=䫠> 2wiy4bTbT ,+faBr8hע0^5o{njS>u  AeLj=.h@7T 1flXp Gp]Iy; p Xh钙V̄_wsS%rUܙ5ʺdID6G\WSCD6O fd! ʺCvFF<{MAUC/QpV3G}23m{ /t07A+YKZE^so@G~ П'>'>NԵO&?L24{l:`5ZLbx"!F}3(Yp殑힋3ҴYSZsO`LO`&slǭm෤6\P<=g8L5w+mExp1+[sm(WAPOCҩs9KQҎYe]4j5M]"S])6 vmq &V8j&YWv/,i+im 2Q2[Gkj5y:8D,+&-nz+ F"miQۃ3-򾦹B0lrqj&mxyr$HЦ$@SM+G?l endstream endobj 2711 0 obj << /Length 1490 /Filter /FlateDecode >> stream xڍWYo8~ϯ0/2P3"uXbMvlbi$j)9Q r~9e> Gy8FlTTG;->u='{fG'odC9͖fZ6IEAr<$8xNRYUj<S4]t&B"8|.#!:3,f< XZ)KOkSEl+i 0 9h/3"SҦR$ !`Q/HIE35q:(!Ν[x_|P-NBH9b^vVuXkbkJ̷]Yiz&ԫU c5{a Z/Z's+*Zw=(e1yB'i2E~" G+F¼h$])窼g$n|q@ohquBIǏ{6N?i[l;K!o!OPNJZZWf<އˇ_>Qk^ s#&e2e XB}ք׍Ut-xOiuu~I M鹗/-dkqO$5zd]n޸(C=8@q/ڷVFA wRG0-L,DmǺKQ&T쩊>L xWf-`1Tr"E/pq5Q@G꒖Zx(9_(?{¿z3qҌ _/kch/?2xui漆 HrYSSG/soVwwy-K Wk'w\>?SEGP@xUMs&шtrOK!)x5/ONSIT> stream xڕXY6~ϯ0RUS!gE-6ITuA|g8#(m9q.XO`G٪Wx|`ܜq>y8^σ\nvn՟޳jݭ7az&b+";LExixYg,XɕCld/ˆ MQ}w_I7]ӕjG>~#ڧ D>Le )}!l'GUٓjPKdGtG(# @';Jw>>뱮@t߳1l~İ$I/n eyθ0&+}me__P)? ]j+2X Ј#p?K?DҐy0瓀_~K:1fvGwca' S(J\Dt6)<|a{Mʔ p؞0<Ԫj}E)(B:[Ӊ"V{(=@{תxn]U Sck ೫1<>[G9=wLOPhjb 0'RZ01Uk4 Gˋ ՕT$-BxwCns2gmΓqΎCuޕ/uQ%i t X <ǟt )`as.f`C1gE0{!> >k\/DB 08 ň _E(l4K}D4 `hq0$ !Zz1dU3JE8q;}z[4p/vD`n@ia+=?ָħ`s#]q))0B;ƒ7:\ /B`ADSxI3DcsM/c;N.p~Y l9}{ģ%vS465<ٕa}?f! endstream endobj 2720 0 obj << /Length 1997 /Filter /FlateDecode >> stream xXmoܸ_hQ"(%qi] ˖fc ]0 e8y8p|_d"eQ(W՛5n߿NADwR.x rcoK_᥯~I4pJPK?L $^vÞ2 q(u,]iĸnz&_5YM:/ Ʉg4:x2dA X?8IK(]bo5; ܣOGx0Q] oB釁`!3,!JD',̘W B6M@l N1279f$=cOizo? W.HWG(%OɢUm_kN| O{u 4~9'CݕךwNZQQ꼙˙hpi}* $KiMc {Y.a*rθF\œ !,IUđW=w }5lр%.hs(l'#R ewI2wn6LkSQ6a;ah-c.pK#L#P&pfrW% 8GYVl__^nWuv]o,Sj,t8޼|5s@Q=$W ~oTQQƸh?+@q +G92J]bі[PB s!'@9fex7=I<F4nRQjXqmHPwZp+;VD5vWZ2HXX޺kn^48H \K@}H ?t8U:qvpwq0~b4EpA!cg @'KwVrvg7e:>#}hj<- .1s64 6KBC 3f/v#8$B*&ݙ pؤ~E/){MېߎWSޱ% '{0(;ϼGr6]7a"cjP M O!xkjkC-Sam-װu;k x Q3a;ePׁeP UڠXdX ʰb!(Q " [t~3EP.# 1Y&ehmU8xP8`sC΂`3,N aiԚk\% )f;kz^ѱ;X'iGD 'G0Wv !_ϳ05Ku e| oϕm4.I |bqkŸwgem0"},_&a'2]up$<3[WýP;a(=WOU*Jqc`cEߺKu}] r.$f {p79vH$Yϣ[r xJmߕ0~M66;8@ endstream endobj 2724 0 obj << /Length 1264 /Filter /FlateDecode >> stream xWOo6S9@ő(Q+vHd[(ȒGi}=-ZC|z{$G(OxPϰe7wHc4|3?c(9 拡y|߮H=(!y% /~;ZօEqFle|oY#x0g## ij-yթFo6KhA&Ab`0 i'c<+CiJ{8aH@F{M=B+Zom`=[%euv/k)fVfki*:P푒I4CYzX%( gLНeqb2D20/PhfjQPА$y͟0er#ͪakHc✱jz]›9\ʁ-fg|8s.p~9.KZmj)qW|Y,k7Z Cq/tVfhn[hKh售$v~_,xjJgµU]q`3jz[5 ' endstream endobj 2728 0 obj << /Length 1403 /Filter /FlateDecode >> stream xڽWmo6_ad #J,4NtMnFflr`mRy{x|d`E,A:jd;9,`vW5zKYQy铡;Ur57Jg/f"  %Dqt1QLs]hEĈ%^az*BG1*\mm[ۥI͐{w gT sU{쥒fݨTE.KJ=GbtU*czpp#0bI^7=p!8wO0&?BVG`8K<).`p8d_|=P,ɲKQJ}GK9L!IOӺ)jxg媆ؗaFd'!D(_hho,bè`xjqEC^_=nvY6zE>%ΚrYR;%zvl'j3W =Ӯ#b T8]%Yr۠Qۃ?x2Nc{&#2h^s%@3D"8i>g/mB:Q"2:3АCL]/Mgb莺h};mTL.Ut4$LТTv[P0x.z+Xn+d/NfOW+'e*Pж\(6N%t?V&oږ48hK$kԦ]v_=̹tle|oRBs~8zoJ ,N-V"'' E8^[.t7=1Ce/-m֫d{:㭾yvz/`{߃1Zv7c~X6# h1Fnq'mwGg2%1v$,I]!g8ƎVر4DA%fk.A!vζU8΍{ӐMk`; 69Z"yO^)b013Y b,OC裸Ab_0b9)4:B?K^N nǩDx>C;'zJ*_\ _4<ι*>to {D`c?V}[GIS5Fۗ endstream endobj 2731 0 obj << /Length 1489 /Filter /FlateDecode >> stream xڝWo8 ~_^`,{֤zm V%'Ҡ8)"?RiO<̛$A0Ovn/NsA88 Xe|XZΗU*M  9[h 1uGd_Nfgw0aQMҐ 1v7S$ a7 m-.UՓT5Yo8]>$?be6-40m(ixo|+Tf/-dk<ŞǼrE,2L`NL'M`8WPFz#C  r#2 ,YR3=~\PL $S `K׏XS?T0HkV?u_d!0eQk0քG堌xW s/JR[T*f*"~~LAȳ}2}n J Q%=g@/~: 4njg y8}UBP!q<ϽΰPQU*i;yWɡ=p;;|ֹ:= eHtT"PLV =xB ^9G;,1bG}Dg7n- W(IRfh>ld!4@QT-9;\9P4Oɾ3:N!c_\iNQ61\qgny*x l7a?fMHKd{]X#g_l-lz5g/lh[۵Z;Tf1(Axt.T^;ڀ1LSSI(Ak&A]K&04>:"M]c6@3!ژŸtl I s6v*{QK<Zнhh( b>C=#&` $ ^;XS;g4twH糨 idn 6 ݬ9tλGJܹkލ4}Yxvw^jhQw/ɢaWٺUneu>YB~9@xS^<s2 WóX1p9t4{5,\ U]&}ټ)IФ&0`ΐY_ %b,ff4ZPx@q4).]x{=. +Bf4LO )Xf =I%ó,B,ЂW(uIBUMJP8huhOeJA!6D8@ћ Ug%J@<26Z^Y=T\wNxG<6R[6"HY'{$vsnkAsI7D4r 4A4$J #`1p{$^!PZEM|suns OY7d* n-~px-#37 ߵU Ce%^]%ݧPs#=6¦* ,TRq2I3Ǿz endstream endobj 2734 0 obj << /Length 1529 /Filter /FlateDecode >> stream xڽWo6~_al/2q$0[d[Ѯvmh9ےKɲ~G)۪{XgH}ǻQFeQD8 jWry]*IFl4[5FuR(8$zw BjYr%4엋ɬg3/|"BC1aQrIaoT"D+;"9gg7>l;-re;ĺQX%Q8Hqf^f墾s c qB$ z~6\r |޼}_ZĕI]"^u֏4!ހ FbBCE,R^簲 4/6xg)NvUV7wZHPu^>\^UҕĹy;%M.e]iI] 'ne t7-zd?coF8bPow:?: {| фЂpAjRriZU/"5JPf"F#Za4 Xm]5'o0x)TmZ ˰,fbc3fc3;Yۚ >S&(20e,x-F^-7ƾXf2u;W֥cLT!8pk2`=8< sq2__~ݯ}6\k 6XRkT{lU n'*+j+/Q-HrӉֶԕǢUQɗfNVϨ_rۢ@HJt i6si @pSF?9cȠ'e5Q ݹ[uJYD їJx^VHQpa@11lPyp4sJx {v?ۍ)p"YÍvtȪ륾Lt۹ܾE޼vC '=Lcqܒ4 :i|k+Oӊ$qe Q#pփHYGXz/oȵCm\VW^oχ(Q)x?XcR$ C hqtNOǜ$RVN vEXʃn̅ݧA,F}LPm endstream endobj 2666 0 obj << /Type /ObjStm /N 100 /First 963 /Length 1573 /Filter /FlateDecode >> stream xYKoFWE{rggi`@ v 5r%&1*so7dT2R`yH};c2ʆʑOQ!Ze=CHQq ! V L*,FD*2d*b4FS&R p4CMxE'2lβ"$X̂<2YQY$RP^ +Cxԅ'ue& vrp΢8ye wR3A mx׺מd&:|j} Xfn52yn )(6$ʊɈ#0FWl 2S`ph94&$ÑhBP'H9$he9#0Hsl]R;j % EXزᔓL8xAod}{jf0p24or<"|2%U0,0k X&d$R o%#" N-o=|H;fxZ/Ug^ 8$ B ry~Um }㛷wEG7rUWӅܬYzFO7_o?TiU<V ` ܡ)E]z.$cKnIM2 d-=-@$22rwAz PR8on sr5Z7fsY\O7#Ѭ4vۆwɠm&/[ !4p>g M5ĤOm7W`id-xG1k~}Vћ˫TW->⬘UUbB%(׷ÐYfz;e,$705PE(oo_kz>]Ş,/\umm!w6I}n9Y;X@rs LhHDAo88mirrv4M(XmLGOLGyd!9 k4= endstream endobj 2738 0 obj << /Length 1135 /Filter /FlateDecode >> stream xڍVn6}W .ZS!$)0i 40m EE(E`rxB x18JrW_׋@1iΓdB0*pA&Eլ?F F ?8N˯Np%Bf.ˆf$ANٯg]̄3oѥ}t$PR4Y;`?k j_8Э?ȏ&C$!QՔ{עx]*JWEpUZ\Q?d`OWZt} nTeG7(W:…a.Șv{tYf\@M[ ꗷXT˭nj vP:1Է)(qQrEJ}WW \Vh^-s7efqˀ0N@s׿߄^I<(oT$ :˭ҾMi+g,}d)l䝁!V4F ,Vyc%_sۍ2y,ڹ6 Okj"Z՝eRCB4P[J8MHҭ[[-+ ܹpR}OJ=<0QllSlCgul8t OOH?8 ]A 8龲7(tSKY2XQ2gx(QtL5I;Av(> stream xڵWKo6WE."F.zqb7Y$hH@QI_ߡXnC87o=Ϟ,t]{,)OnUj_Pluӯ\HM릤E8&>)#c֝M9qh"ondα,|˟z뼷i˒m k9#702;b?b28اDL{F_*W7R5+Wf7(0ھƪN,l)TjL>Ri22}BeW.#^?iϠ&NU3ԮY_ZǑDy5(H7*ъȩ@G-}̟Yӗoɹe؂:c5]ūE!xp:p .&#ʝIǮ4es1_-.@xuH^BCJ:d:DINg\aaJ(9>t-;鲷pg]`.>Yek?(&;NQ9u]X#omg8#6ȑF(:`Wkxnt,sЫKCLX'RwgjR7k6jj*piPDҊ'uWʅFz9qc `nw=wBcsDQmc#RFS)xd}"S=p uA%^S-ΞVHlD% &Ѵ!''wu+ꂡL ߻zJQ!`r*㒗ĂrE>jg+ǂJ‚%\SJܕax?0v]HR_k)fjqC섊[/(*yڅ*72e՛.Ceb倒\v`{ފ?bR ݍ^Gh:@.Z=y0Pc$7o`ח-MޠRFU=쨆.d &EpQD}LU3\*[| U`jQ>v2;r%ayS)#88VDh5&h/}a'LDvtg82ޑ8; -)5SD$T/ w-TM endstream endobj 2745 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڝWmoF _ad&Ewɒ%+:BMGOʱWO<ɓxφ?ދ^,ެ8T.z(4&gcqv{Ib}X&+%dຮ<Ϸw^̅LN}ۊɧ홾5D^8!" γZ < ˸i%Jmf#bJ e MnGi9LSZ$gHJE<6*`T&JEڼrR,1(LmZL{g+Y$y*JZN\xJ^E"7Pj]z1^\>wC:*bmXjgaصPl.(.6.zIX_TPG"+JYԸɸZX;5g)L }\ςoԑن |8$k淺iZ  O]uN( #QdY](H zַu" `dzVR+^VyR&F{߇ΕY2s [5;!q?,sefhV57%BFtBR|q"VD{ (\ @''&G׃ޤb^%ˠ)zsjAyXD$klL^75 dw: %R&OYg*uZ?fefm;BKQSwGS0$mibJK: ϱM}m%M5ئ)ݍ oA< HY$Gڼt)*VJVS(sV9Wwq$쟇޴:(mD(ׇkoCc丛:?}*n9KJf3Xt%ZۓλwCuc(723۳D$B=34!07`b0B7,7x[oRׅ!aVRm2umޔP^,- ^rxҷBsV@V uWN1/ 7lEǕhr~ dxdP=Y*10śײ!cQ@ȕ0A([H)F;j Hԫr1B,jFJFAj)Nܤo%=_'bDuDmEqn*!a yN@?~%F$VOŇ*/! endstream endobj 2750 0 obj << /Length 1594 /Filter /FlateDecode >> stream xڍWo6>L*ZoKmǰC}ꊍ.I1Gɒ4A<C"pQu"esX.hE|`'/Votpq};u]->yw|oZq{$D(nm)~˓.7(zrvycz],_dy8!ywljLuQ,pͲ8&~RW17;Vqõ0V ~AYe,"@pHp}ݙ\*}D݉;>~ڈg(~"^pֵlWnJԴmE`{r> stream xWKo8W@EG{ph@v큑[XYD:!ir( 搞(|(4Hgb}Di!|!0ɹ#FINs6UJFu0 ;q,|VSu!OA&ͷw h|:2,&,q]E5fݽ2\XSEey% ΄HlWe!+B58  MD!Z6]/‚4Xg|hcDazMg(E+CgٴCf!( )^˳48i]aݡR^jo~Ԓ"ϓHR4s${Te+;f0ً΢1drOҬc!Nf ApͲ/lUGVf] &=h47[ЈѲ,EJ!O:NUt|@ujXU\`pۮpVm37ԛNU|sUceU e,Rs˥{x>ܯudp깬 R<9TՖx梹;X@&S,q1 3~L:!rkwrLK]݈fJ<3I Zd'eP(h ;%tW/J@VM^~fͦ+ `Ai⤲q SQ 8O#;j@Ht&We@EXj&YRnZ|K{KW@2Wb7אdMܹp3h+۶6v-0qO4Oq?gWF?qoW endstream endobj 2759 0 obj << /Length 1570 /Filter /FlateDecode >> stream xڭW[o6~ϯ00`)2iҦF> mcq%t;940E9߹O"ÓN.p y)bql_$V)Qss`{%f{mGؽm,ں]˂v]Yɵ]ַv'.t)nkK0c)-Y<fLn/+@nۭvjeWw~finxѪYc@IjA ȂّIkތs@tERnDӁsࡿ@ +C#Gn{p'a!a "͔+W1-LmJ;}wJqO񺵂 v|pF%$.P ШO,E$b];Uœ%7 -.~){W )+1k9K{i/V NcR*RZɕ,c>xNCSR{ݧƅd3:dSҨ)JYw|\q)oJguI:nty!'䉥J{Օt1F19{9ĥCQאA&*bSc 40FY,D8备tkK-c"M,nJoz5i ve3uYVv}w7LD}hT׼8 iym@ ͙5EMnC&D 8MA没 :#$pbbЇݛT.Rpߧ$+ԚU!?K0 endstream endobj 2763 0 obj << /Length 1235 /Filter /FlateDecode >> stream xڵWn8}W $E6-RM) FmhPTw~Ҷg"Hp̜pBg1Yϊ4%UVY< _?Q'`t f~{f4&U\|qj̾oW|c4MUe ο\WZt,">xv1dIr"8+]hJbeFh!$$ÈI`n[ٯH !tze 2͢$!r~6=$JWe|G 9 b,""jC^5LXp+q1FyKy10R@ :QO3 TE*JSAL&B#kV 9f7r Rx|)2|)КRpOAX5PkiY~̉SJĊI g;J4oQbaґrϥúhCR1=7MV4?0q Ombo{Z*YqCqAjL5PҢX? \Z;Ӵpk 8W'X:4F4< j)a%<;SB9WjrOxƹ)hU䶯QZ w / >T< n{\59f1yՖ+$yY|<] eNsqכVǒ;)IQUl\uEK&x7<0zw _e-9l):y+ܰ Z5CX8D Wwkì[)1U%j x߻v6Ô>>>xУvUJ$;.+ |z.nb~y7"tf F8} !6׶G>[qm,8PKCkm;Ž{\ WIT٠7ePQ#ǘhwЛѱI /_lߢ endstream endobj 2768 0 obj << /Length 977 /Filter /FlateDecode >> stream xڭVMo8W Ĵ,zHȢmZآh{Pd:&*KH1/+A45yP$Y$ጧA:>7gMde~6" ΢bU>WbmdNc(' t6>ʅle]pB"".Dp?R# ϡ#$iuqԴ¸6x?/F-nHpl;|)!;m.7m@ x4E0eEt.l69ֲ4p0$(fZD<kݓRUud HƩ}l -Ҟ.϶Z5O=)?YJ֎$ӬWeQ׈pYͽͣc>[g49)f%M"F(4;JR1=,v'u}RU>o# f 'V+;!t\ȶ(zpk+O4CuQmED()ys?0umw'Uɭh(׏j]8ɲ!'Vӂ Rz6- \{?Ǯsc[c,u՘1=d|y7,}#LSlgcП`v|fOq;TIS23sJ(;iM7[8gBNׯͷ'3*0vs*Qq=dNNc',ÜdOsVn\nsrB[|ҭv $}@Eah7d;Zh +Vt9e>*K4qTϺfkY2z7i?4Ci?7Ub>VOfr]Toe}o1mj͑vN{]db~Oj~@}F+n}s}/~./!_yIffɓ-|.Y_LE[.ՃĪxS*,骚?Gu endstream endobj 2771 0 obj << /Length 1497 /Filter /FlateDecode >> stream xWYoF~PsG>ȱ:cIɆBRq,%QCa{ oFlBM: IO~ߡ:X" Ib~D\gu5>Խq(ݱ0` m*xJix5F9)IKݴue".ly|qe*]J*rV*wo]:4>B߮ 5<$ߤ,r\+\e` Ԅ0nKs.Xe029Bt*J@$. g_T `էyLĔbDJ,N6bv]f0;\p%nFF Z1Cu`41N-_Fo-Ke=rAF)էg[sd\FÞW4pXHw Ӏ&]ma%@#'Wl M%%ޟu?@0%BNu6#s'%(:R`W[{ښimV=@az[!`B3TIE xbR|Z# #O41 l@ 1`}S. 6fmh0bO"2&ѷ]xR ÉvC.Bd |לZ&cX9>iYQJ(vLs{[j{nUi7 ,H&{ }]:WlV@q{2} ?%(No_QAcIJ.݀k_ o Y( n GDt@zB/})C!-kI3iR5Wi>ܐӐ*ű S0ךv(F%I-,b1DW$TcԽ7d_6> stream xڽWo6_!d/4sH#C&YdK{AUfb!Itt<ʖS{vm`;0AʂX$G6wq7alrRg4e)&&y;F7$nƝ~Ѝr=1Wlirut1YTax 8$ Yt'4 DR.$<3V3{CFU#43ڳmXb1hc S&~;#S9,#G 8MtΝT. IfA" fQ@[#US#B7Qs82zUڇƂwsoM[GUVZ)/LwXEz1"8 P2F!VC!WܻB絽bZI~\|:ųp_Ip18M}L-m U|.vF!wVzUϪ⬵"*'ܜߜ"y_<鲮ʼ,Yj$emZmݘA=UzYYeMM$4/Gmp6:{NeֽqLEnC\M? BXwOzk5kPQV"ևK*SI򰥱͈ah1?Z?fOb=)wgo͛ba1*2Uu.=w5⎌og$eg ؉ks)ڷNκua3{zzn%gxGC~NR?g Ln=}A62Iȭum*"Wn}n<g #/`!4廇4M搰7tCbCݥ\u5ЖqWGD?8"toD( "{ի]e>jPv1 u kmy;7B3 > stream xڵWo6_aI*ND}CڴC -2}&?;؎6{1u WF&+})n tfi-- ud/IfWē y@ ,UXvd/dS6kh$'F#[7Yg`0dp,w< >K&'S&sжZ+K$Roo=Wp݆~qA1lo]P*< a=飺GTM3 YC)?S]f>0]U@<cіM'jucݒ;.8a84^~Ѕ{*2v_ ~{t˜z 񗶮(qyOX.)̷n/@4Ϗ)&BB?úrX}50aQ@-4 30+vC-XMw5Y+bZx~^O P`Qxe,d R0q汨m}ezG`&1 pa OjغN!gPp4᪦4'P\&wa"!q%rds4Y{?آۻH) iBb7U+k:_K8V؟0II'k. rr~:lŞwa 9UCeQeu;.yG4z LV!(6Vo^Y8|?p:[MSq)INEIr.uPxnEGW\ VKa;m ]x {Mz |ou+ޣc MH[י]|mn?#a:j-[7ƌ?r EcB}=F*%\K >ָ_ljP[kPZLa??icx!yBRDTXJ@UljR[OV΢aؖ-s"G̱2rcpLJhI'gC ?k8 z [d8OA?”=ڽ,g> stream xڭWKo8W D\3Eyv& vQmڒAM;á\ubἿ$ J<@8p |0[/x <U'/lV,6@)ŲaE1;yK[}K= dƂrmbKB'29zIPEYVwCXÔ'Jx^fS2cћ;[TݽiD?vL#){UQ{O,bWeW0|C9&&&2yxE1R7 ?FѼDӔ ڥJ}b\|{S vb }A,r^U;ì8b#DU빮-|Ummʮ&ދ#DỸ^f㛫ga,e+8e'bY.Uⱆ'ga [ui a{ FmԤ*u{A EO 餝1S?XE^~>U>/bo#4EbX5}+ ^˹ߡWD2JD?N΋f=1زL;PH;EXW} Jxe\r dSݼT AabOߗ-yz,26F 'yKOB?`&cMv,ێ%SuXXB2xIoȏiN>c9]ti:m^:M7WV+o˩88T2?<:F^3۲$u:$FyJNOq^*>v?]k7^Xn0 endstream endobj 2784 0 obj << /Length 1245 /Filter /FlateDecode >> stream xڥWmo6_ad&+R, 4h<C[DB$Qf<ʱg6Hs CGI0!Ix<ʪRboq^ 1IfmU|;^M'Ћߌ}΅7 \jYgr /Ʀ`lO sm($(愆]\, /ρgZJ\b[(iH@M]ѕrKѥ+UY]0/Ns߷od.y0`h'}8ǪjV|b)UYFVi3Yfc kLzh|ݕE$&VvTk6DHR\p\8mn+2D{- "/!(I`֟^Ej9C6A3 Ecry~/ z֞%j N3U Cm[oO v:il3]4A߄D=(4&}On|0tğ9AAxK%~6 Y^EN'`Ȳ,rc)=[BtBQT%OoCH8`J> Y|;IJM2@[dœ믹i^62$T+C|4g E=J.?TX&pGk:^ki^];嫬o^ ZUQwBсU= 42Y[0:4Օ̿)K v7µt׃(5nnjVeR?3`R C?-r=E7jEq"CTxo?Hv&ت>oZU4:-ZdiRmV6\<^jaUt0h?ݶ>S\>}^Zx 1MǬw˱XܛVRY>̬*-Nx 6.6f_t^&Ŝ& a=7;fGMdfro &zM9D@p!t{] ({c"Rx{NX2x*˴^v6pm*σ&?lrq̽4o4TgˑMMݷU)yOqkhwMY5 nv}7{Tk-jz9PNN endstream endobj 2787 0 obj << /Length 1601 /Filter /FlateDecode >> stream xnH=_a0e`mizFMUŖLb 3 m>̹߉x#'7@*,'67zzw"Dj~mN'R/u<|qW٦ I~J? pu~,CI 3'*K vQ i_P #eѮDuY;QIB5q}Fˬ˺bIv]nUM#!;kYxD\o;PH/H~V*Rz+wT(N\ %Uf%pUY^dxdMQݴt/] +t#nM銺S e,"B~;pa ZݴtS_3Lz⡧'\ QFa/*zs3+g>M'EQ"^櫆"{4uSN ?G=`6>C̻&cct s¬aHWӓ-g_Z1u9TUn)`Ozʒ@i('+䦯bg x;MS7묗˃SvlKC0 4I@c5du1aay)Ts_az*ddoX~mי?ae YN< #0W,n?= <Gb_a.V`FCfq,mю\zH h~-򫚦!]wq_,tgpi{U~6VS\wJDJ*0#CU%h& ԼL -P7 endstream endobj 2790 0 obj << /Length 1645 /Filter /FlateDecode >> stream xڝXo9_^61^Nԣj)ۨH=2p *t{7ķ5AVݲq[| eP=sp3VgM{,^z+ma$X8cd!piU: +٧M]1xf]^,8>UZgv(@dN9VIO[CцR :g9oyR410d럮 3( Y8}B.a~aY0r8jiغjg,{ ϶㙢-YE䜗Qp.Gp<4G8VWGviwnlE-8ҧX딑5-2x+(-4t\ϖDЫIh嫃ңЏbL{k3XG*{a3:܏q4;6wfފ ` iZщcȳJ: Qv%h׍ԣTT_i :ii0WÔҰyj,OΟ3pU[( ^'e/z9ږDvdf67mCRWgARg@4b)A߀ƶjJ׽t7)DlZ2rcAvii˝ݘ&%~R召|M2r$=/N>P[^NKha@ 3V 8dik%=Ko[FTrj]m\VC|55y+htPZ'9$R!v>=(ὭDO'agsÃ_ O}(o4FCO%%z?<>miwW}HĎ_+lenֶjk*DG5n鉸q3;J endstream endobj 2793 0 obj << /Length 1420 /Filter /FlateDecode >> stream xڥWKo8WJ@V=4IiEjtQ490c%;ál+Q Doh> 'E0ɢq>)p7$A'}Qj;^ڟFQi'Op)oM)i$Կ}8x7L!S}8Y>I(&Rhؑ$c)ȵ< X{3-~c>0 vN; 9 R2-Mk X&@VbkVH0("3TRwmM'Z.; 9/'].evbQ ޶֝4h=1-P%m9 +*QwVjD>Y'"ѢJ]*)mJ.\eg^Eb!ƯYHZl@c\Чj0-7؎ ÄB kC'!XHϯCk^5IQV}8F۲زܣ`HБ?4SXBTJv$E9ORV]qprH ZTAX^(mvVtUTP RZPx+Tm7q)*9{e`+-TSԛc:-vv .'}}҃Q!eϘ?M;Zj,RkVh9ײs+uYwD=@(TΜcwI>RRn";(;F!5*Ϙs6[tuwb k(Çɐx'_S Bu$6]98MP5,d@#U`05 ?j,@^Lb+/-BFsi{5IH"Ί$ Evmvٱ|lbٕā9iҳcYp` Xd|HoKJW?=PWv?{M,Z[pqT ˅'"~}D" wRVob#sFCpsjg7 ̐Ѻ*j MXʵ9(N /xHqg)x+ Cs10c]J7/e@ڛN;?1`/|=0mPhcƄrQ@ 6exռM>%@}Ÿn[}`}z+2H;cp,Gh[g^P6 >4ǛrC #HF9~pvۛԋ}6z> kÌ3qgdz@hPF;۝;Cy* endstream endobj 2797 0 obj << /Length 1479 /Filter /FlateDecode >> stream xWo6~_al/21$Jb=$M[]0 m2kCwǣ9SlbOeqTϊjF/_ oa8<[O7zkM78'0Idp% 7kә00ʄ-{(zdphh&b!<]'L EɌ%fY3B4+|$Bd[ 5\j%K31(kC+/MW6˞fέY4dtՅ_;~*H$,Qj6 Ι+WXA=_f*Aϒ,R3X#s*v fE[^5غHccg=xb 1Ń( JĄ0ܚ–YT\L;XG71I(O_WFW//>eE_Hhϊi᮹2C%D,^ e"5o r8 jf@є ZBJ1X3Sps] Yӷ)x|V%M'/0׷QZҶ> $U>#;U$)KվԜ-VW^e [M d*_Tz4$-<>Ӻg_twXԡY|;4ѳ4dP^} ILֻ +αwΰyNO]y_`L܏(lU'$%HVb ;DZSq\,+N6ooZj{615]0R9z сmt=x(]u"3νr{d'0 >]6˰T}gˎVX4eûLim#) 2W!bh+@ژ҃EЌ8 ܺt׳GC^6+O%A~p_Xmz]MWmQuۛV endstream endobj 2800 0 obj << /Length 1397 /Filter /FlateDecode >> stream xWKo8WCi fD\iH-F-mlQ&Pu|h8bO2ot<,F4sO8 N6${gQ4ϼLMU3;.dݪf< oǓ0;ڸQsը*W㉟cY::}w:|Gp({ t!AHoA@L5FW`C+N1d_Y(Sm~S?Vݴ\)pRrX) }ՌitriڲZ8ai8c?e/+vw[e]7Z(^l9 xFg]tbwn!A7maLgD?>Et\Kex$\\~C#6:zKc~ٺl )N\ܬۊ0Jx7a}a gcw|&[iT˫~<VƤm+2̿Pm!S6Jb"xEҩpGb~ąd_*b,+6`9^Jc\.ɀ} 8 '2ouSvҧ5d*Lv[av(7eݖY8„8? '*F/Vu$QKCʜ38ެdO3[JEy Mhmw5g`abčrw\B`H9F0 FgA_Ԑa VtW׿h]A5̰,_E_l&vuS׀~B[n 5+Jsk` _zaN\?~b R->W8#.mGq(m1l›Cy_\JA0"c9 cLD 7nJOݓ{I8IL$iE> stream xڝW[o6~ϯ06`E2!MnEah@KMԒ Jn o!XEÏ߹"<Ydlc6fn,(M=k_u#J?zgkL}1@cBCHYND;)(]*bUlֲM-WV(9,QN붓¶6Zj✞eDj$MN!Bbzԯu!f ^wgx9# KI1p-/4!@,Iʂ+}܏94OsiLt^)ܾR`b Ơяνj⧅Fbݪi6t&p)I-5WxsJ)!8KܿZֳF|g:< 0-p)"<$ӭ"i,LKY/YӾ>HKpe y? ŋR(m8bh[IvM%D5 <93#1 qV]RvU1^ *uye-@U5CI"cͦ{X v>qqqN Bެ)t0|p(±gVܦymShleG@iKyG{sEq:sF| tL]ŵvƪ'ϐL۫&äD@D=G &;;)O }nCcmcm ^5^ujE'il& m endstream endobj 2808 0 obj << /Length 1564 /Filter /FlateDecode >> stream xڽn6_Z bDJl$5" YwjōH6PZ)V}* p8VY"W,n3|@'/6gO$Ɋ LImg<ѭ(ڏ;xGKq#:Vbiכi'JX9! ߵ&l@ *RM[k`Xޝ=zM_6% cTT;^cMY5r/hC#_>8~G+$I_uJ j BĠcew˰XZ@jB]w5![ > stream xW[o6~ϯ09RԵZ,(DdQ;9qۀ!ss6F99ܽǻfh~K̥k0l1q Ѣ0gy> stream xZMo7W 04;A7`[2R\_JkԫU bR9CEQ1Ere=)=+Be")@ /FX(e@Gx"4"UJzAsʖ 嬗$yK[Tl6RcABdhBߜ#9,}n ï.:0K%bDNJ3F``9aYIWt$'z1K I7-we623$GJpld,(: "BΐJLUF܂Pl2ڜIK2i.x1)y88 dU`/z!D/z#&kWl(H` Rqtrm0VW2VEe$R0ULdPEY& IVF#ƒ(I (aQY\VɖJ[P JtH8`i]LA&f6cÂbp2AuEq_h-+ F@ D/nW^$@IV,xr$zX(a咕2$#.K,Ѩz{ۨMU/gE3] }:NvvإbR *[Tϟչ[",9m]FutuZO$ݗ' (.XB~x**gf6,ԷaCAS0iB=NSY-,=X }XZ!>5a8`l)FSt:Ձ)t-Qb6h+u :&8t;X:[~X-'+*䝩W??].TU_O.m{?Rj<^e=7FݚsGg̠vOhr{8zeys4INbsQ]wwoߟfXrt9L|6H ؑv>E7bU[mPp`b"Rؕ'*fX= jIzlxȆ?<ȏ=#IHƱ2|\g Xb,MNKy넭eGjX^ ēH[p* t*s.nV2ũ\Mnl=x]3/.~ox7:ǁ-!/-ydtt\xh)!I{}u>Uo&K}(HiKp&7'8; vF'AC*`ÏUҖKe}oQ%JQDi3X~O-Fi}HMӖ;FÄ3^E$I[y\zRm?+=Tǿ}ͮX>C!DxWMCn#8!e=R?@tNt>"y1ܹjVyd֩2屼|Do6eیg^V^O/niuՍ,y|t5tAa=\Y7̃Fy{4$ץ&y8DžA$<>U8 endstream endobj 2815 0 obj << /Length 1234 /Filter /FlateDecode >> stream xڥWmo6 _ffYco؇.mpn$F8^G[2 `HCR~|{,2Lhq[)(N{,.~x+{,b>YggMZTD? ܫ*nܩs_^YNj~^O`ćqhF"oT,ӽN>>X(i/'d/ ׏4O :)ف^[gWNLtz]ЍRUJp&Q>}jµdO7|]SY  Ch޼$>kYс~"}LՖ!u+6D]P;_tSj<`:=(eMm>FGؠSge}ɒG4!9ñufig6NөTV vXߑ !Y }1\PP`Il&`g Cϳ?J[ /d!8%XȄlQFKƽ[6 # ~d!+ĪCexi0 F>VR53V˺> stream xWKo6W,|($ z+EI 4 4()l%5z. 3|R|Rw>KdgUu~?FAg"|s~+Mjs3U٭>Y/餲Ah={&TʤxQw}d4GCo}>y’U!of ZQwnt0VWǙDZ2/)YBZE)Op>w??.m[,݇A`x]Qx+C 4vIC8KӨd}7(慌 dYEZ H 'vY8;+ȋv[ Gx%k0շc9ҳp")m1mf^.qdQ~bKoi۶4jgIanZaZ9q E{bj4W- v޵*@SVaj6ԣEo!#X~i|YBPe!O A{Ə==‹ X'n%y)8x:fzr51~h="޿$2'*Y(c 9U&uW {X3Bv"/<.Gj Ba;BF{ԤdDxvTodmqH ( d j9,ސ^GVK z9f&UR8.y%vy={Vexu4s7sdFaLR[Cˤ#M_ Z`Riق饲T`J; SaIzA39Zs$!rQ6.k^`Jib 1:N '5(0ј1FK as6 Z8i)*12%5b$Ɗ>늎5Ie6`d $" U&qkI_lLM"U4MFLw4ײO MDDg9V`z݀`w GK.u\MUB ݉/]s*[>~;;4}{*5C5O[m l۷2Y x]D~8VRTśⓔ,Mx9? endstream endobj 2822 0 obj << /Length 1629 /Filter /FlateDecode >> stream xڕXmo6_a`_d`DYjIM$ފFfl5rN:M<{rh$LQ܋<ٓcy08F2eTf[t6YU8L$(^4͂w4qomaY(M7J8~uyE<>4OBHLRpcC͏' 1N_I3TvD^E{`9aQɲ(`ۊdH6uznsi{UXnʠv̀wcժCT`!!3Ij*Ձ̝'24q޲G?֍)^EY f~MR$an.:ՍQxH(NҧQ:ϑLtƋ51U'QUg}Y: 4-'Di#_ݡG.}A)hSL:@ =a$=fcImI\IYrsZtcȧ,BTpt'$sD_hƲ ;Z[g#0*rE5w\H\esx\bXnjqj6\ 7\ҭgzX@.Md,ƴgLsJ=W xܾfӰT^x˩'Jq_ORE{aDEtۡ6Bt[C۹x;ԝj`1m8PDH_@7CU#V3Od{xRu]Ec9Iec>\*)f#5Mn+5|$ԶqbVJ@|!sN[  F;>/ui&Rvk(vff2Ywe}%9̪P2cKvލ? ʬm_8"Pc5 - f4qq,|Kr34|48gvSCז)s h^'=ܷEK}@D-¬> oD~oxJl[27 | rj!}`0Ӈh SXUf=7}Դ^jxmӿY&+:ȏ 5~0H +x&ix`~nZG̼#pGŨdKӨEZCq'?R# =I9le#!E:Ɇѳ+3O˫Ok6jΏTRK<1[ endstream endobj 2826 0 obj << /Length 1316 /Filter /FlateDecode >> stream xڵWO6__qq}pw*PrCHy9 {P+23kϊ#I[Y]8G ϋ?rnQ$^Br[""]B:.c̎9npc8K!E Ð{6sebR}Gtط(#S(Ilq@( ^WSzp?&QX.H"n/Ύ!ya߻/(YQc|.WYL(D@з }ډȴS0rľuuѧ}OD_ίQBh(I85QۡxisBpdzn mXABX_=?3 8 grAn[#ӡv6ANRmhS_~iJd??8={ ueQ2Ymz&JLTP^ .qLt]y <0u?3N9~dA_ZB"r}P>ٹ6&sIچ-WkS1OPif|r%яNح~.3%:)Vsb#j*kZj1inĶbOUkZ??ޠyi TUC:@R$M!Zot*UNٛY27`N;Z,o ՗T™0\.1[x ^v6Hu7Ma ÝNF&WѬ{> stream xڕWmo6_aĬ(Qa%]x(hţٯߑGZV*Dx<ǻ""-,IdnNӛH|y*Mg4"ETrslj}~*'I?s nF(є"YFixF>Ҝ,g& ^ ZUsm<2J> 9tA2жZg1(umylds2ʨYU'cfײm:N< u>("*CuS'Z㳪 /7NzIA{@mP|,04Уi>\HOҎ (m 2d3ʏBVA7-IXh3PѬ6zxDEN ogGe"ڪ{Wd%h<4q$JzW3H8'FG*mwBLn8.˫ǪPWi >jDž&Z0F3Mn*ټfe,S$I uDr#H)AŸI`/K fbVCٹj ` d "-mZGuՖTb9xe>"C ..l窷A>6yj+PƋJq6 !&ޅJ%wMM)obc9>K@doTsP@1`%l5 L*2ɴ2W [*w;^ ע NEtd 4/+C $cB %3DZ=6Y׽!oo6n{ܛ''z_JC{z*9ઔb{!H˯A؎ʮ>CΖBFf}zw(GʙFk|`(*UuNS3F%\A#G 7YPg/_;p<|C{ϙ ȩ<Q <Qtc eB \vפw>pe&%JLiJ~~Z$֍U>U#mu7m#]Syɟn>cSx1_wNCEɵӄ 8ui $Do}ڼS7i}W-j?6{5߼Ο;S/=/PHvp endstream endobj 2832 0 obj << /Length 1318 /Filter /FlateDecode >> stream xڽWo6~_a`Q2!m-hLLD JnߑGr40 E*:fYEgs!Hz}@ìo,e`,_-~~+QRъWcWSz6vi&H4s}nkf($M_,vJΟ[>W(sDJ‰Y,x_6[U{5ZoQDsDү4gʄ{4W3':: gn{JOik!ѴHu;)]oKhlDfox=s tt(>7yo ffN|YN֙-B#Ɠc2< 3j_;<1^~>Rw)'L=LA0~ʧ?$9n/^{ ωpFR eJpR 1}Me(ge\jGker_Dr@hjik|W wkpwxZeA`J(+5m^GY#<ٶ{S26PcGC.kTD=v.-E7UrD3O>ħj8bg rxCUb `40], WI`mW穫M&du?;(iN" }v6n/7K d[L/Ds`"p[Q9p(7^F)Ûvκ}` k' [į]ޙpP&K' WEyN8=p=gEM㶿ݍ50^v\A!>yNwAHP׷cZ&|^F3]s{74;aIUX{lkbw3Ճ2ܰH/NOqxf]o_<{U?VGk K@(pqNKnuOwp甔ŊϛN|;l F8|8k5Qt]_EPm|CEQzu5Ԡ7{:'o,Uc/mM5w3j[#6lb<. 5 6x=Pm׏u{7{]w҉:h"-ՙ endstream endobj 2835 0 obj << /Length 1876 /Filter /FlateDecode >> stream xڕXoF8R듸!%H(Bb^D;3Txvv7{rO2ȢtW|Gmv+Zd 0n&rJ"3::߮>zWzߙf K7Q7ω\ԹYo8V'tOCUS;ZxHWq FQ^lm㹷QA6Y<^5+lM&K|F1DW JnCZVHW.>uNL(u=t~Ҷnd(vTT,ҳpxHiBNi Ð8<__wm ʻll $QiJ)X*{^&ziwW/D]U.4;:@Y`SW]Sf 7?{:$m{޹ӁwæA%?Zg m. VJ:5 Ȧo%!D&`M)R<ɋp_8o kڲ]9 Jfi ;=1cќREPY0cci9` |ɷqh A:(hM_LF%hm:6C7TBCV1(gˢ3j]qu E=wc;:.H0 jD"FUAT(LqzöbY$UpeFN)c NO X۰FkPM1 Ӥ)P+̝fD-_'[* OE7XFoh"҉/B}?MOk5)Ei\z: VxJH$ fpaNW(,1օqxOsB :'ZJX6׬EKLv+a+}=\uq!…Oׇ.OQ2 w}Aȳ]]-/`"cbAEjy?=8[ G[ H2cYr&,sPobO4j:d+ E I,wE.I:4RܐDMwj+n=lg!X4Мi4u X$HT2LX >2<ιNnuG%&]!Gv2x8Hk#fNX3V(7 ࡀ3z]UbJ+;#@Q&t:]MbPH gPTh}w#ѝDfkrՙ`<ߝ+jy#wb~Ž͛&WG7> stream xڭWn8}W%%궋}H˦hnm`lWr P8,$ Y&٢<ڬfp~>8#ϓˣoh&8x&fPWt6F7s? C/mKyI_FW =8'x6~0i{Cϧ1^HZͦA2#hUhG[jxE`mh_$,B]j?bm< 3=lFtLዐȹ#oO섺5S-Yk4"^EdI/jQ[TL-& (z)g]ⳢȡP99- lbTS_-6Z^jLM/؈;SG Yk竫ke= '0L%S!u^XFր4m ~Xiz`sr$v1l{He?5`Ed(&)=.}{zd=% zuf`!Xq*8OYcR'n"%,Β 1O*Ljnh=D[Ѹͤ N&İw c Y^:;(se _w:vN}Tb;MnɂL+Ĕa"\{U:ڹXdJrD2)kW6-'_O>iӺ;ç)y}M1$d"Aʒ,fO ?sU-ZmX=?c0x| 6(^Waզ3tXA Vw>[H+,gIS18.Sx!#ƊZޙEDFL}lkwÜe5$hЗ3$l݂ >Sb/ X=G1YfQ޺p=KːuSLdFOop =nMYH+&%> stream xVmO6ίHq;,RqJ®LۅJgy3s(1'N9Ię,h[?8fqr>[ !FIJSg۪S󥖵s燡pO>_9&(ezwk"ވ%>XB'JBxhfXe187*>iKcJhѓ:7*/WMɑ v %+4<Y7 wl]7~DZ+fC ̠,ğ6FT Kh+m%qD8t_UUQ [&b2)ߴT;A))dows-ƖLScI gXtQtc̮| jʬxhk94ygMPő5mzח2|ڗάMd_! qpÄ)2f?ͼj8ǒ75($zßy_]u]uRls:),d^U-Kivq y`U2TYʉV'՛=Utѵ۩:XG[C!5AiDֽvhmZa9> stream xڕWmo6_a"wK-!k52Ma h$ Q8kE=|g"-I>+~; כ/tpvf~^z'IOb%hK1,K/ OߌQBth^˜aY',Bxc` J] bCgzۊxrO3>wFWoa t( "7˂;'oU]H{jYV CӐ^v0tRU[)wbf#hpmLltĥ -=O۹Q<CVS?<лulBokf|AQAEdPr( wNb/0ZV!°~2,h$X8JWrbXʹg655+Ӡ%yDFNNOغk4%?Bpf.z(Bπ4bhӇ$xt邥x4I9Lg)|EOf'b&I;W HWlM 9KȊ4,Sښ1=E) l0rʂ)*+΋ԃ~HńZIJMAl (U=.J(cg;0މԲUo++M ͌;f\3ɾ> stream xڕXYoF~ϯZf>u6H V4&’ uL€w9ͱ3,gizyV3RfFOo s=^Nff 4H9b-WR@JOxUlDʖMz]Fn= &HWzg_ { 1c'cL {?3>azCJUJqd[PKlL=፜8;cZmjJ |f#nj1KoKJ7Y4(-IM"('X|7J5ádv:iO8G+Ю]!LSpnoƏG7wo y endstream endobj 2856 0 obj << /Length 1917 /Filter /FlateDecode >> stream xڍXmo8_a]Q>I۽E{bwe,:U RJbpF:8"yy83D*I",o"?k'D|F2_Y6JN]QzkpR^i$IPM4͂'Vw = <Ϣ@d7C8Nx"~('y Smce!$! L;snւc<^ sVが=$ 6K`2koO$[4AJ̅ RR䇦n%*vxVo鑏(ɭMBe1Z&W> AGU V5>Ms͇bfNxJjAz-5Cjv}c% iFKޓHmE7$J9MH;m:0֜Xd4`$ނ 3^5hIEыU"|Iס- Xnq7Mfٱ2y{e~dX(7m{m}aPW7Ot5E\>=w'{RMMs~*EU7]gh2:{lVC"b09#lZաX| 6KCzm .qcl?sՃ>ZBdhjR(a"0юMfq474K׿zѵWIB*IQep?|]b 31zf3!|d)G5f3PM3p4H{p ZHꪥ|LnrN#4֩=cp6G^MRNDlQt}jLRe0^Q$Im^ʎm/mA VpVw򝟡2Sݣc$W;S\aо{GT kej0A8 Sgz0D'GnO'z!T6aA|Gy?:tsףGPiH53򊵊 X:f8nhո^qIZ7w;9|L96rW|[m~۳2;< l_53nZ({$Ϟg/L¾@Dm* @qWswR$\X-z)t ~zkꓝOaUl~MŪik>| |倏px^yT5vG*_QN|5QрZce~~¬>w]A |f8Z/7m?+̩XY 5ZuGaۆ_:x= ZAsiAJx5|xaXF0} %k)N.Y^`yH_ۙY|EԠyo,?z:dHJRWG9Z~W4V_ab0e^T%|%RF'i FH4m_(CvoZO1Y_Nmc^ۑ&G Wز endstream endobj 2860 0 obj << /Length 1950 /Filter /FlateDecode >> stream xڍn6}}HӢ$bG μ$BK7jWoԇYhźX"\"cQ$ܽ =.{'nʫZPa!)u5~0rq_.WI?lLo,WQ02Yv};C7ԓ2"!4\ƁXAM2Pv]oMBkS2>js7˕ :/ew06t^Ioٖ(` vW!x%c!1خEF1C ζv+ f9 5hm;*ݾ1m]n vVҸ3%iᚰar w(f)Dqţ\H޸r4K tnMr7#U2^- W^EQHܹflh[(fGk;֖?2*,CNUFϴѴ"uƇpٳ[",9l S$EVe1xVA#Pb ^Gf$89n 9·1J J?6y苮e׌0YӚb`cd54col1r*d5x[(Qx*(Bꄜ QzZ^3a./.)B1pENrݰ=z5x//@9 h\C DDȲ|ŷD:U W׵n2 ;N8L8YwPmYZ%kp/n ݽ[ 7͓`>U+%dM~[m9àCjs[v)E*xU(槤38zpIyqti$ MŚC 魙bycd! Iƀ#*T#Χ6vwTL 3~COe8~IJo6x_;S$Ñ1š#x'"աԠ+ 5Ӗ [r7ָ-^5ϡ'RNBIQk$ IzT! =@م WR=A aHQx({.0q~kH4+|PȳxۯЯ-vܓISHFhKi40Lgl3L ϋWscg(YQ׾3),T!ߠD*XtIgo/Bi~S9'}G=3j* CؑӜ:k?- A7wPzMNIW_KzPsk8@!RJE^1N0=?ص)xP. O3&6V*rH%u{ clJ~ʚ8Ѵ|[_D:ʚ;jϴh[ݺȃ{V{5*±3u+ 060*z Du#|}Zqgrtt:/<6,;u"Z3mn;yMxM {ct TؔO0]kLjt"TՑr ]"+s&CpP(,iH>Qgz\E^T~J{aSOWIK64GAc<1aK@m91iFG+mEZI > vIO3YM #׳\=Y֌3> stream xWKo7W+K>`[ /B" PJWK*;z*t;73땴' )Ӣ7<<ΫW!z7z5>E3p$I.?Ճ2~̳LЈ1&Z/ `E ՁhQdѩhz!mJCNB h&V7m@^h*2(0q0n֞oˆKnl9U>拲|0zo習ǣ+SYW&h^#/x:yÐO'_hҪZ>d^C>hT2QĴM" Ѧ5Tc#p㢄xN(;asr ub0XVB1l6zLD.c)#Uhx_gf:`t7|38m;%B4( idڵ #Hidu Pvz\}{ }pu8F8Lx$nw~C,DɬzVDG8KIJ¡QE}R;c@RPG_gV `A! rR%-1PƤ~QC9as=6d%I!#0_}lܕ p~/'~o^v/Aj|)tݙ2``]% w endstream endobj 2872 0 obj << /Length 1386 /Filter /FlateDecode >> stream xڝWKo8W݋ \Qd=$H^bA۴M J3ʯHRR:`u^ f4Pr@W\+; !pEr nBYpe&/&G,;r>We.X e3.rB\>V4cV AܓvΒw"qicaV%wztUkvA~0rLO,i^:͜.!5Z k7O}AĴA0m0m!mIo>fTb`(O:6"BKԯH:7l0\%-g<.23?n^2`K9r{J{^6E`)~O;]nf[F{;#wykNٻ! %OTN 0.Oa q4ZCJK֘02)=a, endstream endobj 2878 0 obj << /Length 1913 /Filter /FlateDecode >> stream xڭXKs8WjkwL|fkd';3NŞ 8>&%؇-h4ЍH.|E/D~;_+r+\H^ݽxE n{]Ż}orUFl5Mn #ߓ2Yv՛Qi/%'e*EB,,GGGdr ^7ѱr W)LZ48%?ʰTyƳ*-^ݯ7ye`T‡NJq4(uYusz)/6RнF*:2ok,G;tֲxUls[m}m‰B*CWe LE<2#tq+!/$ޥ3 )0;;|Pĥc#i42_ʂ#FeW"6mˆvŮ+ۆ{M'&_`/A(GAIdD*sMRg[kk0Fx0_9sZ1lpj>g,}(( =!㐞G<-mHEQB|iNj4Ǧ'/N>`S|0.zQ!*[":IOTa`E ag`F-vHWu۱PpS/J#48-` *{;00G툃Ln}HhGJr[g*=cϸjWUmY+2U<1hf'/~@k8PqJwmxE qE=nx$܆MA|MWRQMIS8CU cehG9Ȥш`9HP00]1WS; "UL_1w9?`P!EHuP=,@0ԋppTHg]Yu>)%Qޝ)GݶU"v"e>^4}ޛ3KϹ0Du"fձ19L箬5vv=jNy$)B/0iՉ\t3dPvu%65 0AvMQv(,KdP1ޞ^98}LC-^0_G7<{9Rwm@~N2+ΚR C)5ARmqυޘ:c: %B?+cxFn&"o5sE=F<$T&R4M }%1%_$APY 9 ҫ ozA[+Z{(IA=כ\DeQ*NBC nGRd*!>0@+~P>__f}퉂@ZbM/[}|XCP"OXO Bjصn6a NnmNiciRdQP|?(DB#LZJ9T]몪^R:N`iY۱=1˘?C58J  No> stream xڥW[o6~ϯ0Rwe4Y%Ȓ^>2ck Ay(Wr :;W?6( (=nvtrE#FIF36=tUOI^z:aAHQb<8ch3?‹@?IGqp*R+cxם(",5,k67|^ s!͡O4j?^G;g$P8`];~?χqxep"[sD K2h6|Ag#C($l{50[ZJ`CGzLWR(vʯzh@My' tPY3FȅLj߼/צ204Mg4aҕre y5oZAmU k`ǒ?=aZg3*QS907s۹,sW|,InZ7#)D{ f#Oq \b^L _wF P>9`Yaz$ hȹpm8}S-7H^YaFB!}]0dӜ\ܫˢ4~Lp`ye21b)N;g;Ô} HړaR*yB)zF,A򄙫9/cSÉwEW5kRojق-ɍO){=7iDd`ԍdu*;,Z ts'{#%jp,$!66! son>4rႎ?0BaO4@[V=lZJ-ӓgDMux7`c8 1ި>'D$ͼscmY+pu2fv>;7tŸvݔ@?K,Ti70'd e> stream xڵVn8}W~&uWnI )̓,Ӗ] N;P/]0`Q̙!Anj l2pӸ1;ɍF̘-wMƣW%8fg^‰/|k^&۾Qz^|uN=>3:< /   IhKbզ^`, zSϳB 󖨐]3.jw:]q&2_8}(KuS.Sm!vi3Q:m3.@CeU/^,;0y-2R5&m⅐!qF{{7DJ~7!3IbxWd 02C GԅZqyAl$zQJZsz<)Y2\wXѤhġ6.[^x^n~B*\R&`Iw֚t1YܯmG թ;iU$1TkUey:.;G{H@172,f*,AZ!(F"ϳQڄVNzF;yGӽ ;ˊ}(OIգLs]]sYWΪLp`M#g!1Bᚋ0V5ӳU)H ƫ%S5Tݍޘh^Ni&3Zs䛼XM\ Lar@t@%ΰ(p_DƊ\X U+2bI2S-1.k|<ߌURȐqcp cж|qfvϬ\8Ggy%\Coy>ǭƠ=B+>m:=nYVw WpK]r-@XѓWS>F h|MʪuZ$ ۦ *??w. =x3ȖAv}?g[)fM͇:ϟOamQfR1ҝ3$<S#5ʣ$mkt>M)np<߼@)r&n1Ay#R5`M endstream endobj 2890 0 obj << /Length 1227 /Filter /FlateDecode >> stream xW_o6ϧ2 XR")iܦV A`;Beː;(EJ86`0`<`A΂4Ih.`9cZv=_рg4g9wCQU|\]k0Jd?Ln~Gܙl&b$#_]B[懢S0;xs!]%1S4f}7ͱUL22_~|{C˕*,$e` j؜Z_eAf*oO?fWPEM->rlk<_N#n @&gVo[ϕK\Ͼka~ʆ !#+nm*o)3ngd ySS;S *X$N+hА IgDλ?vjym'OGZu3 7iW)ai>Ƈ.X>s$@CX#XB/Jg6W]c B,Y¬CydѴ^PQj_p: endstream endobj 2812 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1803 /Filter /FlateDecode >> stream xZKo7W%Wah(Amdyv<K"R]d;|d((dM>)̊7N9H}y5*2 oR1 DHĒUeXe H"D^:'|hcaЍ|JzR6x6Q< "$9UŪEv3l!'lnDRr$j ax ^PXrLJ /6AFE,*%4 ,وr  VTJQ@(l`9r !<" b {傑`TAH(y "栘( (Kv| Ĝ6DPCaGW(WNsUAxI%QB yek3&T(c9"8#``'(hU&*8 UF* `:ZK8I#E@*z()X1ɩ*b$gH6HC}l'$UF TFـ0G^bk3ɏHY•)#+@N&S$z~oTIghY,N?.ϚeT Og0nI<~sviź;FU/>ScӪƋzReJ )'˺mnֳTb>}|ToĬb8hn)Z0nO ;Dh`)Ô{``~\.H{)ݢޱaR=iz#μCgPFQ'T E `P,Kp9d^ח?oV?TՇu, }~ֳF_c^FOo/eێ2ڇ?Q@ d)Iz`#`C`e ݇-]L@P<!O5|tG07 l7XyrHc¤foô?tGd{Li80qOfd7 4Tngc"h07y =r(b몝/ڦvwEޝ($e"S⇇=&ܭ\׾H13iRm~\4 i{IHZ\b,IIZ*,i&jWrVwRn/t=UWݪj?̻zڮ>aow:,^\~HF1#M)r=7GD`>}-noчu~g飪;9'Ý; y)»-2E&crihVbnMT7!% ;HjJKz 6Q. J)(ሂ6־%n]_tg-U)$mæQ,UpE&yэmNZ>Y!nqBK\o[qI+2OpTz gRb!6^]6]Vuw/2l(N~(cQ9MJ CG?h)Z^ Oq'=SVyO%fY{,>(rr(;6Y϶k֥.|QW6_zJw.EF6HM!DjόDgF2D6A\ŸO(,Gvk߭+=k󦹺?O'7{L䌦dχ=ؓ_[WEw/|c2u6S:!W=с47 endstream endobj 2895 0 obj << /Length 1440 /Filter /FlateDecode >> stream xڥWmo6_al*c#[tHQ'be*KE/sDʱ60Cv;BB9s3W33v\Qz-dfJ̌T/U|%3W]Q*~RFh`BULgTWAk0p61Ѡ։yV_*3;Ev<Y]̀9]a%B)6mah *NmO7f6oݪQ($H`cX+ {P HGFf"$^Hmق6/DE@NkXh%0누 ?vc*lsZV[QR|5H(F|ٍ]:2"DA[4ٖ`w8 DMŵz)ϐӟVТ)ƁS =Rc R>P"knaXR<7)X{QUrm 7 ˌO3DqжO(2Єu'M\CSeuvz:-Y"$]rv-Ko\}cMme4$ -~m7n9jĆP- AԘ9nr"^k2&M48.ydkhp6 k`=S(3A <5/ͅԪlDI_sLVK2d*]8/ '!j'YXVUk~Eʬ\jw? =7c?5͙|{ TGNIi[8$xtϧڲn e #MYV]sw pXG~=[1_hE pՠ觚1-^J}1B$|Ӓքq֏`{TBQ:oy|oCL RqCM7UXgQ5՛uXͳ@|yo=wؕjBk6oˡx~rPm9T9r G$qMV\W5Xzz<ݽ^0ũh7ڤI> stream xWo8 _^lYЭib VGw-v(RE!$ &I,J'(rB#8|7?B Xd|2_슚taz?"\L/t\S2|P*8r/ޅyIF!]QkKdbkynmUtٖZ̝ZSP!r+U7+_skrUuoJ"4U6;? H'6fԕS YvEQ<8hQ ÁGHj.zҴ4y$Gw_v թVwX0WޢL/fa,wn۔uF%]htNʼn o 3]_ν# D%,cxL0XOR?nںRUa:gd A^$#[P5RFb@Y&H{.m6!x_aDK菣O_<7h f0>ش']d N]=Og { NSD6DA명K&se:]na %lj>2PJJGQjZH`BDebwH<Ĥ|g^W߫Ps<aV{Jg ʺZFaj=_3rNpN98GUQob\`kU9%z0nxV]w{iw> stream xڝWKo8W=@!걋=dv[IEȌ-leKR2g<-'$DkE$_ϭ".ߝ 7YOLz>,utfoYv=1.ݭ:wәc#TzFzOKDj.?tOʔ8yx.6mQecIzY4{lܶ5%֢KYٖ֛궓J.Z7ֶˆ"[e JI UteOo\Io z]?#Ͷ*,G suQX&, "4XUl$W"!ᝳX< d̷iyW<}=|̫)Um$0<%U~!g?\Ql^rd$ 㳾2)RC_Ej6$0)< gk[$D-icG쓻'%# )JC8$J &TT}M隱@'Y6D(MY4K ʷ ,T ]- ;҇4E9RrqQopsһ_Ͻ.;AXDJ\fv*@W )H#X_l;.Gzd"2I)u>v:O_g(W"Ou:,}bx1+#27 C!0$3f_zQ@\$~_8o'~G?^L_Ro?C^Mjj15+h(?MafC0gWu| lw*f,؅#bQW 0 Kuupd1wjQp&TfBD0:{b_e_S!h#֎x+ghYsbӖIgG~o<oklZ#Sy]5,/m?H ;$ D+P>/^SOu@C^;tI=1fMd8bFMt43f?MvbG,68 t"IG|:AG7{<`܂k-_ /ȸʳGRصRs2:8 lłqW̻bf"+ݣ qXoa=n|ir?hd^UnlG _8Ha<09\U BZZ|n>2!1g}54źv.#, 4$w),(4C_~][ ?k pLK 6zE;/Kb_%0R<̱Uv e2L\ |oz endstream endobj 2905 0 obj << /Length 1569 /Filter /FlateDecode >> stream xWo6~_a`#EIH%F#іY(NG%2Gxx,&~bI,%Kdϸ]5 7 7@0Rb94'WtLgRJ/y1A߽Fי( '`yquvx:4C/K K&Q0!ɇO>1$.sc0!i(3 5訬+w(k2x:E&絪k,io!Fȟ$s0PVgc\fLr ϒXɋTODiqPvwU,[ݱs#~g8?L!_x{ӑ54:G c2bnM&gRxM9AXYx۩(׺+1HS,D`i֧ބKH힁{VC&x+JE|X[:,gI1MlkVFm '[6f 55׏mx_:%k ^)~(`n[y:mfʍ=͕J'?'V/r][4lilj%ߺm!9rm-k™q" +t-.E^r{Qj$anlApɏS2 }|Mx2eξ8rb//NHzlʇc#H|j[_ `qT+rh i&HИ5v]ЬPZI9kѭzE4\:UYS7,m][x%j;^=e٭R%sp+mF3iG[b|@ `'\fk2}BUٕk[[YD}V`u6$&4mK u? #Os%դDڢV9MۛV^)w+G+ʲQ>8-{a \.$C]RSSs!*oEoF߄EִVkTriT#նsqoqTů"$ԦnܪJQuVY8M zv0kP5gL,NC@zn%, g|ztщ; *89{~CD34aǝ8'},<ӄˏӶ!8fM';$vc 6Z1# k'r5dFP41ݨ[|i#նFbhPb!~ X&[FOg?C#D@,?q(߹}&Rq>XșS^x}91s2=2ge6wFGsEs3LJNSokdD%m@ >\փcָ賽 JdSGvB#_U,Da@;qJ\1ʤl }Qh[0M>f7ϨL7klQ m@c:"12s$/ye(VzӢ>+0di= endstream endobj 2908 0 obj << /Length 1411 /Filter /FlateDecode >> stream xڕWo8 _ܽ8@,p]7[(\GM:v +͊eNk:ir0/GB2yB$,EI 4j j?YK6p;Yg6y .%"?\oG=9;qi:`X=2 ͨ)MΔR=Se2ىMc]';+^mZe[}٬{L`BC@S$cynV*k6ZTMCTrQx)-%#;~,kKwVt›⧣tL!ve}yJӫvsqj<4C}F}I90ނq[o4YvYj jwp w+/ҐE _@"=EVuY/<+It.@!^"$1E~0eD$0,Em?#ywErF I(_-!,xt ]jq<2E3ޱ]i/z纬ufjL3nZesSOD K+*kwt>ϋ&w6VR0?+"&O/(] 3xs *lDX,7Ӹ> dghMüO𖃗eD#[.Utf *ܗEdspQm`P- >"R٬V"a<;̾}GZ;ն:}ѳjNwvdO :PCtV  #IBc2} xa8I7[(rטYRG %X5_oz}~Lʗ vgVf{8n C}&AȢ4֝)eJυ*]- NKAޯZZxw&o;WMyet/cUӛĎ6 (HdHay 䲞r7ퟒyZOIB9!+c/M}h `*F&W9GfŮͫSS6LQ} ; ^vO`@ed=qb,cF"]hgZ}#-kya}&,on6.6E9{\gũ~ZG ]^] ?V5u/ucAOYu;Ӭ3=-~n~TQAfK߹`CZa`"xi>梢Z` jPDȡg,g@qEY5+l ܿ/[ٻMPk?xFWӘQ0儬?m! endstream endobj 2911 0 obj << /Length 1083 /Filter /FlateDecode >> stream xWo6~_!t&1'Du؃פ]4 RAi[,':Z,Ȇ>~t?H G4HʥWl^ۮ=n?Qk7Bx4$iR/[CeKnjc̗oŸ|DŭZVՅ fQЧQ|8̆"^X>'#2>RIKN(pЙ̧@4!1chReu/yr_i$Kh( >A$}`'/tyod/rcyW],4Q"izF ܿR g ߴ[e"2XHX@  yow@L<IeRX}W݆,Nirhń2BF*V**CW<&aW*}n3CjS;U97NQͿ?/NRWjW(η-~kD3YH0R%IKtA`_T˛MS?xsauYC+W.JR!1ݜ^M > 㣑7Spq8'cuL˘IF`56 KXyCEfRQ)x\h˝.O~ Ŀ #h/k~۲ZC`2]wHbK}lsJJ|0rJAm1$M]"˜Si_/(u@K)k M$@i76ʪi9ԯǔ/KbYc5&4&/ǣC-HػhDI ;AAI Uz|k]4I}fޕQ`KׅljK@_ؠ{J;+;8ieɡ8o<eĉ6=\zF~LG]h2)?dðnPIYow~#$ujzgŵ7pPQN=/4.t~f3Di>b1B61>DD|:MrT_6 endstream endobj 2915 0 obj << /Length 1613 /Filter /FlateDecode >> stream xڭWo6@ňz>IȚ%]CLDdI:N~dJ <$G(FI,LGijv9ɇ7'\`t8_MON_GHz"29.EM*o:Վ  9}GjZUjqytwi9^d <Փ2(NC!4Phu«DA@gi8^++jeh]/c OX:k̐(< w6F,JGW?RPbYh\ۻ[!#I& @aFܯ߮yð D琊NTղ[Ѿ(17- ޴3]@O$Ε@؁*tr8Sn9DVŋ<$5 e8AL 89AΪ|0 \])b4ygU"fJ_"̲R y2n6 C^?V;鷭2Ftuٽ4(Z=AD>NJrj1̾6s; (}%8xD,,KR !^j)dItZBl1rc*a@ϚEݠ+RHHCm)".ReqGM#|_G%Mk*m )Nl0JD7퍩(&"l;ݬf%yՉ78F5V~ƌ9 ""*Ӌ`כn= =od^;*ed3#oC7q58pk+~:.SUõf7mn ̩\=Odtq ?z8a PmhwҐTJ, G.r lI^AZf[Y_v_dix.U^j_MC> eh Ƃko\xJWUY_.;.5ٵ[]KȺl`- !-uxtqfm`sfl4mQܞ>gε6Mikəorw2 :+/P2,R'fQ~ %g:6/AQώ:"<[G9[Ҝ7KY*+6)>Xa}qa  7 -^QwlG 8O+2R]]vqA.⑐):*~&ĵޣZA=JzA@}{+ 4;ƶ#p.%6CۍO  Z3H~e :B\yK0ͣd,P %ߕD/ !'@ #nWF¢YW+4+]K"n` t7t> stream xXKoFW!nOzHBI=$90"B*Iο%ѱ])t;;of<ǃ,)Y`=j}gE@(]=zuccVu1|2L/"t+Zxommw+1:H=_Bw)O3cJβqHǟpT˷>wUSP;ֶ]EHE%A&4aNHd)5"lEa6cUsDB2\ǧe4=9XɁND tuݗ WUYU[T;6XAp44cJNۢ1B9ɑ4ZibݽaL䢢"Ua>_-D~P ZSH:m\n' Z&BD ㋀ᾮ" /<,-pk X*=yUHj5(|h{):_:9WLlfN$ Oػh/*J͡hYZdp~T`1qsNubU_F8 $cIU}L6UiYQIRcj i 3mX >R@AɎ*+)7@.$l+A,=ǽHRwx|4Ha} ltg*̶?Yu O.bZyL8p3>qKorڍʖC$j \X8#8C+ВS}tR(x\h(Eu{ES?$[{U_J_U}_(K2{СC38?(#L;Rha)Vn&} ~4Kb1EkQ7l 4S̕Cn0wn0a S&^d7N n.ѭ*(q^vpI}u1@Qa7q(>nRNuϨvw F]Mr/y"s2"ճ$.C'yxC^Oc4yIdxsppS=ijԍ@gC{:8EY݄_ٷQKuMߺ"vۏe7X=b{7`8/ <|*= !t>2.Fk&XL }s^m?y&UEz=AN/їy?nqcֹkj|7GpO8r Ё| endstream endobj 2923 0 obj << /Length 2199 /Filter /FlateDecode >> stream xY[~_aI.lF$E](m-@``2h[ؒ*;3ȟ9VIcs?ߡ,?:Y9ɢt>ބzPn 3,v;$u_e|9Wef}͛\%ceۿ|u*;\ {$iD( Ԕ0s|&WCkd24q 'UIc`Icxf~(!Wp\$Y6pBsC2?P=-1r՝ fo{GYy!楆7~j}Q!/v'yhru?FϾiV OcSŇ<7 UYQ֏#""<4w-DdmSR-wH@Nw?"YrNcuU' OIB-70O(Ʉ`3{̚ ׀zح;m,|T( 쒽||e*#G$#nc(",aru̞7+q$c .b8fdL Y ,1PT 2;M$WfTՇ5g_WF!\8JueҨ~ݺ.? p@.vf76Զ&h !1E ]aN|x } YUzZZ-\oJ7 MvBw7'Du RkLVߺ$BD)cP ݾ˦~ck0_*/<Z=#H|`NlbZf9)Em&_HLٝ #E`}.1r۵š<ܘq~oAow#loo/e^7;?FQCb"ry'Lsû17z NRّ4#f&t Ά`javr`pxpey␠/Suj&NL+t^"$"t:@C- IrO^B- C=}Gy;5Uyy?ctpŦ1I5_[]010o g(,cW <4hϾ셻Хq`aPȧ,HFq!|ӠM~p 4h?݇ LBg?YD V0p6A`FZ<͋,o6`!~kbstXZ\R~8K)}GxMF׿~F)&KR):#YkĨOT@FK57ؿ"_p8,*6u6sVLɝ\*2}mE؝ $ endstream endobj 2926 0 obj << /Length 2905 /Filter /FlateDecode >> stream xڵZMܸ WtbM͈HI[My{j/^-bu#=v~}pqRsh@ɑ䦈7RH,v݆oL3ɿ>Zod,\myx,/nJ(f:zxk罽&8*p˳nAu<:|h^17O\B,ʡ13Iq T݃: Z&:MUV?]c-^v7[-uf ʛ$ȟyM=ۇ4M%B;B'8JARF/<ןP{ޔMC x5=,DS/ۢfЗ'X^4"Mx>=&TPB񦂗lb=NQ"ͻg aNU*^~C8%1)i(ᇖ؟Yz_|,j)B K g8jjSSTP3q(U ijoD| d"W졼6%jqcUhme*F$ m &EZOkZdyT%;V(қ?T( U rWKSeƄ};ج lԶaňaqY֣dB(/heiej78}чF:%#_ʳmM*40ldL"VRTJMޅ4Ź^d:""O{\2:%׎'vm<3ߺXa0qh7 Falޘ}gbݮpd`NbZN +:\j| VIކ m<`3 I (5FFGa?EE+p*J"Fع})/(NhK^RĔz0BDhc6jVfJ;l L\\G&p5ь>%F/C:$ =&1%;A-KƀϟeYs}S}xw\vwײ8 P!vweҐR3~t,(hL*QP/%6†Ǫ}VKc&"Ϳ%9^a7)f##VbRgz*eaۤ: $4\{g&qx%a}ص׻c ^HF? 4BuR^-p$֮մ_O3X{)hYn7`?ͩFدGEs ƴ)/}YMIw1aFn I- k(N`ʹDH$Y J h,;7ڍ̣}@,ʈuA=0eu ENHޯ}3/IIw|v:[$W,$7f'qDx4 f!r` $9)UmW9\6"ς`)dT NJq,dt% |U$̜h)lH~Ϩ5n{H$PNy 3U òes C6"IGz9h,/€{Y?.JJ0<鷇U4@zeE =S+a77wrC&s O~O~]Hè! G1=P4K+إ;\c _XX+xI3:A/K}sGvǙE% Gh{{t_W, *Tz\l+2=$,{q=Siju'Q-wh @"'J+jp$_L-RT6;Q0u_~t'w^׶g ߺhBe=ûy~iKn4t=Y; {k`#̭NI(V OԌNu^h'+fbBUa@B W{qB`Tb9к?Z1-}pd_G(-#oOvoE{5u?)D/}я@ۃTTrbOպ &E?8HMy <€Ls ./9c*tE3@; 4`3 o ͖Gڗ@`<뇑PVuZ%ePl:iƖg4c%*J8}at&Ś7 j6]MMl;Q#\\T2+aoH7nHB/.,=dti,>$ qȕy(s?a~EX]~}!+KMŲCnNqZ$Y 2B/C[ -R=JC\@u׮CkP׮kL}ؠNrͺe~iqPL.gV> stream xYIsܸWHU0S+ewf 61bYy6eyrJ#W>ܿJPQvUDmWsuŤk|Ҵg3PD{ PԻehdt2X]5|&k+*X4P阕?w>]}0(Iju-;<8@Tˋ;T7_Gp+xBLK (؂Oդ }K𸱥ZzPTf҉QZ%CGEiIЫrĎcyW>>Y8 )Mc2P+Η_5oycMGr٩gQA+SUprb-SLqUYjm^c\~@MS7MzeD:>޸RQ^$,dUҸ޺v&|Wa5X=~^PJfđJhq!WFB·̭ƳgqlkbDW  {A"L* =JUgJ͹ JԲ6#)W^_gW$}m*/%E>0Oycl}ZG>wHE& h7?ĉTG揉6:Pq͜bi_QRǹJ1c,!WˡVI8l|a ),}&8QuIphPTS9^Oif4?fC㘥 Pe ?4YGA _T1XJ*#VVw9U wW' ;`5#!딕1#9!^48Ǩ<( yڎ5;z}fV/4$ *ۊ~v/<FV0wd T RBd* [E؛V"@PyqwW.,:& GȵvH4V,ߧLGI<\,xA5k2LwKXG+*TJWJ0E0] 7AgWσDJ3~Cl5g=%ƈP"T$]a%Fڑ6^q K5 ?`ؾx'ӯw1'q (bU(8:.aHONr~ݵ?nJ+{59h| ZٟyPWq0[sZ}qxg*@ڭ)lY*Q_$x1`Ccp1bl"Qh|^vwD4e}:s x.Iutc2(9f޾^ooyO ܵn+7UJ?ڷv4 ӊiC`~kh"^Y*T/%ZƒWiכ旵}/,$,=3Zk%N/`Vp2MS/RzȩAME_=U endstream endobj 2933 0 obj << /Length 2443 /Filter /FlateDecode >> stream xڽn>_a2j{6 &.Yf@fRGTT%׳ 0`IbIOMqU7Mb^>`= =̿ܽ<I\'{In>F}TI}Qney~УˢȓHro~7K!+ QMQeH35ȍ)#ӷ^M헝,#Mi >^:5&='^jL㥙ֿ#'ipe?Q ^ȉYऊhڡ' vñm5D]Fkv2=lR2_ϧ,S_GeZF'3~jpШѴT16{AE?SBe0ƒjt neǶiWu~P1 T3A࿾hpb=ْq6 @̓uA /+ -oȶv Q&z}yY7Q^٤xB@M/FtkL!a\0=foRю@5X8^q>zZ1ւ0Bagة6d{D5vnJ>(%VD76zNM6ܬȭ1m4  #[2, $Ok+QV?KYyԆĄ(fe\3UÈ 7H(8PEYf˸(1%+S㴃MG舸rt>s K>8qr;2-.X2ER8?cȣ/)fc& rAFj}M|Uuvwm7 B؞l4gWmբ@+b=Ot 0l%MsIpR/J{0|+EAGZ;@.7 POb@"BsV:6 =X:7X96yMD1&3ң,ՙ`4'Ow-AEd"Kh J)gh# ) Nj;yA"otA`ނ7 w$;˃9%|sdIb5"kfkOZW{pVhz8/4sI[0Lve(0謌A:&G4cUU8BxMI⬚O!T""Lm ;S*AA_0W^*z7BQsԼtmSJ)~!\%lߟ϶]s*M0uf?jR=};j䕹,h4@i>޳e0tE<-OXYԅ ^N|60;TǸYNҺL@ѣvq)VG|w}HyuKi/lcsw2u' {S$YŸK pcK-KwǔX\lH ȚJ!/ZUVZeq7gI%^XoD~וbzX<ڔEu׮nVb> _|XeWIj8Of60c%JX8 glcq]C+x^2a8]ԧ+Cg^-itO6-{ 7wC1AZQ@E?ۊF,腌STt vJag ?/\+`:4>bBV _ pdkq 9aP/ =m2jWӃCL'@f}S!#0!ȻE?/GiʐiK_bbVA8czņءo'>o`Nq҇}#^#S4~:Դs_TE%r=tP[i%+D|5 P򛴑5=论t?hL|ҕL$ɿ:r5Zwx-eH`k^Iݘ+`MaT&] 9; OYoLXcՙy 1o+b~"SU}O3Oz-?9NO> stream xڕW[o:~ϯGV ccڴթړUՑEή"0όg ,:EZƃ=o<Ox2*T*kW1|z!MW"*(doWv&SiGi&JD)*RbYkR/٣{:"OA.*rHб-%>afʍuv@SSIAVw\hK:L,xl;>u?ǐ7t"^Hv0q$Q7|m:WAgb3>k;t}N2)}t'* Mӛ>'B)8E;2m BZhi3Y~u(4CSab(хGM!d޶[FSj,A`\;ٚM9:,<ςmP^h[c}9Ln4IB#eE1C1C ;ƺ ~a<568zқ[,(P7' q^S( 儞rUa 9>SUI(H]cSAϷ/< ;sV2cCp/'`0X6OԥټM2?޸G%H~HeW[- 2|wCoxJfy Mņ4*$ցlX%c#(- 7n{:gZ<`^HOֵw!(UK7RLoܜTE.qT$rH?!$WH?cdmFc~sDVY bRikܓ(Uq uQ2%L>R[ /jCMD^S @Ti$n^\fQ7׶U{T !; f~ _Ww}`)gk:8܁Tl> ;ƶDR4rTE%u?qԏ GDp3(#vOp#2{q-qYAhpfO'5:hH05"ʣIfcx̊:/|ok#E(nv,a8ql~A|D*vOi2^P V4y+$Q*d#OMj$*(hDZmc.qyܦj٦4Zi8 aDL;ө;r{JPX~'zdu>}mܥw endstream endobj 2952 0 obj << /Length1 1626 /Length2 9213 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT.!@q[)n!@ \NRP).̝{VJη}BG&n38فIE N f04 P_b :-f'/IGLNfw8|@ !Q e 1(av`' :I#)FS@w-2(:[m2LuvVnnn즶N0GK&V v;(ڂaqSpv3uPlbgv<%Q(ۃ4VӀlw Φ bg @evgwgVoCS55{2rS*s9B읝؝ -r4ei;sI- w}RG0iެ/`3݄=F/'?2K3r;Ȋwx {?Ox{OM! O'SW0o# NN9 0[B0$[.>qdD/s?CSNKUYώIHl\6. aTL!/7v0>?Eƿ ߱`O!z. F-H C6@=2x"(žM. j7ΦOk ng {';\ +5bV9A~?*6N tOyz8 7R3`\<SGGS+~B<OΧM4AaԜ7>x E"~?H7pj n?7xBS> $Op"[ 8 O9WΝBk Gǧ? ? v0'a @믁MWnlCֵS<]npP/:^'uͭJ3P{6T|Wm3U]o5B=+^؆׽ b|<'~+.Y%_xbޕEjFNee$Fqf@c?rǝ8~eދ[⊺nT˩T`Sb+Ixʳ bT&_XtL`WϷZ>*$l+жeZa%=eg]E|9M_q = z9Ks˶VkSZz =Rs™7d BH΂YR&u\hK &W w .x\^Xo HA&_ O?7*֪?H(ȇjhw% 9 i ᮮ& /By`'rE:nOɝ=bX(20:J '[FYSJ-6]FJb!g \2{^X@0-G:teXjɆ. Xc7Y+,X|E .fǚy1uavdԎz.q+~Ac, ^xXwmc:],{kzv* %\nwh(dBdS4(/gvP㐳v0rrѓ'4ӢWk;'E83%cH}NX,t+6'*fsmӫo#ۉ0[p*&%^d_W> Σ٩ju A_d#p O|Y\Fm_=Np_./q;mmn,&/7XKQ1F#.ed&9uT+Jf'sǜf>NC#:D+4*9?v:%on?"K\톆fs ݜkbpKiՉrKvQd S8t/eנƏo9wxH`4W7c4H١//T("9ؐ )p vRS~![b6ٲ.Zy]R ܇ }he8ӶҞ+#Dt P7n7FΜ1grrQ2݅6}DȰXs4BlYًn*ՙM˰E q hHRx7&l#oF~tq<:KIF]pd)+PT7F*1"! ΃+LޘA éF(_ämgQD豆)ЮhÅY,&{y3-xN1,Ԅc<^)Btʾekб%DY,+=\Cli~X&"omw/AcP=} ۱c ONӔtK^Ma|Y%$ VMOq'Mh6=A/l臄=3ߓ0Z|= 5Wz-vrGOE@f˳Lb,Ƽ<{tZIߩey=_;ñz1|\][ WyRsH_D\B;HׯFc 8z}gqS3+4†xbz|.ZV݁ʀ֕A_F9Ֆ$kxEXϖqxn hcYErbՉf6_=ߟOMsmZ2vth\P K|' l(!tl5 9(?ՒZuE? ?x++E7dW-fD%)Qg[M+h'1`6t\+VCgwjǍ= 9HGJI=Q  o=mX8HɉlMDžRH*P#-6^ߎƭz<2؆q}Im:<!FT ˏb 甋$;ޟ,ȇvuaf<<9Qd2B^c | ]" ewg6M~i:G,'G'z!2{ގkYfvTD't9#>p:mrE;zrwDߋGꅆfӽaعVe%DJd fR?d)3%{:E5 ` ^1vA+w4߆*krس!ݹ28 rsb 4Ii! Sx rkM/UƑNs G'lꙁFr+[זQHDb9[g( MְH?~\$S E6r AcO /Qw~H*-4'\;=dlGỚInq6N@jQ2{m1rGN#6*MnOfz@fhYH,s:f5V6sƚ OS0SʎW~wGDG.ti]]+$ QǙ K¦kIglO=G0~aQ~&ڝc(F6#>_N2g;( Bi7|mMZ)w#wdˣ`l^RGP7$d;!ZTa'B/\m㐘˷GDt{ dS),"X$y/퐃cP}^ GǾVN,BE<&n-ư+,^ {ku`(GU03HPĜ⫶,&σvRb6.C^+nVE9]G_tMZ'81R˼i[tLV7K?s,rloR#db)?>nό\H'&Qh b]j:!XoqEk=Kn>6goƕcŽCш@!]!Pd wCpr+Jrz-Dq2Q^wYtʰ o yl`S|O$Řw)9(_7/IЏj;[Yߓ rʡlFg&z 6F&u]TSf8 }l2`RgzUO|pEr߆ƗE,7+l {!҄]۴ۛe}ACI"ƨ q2p׷yA('pQ҉l4[Q@Z DGNkQGҳ+'dHk5+\4HiUJNRrIR\$E*Dh L"4o·&>wyuR12ەXt\{J]KޡQK~8ZyDD:6EI1D`' #5xTMZ86rP85Xیo4K}u,h4S;xa sӼ~B\("ٚ߇$pm (֦2TRs0LsH<2Ps'IcN6]V -td{i~IƷ~E1s$)'VFVurVXl!8_ꌩB/꼏?՚b_T IA\ I=hMaF0Vq?J^ěk ߼@Tor:r%^Y/lҦAJC+UUv<@J%]i0/})*0ĜnDFOՄ|+*^%Ht~#c:B1ݯE4 V~$YZj$Q S K#nUв;P1]mz9WrdžTuĖpVPV;sIPyPfĵO$@j&P>x\;-7oi#&BŒM7>|Y!q .&NFrn~OyT5=ݫ"N r"ݑ .is."By_-N8 WVŕ#}am\sd-c$f5Yܡ Jo6He;Oȕֈ&`ПuqߔIӼc L!ea\5;!KWS)Kљ}~x.>JK1ϡŏ 2UDC?ȨZgr;< I#Rce.}!oC5bzCrnˑn{-eh c?pWE`ۿ<{ᕘR{,Anz-"4[x75g8,j~j2"ޑbe՟LblOv܂Wwc < 2XR>4tWNV>/t.<#n j$ڥk2ٙ[ǗXԕ7{0Ŭe) Tlcbw"GyՀ9S[ʨc.۽nP者ڸ:q)SbغpQ̲/r>-{znNAG)ږwBVrk1tyé4qQV5hJ+ݪkPc׍"uks MA ٓ$=e9D_^ٴJ׬YqKd gB;8k~G7JU7X~Ikt=\L8cm8Q=<~ZSs^0ӆTnPl,Tc2:[V˜Gյ!j\d )|wꠞƭ7ߐeǃ}_ 0К}!/IZ0CK*#=H~&%/ r K׷mN%ZFuh~TWLmP7*1w3y5<t2X^0{Dj=Ҹa_EN8`|AK :sZ<7>ͿDl3I&::ǭ'6 uA9 f}RQ?qt{5~f@B0b0)CKkhEM^3B).iآ;Sr9ᠱu*1JX *Y߫>nWza9 v'WxgonN, o_|M#ej&\bz^pFHC|5(^8|OOɿVSJۯD Ԅ,E%?ϲ΁_`aJ  L(:sl&٣q?ױUDU0{]G}2@&(dHaYIJWISmjʇᵆt |=6s>Miyc8Rp`L(`2 a4׺]-ڥX-0wDGu{5xnWɪىZUWL?vJ{f.d~EA4]" lըU=Q4Ԏ_<<}T_!䵲MN%#Jg9I[寓zf#lP=WWZ;M}&,`~mMʖOA_{}zsn%>wxIOm +T/l,!Z)OLL$Li>UÛuA@╞J7sH q#P\KIƞ2Uӱ{$~'NJmJW "{ dEXQ.5n!(@[ xr3˯I1^%"opXp=iШ^dD)lK? N[idVDASݱ&dZbWw&>>Ss"%?zEէdq l}tBN(q8Zv"4\d;- ᱖3nF5J}/aݚ@q)/lFQp^k;CWy;K(`׹"$9uuUH91ouleσ?_ֱzlzwCF> z{A\IBzw^wfc{3 ߐOzcg/4A=F|LFl0Kܨ\TDϖ>QkX) ׿Iq+R8P; B/:阻ԄV&OJ{qý2kM׆miUA'4/2۷خ갓l}O7OgeFԼLS p!h꣙Jeh-;,sqmеՐ.ۆ>K|'{~4~lvưL|L~ު{'Q#7u}y%x6@,Jd7fih]&Du 35B犔Ow<3v ϙ2v\g='|.e" T} ].٨Թ>.mBJBbDW3 zX6JCM:<Q`2ɐ;m2eܨyy(N62V^ڗH[ a!Z:O ߀C6s@l糞M퇜LH .2&iz-@YX)dN2Bme1}̉Q"bbd[vOREK`Bk&#AFK+/MfqOxkGVۼ+ }ן0<7*yY3YH U|Q"ysuk8"-vy: Ͼ,p|򬟥P/=75"0ngHI\̈5ԜϮBK&#5@N bK6q*r)2N/E2g\cPaA5{P:N&hl6HsCha`VW%fmk%-:?2ra/,o \uĴ%X" 9 /^fm)tj=ImgDyDBROk'SC}lo{r:/Ӵm-yvN:wI !>3L?Nކ`}D%oX lm4JnY2e]T(dD5 nfG5p!R C\EuFm¸MSJ }3E X=e6 uR^:6H.Hs}r((kmY-!y5~y&g9ٶ9:+p-!Z E Bqx=YDo?H%|`|qYiZv e3$"Pl&Մ%8HL U:bүyV[Qϧv%(+ZwjE,͸բ"rs_Ƞ"-pW_pxlU:|q:иЅD2io>zcMVzPklZ( T[+˔bSQwu5=+ǓRy>ǒQ3*[ըyQ?GI5t[-6Ip+;@F/06/( f郐&[ 5rSNyl{mCyn&wT<]+ ZHv5kjD`-[Ӕuݘ ҌGh]"V}9wo E=#IDrpt} =-=)0˪ley -[n7`ja|۷<'G߳ .pza/BsГ2,{R0/ux4&Ϣ1+V> stream xڌPK ܝww'u,k rLޢ xzݫGAL'dbgucg k01Y)(T,P-l!::'L,&vn&nFF3##@QC ,=@O!bg03wz_?(L\\*AƆYC'sƆe;c LAkdJohHo2㧢Z8@ e )*L\ A@1PmN;03wW5 l m-l@ -DCkGzCC kCI7 ) ۟1ɑ/ Mb&"v66@['GZõsZؚeٞA()!?cf@'###;3=_A=x{Lm-L= ]'3%x&&hfa ga~ 76{1fbgk'_G̠!.Co ۹ޝ8Y/!=SğmAl'W[r?ݐ?1O|7L@Kϵ7v?~z߄𿾴@~uΘ'Ȳ.Fnob_=s HUJC\#~xP.\6G_@kK DGG ev={X*$Skâ fO&љN Ҭ^5F*T[^QkMWEjJ'2Ʊ  Ա  MMxǨb*ZYJx[>y-M#]^6k&j]uRoUt}c5Y^KS]%z& BOБ?7aihqXYj9OOa۱lb ozkOfpXc-Z<20`UD_q/yܮ~5A_5PAbʥϯNz #)v5 G#{ gOŧJ|\ }Ӈ 'I"S?fz!&#&a* TXzr=ȯU~6)0msWA ((p=V򕽍 6ၫȅ\G_r=&D> DŽm7oS $7H:LGo]ͨ:+ mIҟW[&5  G9n[dڞWE|ꇭon*MR &f$QȊS4aX<]QKUMH`$<4;HsR B0\,@3kZD T5K4_|lIJZ9")O B Fݾ_X,ļQ mN<ɉ!rX=1=~"}h/1ԗ>h1/^~h;vHo.\at&Tͻ#:TN+4| ((M!V?J'ՙ0`D4e<4)."zM4o~/(UBoUМ*{.z8$lM 1;XƷ%.R9D\vo91/fwHuru%eTqCY>u.QVoI1)t=3;8ma38M] /"!/%[ujQg)>#IgR^D$x. T=Ne dWʺH9 /|tDx^^xP} !$d]=H&O?eKK؟)Ӿ=_ا7a\ [|H.#ۀebTb&ZXY-4loK;Xs [ramkj,-|C!zN +ݾpW-ҞT|`&v_kZAt@A87h[2{hRn(db-#l;7S* iSyfUJ՘j['7;Q=RvݗyM'ZgL?[KR6 ^V3)H~ٹQ\.Qhg:k0bU۔nj6%``yMc;T ?ضM"n"=cbgރ$UC)7Vp/y7Me!lI6 E8ZWecn)D(ʽ.Wz9Xdw^;mۑMop];KHp3|VDDAIёU b\7rAky/%o_I-55!_dA+ĪN2eIHNMqiIUb iX{8. I`< &:D0oIto(-߂&b︾a:^娢a+nSr⪑`}"rCc2;(>pHJK 9h1uDUw|}^CMEp.g;ًIDy*ؖO$!~^p6kX@= d)DAX ӳ;wGi۠ |%mR_ϐgÔEMu\8r<-]# '/WIv ,}*;L&wbJOR[еW]2xmR6QX`6ŎSJ{gq):D &]\e]{ѸL@6{yHY|`4ʬ 鱢ȅwX'I5$kKlM{B]_lxx:)͙SEp{)K|w'H#j"H523#)#CõpӥwW.3T퐀Rn.Pu" zwiEЏm,1UKeޮ<+QI'j(p\K˃OW4ZRqy-4;{6[b6%JDժP ՜}ir8%oҨ$e8r~RX營ozs|sևI}C 3$v#icKۼ1̐[ZI !5a^~H4 pά&GABt:q;(zgpNo9OQR,goˌLgh+}a%O3m!XIi1Ĥo7EpLǞ Đ7XIxVxCsqPY10K6Y},v4ND܍E\)ź8(Lh}L Xc)QsF̎uwT<\y2y_O֙=7)b{1I~RUƠY\Hf=k&뺯5}{}k|}3wCMG2L[EKeXmv[Yf`s6P#18AHAJ!'pMK~[F?pjRjAEur5MWxfp`#'Ǭw^=n/O1ǀ#{HT>,r_^M;HW n%_F?>h4b|k8 >e[[+bXؕlj,>kA~ߕTsI2;ϊ"PYҫ0>gq-Tʭ}k@gy\9Wʧ+m=vLZ [{*ޯ(}%i2{j*aY Bdj'̆\uEV/qI,ja 6 qhh F4AW.%T$q#p@#Ba;iJVAY6)6sJ\1w;B9;Y\{`ͥ%M5ߢw]W.DGE|3J0uon97=T=ܧʧF `2r\>|4S ! oݐco 2|9 iލq]gwC9 Ec$mʶWא0U^YcŮMӆ0ؙFWƑ?ɶS7<͹?IQ|޴ߎM۳(.J8f.^UkT --QXG6p1{ȲHFEe%EJZE'I!^߰ *w5r8$ySgI"H`r:qхg]M~2}g5EҠ+-R@g[PM_Uרӹv]CSGFc j1K%<3BudP5q.S#RR[ 8 5Vd\p.(bou Q=R*ohʄ&eA=5!#}sV::]̥$u.{~]O/ `~ 9T?gهJ=0ߙI kؙx3V\Hοx$sLqQKLC$aÐWI]7ٴ[<7H<[%JzYi_x6Ձ{[{IY/վnJ-ǀ嘉~NejWn8)ךG~ݟ9->q7Gir銭;sM2]00|&µ\YGU+ 4̜{ }$ej^N7 !MrsR"CCwեϔfw_>+*b ݽvE#os-h prǁ߾Kw`Ҕ.@){SgcqmͷL,~(f?-v_(h0FM}0^&BADa&8sL&rr$~0Zk]Ϯ8YvLt{W=>u8 -ΞĪ3!1_FEd蹆4<ogvauD:$'"V ke^29 .niFV4qNiV*w}mL'EՋ~Xo?dRZ Ж}Ӆ7/S%MU:xH9E%5b}ˣTqI͐wNlߜgq5ol[ۧYP|l^kgg5G:N\7aTLj8ȱǽS$bi&VI*7N^9F5EœeyWhXg;>YVOR|?I\*Ð߱Xů5qЉH y-4WcGmRUv&K'"Xܢt^/Ga}Ej) Z_6X| #Fzi+u4ugWAzUX~mc׵shZ8-%r7nW]T\F9٣x_qjlj@ )Ju2T*\hs ċ__?6'L~vU2&H\T_vv)ǃⵋsKLNN@9=Jw)qL;Ӂ̝eIx~9ז=.Gn94e^e5 VPVҶcbGy=W0,>$_A*l (bnG9`ة);BHWE;]T G$}LEmSlr*Y)U zr?KEQo`>WK|B],LRI)-/{镊r-KnHUĚ^O &xY)t ݖw:ʱ=.212mzTvIܯNJY8\N:GD u gt6:4[[wkLonj.RJ:!:#HB1NϷ_ir5k8BGͬ@lAh".TrLNRdƲދˇK#%<`s)'OH6T1)6:G [ET;:EgCWnT}$]Y'Mq(iRQd#+[fHesD$.cE}XGN<&hCQng$P⮊cX)'̗>&}TNG F_\R u }#GVISØ%%qr$/Myh[tV?trC ~E er8[Oӷ^% R ׂb%£@|prVoqC#JΧme-_\j?Gck.me!<]g1[BB 5(445oJzxڇ4,"dUIjLڧaP__ f 1"`yqg ΅k`kJmh3UW$HgIj,no=1pUpEY{6er>t8XBo=0ǡ 8 S%@GGG,Yon p{.¦]2>(.75 Qv-A?&⺾ޣT4ȊTS;5.o?_uz"jKZs!sn[QX4lttw:ײOab>(w:+E;~O8n Ke4l$K[|6@f9 ?_R""dJo,*=yM H@OO!eI(365T)="Nf7sT4 6,@%]6b3Ի 'Ԛw2рJ9JQ/ b* y5ҿ5kf>>baOӢ$#uPj  + B1wH|gEE Cy%!WrUdJf{{S68C/^AmxA0DOh)O 6;N<U{,C"wK,ę9/]WΫ쭌2 \MY/#ש[16bE}_!l Oti646H[z\U)" T5a)T42LkYƋghO{F{ld1*6wPUrez{vfa -{>՜^ ZVZ K#36vI|)d% Ay YnZ_ \|3 ?2O.6n^@)(yxj­R<2J):@LoI^?p})/ْS _${5@bHްRA[?YDArLRkBGPVgiN<-WS$EYvTfՖ `$/qflS`;Qe_CcW*ļlVމb!b{>9eCU݋~)1se(. ST9+;t+CRcO4QyݤaGn-BL!ҍ \ܻUrs2*rB4KڨCb|VE\R'6phs+`3c<vTzj$M]] HK#0jqI}k$)W$'1|9|Z#鏭nRʄj!"|x&2Js$v/tM@~Mm=Tp8g_JzMD%T ^nKQC^1zN  ]w ~5dSϐik4mʹ1.W;*o6: ^ogR>mۏ${jb5qܯ h)euFIbc41C Synв>)b3ޫʆ}- l:Cp#W>% [rޱ{Ez370Ł_: ubG ><}l֋[KsNOP0Y(!ͤ; YQq|eumeEOKfb7QolN.=@yWğ_I2}I1Ǎ:9s+f綷v+4@s Akr$[L&j,m*{`|-l({3[qQMIrI. T(8&i˺ҏ+6ӵ b6`y3Y0J4aϊ,s4c =?>Y.mR5NbF,:RܮW $^Ft.Tx=?~H"~?6eGfÀ&+0xQRps۴q" J8K87J+];qnHQ6G>Ѭ[ Kyut񋓐5K5C]㳔ܠli,$ӌH 3`SEGYb,:Ivhr`4kgm rΗ"ΞGok$Vf]7ۦ2a,cLo!'ҟ>KAA+/ ˮCZ<bN?U`ޏDEHHӈ+lpS%P}G{7[Z7"H"Q̄a0gb+(ʫ[R'Ū r9t5W'/C>A ݏ]s{EL4\G|)^Cbi}ZQ31>WSASOݡ^Qeljtڇ!VV .0J]FW@|& Bcy{Ĺwr/9p, p{TM ]6)ZRٺ Uy1w۔ikIezKJ ~ n䦽 !e[6!u0Ekk[Z>"8ShHl˸7YdB9rI e}kC?&L,6G肛a ayCmr!\^$']{u)VyDZ8N25Lr%okO)xPHQZ2-y /1_x8`yho'R"t,b7T8@C><4A[~n,q~fαu:{:J)-+SU0H6|cM~={QMͧEswi"sGVTrJRKŸҰEiIV~nJ6u4j$]_I8gZF%A!suPaH!.MܞǦr1n[ke4BmG<1m~]+dVvXם凎"*Yum:Op#3>XҋtQKFsk,1?ߓV=JT_I% e}Hd\ƞYs,v1tu͵A}8 V__s7yvLIopiDd̷b]*1A#>te[$aM> H~p(};VlJQ̄,x4\!fGϫkx*AfrnFsr6#S~F7M R!VCA˚RXy" In%kkd]}m02mIH| _I`&Wee=Y~s duҘUA.I7siM6M6m+4DKec"RI_!.)]OƩ> D1&κɭ-Ptcy6L۫u3!̇a"R sLv2H^`Fp9 |KʟNrsYFʝ-f*@7K^P͆nRU퇌 m}.wtKs٢ ǘ$#]X&_!)f$;Gcidy+JF /(i/ fЏDOE;@0wgM(,Q=~f6x]uȯ+w躙O)SA)G֤_%k{܍Sd"~%T.q-vmƍB=HWWSTɴ>if]4OIXx@uJE@pAU >\%p94=6 8&K (w}J٥?~x]"Pa(68լz1_cxitO{B@RB40 t4du -z<ƋN䱤Mۍf#?毼i~%{l*Ya4^!/ޙ3ϝXt ku\(6q PQ}U0ǺZ-[I‰D:μ: ߋ<@-~栴 ڡ-Y%ҕo'(EEfm9gn{mt</yC)|?;(NO}T*:`jIpj|(Ԍ3WVW90!/6~s_/4 }.h$eEB KznK3ߕR]h5eQ++Q24i/|O֛p~$lUT++\DDb5zYҪ+ha1O0qȯ,',AJ~!6!^R!,"}iwe2Q[0Ls(xkʑ̳yc|\sT4V6Y j9FeOh젰GId>nas6uθ #cS|.zu !e$فR@ē'y5&g]S(lIj\oft\Z Zn`%Tӗ3['ZP< Bp~+߯=z~+hå_1\?;pYIy-\)s"VGΪ%gdm]L"$>DC+J]]%E\X ͨ ^xGz*d5^Py.(KDW2iqCtKyyWn,?YgC${QT9M\lZAYލAp'Ь` :{<$|VXAnI25]#ʣ# ">]}Rs mM|rjF~m$'Vc\ i%2)D*bxm$]_c_-t D E,]|o1%C]m҅zC=frja[X3,~P9fƫb%4$ONfxzͼh",,2(Y#LV&֌o; C,y;%VRTomKsU'/-nw GŮ0a7QUŤJ5H$uiZrbU9ʎjGF+у_nj1yvN{H}߽qOikp(k㤅hI/v#RLڂ=%2oe!웎_2|七$5tz@{jUa`|mm\T,ɌE <3oܣ{*bH鰕&g uGc~Tr\U=~۔yk{+`eQ n},A^ L~sHhQ0~̠*D?iaD( 1vcY0tάa1e1CVV\wS8qm%F MOvOnb_'ΕoE\jW6'0H!ůnI9M"~ϋ嚿cKypY;Fy'w &J#9{3=G|nc#B.Ez qز+5 +|Sm\غPX q"˜YR^uJ˧g\tnSaa#؛4Y e1; V,cVU[(d]ʦEykuZ?3QlKcU-qsaN5r}s, ނ3~lq4[XSN'IEU*$c )W:P @s~ o1l9h*|Iʳ ߛ]/bz]d"=˧uN?W~ڐa@%q^1FA_ags1ku9^{/^lfqX7x"uQ(06#vz+Y*3B_$ˇ_EI Fb~ЬF𒬟6.=]w{E$<%env&UXD\%wK$-}5U)/~XB~ʠlP kV:.ܧR 0HHʮʃ@\cM%? pzM0 rXri !58#$IDfN0zˣ[bw&u.XU8c\95`Ϣ+l?D#qr4CgWQDn8]E؄M<߄Ӿ*Zĭ}笮sK@Yt"\3Z8_\C' \b!ɿ y=4u߫~ m {lrEf|]n"ωuQP@>spʕ` endstream endobj 2956 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 2958 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP\Y 4www 4ݝ!\[ 33$սEz^{P^V(fcHHQdd000100*;Z1Óm8l"8kG'K#3@{.1@O*lcfonjjG%t chu42(SіŅʁޔbhP:흁ƀ_d OFO P63wۮdcb` F@kP1jP;-OB%XX[L-91i:GWG@KP!(/1Ahs07uts05"2U6Z;:'bn4-;`bnmlkc'[zks;'?! o) Ff+r22&򰵱zA= G{'ǟ"xFF#hjn : 46#ϿO: yX[kEE%_+@`%2vЃC\IklA?A o-Yj"f`e0b,R)W7_BbN) - tdl@>2@cs't4AkSAh,ohdZ:e@y_ 5:ZF@WHߖF6ƿ+  `Ec_"Y8R&6v@/7b Fz߈@/q/bgЋFz߈ @/1%#E7q@\d~#E_"(F .oF .oh8A\4#Pi`ڿfP%+[uAlRçߥ@hHC{O@+__ѿT${XYMߤ@wy@/#0%H~ձsͯ W#K?V7Y~Aߘ-v2ο32gndGwP,nfnf@?"@?0VZO@ОAt[19~]j -7PܠalAlAU3Hlmǯ{_228 -Ӛ97ذ_ UVPgtcXAE@-b-GhfP ? h f.w79P%w߭0r_oras 4_^1 luݛ%SKXowzDMJ߰!8vmGV`㸹6%^^^+d`]7xv~ ;?f9q ݻ/)WI!\T Gm)u(fu9ȥ F@1$>Ur&jFQS}*|r)!%/X: \Y)ŮmemCL-4}X}QGWI>}wqf|ptzòB 92pq/u1l;3{ @~ ytׅLm G&J#C'\+Oy}RzvFő/\CCuu0>5{1X6Vb5< k^{ $n&/{)'#_TͿ`K8VNzp_x6'ް;nigcq&Jӻlɭ>zB7aPv%A&K|,كm+aAae72!CyFCnM 0e7 Axf;<U p)^&9YJ6Iy˟GMZ]XsA8lE2&R*cة4N62L}XNq!slT_Z {ʦ_9;'70(F'ﶴ/L+Kv&n~Z(﷑dj 7OX(Pcr%8#69eT<$+PsxJ׭c@r0u7KW9=ŤcSڻ{4Eq::j`D[J2+rcZY|C*ĒfUr!+=w/;DK1&d&X+ @Nav6B6o(""9n'Ш6\_afHʰM/'~#7òT^) _URIH~T8S0o.Òc eIZ &.,,Cq&]w2&Ů lڻv$]W6߲;L89 0Knĩ;F(22Sߴ _['?A,}(#W ZRV:PZSZ5Ǧ9[/:WDh(ho,mϠ;lu*ӚPW }9x}],z}Y 1lw¸ OmwT[0dcƑؐ7pvVG׫?YƈOU;Z-C=hht_3ơ*RNx,2j\9MG~Iopi6棔ؽrϔU(K KÙoMI[, cހ2m;Ղ@\4kdn8؊|ލJ+۵y#SEi$KK$Le'2V ({V;Uc[^ha<:*^Zsxő/ e#ݵ25p4)MkF+C!lT5F1ɳ Uldmʻ "bwo"[n?8HЭ4+K9>ɆEHUgru}{AX,{^νU`R<U[8@aNN?Z Z)CW!'Ox4~Qfp)BX|{Ҙvif;yEHpr |.ل!Ftj߂ȘX\PK,Ij] qfR|/w+P&t8A[!Wt\2PWX/OF? ?XTNE= Z1uD˾ iHTVXq"x?!"{rbV*kE3ym#ikRzV1%{YSلub ܪAWKru{Tzk=Dȏ9pI٣S_+d?xH5l^~J3\q/]j}.ֲØBfo%zgZs*n&G0Aדs}LkMC SciUsidV!ݧ(AQصN/{Q#U jcly8,ZTkJOOzBuc25<ߡf1G7>CtxKeIonNz:vei"1tVM5xgb DsGWOK _vT6%Zv*Rvxh(U&GmuXc!kY](D DT`'e̷ܙ<1vKN~Œ}qdx>?݈)wFa%.'T$T4FDoܷi X>ހa ܷ;kIt=|+S UU9+W,ɒyVT_c(Mwsw$$Ȓx^Π`h~bx;5nnm;\3\/ 'e^¶M7ҎG wKU8L<{=hhlkE[$$8x"{}R;q9Ogde\،ߏ5'P Chu@|Vƛ/S}ƒ,me(aW5<,V=-!?T귐KZf?l?x$ˆVN"-}hY1rߜK*C.oR(wALn pV+t= 3(MBS4Zy i}GksT(ҍWVy+3/V&q́ww%bL&?5)>;Zѡ+􈴎-[=`c"j.U[5~wbOoXf,Hye3rl~%:T- I)ɇ~ps%ݙfqܬe0.ǭPv&̝}{^O̠jؿ= r+:rV ^1mi {IN"W8,N8w}R%$._!\#pܠ$)^,޲JJv5xywĺlLĸjDR?krMM3v^5X,p p~}1i~RٷaR]08gbYC նL7E*oܧMF8ՋeO?}k*-xj2¯ΤR,e<7mn4Ц6=E .nr :U:&BC$XYa'NI8ih˅'EIoovMQ}\UbGZ;>XE@6,xl?u6I6g͹V GY]*Vt+D$1LcUq rM]^fQ4EJ_Ҳe,(yweB^s_"=[ZQÇ0L!R佸Éfۤ~O*g7"=j_ˌHVZ9SboidɊKµkd%$oN1d_`Ի1Sm-44E-)CP*AOYx= j6O T!h D*B{~\0h]r<}ybՏKs T Wk @QYx&MxkXU'0|!'$l6:9ʊӮX r~ЭFhL(JA e)Z(צqAsz BAz m@8{QT~@3+Oz^ -פtުG[XRW> =jy2.łC5'EM@iO>bRT<onjfLiiJB TcWmVlUT&vQːPv *%)B>IO ʠqt0G6p*^lJ:׼z;~a ʀ6e[YE;9g59R:ね ƒCA]J)5FnRǵVz}%&n$&1 !bYxoQRT(6]c~%7pF f=1]1d3- a27_̳<_^Ga,ĕ[Uۥ Bzg[?$}&8Ͻ8k2 #`єOoYC:B3ʁa 'w ֗e2w~cV?6޺uHZtfdZ~-@kӽ4Xs$ɖx(90;һD a(xTB48B|"DLU1{o)TWiݮ.3vQt+DutfT^;e0݃%1*xRs誨`g!R`=$SJ֘'ތA"j<{gdr jڕ!ϣMޢk UHf?ןԈ 3"ia'B)p2)S8CżNJ5Q'4b<^m͂Hw?HL}*Wִ X%}tO+Kan%ݮ|^ڜ@Oʔ>YJABx("Ψ!L}S; >Wp#=%A~x&ӫ S^Qѓ@ " 'G]-_ܰ%kDr)cNĜ0Ylu"B ZqW4/)N0B#B}vL\.q yg{.9+%dْ(Oĉ+O #)͉͞m0ШKE[ux PIVg;.YhĆ:l9ELX-j.ocayDqL)%-#1eLIp8'~Jdh*TP(pw'o_*dzf4sF-΁2]Tko>a#$;,$ FPS3xd#=UJ9 w nN~uN|E͋5RBrRH cZ,1th]9Qw9)o'3_8L XӀ$tI[w!JN̉_1$u m| 1XYdm< U})w_ ~YX+%0hpϬ05@yTNU. aX Yʘl:!,J!ۜ ZKsv`ɡsEF%mNcW+A4R u0Қ[sm(Vb09!/hsT펈M~YӀǮ'.)l>[L:}:R%]7@vV>)Rf'=DM<]d~gH6Eяѱ{ Nt`)10A3טޓQt(ch~~!V<ݢ+jԾUy2iK?׏CzD]CR;/pp kl]OL Tb5W-/liOJ`N#YwLŲ'Ĵq}S9zIJwŚV/0^~Rlˋ4N'HŇLR-AQ!{ evRXwsP^:#Ӡߧ^#fg`SM(THrSO4.XSǽ UeG +yۂ.hj)x]]ӪV9 A&:>B;N7'&Kc;kMG<"%Cyq %(Լ!Yut/*#`som(s k n<>O.`dɆpBBsB c%eޒ3f|SD7mBs+#ΠNm~J㇥IAZA] <{Xy8Oa N`')`%h_$k=,~Jwr˿3U2L UJŦob«E{&芒Md7ˇ5l-JW 8ˣۈ.?yJ3"슪)o'(hj$nzE)#x~^O3o?Cq_z*G3 ݯ`ںnmh>QX~8ܬ48/ZbտtP&]\6dܼEK1K␮xSlc筛5 qLL ؋ !W7f?,(LߤN{~Yv#1O_ɧɻ/+fHG/uיRzr.2vۊ``SAĈ9) ;{dhjl GIhX2߉L3dB[ٶ ]`#dMad2{T5dZ#c8xIf1[p WA>5&F%*kP $ycy 9#)ŕѣ252B=)AS\/_͛ϫsb eKdzfA`=da@O+|-&3U&Cu?Zy$-cДWư%苏,Ѣ{R0./ƬIy4真hZ|hܜ B&.fS̔䕃H ^֑ؖh7n(h24A@4<+xJS fL^Dʿc!=[MOM`B'ER|#(@ޓ1J/|oG)ڇl,uJ\3O3 wWHu?zwӌhmE|p@v6 fs{?Mx>X28mm%g o<ʪ6;Q6'8DrúM_>4͑gHr]SO#?_9 Syy}Yc]!|?Ӥ"ӓ1w[QvclgTBZiE4 ŤܵĬa:D+8Ө\Ubf*0[+ #yEIn\ B4(t#p? _7kpX/> 4KKnY.ҙ]ln97˻>ā+PW,Ѫ˹rP҇rjcZ: :|jz <8тN)~]c3Ph-`WʰY蔚x7!;q`G˄.QST,3.:׍wO]|]"+ݞc˦4~TSkzt]BGKuI0W4a uaM{Q,5%'ؘ;xYʋ_pcr~t tuw3sf*u9d;~vX@9M0VL5xO7,ҕ-ێfZ>2'G /;QSY4bnb^dj0́@u;܅)a9@m} Ӻ'=Oj+m%<L[oEuMZ[q8P #U=āZu.e)U[pU$7­:f1NfOYj-,a, 0! :O/e#4l߁&B@[|9P֣B%%"@@YM K ȱ"8Z:EL# 6= 'm*+f~«B,YJ"B3Y,*t|;"9.d ^ᖆR8p+| fYpod->I! T>cE99!6]?lm<R93a[ﵒKk"!]J"vaA픬60 ʪT86'X ,<?)$bPgR߿:c!:f]J,s޻Ms"}8JAd<+֢my]Mҵ+$\Emר*tgF|TZY!n48F66Yh|E a: ^㈟I`!~)6ӌf69MlųFe\ GXЪw#KF4>Aq7?Z~TH)?cV u2r wDu7["BC>kM:2kt:߷Q+hZzK?l)EL14O`h_&8n@FN7ǤO7-=~yGqasƜ|~dnے1C%01g2%R7nR&ȅӘOf9K'Bhm+Q=),ֽij/tQ%L ~!\ UzP&/_n2,%~BJ.OS. (DIZ`ye銔]W?:EV~M1ũDDjE򐗉p7}8Q.M%¾lyԢ.oCmU;,ojs^/$ kϽ5ueV4=®-]{b<Œ.?Yv[Uiư~I>s.+TNH[b}ٖTu$`=k<) wٕDsXaf1LX(Z첫̅ *@yDM¡q 2QV/FCiL t6DŽi[I\'whW)#!fojN(MM՟L[QQ +:jЭ8 o6 cuS-"A/,3J∁,| %c`u}znUkR/(yQ<T8`nwG1. |hHAnuNx7 ~^ {iT8Q+@;>N0"BHMa$+Z/ЕxUJR6 _4qB J,\CWR]'c T HIN-gr2~5al_>saM)\ju) B%ҹε '5N!6{ޓ,#L%؝p4wS39 hm'9) pK'~  VnȒRr:1G?rpM5)Bqhgƣ;pLAcP@|yޠҵ3jx&3]shsxY%&i|[pqR[Z D0ȁ[kBD-R!5dĴRӓW}c@3N+|vоX;Vu+ Q?|\p!-0Mϳ|?E]zx ĭlXNNOt㫜f?wxc]&LuY R;=$D&8Aw}Q.sUx@•$%B\OA~YiyF+@r[aghU. FVVp|^{g rNji*)ZVibi?%8\,m“2N8adoqٜ3>ǂZqa"Ck;$xpv[Q5=+t砈"Ȉ}~Df()U0` :\Ashb}?.{!h;w/gKq^PʐS"C=L*%ԴIH5sOt%(|$EM׊yA•]+$T n~T EsbɘcpBQ>k@j,c+û0xk.n3s"AQ3~5؟%O! X\a>1eGW\yh,Ef1CaAyb}4,4~,.u2'7Ua;Ÿ(Zt/JcP%H\[-9Aw x(9p]ASP'!"Wh/=7K kYv801PL6C}ujia9cם$xyb)+Ri04@6_EW6\#-SJNR)D[h߹G rpԾ'[!\ͮ25U \;z_ tfqӲ ',Kl '0`ⴍ"2 ? ػ=3^]i2[呹*a11R6 mJɸ^.<_C~do_kuL 2^M.QF~@U>5`;_ۯ$΂V<3Kaz` k#BMvq1f=G~arH_IS$+1s1 ψz kNPWq#pv3 ? cskmͦ1 =3- wSDR|;E07m-Gw4$ns p- "0ӹrVЩ TG%ʰX`S׈mDzl6G}Db܆Ê ۮ,_[.#V_hQ=.4'dm\tHuj;nlCzR㡠P8 ,`+@>_tw `xp6D|c 8T'L:6DJM5]X+:{!Kqjg,pUӎk*ٞ?m,y7cMJh+^wdݡHs>DMb H=Hcij|՗5.ѤLyߨp0Bvj;ּFa*K$̸O*R"{W su =7sࡍ1?/0V@ѯ@0lefx)xv fQZ. 5mt~ ;ri*9(m3@G0yO: 4%HkP^ۃ0T2i#ѳs/67|g3u31ԍy' g!Byvp]PkD8Hps5ĴH>oDR]u~pg*}trZ`f޼ ew_7jȭD^ha[ʽ|P g02Ψj0Y: e`야N%js:daQ%^R|T0>Jh}˅2ӘN〝@n@slrx^;=^S63|I)C/ oYvpi-f|כ=g];nI(rhmS'-Dni*EJ1_mi(Y u#Ƀq0e 7aѦYEu{hu5|;^p>i9W4l ..DȃLd)XπE\c.SL"`P2C#^^j=z7Jɒ٢X`;D+-Rl޸CV:sCZ~C3`rg߁.tpM2#K Xvm/ALWMaJϲY=Y #H=I# F :9ىB>&/%4 pG؇1 1+gTF'6Z>W6K{ZxȺ8g|n״1T8{OBն`_`>L">Vf53dOMib0"jJϹ񘮃\{`e'\$}{"md_XstJ?LAi(q*n]W tpc 2aiג=O.N鉵s$<*^l*$mZx@jC7KQ&4ٴxᵣ(UfDn8Kk{;dsFe,ل՜[-ABJHW0N&1vtrTc8EL\[Tگڦ uc\,~Kx1EvYG4<冁!$/yvEIeHtcjT_̤5(C:Ȁ-(8[Z@9^NlQY\ gp+u]UTvEN5(st6Xݩ!Ilj}X|#-S,70 I:^T{058pkI=Xу?Ku إMfG;헟&x:"{q rW2|y>.cs("B޵kXӞF/ ATFXsr \km|DX4>M @VI~y&Onښzզi_jSENamdWhM9("[HMFe$$D/#?}vFx9 ʰds '8TD5oq@ QӅm{L!0^Mf;JR|Ȱc"ISIgɢ 84oiѻKd$N:o jxn[TU+]u,kB<$z)o񄽹2"Vp,xd)]պCGs牞gz~uH᧵*<Ì4DGt314Z pYD#T J& <8p!^uWezdh=E'}xϜz ɀ=OӰ+EGa4>j ȇ 39'\j%QڵMkAN6p g58J Uݞj$$b_7=5NX Ɋ}V%N%*3I_-t4'j1R0>>FG4ĆiP`=j +䛺0,)Qy12 xI?C@O^9g2b2do[^iVn &K>7dn -WFFB|\lnݹbJ!< &O~ϴA.'O.=߽'5d+"ݬyGwzPCY5'>JkѶt1)!PbTh/'%.Km`c׷BL3g>)͗eole'tܸ V3j"PwPm^&24l <3lK }|VIkx NL P7F%Z*;%8;@aBn9w p+f,$lP`<3T $|i-"8* GyBeE;f #ev.tI >}♅8'U?LckC '^r;p_T~Iy!d0pRw.%%W皌Wu6_'‚lDdC_=&%U9^3\V@˗uo1z{RY^AGw:2wݒ Ҟ9Yh+y?\JF쵢>JIezǓ×HԱR 0m; jq{uxL@e(i`LR)J.ёYmDN\3L"*|=;:(U=VpJ켚vf)9_ ٸoij& J<iR8w#2wf\p( 6A3;[9CP[ ҉wџU'a\B02/3XdV hBTA7Pj2,p:'?;ؖ6%0KbXe_AF1DwŸ:RKjU734I<L0r%Şi` fB[9Hr[,Z8H<;|G7h&=qGW$%1oM876o"(Tq %ՃJ~b338#njS[8OJLᱽx_\6)u+2(\z?a)i`*H3*3hoAς4.MTTD-a^)6]gj%:7>h4mA}3-9q"Z(cK>%h.Is&zcЈ8Jr\<Թ`waNð{. ^ly jsrGR4cb]!AQ9g9T H?GTTWw"^mX3a[;**+$=bZ$CP#cabFdS&T^`}CaZݠlpB%̈́/TSj| $ydXU0]8*5-XQ粜 -u O<233v'BrFIWc Y()Kuxj;;.zy9<┠& 9M3ߡBRĐLJ: 1=qĚ?ij,FOh::j$+?^ozQ\,4=^[[@X[ a݃C1yyZk6+$lO.\GD%FH5% P_`f cG7 =]]^J$E<ș((j"㳌KNEBczUx3+@9r@G|;+-h^QG;uM&Jܬ,Y_UsƆ7qԗƶ endstream endobj 2962 0 obj << /Length1 1982 /Length2 13380 /Length3 0 /Length 14593 /Filter /FlateDecode >> stream xڍPY.$qw[4]{䐙[uNuU,ϲR*2%mNL,|1V6 ; "%R@h*7rzSdV.>Vn> :č\@&-H)fk2pz=4&V^^n"6@`dy=jk:W '';>ffWWW&#G&[ W@tp~' P4"%@\xXL`Wg)z8@UFdm,XX߁@࿜LLlm 9 d (I3991 m_\@FƯ17H|&Oz& ;'G&GyTvrDO4y-;ߝۺ=f $L {g?&"?2sL,Wsd-~`d|At4rޞV7BdeL@sOW1o|@uX,?y{/S[,-,Jwщں<9l^7' (aUlf k?g7hKuh?3b< (߄$Rl@ά+ؾnjY)ke^@ln2%An@Se\Y@e[G[tebzs8N_*`[0rp0rGdy$6NN'*a37wG8"E#n`xA,f?,eט A<~YzS8jY?5zi̦L%c ^)1xdroÿ^M_ |f/Jd}%5+kekl_W2v1W&F@࿎{5w|c8VO%^w_:ᕰW8ȿ%%:݀&K&AAmw"3K(IU7"I=h߷%hI65A,gIѺhNئ'V]E; }* >|Cy,|&N.giUvABE^wRo R:_+4Fee2IիܴO&xdbRLT" YnYڔBzp}Ԙ\2pFq[e|pקjZۃT:AWMĕT@0l+2:*x_twm[6;N$6{<,T+H=W 4WۯT,m-%qɌ_jy0d^DF (6I@IB+Wր8Q;"T>ft„ǝ:K+ ]$f=7Y[*#˵,[DŮOtou}.XH%S/|1\?@.L䚶HA`[Zỏ#&pQJ߲nSbsֲPE!Hf_s%d@T0ZDW="m)sK7ʖBTgXL*́$&] Oa]6[˘wHP(<;8_J~clCLNU3ǹݢÖ[&'87V5J\`4fDZ_n{ўWej \>+U!!w]f'[?{P9#EeYbn~W{A h#]p@EUIR X̸w^s6P'7:8WVG49kR ~!rb7'{oC2-za 9Q}ڹk+Ul>5U 4D<+B)[9,O鹁yV8p&g&f{kL},"J(rEGjilx_s/R~x pJ-;EkD!ֺrIf煴.[$*B؍FQce}I4ЊN ^v/*"N7Dű,)#,N$QdX! zũ(zs&ȡ=a3?tR5&U6{SQ:BJ5mRn-s-cDž؊Ηܩ%H]nINQN[%fPéuC cY'Nb3TRC*K}O8*˕o[,mC"sH:$D xHk9)L`JF}WJPߙ"x32|ļZ֥)"`E:@,THP:\֜i,rAe1lg05R E2wQ,̺[o"~௟fdIUb%'~|Rq>VIK "+*޵+{?腘ʋ:qMIҡvFxa vSRoͪvV֪ {@yS!1"8#Ox5ՄsZ=gڑ[WSᕡ6Z!]eF^Ճ ?j_/9ZIv* +juD #M^aD Khӆ8#} K81|G-N I!%3H&n6,#:#3 9>=O^ukiUǬ^SG j( o!x/:iM}юt&‹>6Vf.%b<#A!oi @傸>ȗqum1ާU~Zֱ "?v+HaaqhFfYQT,_C;Tkzx>~B~ҵ㸔w w_8X =LWB"֟jF!f;w>]F{rN<@HV:C態?0EySq{WL2V7ywڬM ~+|NfwpDS KM,ZX_yql{ /Y.0LZaG*wYBntdžlHV.c.mZ40],R;,w,5 2:4L3P}Q],vA [EzIX2 Nx ȉ !_MG42T7M[g?$m|5hEQkO?#Tƶmnߜ Z5k|_ݕr5V3 V~R31n8pan,r"VHU΃uODN $xTe;UN,vj\SrfITPKBN[egh^^7 ʌX thR<!"a*>ӊM$.ջ@|)A3d;sKDjPcQeS"R<]E$Y:fZ(AQ^o-"6z@#-I.S&ԼmEqB} </3ӑL4r3C9ZK`b&E~|$=*)SXo[t&elwȡXy:ۏy~װ@guM;zfalLRq + 'Lƾs艩VapF8c 5aum1mT2E X5淕 Z7xT8kg`EwM(V/ByַH_L)p]ϐ˪k]FY:" RRWRֿciw\֭sÉk9v*{HzMl%<;voKunBr6!u.+<>jb^Ye043GKu|^G-9άC=!8PO/z"w$:0Vk8Wۏ2KtK SsAu4ݟ WitfcaG3^yD U}aWϘńBA ڪ'1Pv0teBC/]ĵ3 G;C;e3fL䇁K_4 ecƅ8yx7zW C"vcȄ6|!_k~ky{X+42 ?T{Kgة>=W .hR AL(j{ۙ xg4P9g] :Ψ]DΏG`:TofcCṲL2s`v >=[1;c/8Qfs[d=f%ي`R!WE:'te0j擶[$->gL oeIo{N,GV.Ƣ]ّeuB\Vwy( ؙcĬhEx{x+pmŤ(= W5GonXNխ>>EƾG}܊U[C]P/_7M,rO"Xν0 8?V^z54߰xa;^f7O~43}>kM}/碒!\ n3<&ǧkqHoҷd`Ѓd73˘t!r &+ip넵wx##ݠ br=Z5Sa<ǀKhO Fk ؋J?Ȋ aXj3Fr#R;ӛD@TY[دӑ ;w(U 0@FZ^@1t$-kov3H]0y/YbSBs-ESxL9Hh1éV)bʇͅgL`FYmTt\M\mW$X{LV8I?gs l!C.ZM`~pXb,!~r,%FqCbD,ik'Oti2,FaR%s9)JYd;UY˩Osf2UUw&,~ldW+C> .m WQY>2m ZX3?6 &gy}C-Em-{?Տ5t ,x , b ->$Ϊ YE, Ju.W=F@>(5_D1@e6nntnU]ŶnR8ND o{o -Dit8K|5x89ӵ$S2d <&h0m*H;nJW_%7o7@%Y5ޔ (oyRsԸH=%KHWp7֐G56Yp෡@qq8f9ɦ8v#T'75Th3q~P?qXA.6EiR;_Z(DKc{Bf,b( Քap6lZ?+jm h[FxM'Nj -!C(1iUOjUmg.E3ЊW|8J`gDFi26ZȹE44,g Ld6dx̠ϖ4)\,#2G׳2ދn k_`Vp~ǣzwX+b*J%{Ke q$!K4:WqקlPovmyt!eZ77ٯ {mo@;; 3EԜ"jqryc1F[&)(ZCnd"rP$aI ZbD#J:ŞټI،1Fqً1WH%uK3-LfJ)8\KK&W/w7čL{bcutt!YK+oѓ{?x8p ϒECc=n\_f%C|Q,>>H9:Vn=GMۉ OlqmeP u:!sd}CѪaMѭ7mDvqOy` ]xe)6)GM_~¹H)eNK𸐔N߈gѮQ"uR3Wp9Nkc?B@ӐGC_'vFz*m9`>R*#>cN3o+E?cp>_Vy`5]6%S pLq. +ٳPsOv6N%1_R._ [| 9f4t28Z/?Nj8ΰNu+. -HGqKKyJMhiY+IOq'\/|k)UR⹰V̮;A̞^| u&Hd&dWyoͥxAc晦{ϫJHp*$DNj' spo2TW94Ѧ׹A4=oct4ڦ[eSWȾwswGKX6Y08aIgA޺V 8&jkwژK}RoM+4|,ٗ|DGMyvHQ&A6Q{Vshpsf%BA=^ONϑ}ڑu(In []J YRl.TruFܦ VE%9ˤ 76/fO%$5!`qJ'ߞ6<`rL'R>6ny0D*Ο:-n*Xߎ0=)q(ipx=7ރjEɉ7߉gv(|3U)]~+q]aZfEh?~Kv_"M[@~J6ʬoEQ:t,0t69*#kX喯} @]v% 17Tgv$잫w;l7 똀 \?g:ÂzQ(}zQa_bA7ˬ/lשk"z&mR%uu`4@'!WsG˳w3 mR)ZU~֭ YJh9T;+\pcgIZG!G$.20r7+KӝG }.8-ʧ|6B3^ @̳O,M4Xe^;kQ2sjZUv .E=عNCGX}-wKcz!'ztZ`? HGpYJ9xI3w,Tm 11GBp }a%2~s_ɗP{Eg47z"u|ZkEXfRg kpN{z _aVwƆ6dz|.]%J j=l:aDcƪW~6h{ oI!伌Q >-ǞD=HqG2bCFg9p]طƎoAhޝ8nܭ%nEe)^[bd8W1ʮւ4z!LJ  w]Kd|c_RApYT۹SAמզmB䆕Xlu :~Dmn },'oX!%Z`ԁm/hp> stream xڌP\Ҁ  N 8 [0;]+${*mu^{ #VT2A6tL9Y&F## =##3?r2u9Ȇ {#X&j6L,&vn&nFF3## AQgsc=@dt@ ٺٛ9Gow5 ghhd`P'%-7 =ޔbhP:흁ƀJX- jfBdb`VF@1>"% Pc,-_l`d5q31[ 􎮎 @`gs+Cߩą с nhW~@#p}6 _e;2٘9D~L6FFF.Nt52cU7[J3Ǐ ?'dcG̠%'&%JoU \t:f6F3 (R6& ? A(6#qߔuoFNVV)1X[k\'Gȁ`M5j dc h:.zV@cEsG#_fenT9ucFK<cl@3; `/1Y0ۀ.p^=_ϕ b0&o0&.  X R &p. o"(8(&p.J o&p.j oh&p.Z%.p.~7 C +_kM @kc?LFw ,?|ج~ٚm@p-@p7,@pV  wd6 x=ЃkN 56jp0[ h[{bpֶ GoߏlarO8 6?#߅:Z6pkwp_ f?;n>I7pn s59ك+|oNAF< }pgfE !뼯'{͒(9vv\`hƍTpsA։yO>)yˍ 6\/ycrsXz$0XNN$Ȁ6 *vWq)}#l%[)menҏd'3d?p)nZ|) FUHy2~L^I^eh֢NEҢ"rQ̷h*`t닑 ;9 d? p.mqQʓeW%_J\yyR(<r`!boPq( V@O*D=7y=7B ,oL$FU?kt:6LQSŵD0$_]z5L;zͫ 7CnX(v5hk]t*7F::[)V5= w(,iۗMUVmb9S*5fnEf7fUs}>ǣ"U%XnY0DܐzK am'f"z˿[s@ {unxuei_U9ͣ|Z {}ٸƣҭkF5<]0?qU8]["nJS@* @QVlE!y'-F{0 уA6b7D\cȄՆx6bI/AiJナj aߐgK}d~AuW_l}x~! ,ЉJHq3p(/إJoNVF3kAłT] q<`-x2[zh.AH>& Ҩ ρG] lqDۂgv[|@Nmk Z\(Gݧך\ȼ;˸$=:>?"^I R`aUk }i{%_x;Ҡl6S0 //""?]Scu/OO?QLyWǹsMZ>Ni?Nh垖"O"KCi{vtㆺPGܛa_ԑ_@}:]WN=cuYJ7O_:s8իh92Iذ 4ȠJ$b!9| aYv"Z-y.5pae%- AJuhuwNGh)6MW;oiVp-Tɤ!О݌D 걦 >\ ZxL"l5gBc.u b-g]+EDd<AU WhmIDm]vB$]K *q"͖hank#=\dItCkWͰWyX5 l"Kv z40X[772QMJCT։?;ԌSFWq[,d'h}>lzD^deo.w_5ԟw+0Nf.4R6zrMm$%[GDJj pMcT6kR러Ot4&}58ɅTd63DքO\/uzryNcZH Z<8K~V[ hyUkkzQL*sbu? bo jz() +sAcdA- Rc]n,cNv+n+O& ܕӧvFO:J>?(.y;_-UvGn*\Ɩ*9$w[vUOWx~riPLt^« bXܻH8 ] vB@s Ѫ{bzS*.;wAei`zX|0FF`rKqy-EA++k-iW85,|AG;sϻ'{xcK~{ݝg(ƓƌU qȷ?Uۭ y5WGIxBl 1[y@,&'} oڐ'⍨4?u3a7pqDM/LWB, 7N4(Su3Eqӯ"M~uQn _cQاL6ʿ:JWY"Ԥ^`^8\.k4d'"$5_ӓ,lr& cI;u+ ~,.|1iΦgaaTr}u*DáE~AS <gv2АT1J$$sbbľ9#=) |Вv?߂""Xg!t`ZrJ3~{ĦP4Tzv:Wl୹ CsuD%Tܛ;)ڏZH4ĻX(@l`́P} oOLTt_/ɉh NL12.L;pH-Nc$ Eb_O#"0[FEbvfKX{b 'p/Lјpdlʽq0<5w%vPmlYMb@zjL2dIWQ\ٌq1כ~6/dv{TAb!S7h|cHDl="Sƪռ2G W 2&Hc1S~`=Bx+Xp=l]ѝ\D/DYԤEi8yp5Mk~^>ur9syҹ 7Ư;9m8ݱ6`:muX+I1Zd,0Ha?K3Prh!0%Q`|c@az#QeaXmGd)<Ƅeɱ>): )6o$hl[gCϪX:rgW&qdPq@3]Dn\lo!47`fΖ:n vwwWq9 $!gԳti[5'8oq*X(4858*YxkDB9<s1N'SdDĶc`7UQrHvlWا/q>,σIcL:D*bɆ7U/_oPX)DG `?\"K&s|b.$5~(^hA,XeV~}OR%>hF~M;N*л1 'a2s!1't+ע:^c]Ev9K`]ڊm|eI#*ny-辚V5 b)nHyHLdUf,Ķ}ޙUc+Sˉh SjU:),18 )8ZAٺ?lY8w݈߿]0 (xA,+jls;`#LPZ{Aѕ+Dz9ꉞ0@tV:)OJ Ne]ҥqZ;h16cf aW'۾^K:MccM:Ey<ēBx(U~xWx&7r1Os?dtb*cql@5l)Q[9ծ<}È6B/o鸚^1;E|quI~1~ɛ̄ɋKޣ_~2D.{Y[_)Y:z4'a[iFtÈf@y-qCS^1xR2a3{W#\7c5B)ϒ> ! qkޭ5[RoEb Cuef +K=# . W&VyIɿd[<d "ذ0Y % TKUdo#gLūq@<䧱Cob2w+fB/U\ˌ@tV7ӟSָ<6Y:k>f[L{KR 蚗{cǓxIjU<2p]t^/91}.Nk#TY&`m'{JٕW:)BvlW>EduOBaKlc0(m V""yB:Z5{|;Nr :0_؟+-?1>+tClU$ډ%]DJ#Vc=9”YtQO'њBI[Y-ܛ~Mp ?0'c_Qi`ޥ~Lr!Η|oPhFS>-cȬLFh7#4./Vr#d4jt7W6i#]:c}vz!Vɲj9L|ĹF[(eBܲN^Ly&%tkAwuB'w>cAy:Z7<~RT<i7P 1\/2ܹa˂ڄp8qdX5- 0aBBeYI},^LLqݛғY9sbDޘo5`Y)5Ѵ=i*[SnX[Dޞ[ '#GpUСcH/ =)^m$Z}U4V+cx ͯqljYlQ~XɿJgȳS<^HmALLgjޭZJ' V;QYe6{#Թ I8>3fF/q/I~ݦPA>n! HJ։qx:,0U6)l6oR#L^{5ޢspe/jsH)Bcdgi3ǬljV"ŞSZ j߉b!f'ݏ7ט#rWmk掂dLmaq)C.Bs \%]<6ddGU^;rX6Z {-k`fՓ:sSOlZVpsvɦϴ6sA`L=(ӛq`eqĆ4Cظ+bT,Je%OeP%#[Z[d>8/$Sa"z 0 sdt#4Ԗ=Icp淒5c"v~YLB8bnlyTPMszwJ&bѡEk{-£f}!;=8->Wm+06T̐09!#n;'m K~m6וGKb5Z=]nWKk$m_\.̧}ho\9?gǷJ6>j0i*#exZ'%4&:%!%|^na*?#lbT\`눠 1.g:{|Ӥ[}c}uv/׋YVήGH Y_DR̢!=:jC+a&_1MR.k},^a-&kNFѪQng>0{Fe@ yFvϺ/֒vS^׸:W/,֛4/+2:Q>9:?ƸBkmL?Uig_qo̫z`hS&}ҍGJ|JM{A/HH[jHΏ &p. f, ao78|c* MJ[C2JIޫ61>% RkQ[b^, nrF㶻gQ@8.I q"E_Fki?\!N@`@0}Н\nSL_äkoB3|h4K :jӟO fnA=+I&hŷ54+"[AX.!+\T Ń g-lh_r[8ME+ >w󓋫Wii8**ACFԍIY?w\DKŷ3ε%Cc+Vd{qȶ197OR8ðNAn,DO6o $dQgyjdg^&/0v؉Ms–Nkب-vHB"V?: 9`D_p:g:F/띫t7pACڌBHϧ1(| t{vm @t陘NRJ MHRЕw6=vU.Ju˫%l8EJ_zx$ʴ쇣NHǪs3ƻy\b)ymB'g&?*=m` ҡ.ll^;@hx]9˧hPo󠦌Nbu]7Tm6SG0avPs+ ϱzLLVŘ3gf~R}p /| :$ Jij۸Dԅ an3hEd;W^!mYELkAz5DGX@ɪwk"{ۃyRJxDa2ys6`W&]'AtiD6Ier Oo3u4C۠_f@gQY,;%tVOL"'|i|夬=L|˿d=V"vh>eTw^ҾfЋ5U<գ$td!lQ|~KF$˨wmoݠI*O*5oˆ0p3ŨD De Rvi V799boՀ4q/pN6aemlWJ/B}ѵ!s^Ir]ĮC1̰u 'bd䕔:.Lx fe[C2;՝DفV"DTD|NY5/vaC ę cD 0\tY6<7lW e/,64HF]M޼ S )NescNC6=Pr',hlcff4.N4c3bI`Y iB7_WEz{oSx>ph56nVn%zJ[W]mt8 ިq i0y^m,NN[X-0a<޶ RbRa= Ni uvh{ݑg)ߡOh51=/ߎeKP|嶫j@Q s ؑfL?$t|+C_|n#Meu9adK_9>vb}Pʎ5yg $XE~a"U5b*LKC`ghJHST$D'V%Shi -Ms\)16V .sücbFl )5R?ʹ(udTl/8nOvhC7_ Á\'eZ-YB6Ee\LL:d_-r+(IPD7alI S Uh7Ǥ^o5A2kFlD~2iJhz yC[Qi.&WxXr^{)ro{J', (XD:W7Ǐ%M}*8%rxPB?{Z.X?FN& q M~oL(34. C&)i{aX^sE@WP3Fh DYjBV5x\3v|w҉FܗkOIm~_gsfԩQ%S :;'27r<ۙP^*}&<4y{ǐּM }v-*^UʬO۸{^UME|X!Ks荃< "{ՁHejqO<{5yo i˅<|53&>B3HݪL:K}Us0Fà协`M!"zt&tFDfcK^Sً4v'aϙ/NK[^R8a)ov2o c)e̔\%i;b7;-*Sp-RuwvdİZA^*H]oMzɪroz{2TotsC~'c H.Qx6> h(lE Koc9śj i@?$@# ]T"mat IQ?JҬYb'L0cf:x<|~bЪp:Z%{ IpTk-0GI BB>vCTϏnĢ%h^+7L_2*Tl^Eh%$\UYtRm"C0H3^Yzq5I+ZIإ'4 0,mY;^s bY~(i8{K\EcH`u4^Qsq_H7䝶{䕾>14D|"C +|ʾ% ʻlxH]AqDz˄T_Tzv hc2jFWGcSvb%WK҅\g<׈\_]Ym7[A \OiNk![)3D͈ৰ$?TY^A4M ,35ropudQ08;2V:/Ϥl'G[yPK4p0ސ*Csiɶ&NU>y2AĖJxג[٣m|= Ҁhh%# !9f~HG!9 (!?6Uq4n UW?rxBЬ8 0C8-p|8T8}}%Bj[.=bg\tO딏8 ΍SiآӨSS{jC|fW/y* ftbI6V L[ ;eP]6PF'b[kVH;;QX1q@5L܇Z] o1"݋5?BnԃŭT\inso2*_nD2$]P}aO;(CSf7V\E6ElJ^^LUSgt r*B"^t{c"qٿnaf&ͩ9()ߵ>w 8!vdW?+*~ZUf0^9H )S#W.X9tJ; %dpparᑵ3񷞌OI-]_֒T 9 ?ny]P_8YemN[ۏGcqzȥ ,T"-w8>KJ.s8BPTʆ-#Kes{vg7{bϦڏhҫ0n"WL ^NBBT&k< DU(^(wwT;[]ww!)~Æ˪ X!ISۡi,Ua&(5ۓD(9HrްumC|TU^UV!_1)%п\_cd@ra4w[>3E֦]p{Ahdbe"Aj>oos؍eZn:2!)?M½~NK%n}T\:\pѡ.(:H*U üsކ**ASr0t*ZegJuMkߞeTzF @_Ӫu12 "ER6Pu"#h4|ðdI&R!H`pZzq*0[c)1JQ,۰4my߬na7wm=9E,ϥVOx;^uH$¿󅘌ǖ Amor+(鸓sjz-oQTI}ȸMB)*9_Bzto{n$BfnEd3.2ݎT~v9H#75h&p?%fe&G¸ ?vBG=ő7eaG1G.N'm.v +%%7˥G&D0l1"<_J1~:e7ؼ^q?VB⼾rwk Kg.k۔_W6@{.Z|hoє' )_O8*A>ꗽwĭv!*H2ȏ$Ϫp;ER Wg7]ݭr%G9бxܨA?{0Z@Lm92;h+`vI5S1?sm"($f_%vԄ-aM ,LW%S\G^(̇rްQhM2bŏtB\p\/)m^ؿS(ϠLJqwԲ±3rev~ s '͐m՘G bc:>N{ !}Eaxw O5bGx'D$ 4(S.ҧ'VԽVk_ 2 :mn~/n"T}OvuMI)и8q^j3Cϴ^r| (.ih{ڇ-Nd=F;տ'!E?( 5Ew0UubΊ%L8k+xْΨ+PCu/_æIbf0QȂXx\ dPR.erj0xd/gO=ߛ;KF|4h*xZd ijHʹ%A Bm:5\p\LDHSZ,eO IEMw_\-ma 1 RWg8@D|}-uO_rÞ xUmHnWÇ:{ JS 9Xd-+P) BN~[Z'Uv;_E"~AX6-7.P._2H Ժ>, k|E~FQ=]% Ő69@L݄BC]9XRdāL]h_ J㗰p3z"2 vb :!RALSJ[ ]T̡S75 =W q`+$RӬfb"lakrćma"g.*[2aCdD/1Ε+o$X.(F'.Uiז|tj\FsK$3ڹFw]lWgQ:rjyg~:Uz~@=*_U{ׇI㎘|Ʋm^L~4b'}`gΎT8u $zOb@ "԰n!oZٳ)ݠr$cDqEdEUe0Kqѻք-H->Hor8h¡@E*3dupϙLHc:5% M܋)}F6}yrPrm ~S" u#iqf /4DK5hi?a'(X_>!m'[&-]b: vM z[NA'(p]/rGWg0+;FR68-ACaOm%(1}j̎, :%]oGz:K!Eh\VDX+ ݋)G ۋVI4}An ^?%??8/ v||vhbU?Ny#'3>d/=3~V~{!+򋆋!>at72 <2@쐠v1W6uފFyb`Nl^2NR Xm\P!VM~8q`_;j ;8t҈YQ·oGbȰFrM/*̠U 9NXeסf~Ʊ4ᲆφ= `/&%Ԋc/%-w!%|$| FT*04 P߀Rdki v3*=?9YTIGaȬbegU'fZ,k Ty[aRwu>K5eUڄZ}=bkQY;]'.qႸ`f MDurPObFK{p3lU*$Ǝy `MZJ d@<,\ʋk+:FzVNY2W [UhYUd}xx^<P}Ā&O63hUZ6m@%EvsFr 'o-4ηy6[n*__ 7ȥCb1- 0)#9È52^ E2lS5Xymh?pz=uu Kk@/BVV'sYdu=B FsA"}DŶ֩%lMjms s22'rl{-zQJ'{}.qOLX@>vf-c#w>_84IHnIO Bzq@'M#X]Er>54TTÌNp:^pƩEF #{tcBן8!%LHv^28|v5}8'39=>z2g-׉ܑF%%),WDd@~6,v: ^"4Yy;z[ #FOP𛆪!sw#ɰеVl^LNsKe6ޮJ/-*C U0|X.۬uCkH##%UTB8H@mXEQܠb5+ްi-Ɩ\n'+Oh{w?וpπQPrUclS۟m@jɣkC=Ͳ!׳cU2WKidž1 -Df]/ǤیTg^>y6c+I~?>(qK_CTM\Y77Y(sM.y:JKL,#߄c3u@PW1$-tgvF?(A?n6\c@y&<íп=iK&#i }l#=FzmT KVCԎh&.sWN1[zc`۾61S7_Ġ^ (%XE%c2s"Sbm. @y&&LǸ< oc5`5_*V΂"&Z]ouiG\IN~Cܾv2$o%V^ Cr[0'][6VܗYX 񜧱F8/_/L56s&H}e ?àR+im"^ȼlM(xa]F-LP9=Ks=<=*Sr%T] ӎiƠvui|̖S ^Zq\e-s>Ze|ߤs wUነ[Ώڡ{S.OkH,='L`X0E"ӔjtoNVůB-TS >PQAv;abp 90l؂aSc6}\RUfoJ"gyzEȡiuoMij[f YtΆSQTPlBJV,dx07$:01WDkom+چ^\" KD=k< x>9ayR57uſ~#|G\!/Y ([GU_WMjUAi5X9cf9ҫ6_ctZ/ i)*t[%8E- r endstream endobj 2966 0 obj << /Length1 2096 /Length2 13635 /Length3 0 /Length 14879 /Filter /FlateDecode >> stream xڍeTtpww!݃wsq׬]VwU*ꌢ掦@)G7FV&>+ R{R j 4&a2UttȹX\||,,6:$L<L9G+<(~hh D.f&E7+=(@_KX913{zz2ػ29X 2<ݬj@WW%{?1S4]5hì 'ws .Pv:X_ oB;9;8x[;X,e)&7/7_&v k;SMRP͕,Zђ@7WIX@;:8z:f ksR1wwbtvvJ 4{daa,2b+IֿAy:9:,@-/x_W <++ ` v:hh/U@T>2ՙoYFSTBYs2\.^./bbo!:X8xQBw{-%GP4݀ v_jrۂ?&m@%jEGPS86_]4vYY7P[:XJ_֮R^@sk73_ÚP?s^3]'{ j*`hWϱqrL\\LY@E e59z0398\ .-'YY7qY7%!nob0K&6P&voSMx O7)C CòdR9 *v{[J[۝lw| 6pV2?|OGdh.>v[ώC}R+_Ҏ<(|wf/ŕިNy>em ~8HCNȀRYwXD34Mؑf>OkW.y>YCުaS3:>g3 S!_^)PE ?]t"bYE4i_ ɀUxw@ }E0K>9 eJMeioyc<9ŢCP2vyDGx ^,U yQ0]Ȅ`DÏ }3p5¯ayD?s=Åq+&'N ?f=[!0g*LĹ~{ [P2'm0 3l_?ܵ6N6GWYGTT;fùLxL\(28Y^/I+h#J|,19/:,94\nӿBBr}m>{cHӣxR5WdCI/Rv.HpiCm'UdB6|W}?Ge0w%,ݎ>Q}1žf{w7zxt ӠTkG h|Ly-xl6nG^PLUy_81HοAUʼ_ȺZN\ClLPW u|)BzAyiۍRgkapkE/'lID+y sEU4Ĝ3xM]}K^$r*&NA+: AgKCm`|{2OX&toTQRIѪneYQb,= UDU[ D3-:3 %?JqǖnRk{ 6A] I+jߒ/,Ńg%?1@Fʼnt9mt] n>6lg(gzeP0~^᠅}8eßDŽ(L|Z097D졡spQ%RxI9VŒDxlgJN㬮A 4]-WI/{ }^EBB#[c>i/^<*7Aղ"|gEЛ僖!:ff#EBW/9-:h>-jW_̺^˨X(3LɱbwLMeSz<}3G[G[ϼ|#*س傭rDq3ˆd_IѸ_Fs{39B'JӢ)WA zH x4QDjY#$Iîgze9KL W{銜 L!W|M 18#jCYL[տ2PVg[g}eL)NCWh*pađ>o6~ӶyM& i\:>^`!7y Zk%l?Ш製~KތM~+- d)_iwR59U6rDr U,h0b="'|)O8F+}}Ylb?!ac,.2!:QRj7{5 6ʅ_(1~\5ԅFx AKFmXLJC;9{ip+b[>j~٭>f̑qouPݍk)acW'(iT)277`s!еK]Q/Fh~t5]dܐ& iם;d܄|bNkFS|&gq'#)lԍ5 .}_aMJAi-WfILJNV/Q7 <{7ݛtd YFlh8D-± Zufzw!JSh]enC̛k>h?b]e< ht=9C͖}M6;Hpo%P$ɽ1?o1-^|p=Ɗ $ \'toCzP~ ZB[ӄUi*\w3A,-!gUSIYD(0v?]a7%HuM.V^/hBȋR2s)qCB<U[3 |fG^Wݞ2{:eRxJqnB=3;jOG?SnQѯ]B$JIqF&BD!83`-dd(Inrtb#s,1X:YQG]8p/P1ZoWBpmHPzwygzw5NK[6EptK%\aç6B-hǸVSW0࿊l Grկ,%N-P̥Q\TdL].|C6j+L*goVU*,vΈ ":n M"1q{Ԓ4HTm^06v`A UM{SXkv+I7T͎m+SGٛ͘\Q?ف;È+'ظ[6R& t~0V2o_zflrC'2>6qcy-%B/z1&m*1i}LSF !"{̎ h|o{/?B 2vp/\gYW6v[qAr#;%YY٪,@\䯶LǍoť];r/tB.:$mvCQ|^$;@5ӹu WDǒL0xͥڕt^F=b31řFQ l'6N([i Ud Ont=VMK8(49,=.I4 qnR/g,⦷ܭsWwʝl8 3XTT=^Ї'WμiR>73蟣Jk?F.[{/z|]ߦIJ^9%ex W&]^}]{,+ռwyn_ϤiHM(Ez;{p#ae%4%ay: [1\^~W~f}Ҥ퓣PR* E{?T[sZ\i6fW#)0ϒΊLxs_e{e5M[[&Xc/CWPr՜3=Tʓ1?G~C1|#ߛa2'I_+QYB~EKJ}^F!+9"9O5¢x`P*C,0~y&/M5|&o%mUVշ#q@ͮ-3tRy5<8bs"CԄ#'x 2Fdz1R{|Ίq"Iɶ'䃍]M Iƴ7`qB{7ғ2gJQ6Xv=T2°A$F8xGl\^<ִ4tp/}P.&e:/nq3<2;Y&N8&/*gq?ϯ o]i[~&g!l}V\C7duCa.dy1K2Rw u,\55Q먝I <'`ٝݧ_!g 3Gs,AK z1@Tcp?R2] I972`K8/TZ:7%"kHcg>FmP6ASŚs#y+O@@3H1WYRtCs4gxaO 2Ѭ595`҈!!FqL|A/0EpC>#=p(BH7{ף> ;-_t/kf#&S5]ƧΚ›'X.1 #v%xgJ}OR{ ƭn3\+ G*"Zeփ8oßpBg*A[z ;~el%!snPY`_4mn.&[Rxh_ƖX]QވDmb4{s ;@ TঃHxuHi'u^GtQtA3HEK^QW5]gݐ-6 /;e;a MRױvoVpa[M}٣`:P`!ǘ>BF}vdmh0LVj` =0F[:H2JLE ^4akR6qz '5Xէ"H6'^g,ARAIF`,oaag`Yt`"Sh_P>V Chc3}RPz{ln#` vMTP$!ڸw|O[f,iR">/Qmwt'ؔ;ȏHQ N L`Ԛ g$Ypأ;Uv({1ҹ&tY k\4 04pQA֍a2Euq_7Y Zr*!7t̕%Wl6H>Hs\:א M"ZCeMI0IKzl:O~SV¯uk:Y5. ^SgpI'`*h}VvH;m^%ȉ׍^KeK3{QԴKE`5XhlȊګ֍MN()CfGW5|\T\a_`cq⥊ w9׵ (p*HN{vPm&Q|?l618֏#fO8t|)Yj"=?Q/ٓ/mɁO^[^lʽ,͒,t5KOD~;[%b?afiKI!h[[FJFYc JT(S|^;%k8>`ˆV t]؝WVW0aPJVio#Y3q?ʑ<46 õظ(E`ؾ 0&g|c۶H__[[ݐ {Ԫ ZfXǰsIҢ9dP<I1/Õ4xZZ]FO}FTZXM3eSg{(yAUnO~몃!* ede+g,QX~_~.3◭CDOLp9& v&z^ 7Łď\'ծ+;,A0toisɶDi'xi/b-oZ#Gž)$b!j5U=|ZdGMo*KīMl];hBb4%Yl-;EΓ3F3 LgiR R5aD/&pS~XǸ!g4p[ Tx I?M[^5H 'q4qN8{!`K54;6sHJBgSGW'L>$(, 5?L/'cǝfJZ: lO0%i5r Z"vB5;?bN5XS?0Z%*{nZ ʳRo?MtGbȻv#žO0l-YKç٫iqS!`2P\yvE{X8Mzs9Y߫)W[R"l}]JIlwXi3%Ièq]cT1G$.3C1"+yx!'I#Lkr^NV# ZQuwYۢۍ~ʯ>V ELl}; Zx[&ISYDmKuV>.R>0S噥5RNsChĔS\r-dd\ғhƻ<8su/dq:p (/n8?(: .e'FU~3Ž{=:ϫ@xB>6Fo(Fä?طy cH~U!:[2O%Sz];{O`1UsL۷^e,0jeX/ZFZwBhw|x2%o"B>àH=3T} {!ZD8ˏBv=v(;gb$ dz clhQT(W{],2ƕZo:b`çAݢo (OVL|=9R[q(nzM`]R>Bi@1JA~lwI&?lITuUW[[!L4܆xf6ԓ\ ?Ea7MmB*pX&魮E>'Oc9kE 1'Qza9&k=>փI#϶l,!C;tBA5ZƣJw݈_6K"T#c)_YJ8. eAAP:+\ [f\/|+90I>&a+ULz?ҿfs| \8`aqgq>΅72U|++SG\R.pV}\CIȮ@Tl ޫ۬2H&3$ }'=Mr YXpw)iQBf*=ݹ;,6Ņwl{1v&g ɯpD٣[u'2o yᙩq%:JoNb9# K])c5%=C]ͯ'Cg|{Ai*^K,RO#CHqn4j >)UrHACz7C^ $d|zQKky |F&9m`(KX$ݰ3hTwYY$.y8b 9_nnRfHt/Y!AaGHJ7᥿ʸq?>i> mR(]Bms|ܬBS{?. )&zE|#Έ:+!KB@CD"2wcVԟ .^X"R:R|1'`dו`pD:DV%Ƅ>xrd>RxOZ1/0~O}Z;uA3P\@`z+ ߭J@}.|a&j0Ÿ*|F_$lTۻޒ"i(fGGN!ݔV+@=NZ^f_QùR?~'!nX\n~ w)MXyF'F;qvRr:P>^niFx}xb_n8T&zX&ed´S7wsnGK]mM N0%V!ZSFU^AbFPVtF2,$hjm-8!͢jdq|`ʺ$YY=EF1d?gIUkf+='iQ2312HYs`0UX!E[[JjbrҸC}OIȯkpхX &ެ 8rŋ4`*H]҄mڃIŀ S_.tq']*q:j[v'>Őx5F#7̫L&#Mb(@QQqFw}QѦYna1Э-"H'Rri̓mkmfAe-yTuNVF|N:=n0-*Ę;rA99];<79nvPXmOdcf"}S@ȕx)SQ3> 4YV8 [%c%wo*Z^Q0-YQS#ơͬfL_UA\TP 5ͤN щ8pvvoT cfgd{"::+ē+ajЮ%!lYk)r& r ύJh+)5@257X:yb0}qtuwONr81Zv'ӹr{_?b_Z 3Uf3~'Ѿ r5j\ZSX5o6f7cf}C?/~`x׏7bMX]mYHi MvAX*.78Ba? . (D[0|e,̢W81} 3#k@*hCr ]?.6aHUӬ{ 0n)'rwS%#ZX*Qk%&#cGI' lrrp|]MYrvV|'iPlou} b3LLOr '$]h҃ح[YɗMŸe2ezggJI \sl V3Z(ga;02xKsPYpS PwV18 "qm\Nۋ(mm1QbB:k]\Eri5F_ëz5>ɥ_|IhOe5 EfG(<##]j*$95)W)R}G OvՔB1jTh!@ +64epѡy%'zX(gC ܬ\ȸ@_+xIHFԊQ\y ˺3^8e=当W 1Y[C>X!6/M"aXd^Ӌa:_ʲhEƲM`v>p"S V%CPğMFI-i]/9*4: h1rå<#?K44؁'yT$ NHޠ/[ FٌRgcRkjхL_lJ]k)4f3pn+ul*3MT|ED7dsҞ+{&iɜ놷|I98ܫ)DI/!tX0p9ׯ''yhOdݒW?=q:Q2go %HY8Z{_lHV_s-yMUD#Bv_:6[ј!w4}UMoNl8zK8{ݨ<_X8phWs )_֨/z^0m(a0yqAJ{Y)1(9gr܂2lYh% }U$ hgszGa*]e*{J֭uFKLt&~v+I <BX-ewGvl1jJ{x[K\ѬmRLI*eMܰr#>0G5I_J)\~2C!ab`sFDicL&s.mvH׹жj:bWu8Kj9t7:O?ˊˠ$dߑS@* uaL%`97|Ւ'| RST˘u`{';"Yg}]ҮtQ`eH;8Cu-{8!O endstream endobj 2968 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 2970 0 obj << /Length1 1457 /Length2 6520 /Length3 0 /Length 7517 /Filter /FlateDecode >> stream xڍxT6"U{Dj LBHAz7i MzG@s=w=dYϐO h>A~@Q\@!B66#(NfA0[4Ʀdp ( B@DRd8EȦpBBј}~pb.$d hۢ!.A0!SvuA#2\(`AA0W[_?!a00.np0 0TBZ /py v.p/(`A*ZhO4/E[w[(C-@E^`P $GAajsp"GEB@sp=UU}QW1AD⢢"(k#/WoS+`)`>}PO+BAA B P8ΰc?kLPO#?A_Op׿[,`fW>!q( ((( 3-Q ?Kuꉂ p|y/9AKijh,5# `øXza>GUXE]G@9s:V>k93 z1YE5Sh܅BG W5̡ jֈVS`NLhFa++&/؈-}.oOvktQ ?VY:^6*@|%)ʑ6Uu>qX# ťbw}=(-0~"lyޥMlVe4 z0Fa{WR Z6 =uf_A+͘g[-o;z" SA fYovEߑp+4\yyz]'XMI 猴62tnKNP83x_%:L:E:a %x=_oZ%!49ڔph$@v̧f~XS?ηe0L>,*{*`C8W{jq(T%XBaM"m)-m:Z=#Mg_-.$Zm5~xC1&.V.KiDbۉ`Y8?}:LV=UӖhoG)4A8* /~0}%;ݴ4}B݊i`4<~fLOHZhZvuk9B-ՇPsGwo;ArI~fk4w OZ/UKx"`Ċ=3{9ڻL~0YzR$AUAg uwP 8f1/_~߼ŀ5zT2{8cM~{bߵ/_l7T`8]=qIje=իM&~+ 1AԧpoKOaLɩ^ _+zR)5z`b|1n#! ɴ5opiX;{ئvE}BE X}Pۙt!=1z0hpXOGs|EFt0j^Q/:~ܢq_B7]"5pXͣ+7Z$_-ĂOwԊߵi.6qe|3d7^}Z{$چOx,gnmX6XD XgFKbYǴվʼԖ_}ڶs^e}3VBld@l=v1mKb^6\ Lwyߤ(7޽\Iߝ>gEχ\Au6YTEJ, ^Ťnr/GUĂ5Lz/!pT<7pvM ?XoZ}tkS4#o-+UoWh[SZ_wa]ucjXFA1B0(gHy|}I{j\beP؉`V ^Yh;Qާ|e?bzM\><)qPI8㤓Cj¼s·'(pI/í,r?q\KTarہy"9 kS;>AţՈ}c]s(Hg#szv눴Lt! #dRb^nBJ@/q-oC?53}Q>V9XP3йr$c@e!M]aITsm6w=fE=hu/,1(W~Z]Yn); oO؋pI|ڔȒ]bObMralFx/[ɽdك{<{[3F)余 ƖI4vOe%G(K|}1 ݵ4ywq5+3& {GDWo %~\緾M*[ZשRH\q0X, QaZMc<=YJ`00 mB!r& |Yuq=9Ј@4֭>ڑ .]էV`49g=W.lJp&|j) YcM*"|Qr0] W!sk={OJ瓗GäL˯&4G3F%LгV)a_ZMgȢRďm>u4}>PeOZ3W:v{$zqKe43T[,}=3 & ~>1c~ 9Qd2QTۺ}Ιz&em NqYgI!6ZM$L%Ye%i@ai FX<2n8D++A_屾.I;?w*xR@$ՁMR^.{(L qWf.R_9JtUWnfȐ`rl?6(]Pֹ i'fyBmg)ò{is%b5kxCziYHI@ ~棜D9T#hf%deӑsj`dR𭆬]4Mdpy+LY(\2J荒tL>ĵ1#O ߥE3·[Rj;/d*62NհY Zn&D@\ȅ+oxf?ue>Z { :R} ;jٳ~SjPy=AW>V97֗wi?A\di$;33Xl~jy+74wUiɺ#Aa(t*Ū6W.js9LY\u3߲okk6և?wgoP\jz0sIBu^=˭./0~^R]s,QQ$v3jrEHYI" h/p ;E.+Nt<tWzuz| VnH^2M}-d,dvEԴᣫ/!I*,@M<3EMP tn1j{i?a2W0DHqG ,'2:RN?|!XM1OJҏ(v@.hSb_'{F(fCnyVQO&)\LQU `_F_S۵7(S7gK7h@<H"d2M9R}'1.4(4Oͱ0y \)ζ33助"q#_=f~퐬3ַww&`[,[p}yYdg.;B W6~|o7!ywjo09XFuߺnߩM%CTZEh(ו+bNT^&F4λㅄ[Zc,*13T sX-OJE|m=bcG°\x& L݉'Ӹ\{1$]衳[o bY[赞RF3k. GM XmL~uxCXg)"c4ǟڟQ ZxAkROr(b"Gm]!w/3N*j&PyfxUҲ}؟%t]9Yf4ܷI;%#},a0;E5ݘ)v/+9#Or{e}%kpyX'Q5QdJ4#9<,KL2{,vwcUn3Z WXvoNDmèe0p]7,ƓfXq!UgD{6}ar> 7Le"e%lz}j_ j #)/;r3g|Mw|n;zF?d\p R2|lxn5"L&On|k7!2RϷ[L}g ׆y,slsoֺ us7_D"˜z 쯞 fzІ߰1sm  \.-`'F IyP*}tAKpKƧMHgG;N}Zo|w,U6~ M:w C7.wy &BS |AOES B-2soYHM۞^L|rJ4gZ^ۑb~/|H}Y%:U Gj$:sߠ#CqMx*0؉Ұͩ"n >Uj2& :֩~-k gˮ|}攍+h܈"-yOs ؏ቧ?|PvyF|JXZNhZ,<-*e| nt@,}(5 8hԏeY)U/@Ǩ$A%VGP,Ln5۳؁Dw~n >O-@U)6B O\! . ~u8y򱸨*D,T=LYg^2Y_ hǥH\p(-Brwi'^E&ێEW%\^"<+z':wh־]~mZ_po<[ݠ>XֆtzȕVI,*?5> stream xڍT6NHwKC ]J 03 ҈4HttI*t燾_֬}>هQG-!5 T|||| \VV(/;.w60 <~aq~q>>O_D8@ h0Uw@%Æ/&&' qڀaM0r B>Ctx.^4' tAwO-w- xqYP_} 6>f qWhB`5">?/;'lcwq|0{VEz#y`o"{`{Ÿ%9]ÿCظC]^wiYf+wq)@!6r`p/߿fk [W! QUsoD7{W'o}~pW}:l6H5 O{3/|Po3{~2W-+j+*pO~AB|~~ @~ytпG*sWɞkw.-r!݌O,?!**H/v:͸W~ 4_1ՄB=\׫O^яyCJPoij7g( G@0Q||2Wq/?. 0a `GB?x3 #C=/VDm@m@?=?^z@?=( "E@?𿺱pw?o_;xClpg6aaMr^ _c+R{nK^ |ksL*s2sXOn°^%Ahx~>SzˎsR|LRd/=䰇^m86롨>ZX\Zs UġGJ[] "TJ*6qڶvauQ8zë!Ma92룇*뱪z*=])˯q2W-$Z >M6b/j/.V&RQVɛAQ7`aHNOxOV7?f3yh-H/C,㴳b0HsQ4"e l%MTRt^f§;b,:pۣ?T=5\o?̶ߨ @6Q%[Eg#HƠv7 ktwaUhQ}+~B޿qN7N dX1h8`$-†'\$/j@=poI慚~keQg KR1R%n; YxMlaqpGjUiG&UOk߈~`Ҕ*&=-^ j$Pǯ)*aDV3}RXZCɖdulPcZc Jasm3!-u`LfM2y!Jo>YOF {>@&M|T23|ʻJ5J?rމGzj[8jb^Z[Ѵ@z+e{+q{Z]w9`,^1\T4U,@6J"t]9cX4g*(Bq2̠p8#_-]%/vf:IRĒ#06$Q6H8άr4c69}x-$ɰǶ3&,최T.9r/Yx__ēSI=u_'i3mHR`bZ,I()*DD "K'lrr|ԙPeStX܃~EO ctml}ž  tyBrNN{91 T (aNH;A|<? J%njΚj4u;Ria ?|۝LT݊)}o,Z=~#QWI{呾N\1_7 4b"/7+q 0MrWnfLnULw8ڤoVk}J#oYdEK26ju;Qf}͕)TgZ}6h 3+{<՜UW*z.+ѣ֫&?z:| OW0aQ>m W~) h# mow͓`*pǯKImDfi ]G~=`~gg1r[/:f c%0QqP},@0x^7qaYIUť4p܎Xfn%p2hҶj{Eم15[^kI>WC!cԒ(Щ4=`$Rhi`3SqWLfϢz纂C$ Tkxy'.sCt4`7iCۜ>pcf(}<{c@&:4u̯ګv vY> V"'AbrDU$佪"y(\Fo\( B(U5!c񨲩{GT^Ƒz[9yh#(NwHQ':]_eD$$Uw sIx9YL䕗i!>SB$ɕbP\ an^6]y'_P2sa'W\LkZn`H{Dûe5PWs^ 5vHKv mRf8ݫmKݛJ.!IS\H:C&N@Anד Au\;!뷭>Y+tkfSY]ki-i*GV&ܖC3I-B IT} 2f.V*(셩JP/e6Pu.+QVtωC hbK"Xgn_`Sʩ "rg#'ݪwX\GG}KCB, qnC0\W.Cn'bn"ѧZ?lԭòBTO\}2Bn*}[;1npJN4y-:8ɦl{jH{۷b;;ݐ0/VpaDpv < .c$peAnZT4#$"]5g5"{:(Jj`v*htz+ Z&$3 [߷]1X?XsPz2k˫"\=FI.`=w5r2YH<:dʝ_^D̐:toIRٞ9LB4.A"G+γ$OzǠDb<{5*))ז(_} xX Hv.#~tD&ڲT u,5Ufte/'?_ڍ*1&U9&K7P莜(|<7::K__SF&&%)sqm! !im#*heoY%ׂ*i66_:U,rBKfK\GE^t?Q728&B괮nkA3tvWd/؎Dј Btan r ji..- r4NֳM.fKxݞNPg6/SlB&ϰl|{O*VV,ToN;I.pGbIUf-ҀHl;㛱a:!..tbZ}lesu\ S"R@\PZĀ1e\OZ>vMIYf'Q;iͣOჀ(`u`FzңXپ3*4ڕqFw32OBf'+1-JtNi 1 [0l%e-KqW$43 "o4]@oբg*w._6;4NWl42TT?teWۦ(}VlD KR|)b_IAX?ETM~Eܗ]iv[L,bE߮Iy~6AlWm0#'L>L7mCLiQZ[f|?#wb|yt#m<|pG2%Oj9Wy$Ǻ^RІ䋌bJ'gj3xpw|3^"Zzn;X T'l0fc}qS{P6;kc{ĸC҄x\d0Ӊ =^Cl=;9As{~ي{ E9@cd.>❢7-߻C2Q, X!r;O}P )>'8O;3e]J4zv60u\ʞbx|(]ZkҩBM K\8tG U$zm0wszP{.GNBBG0I?y-.lcyD/hGx_?f'HQ_sג$ܸ72 ceg΋li4z0~>;֡ޣvT_E.<.o6|VNF3Q{uֹi 6k5<4Ә>9Q+MkAEH49hӗ?&Le=o%qJ'`D:<ޫplؚ~9.m-RZ.vVsZu21-#Jp |h`R7tGj+Z {Skrmn@7%1^bS-=9|oZIb}sz:_JP.Sz5K'!qV1qD gOf+) E@*Pzr@Əq%R* ޯ/(z 4NR'$fz^Z߭ dAd NoŤSu͜8Fv.{_`/0V) e=jg0b. _ԜL>$QVHӉo\V2su"^ɇ5~8<ԘTT#n_G?Aj[G2^_#zǺNbNk2yU:vJTpxp3,*X9|XM3~WWMoo6NHٖL^ /] c} Ԑ>JAΎO̬X*_$Jķ]TRkkKi]G80&:*?CYD"M2b9@!m ʰH_ M~X6RTTN8)I3eWk4HKVRt鴻o튼hͥ )!6j&}G3)$]_MҊ Qm,h\_63,ĜP8jXY>{"@GՃ+[LBp;>3N?; ԮŠ>`F>ؕyU2+ک53fj>$ H^E^J'YP}~V]:$c6{`lO}gߚyLhD?mYS[Bє̽-!`m:dfֵDZ(ZJ"ѹp!].g5+:u%fUɖ۾rl/͢9wNE9db?)} vYMqER}$l~G/ROf 1%M ϒ5!查d5m_^㘸j߄2cp.Wզ?p 2 ,rM{<#!$3AĈ&Qm}kĹX&EVyπ$qD':z*EEn.,m+tvGd$}HQêk Ѹ<яz@щUo'%y\LsfL,zuip(Ir|ؖm0*OI/N^<} et_dMܕ\'Hװfxgj=|g|`AY ]V![yIS5swPwSa<Ħ89dy`;n(; W~n&X9m~e{[O6(ӿT`<n g+@DCRf_p:|ި2݄RJS%78Ao55 odI B7s  N Um' 8dg/5ʤЭ-z1I6sz RUB0ȯFQ;0 a.6K>0g6+A ϞUzUHkuvHW3NIK[wIkMtCeׅr81KcrɁS.K?DeK2g$e=(|nbcL .$Om*wV))FoH0GF ᖻ]Eygg%\5G0;p GjPp[ŅYD]`EwiHސ:MۛF.l/x3ώG.Lf Ҹ _.݆rR#&C <|Rދbx)xƮj,+{R}k։hs,߻WūrYUžYyLv}Raն2BmYÏ7V{&n+/=ԐR _*ix>L4.GF >$R huwdU6ҭg޺FY dp^ε̘+l 鸣jRbbzt` Ǔny\AKaL7PCM>]@y)+?Fe=Gdbu9%=6QźCngLJ 䒧ª9`:1gdnge" EP\ƘCOimQEvHEgl:4t/%S䤯;G#=9H湃]!uXUmK^v(S# t3t/ŕz$.G(S~֖M @X\W^qBp1BD6^*͗9(kOPI+ߞ>vOjw J֥h\[%O|"6Ϙrq,U,Mdļgc?t]ߑH:D Ї|nnT6|(7XE ޑ:(}OD{$I浻˂ٞ3P-8E1"rd'F^*7_V jE^zVDSR 4iNvmEevu{'[4.Xz$[]gy]eZʚh+E}od)>F)9?`JsvE5 :I<W?7}4O4͑".modʋrjJxnAq>o|"3163ېcaIoqC:__`2G9 I0Ԫu/3?%xIXH}1[<فyw K 9 ߴ$2CR?%U?13^zEQÉ^:V|0/ l&[ endstream endobj 2974 0 obj << /Length1 2881 /Length2 20706 /Length3 0 /Length 22335 /Filter /FlateDecode >> stream xڌP- ~pwwww$n5C  I*`ݽGE$fhvtpcbcfH(ijXY9YYّ4m@#Qi\\mp2IP n`qYYczX W$* G'o+k7p 50ؘJ@7k=89hnrnnN,,@{WfG+a:F5@ rY~ Pڃ) imBv6 WАS86VۀOsllW N@o+":X2ڹ:@;/@\]l\]m~+ R 7W_$m\@{sA6ʰpwbrqvIc!Y\3en+/%/1_'G'% %}T7BbcXؘ@V6H ˿1]lc?#Y8:y6Yt$e)_pq;*x9X:& {3c);=憬\_lߌe$ngohocxn;5J wʹ `eo#m\m@6nb_{fgRutuXYG^.s[ ɿT wF)sG_K Xeo!0;8].H "K7F<߈"_ `,2;E7FE7sQ\~#0E_ F`.ohF`.ڿo\#_;wׅ _9;? 7; пrN_bڸ>_A~g2f@s[W;0s@na[l r/{>  a>@x2GZw4yu['Fɴ3!4CN~6;xZ~-)+%'&dGDNoSCŇbĈDL~O~om!{yT _z~j>6[˭X)V+m,UYkr87&bz3/٫RD$X_u9jMv^|J|WXԾx 1kB tkヤ~c=drXxv.|2,ouPw4L^3XzzJ~2 GpaPWX;R8?ӧ{k6!~A,j李9r>PU;k=7&OKc+CgZgpw>a -2켪Npe#`tRorL] fs,}ݵ2r^ʰ/Ikٓ'*✦¥ ra%<Cї4W#tc,SZS?oRܤ&N5H2Ϲ/u 7&{gc-d)k49f#Aʼqv6Z+Xc+BmT䝃҇rK#AsRZߊ14Ϫg] P 4f#D?ɍtM\LlG+cw}i'ypȇ/4j U|#Y:#on'VUfGF}VFqI_rk!z QmT'ݨgUJHr=Q;`?[;Mj/աexDgrI,{?g"h]G8Q%E~޹~_az*9mlJDf>Y]asF83[j]U_i7JC]M0o]lW7&U4.uaŃ]0s|Qӗ2ӚJ|p&V_<6Pƻ\?Q# m_Ǚ(f3e>ftES3^A6dR%"f kz~mz )b VJ}*2_gHVʔ7 ?đ/AWR^&\$;QYlqј83^3Ty7n?\;!iWJǬ 43qT= l۱f$G #S_1)W-bS&Jn?>E6Vץ2ڇ%<%Hoboȴa.r  Qgِ,z^ᕿ 󐨍VlIԯ0~)B[3T06mNL![AaiޗOMi7x=.~Hc<"AgͷVisFƾ2ǻ MG NV:N>->ʼY|K릎o@L˶#]=gv1zdxpdE+WUhDzdWEE5h:ǃbEGG*V(p6e ̽Rաgetew8%tNhot5Q5>h*&)~D>ŻD[HW>ޭ@^;f" {8!_>dE,oy˧$} _+Bedԏ;4a/7D6*gW : r.bMK="İ|wL|Ѫ$8 ͶFMVGp͎&Gzd]S#`Bqc@]m߱BܟYivKct +srOm*n;Q9/AFxXݟq!{?fL!I~{e&791]f2wuPCahΜ=b֋Tw;Lg=u׍d`W}UHF'3"0fMv/y>!ӑJǕ{q;AD&SX.{DhrGpXK&˜oQ44,`Bѣ< 5+z6 =:єM[7Vf̴H}UD1SPiTN=?qx1.'}17rv~U0Z&,4x"0ֈۻU µ7KRǼ3!K&K\=x֢ 2jՇgg#T! }MHD&Y6\oסԤc=[{\G)np .̨}`35u_y1 $m.I/"1p!8LY9z")_ƶʛnkK M: ) 9h˾uJs=,ަ^'8 yE6\WJM#"ЈN?[N4u" ZĞ%r*L 97:@(2皓u]~Z:`&ZqߵLy*?{?#zWc"΃5` d%aA8=mLMFNM/~YsɌB[oH_|fjBP5ߵEWR0CmJk~TBԺ>L1{ݦ4\tH!Rb1}kN@ar[])Ѱ40d\.8I{zx%Ӌ0IN# Z1Uipיxh|- CLK ~fŒYP<}<4.ra%q _O^ n0̍X8)&NrqiۄJDPx/!&||X֔4'gųݦzԥ;2܎0-KB(ʴ=Z.Fl.'IKuVs!UתﺉϙSAjj>eh$Շ(Fz{nLjvz;+Ю2#7!hwQg⓾2 q=M+t%z\M`DDpD^$%N֬U^in [ [;\߯Rb`&jt+ C!?D =koDe?^ z0UDp=ڇjDsuv>qBBZD+tgU$?p]ñpQrJ4# 8O˃o&6/DQwV{ʔtr)*FJ˸Ai6ިy2ej φ2hwge(+I9$ /]JƹRP)@qzk"uA{vXo+V>&rdž5j Wr1sXRDN[;J#Vgn$5/i-{ wgsxqPMzH6M- ~ .pdg@Ҏ)W_]2 ]&4$>B Ey0}5$c*eRLYUĔc~ƝK;` ƒ;ΐLZŭwcB2,K8X)OgBxdX)r;~r\&*k|2? :oX_x[<-+FPRZE#YL&6@߻!Ҳ|(]0po^1BuIDGA@^GEꙖʛ׮X:xŋB&brSM^YOJ~Q!KnaZ+ısΊ#o./Q3Y}.ܼ'F6V#ѱ&k&Goˆ>=pז(z+EP3H{ E@TVn$Kp&PLQn'@f6ŒFʳ8vc@S%VCJqBGw/yy4Лo*9J-ّ9$$T0F=qGDzfÁI3G|:ZwsJ_p~6_g`.4 5;(tJ`;`nX]%(qtܶ;33\ yT ߸ fn-?* F: lBb^'K|ʊR=xx#h<1R5ɟ'2avw/MNC/H{XT`6|DZdt,-RB>-53L'RO~TTF7@x4z+MYzdQ3΅{1%clz :B׫Zufaq-XZ? ^xfڨ`OヷG`7imik(GX9hs9z8g4. YnO=l|8S n|`[Zmgb[ M\P;!\@Ҙkj"'d!}7aΊ 7%+NhH;rBbd,g8QZg>p4ZM4M:T@JEHW_;4Vb=tD˗rj zWoc1K'EҸܪHJV .^X0k ?@fUQw5lxAP3Tp(i)x⟢6=ҧf&5(N֜~1=i2˥T(I[­FWZfURxQ$ 4ϭ+"HAcr|.qvRO| g mW[$]@[5;5arb5ҨH$ٺIDzr=!5nZ*(8_[#4&w&Q7AQ?p4B׼řcr2.6H(+&j(' h vUcLߪ|޴%£GфƍhW -'\նR|ͻص\Ɵ˼){EV2VFvgZ6ԨY$a5tҽJt?v' _u4pbWq] Nyv},Z*VObwS 7!kJ9tV%p0+tOl~\]+Ir=ԡ{aA65Jը .x)5,CN_@Ta 3mڇ.vۏc#WhY Mx&||4zlI6Sߓ q +=\&/sѣ/2!KLL4P { ֥SJ4auئŋ|MEL,[ZEW}bF@I cbh׍IqD\^v%L!~DąfNi ުl;q EYl3RhaFBqd5,zH됺(U{Ȼ36ive}C rd=l.dFk9mr@] ,z6k#oo0(6[_T3_Ue8ؘ.(>abS!~Nx!D ײkB񴑯X^R=w ͨT M$*A\xv,֮2q AwxcGCOz"KU~KqxW!Z̬=*=~~YIrv~_ʟĊX"lq#K?_ua[ Q@_ cD69:Qi-8x_i۳2*jDm.cܡ!UsN|\`EьiTaՔyhr# .쀡ON{,(7̔; 7h(:-~A) WpqM04kl8iǣ/f4]o>b׌>Kd=ewo DBiq/K?1L/$N1wFeG>_;倢D.{d|:@p2Gf G:. 0adؙ),yL*0uޑlo_#,Z dOyq~vb&@ _H}J<5,'(ZW2c'4=MsTtݩ~J|+z 3mc&rX{Ǫ 2jsFJPvwޜ;jάa= } g 8N|ўnRB9&\? r }BfGxQ h~ rǤW<'Yɛ~Kp.WB>GXK{7m"%GKj])1ߔj?ILK-݊ZV.S+izTh= ./]}&,wFFͽbWoV{_^zzJdu;X>D c037]]4OӑqtvbԢ>Xi솱.mq |6.5& |P *h 61Æ%8we~tiljnSOFhZL䶅8\>.--/lp*'/fF"zDZu"1m&ErW0zG"n= TiI(t|a yW)b_!ٍϗ2Ů[c`ƋAB,z4NTdiXX`Xzq;njGZ!ZfV b#\:ϔvWLԿ- BMz\,yrBa5Sh C_e~R377%rlލ7#0 %{+H[Si!*/\وHhXRw@_NoةVߔol-pM-Ye<ǖ{ Q"Pz8A>GͽYj+.w:W[4AK e:0`! +hh?Ia&%b$CؘjMBΧ!/e9ɠG3d4l+c8+u t)e]"q ϣg9c_R2Pu{kS Z]RX'Ӟ$Me^`I"[&o/T iLaiF^ρR{$Fm[G͹ga^aIz&WEx7e4B(c:2>rE-j-9xzdzr_~o#4w NLBrm3նKA ]K1K1{_%3<:0X7#.>ft`Po!Npc7 O GûeKhjd">6CcStőh5wMKd 몹>j9I (fo80.Yx9>*@&Mu9zX͇rskP'ܮTIǟa Ld_?D5:zgu h9^_5DEñf  u}[beJ0TI*rw}Hnۓ]"m7g{rݧ%לOh! q4u Vݳɴ~a79q!c3ZaOeW:WzgkmA6- GB~zgO p\^`,A#(!ҩGTtUG_]xXJFvgJa6AFʿ:kq+-[{d-h^)Զհ-IۡwU_[B.)4fN)\I=0mk\2l%;oo1D+D wL` %{~z4J!H2 Fa͕ CF=j8d^wI6)e;Kq ߍȜ pwXƯ^06K1tO[@'Nb!uR*b4Kw.2_<^FIlE@懡ۇ _``~e3jw4 - P<q&- 8T=oB&_/e1 {Q-NK0-c`Ay}.zn(gW@獪[bJmLF*TMqSB7嬍dE |Q(xfGo};" [^kQn'ƕ- aJ3;#Z =rw{'NY_XhM㺡*NO(R!RZatG?*1nIb$"Z|y͏dyXĩn9=.vWF]Nņ_%qP2/B'28pc|i%ކXf!_n1DTl6>Zch'c'?A}Ι|k>LIr%x5%ˢvI:?:(!0M!֗4NdHoOW'j8ܜB&ajap/!sh†PlO˪6&۽3C$c%}LO#6ogBnUylR"dqvyl\Rf'~Ն B'Mc LȆvڮ~빁|uK%^(r VZK?ُ[ L-yd XT46U#­p\V; G˾Hoڟ)'~p@WB`RCe"`_J;1N2F^- MCqnlq$Yh}"]&58JK[OMr*|RݤFPeJuD8_0t n}m^A-p0:EI1ves]֐NdCfZϐQ`B2wXTߙgjWpУ4&-uji#JΐyHÎEw}j񁲾 7J6)׎ DNzuǟWs;v&=l>wuSpdNO9cTȱvPʦCj׭5nTRGan.]mAnM` @w: Z)"&]#8K9rF6`b9H74] iɲKk]Z샇`}ٰ<(MC vV8I'(U\Qw]g2HوȲQ_[^~|OK, \\-za# N$ rdaB㥟p 0WYUwÌV# =~|Q`y[`fb^nΑ'-"p˝2UDURt)Qːu5P.-R}?OSXkKS86B?~,~k){Tg^iuj_(' RO6UFYɜLZBhE|,'RAg"O(puSz6zu38CA f ۤwxfgGQi=G<%B|O|ruY BJ1m1Sm[1e5!NXa.J$|Q]nIJ]"mXSSyEVmwGdt[ 'ƈ\+2?bR׀Ͽh'mXsmbC`8>s 7}hBD+13AMBKߥ$'犴CʇZ·)PB~vi|tKhe)B@BVl!נG {9Tѭ5e(^}2hfgj_U᪽-$ D_wD^Oq Do<:g(-ȊC'aOIJ".xo% ȯ<ڍb.A7,gwdL[~rMqG.c$:$|!?w ($Ky=sǠJM цOG}99s'屎i A-~<5}:f)Lּw+lCwxB.9'h[uh9z+ozG;5ZIl=2`- 8٪ߗI;08GQfKv7-y^ [n=zL0g)l* pfX72vXgM&bYxY۫K?"9d}Al+{薈OκRr8JrfYI+:j H1tˉ1Nd?>Eto䐑 둘U{% qBHNcvVbeN`zK`kzʵS'-@et(XjN Fy搡PA۵Ye95fO`-pkb猿wK&vA.n؞b #0٧e,㇗.}[E{  uUT4#'`MpE"PCM!K)^>br͓o$_]PJP~7^bsG";ph0'`3+B/0f rQڮT;)1R8FM|02UK.D&d{ }(b6;tM\Ï za讣G0-sP1f.Ks^'Y8<O5~فq{Z{CߛARëJYJu;(vHHG \% $\(yqzGS0sKn_4ا 0k3- <|ra Dd^0O($js9PQA:A F!۟uZ*C\4 xwzz/JC «cdNv%/=H8gSYX)a4 idϪ56\ ͏\4eM3jGG淎 w&Jn߯?QyV&nyFYŶ0^c}FT^Id>GU2m(iSN 3p W]U>,Λ8ʤ_ly4~9۟vW醴+~&d X=,r+ok1V2MtT)jOďV3 @IoH{^w7K*e+5 t|.M9vWf5{llU54ؼrY2-$SɧE:h0{l`-a2|&Xӻ!IgDueZ96V3±{;3uB~`;9YQ@4EeMgFvk J!^13jCVqI&kzx\Z^oTV73 OvN [FWU-r Ds>Wa 䑓k+ρ:!iW]:'P#{q"-`י n׮U]mUF]˄@c*ى䲠$`PoZWfIuv=Vg& Y@baOec $AW0Zx.ydPWM}jDxs /Sqa|n筭^]slқֺvk(8{I{hl'Xbz[Þ|gOwˮFH {ǫ=jWȎ?VIA<Yo 8lrk6J(K A|F@'% Ԙ¼tWgM-l"hJrP?ZtвJ*!?f$ pXli= (:X.8?.\,:Lo;Z͍4_]]g!-0X: :$򆢵[/+ UFRҷv{&WԖ(P.+|c%g8S@^(WI˙76OtNZ 6jw֧ѹ9knN]$1ݝ@da2=n8lvNR@&/<끚#d<0fJŞژ/ B%G>Hv R./v .0!rU6yco,@i -㑹 MrLFGᏯZ:;=.V~'*>?ZrV>#0 HUVH%c&'+Ǎ9I˾~jњn-( ;sr2OL<%4\OzUx[ڎQH; ^v("lRgmWAnCz g4kȱiq!\WSqVxg"!FbՑf+A{EkOq\--diJTԔajoc#IO3Tԓ憵D݊62~//@RbjN zȩڽ %FlARr)e ˬQ <"6X81C 2}=Rn(9J Gxll&δr%rQ8n 3W ޯ !7#7Qd]z#6lTn]FiC=!l JW ݭCHub tXy{ٌxh U|RёWs4em8V d>8J$GTޖjdԔދ|q=(> ƏǰݚnçsI"X@}F(p[:"A4AU<|!hJM_M=Ɲ搌$MU`W01> Ä.lZ4ze"&(GaձOo&T-d_OhÿCR,&G(,#nZ8AO.2.3V[ȗscMfk )-.7lr_tׯ wG>nCI MqZ,iLBIH5G]Zw/嶺U+Qu VwMe";!2V${c*i %Tl }Tj!CEYa/! E?+K&JE ´s̀RٔLf 4Z{@y]Z4j[(wv.M![vq2-}HW\vULؚo@a-RK\Uȗן7a`6E4;v߾ۜ>!ޱ`7"/ ѯE{@3'N}sW6w~j39j_M/ d~":mm_[pWB~ϰYOAutRNy̢E_0`}M5?P5b "hC!퉶,d3|DuI®Ă\jZNV/4 j5 7ě*?Ă1԰E֑b\D'L~5PdT].Azپ\64=|v]sv}fMeܦ|tF"<&wh;NL)S驮k+N7eTiM(sտB^Pl9&J WgrnmT lA# C9Z)Ő몯d\,}l𼾶f]!\^Ncre/HW=ے6eyr|h嬣Z@aQsK/L*h"N+u' 9Zc$$rۯ-˙h'Sa?ZvxK590/*k'r0ONDF`^DV f<Ԉ-$L{܂]6B[Bo|˙l:"^`=bѮ9iJ8Njfߞ$㮻AB48 =wt"Nx n4xQGyaDZk A>|Ltn.ږ 7V ﻯm2^[05/4m2C3(n_@#ʊĭ QjXu|r0SJq"u'i&&셨Y ̆Gl!3t{N &:&+MSCUxGxVXq''llo!0ݭ|oexL5Ă]\?ݯ7‹7-'cTY- )13PJ&M Zød/ b+->Q wE[|2)v endstream endobj 2976 0 obj << /Length1 1546 /Length2 2901 /Length3 0 /Length 3875 /Filter /FlateDecode >> stream xڍT 8o.TRK!:ԘyɘaC()"m$Z䧄BޤH^Ϲy9}! i,* [;91 Ba`pEapi? l&DK6@h ZBJ'& V,4 B_tϿ4CA!h5 C' TNR t|YpT LU:GOAPXA Xl!˭/H'8@*ҘPFt:hade`y8Z+rb" m)@$  S `kf f)iH2P $BsA._ΡDd D^l@:(ld`m> PjjD_N!hz d 0BX(, 7Bdޠ2%@ACϯ{ 4jo#wZ6WZnȈ :ŨZX ,vrߑ42Q,4-+ ߹lnA[(,}g/__eT 5d͂vmTWZ$ ^ C )L3J0HKav^3*љŗPAPAE^&$%'҈ta P0X,/@,( tlJ5vHEH @ꐤ? @@,? 7DCh@( @ B5_  5X*4x`{N'j[pGeF]nXЈAcُjy5mÉ?` ᷠ^NmyyZ9y3=}j4ϖ zנUAT9pjwt* ?_X+_6*,9q֝;yb[hTbVm!˜6x6vbٻӏ`u]WWRNo{^(`7{5wkZonzq[f>;~Q]4]"V&6Q1vykN>)C뻬 o20e|U:n*F>3w1 r,B%w87#"X1DxJ^w|1o|\g\nAҲ ?B8izGM@>A^o yB=HwKto5{&1*GJj?hQ̰&9R P|s(-^cWV]WDj28)S/¯rOV .Ty'UӐvt>BY摋4`xI{UVesYgE⚶vƝ=9Rcv!mGn\mgAxzB^ChKbəQ}ZogT淮k!?Rm==|7߅g.nuN#_(JHO}Ru, gPhx~gVXDyN.!f9%jŽ@)8B=|SL`)Ft>Tn4\ |&j%vk2J?{-#yNFQ1?{ʦ Md'5VA*ж6m[%2H [sAsu`AT!%M-ᚢO ׫\tƇdbEQgſO&WmئgVf~UOhUYQkvs.,כ"r=Ȝ۞b> j k%?~AWBbyk.K]B4݆KDMĺEޔ8Mp%ڜp{_#ڌ -pYm|vF ';2[6ɺwۖ?&9zKfnߵ1)g1v|{\&fE18@XT|vkyί1pՉt}ϱ bt>^>2cHI˥ǥSf d}Q _ڭ CI=]f٫onDoҿ,{ލ(̭U^ o*^pʼn7>,y&/6!K-Z 7TF9]4F`kWfWݞk`pK.墋̧mĐg8_%TD'gέ-F7lS~C LXVS$aٖд٨0iԄ (Ԍzaא6U3 \(Wn)WxJRs)]l{ͳ_+nI5%~ƐC5ǚC|vзd;ugZTKʣ:omn+ոSvx<:gpf} Mu]uN5Feg,H=o/qdNuH߯9f e8BۙOaM"yMt pF2>uM'Nik{woG9"]5ѽJx_Uֺjh渑݊ǜRNFiB<.5o a5I+fv8+vO8Yn9Y9[J\:1̐:G %g֗-[Z^a>=5~Ng3NN}#knw=*"ߋ!tR}I>`o胿vs ] Ddņ;6n Mf[W sWJvVsW[ZYxZǦtxeN"dL%fg|)"J/x}MD{аƧéglmg 37rK~Mݾ1nWeELJj_Gy K&Sqֺ($NW789dS-OWcQ7wǎ;eu<])v u=K@EH?u,ҥTdZCV']ZZy0!V4k]<$` >*=3θ!!13N߅/-c ͧ}8RҚ{&Oʢy 7#R=iKbوeJ ϏM Fz#ؗE6})ikMÅ"%HDvz[ y2]eAr]Jm7U;̊^f% %VU2R7Zn5!9v[)!44|Z[Ox^Ȝ.`ԉFg+fO:s7VG|<(~Kĵ\=9h-PS2ޡܧIk20la_uHNPiWţW9)oz;dlG4;ʍʦguÎi ̔fMk2*RR=`8#}1Y?ڣD endstream endobj 2978 0 obj << /Length1 725 /Length2 1221 /Length3 0 /Length 1789 /Filter /FlateDecode >> stream xmR{8y5ʡݨM/Ӈ409;ͼ/38b(|[r|]6QҲM`,p^u}繟^7hQɜD ڂ7DDYؘ"".L t(@D"IPШx!ŀ) L, 10 cbbbDbP)ƅ@̇L;@B&Y| |`6 j(5+H)EQu9QhbA&>v*Ö;\XzU4I$`A0i'U#Z+)E(b>ߏ))D1H|Q$DBXQ1<1 g$RiqEnp1ߘP tho|!,CJOA~_̳8B JaOiY(@;ebB8 'B\~ko֑#h\%0'[lEĤ e-_9&ؚ}(,Ӯ]8f}$gO*Buf.'\F_mЙr~t!"==syF|QEţE ?{cy/%?Y}Aǝy~#nPDې?QtqI߲GU Vù(yZHox`x]ST'y@<<~e ֹO~bТ[=]SS} l7^{}>0á Θt dÄ1j)vҒ'"݋D˜=zN̠>fFmzN[tQwf|uL񛲖~8)ȸUF۫ZɋfX4EJˆZE㥏{PGhnj?M(0;YMV9ϬG'iՌ-̟xLQ7s!nBL.0 ,+=99mϻG%~D10WY?5usȻv=رrbU.5 <:UYF&T٢2Oj\tC{[7-hO:%|[t fPO5+Upwڵ3WT?VJ,Qc؍4R0v{jZD.9o_zlē`N)MF.%4 VWLXYһ#ÉyzZ7kka* z? xc^mbP\ͻ7lo|lfSzG'vBlx}]9^oˈ(?xiߴP_},%jxtxK|Z{zq4I ;k/e!Z7Yr/9C7o}duV)/7zlVL*j.C |{5>(/Zp;T,?RiN%uW:#!ĕEϖ˃^M#5޷r?1ZQc&DV~ӠIokU첐{a7ɦ g |#5UZ^̕Qp9>/[ϩuiw d_m]Ebi[3M &WUAl@ OORz- jgzn+`<@SIR: QRlkmDž[TSC IY6L^^$71엫o }\sKSl[L*AlAJtXE endstream endobj 2891 0 obj << /Type /ObjStm /N 100 /First 985 /Length 3300 /Filter /FlateDecode >> stream x[YsI~觍60AڶY2jU-%K ؀@嬪/n{L3!2gALsIExM,W`љXLDȜ [`7`>^ x4q P8]* 6 $9PI+2E K[0k'8w&NCUc"`aKtrh4%-\ pt&u\ 4q)ΗւuwƫHj ZAZ̔4`AL):_K|5ӬKYVPK9VRgʧ|B&8Wp)Ƶl\}v96+~OSU`fҁ -eZ 1'ݚߊ'KeR!b%{Zv90 `ҫ4dϭpWSN#sVd;{Ss` +4d.(s!vbN5øV!P n ̩v5 Q\#~QYr}ӧOyY^6fSf zXL(x&܉CVEϒ#ڔ n:;0qG p]E~Lչj&m_ 8OEyGyޕ7s2ћ4Wd)kN|5Vqj|<`򣱢T ~ӥ@@G ٤@+xo9DvQIѾMjq J|n4P1ڠ)_;# RfE1B"'*1p1|/Hϣ w 2E=-~6-Q2>W1v|{Qs9ylIDO撸- Aq6r6i㦱?::o2Rc7g(e~22u 嬱TrUBRg,z@44qwy8{ޒ:1q'z¥c_8j;%\vI5P [']ғՔ[8z"qGtdn#"uR6U,yJ"VVdj؊ΩQhK#\/NY=PFU1o׆X++MBZzѰW~v7yuo=Uİ_<d R!(<U٤#xbۃ}u[N&Nݽ?7YQ=}z{ƞo7`W:zI6v e:yF: 9_iHiGk(*v.c>{!{žq){^id pd7@v>ȒǢg:|!> ʾ zw_=9xKV@NVwF%J%8#N*YJ~=:|{ ^.2#xDqHذP"⌽QhkmF9.{E|_ :`DcLws@LE(8VfE70ltXiTqGwٙ_g_n]#^0G"$$L? rІAѺNZ{44Dz!UVwgg/w'- k8Ǒ&nt9$ZKy/_F"ֽѣCʔ'ϖ^BJ'wbEIc ku{w4"Iʛ@q0YL)Qwl1)"7'9~Nd;B-df_Ln+tӳ' }BO ]+ g3ڭu>9;ڽ]&O]LCX[BhOb;w_]b(^pӪGrό^_ϓgpFR7{O?%ƻNnFZ}l 7;bR65T9XJMŸʅոjnwNQˡ;ZmgXΫQ Jy)qΕֺR8zzlADiKzm6w^|'۵WCNwv}>P0.MRwVoJzF9wnׂ@%g~\{v}wo TiEW4S>ŲR*3HUG޴[2\d>[E&F:x( endstream endobj 2980 0 obj << /Type /ObjStm /N 100 /First 973 /Length 2204 /Filter /FlateDecode >> stream xڭ]OW\*KJB Bt"`]=&i߷\ nq2 :<@ b oA!I2x#(-<^u7  >&P#QTU0dEa]u"EaDESNhvɩi$7gdW4P*AE9(z!d L!:Q=qC8hX=$GAVR : Hs3F8 h@גbrҨR.N˙R2 ȫ 5Rpi%i tTD3(ʌ"g tF:#Zi2B s}iFm"満>Rf 1FE3d!y@:C$+kcu){C=t圷(6h9MACz c!Ҳ㘕crfrT9 i!T$ ːEw\> ^#!nxF:#FQg0fR"=O=4><9*8>I( )"2-~ys77??Eٻ#ד?]~o?;݋л\?uyb~Nz|n>rsa/dч#ZjF$EF2!-oOw?_L͊ ysãS\~ \qӽ1V=xZIJȗWH˷GyK۳XfQ/~3:?odbz9҃n%yNo|;t>FWdG.DŽ5;;XFj# i"G9aZ[eI6͇OMv~5B ?7FZ9=>9UF3_jѧ^/voh *vzyw27?~?{b 8_zaAI_&829(Lfae.rf̯vqĮVV³L k@`.% Vhybwj h +rȣv ؕYAmdmjz#{YdVѬ\RBX*3[L2 kf-!lcsb0,!t2YX*ېaBXhЂ#.naŶ 6&`;y>Ӂ'/Ml09'g{r9=̖oU@e!i3+8`^F12/sI%ؐ+ [Y&&dWY;%6VlvA&Mnce6ٹ Z2hɠ%U`Y0CKBkNfXՐCz7Ϲ /[5'gV^ю' ^;Y6^<;$;uu+[/HSb RA:kSB@ 5P;PBM(X@[«@ 5lB):PC&C@<4<MnlP4yCC:P&&E߁R7yh6y(<CCuMM&nlP4ypĕ`{A9`)_/(WݣpGjX%5QКs̵`s;P8Ԃ)X@XC&.XC&X@(Pb:PPB(TCM(T@P Pk(ԄR|{@ 6`%tJO >PBJ`J(&P@&(@ P` G endstream endobj 2987 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1640 /Filter /FlateDecode >> stream xڅ݊E$ x9ȁ 1on&S5TN7V̻ l׺`olXX@^d Xv.!_ bߜe 9 9 9Ǐl;LkZ1dY˖7B;fͅIK8|HG99 /Э/~ _UqWu_g?DU U UP*HTW3wX|x/~ __}o~z{} ~>V~JC R )K@C.xGY9J|ޖeK<V@JQ?xG@2I8ہ(5Eфb lQ4"E[M(2HEE (RQE WiQ8EZN((,r$ t߾}?hH^ ꅭ$/Bk?x}I|ݾ&w4$T/hvy+),nVRX0wj]s;]wҷCC`EY j[[JL@r !X[Jt@om[*}oMZ֖7Pj[[Jd@om[*}oZ֖7Pj[[Jh@om[*}o Z֖7P`w* ( 6f7PnmhvZT6բ- Eo-zKEoC[-zkRPVڢT:I8?灖QˁR XwH)p?SMuTb E-(?&Ph" E(ڢHB+(Px@"- 'Pp (ܢPB* (Ph@B- %PP (آ`B* (P`@- $PvE/(ni endstream endobj 2988 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1737 /Filter /FlateDecode >> stream xڅ$ )֑lòj !b.B[_fF.I:ϾvX?dh1@Am{aɂ~5fKy {x=<4y&l!1-j"-C0M*bdrnKA&:rhfGC};j``lRFV/96FF:ƚHglkpjAOF{i^ [DfD:fX֑ :[I&1m%tƲ3oКVn5w趒ہaKM$7[Il 9تvcZU1?niػߑqv[fY4%H;׺mv] mFWju9T@WSvk-e[ 9oZ4c\1v.ØCa̡ shcNڹbkDmB F˶+KRu۶(Mmh}nuKsh$v^lt*`t}x[U\v>hM߿?1}}_6:?8A*{m> `ی S p =*bW_6WK|F-NpS Y ,  `/8ૠ0g!Q00YPԜ_)H2S(HE"BE (H E.p")vP PAA PࠠS(pPP@)8(T@)rPB PAP e8(2"J ePz2R(PKjL_z%/PKjL_Z%$H{,*{~]p|"xW8+*iʟ]6D#~9 >/ (RKz9/ 7^p h"x^LOG*xQF|D 2AqP"L"P$ P8B ;(\@S(젠S(pPP@A)8((P 9(T@)rPB PAP e8(2"J ePz2R(AJwPzG(=V@iJO4JsPS!_PH B0P\Wx8 :g/ˎb>y\K߯%>?\3;G<#xz>O`jp&PR3y\M*M j#LW Mjp&#5y8 (䑚<hHMAhHMAhHM1>r*puш}_<9_<HxHQ?#8G#?RT"=JˠЖBHOW Z(}%N ,*tDs3 fh.'ȅ E :(BQpTA CPQ*"I) G y(0q$GS (x48=pPP@A *P 9(S!@gaD Y{X⻥!57و(5QF5R\d}(WZ endstream endobj 2989 0 obj << /Type /ObjStm /N 100 /First 965 /Length 1799 /Filter /FlateDecode >> stream xڅ۪S®Sw1L/}a l?~4QVf׭_4j}QMwȆ8|ж[} >{@6%Az㏆o}}iݔQ6>2\{?..OlH]m`; f(xCRh{ U<0=f{=lYѤLFb16˶7e66Jqx\7rz|5Q!^յ5aM6`!{f(lFG:Ҡ1xf-%a'؟iW gقCӺ;ܺ'50}'؟iǴ֕;l%wE6N[ uM˪w[aMk`0}ȦC0}X>k/ OR!<|rB%`/dL>U0S(M'ӿfӇ!>B6}(M/dӇ!>;(BI!Eݦy*SdzݑQɞ*Tu~]M*!<­@˥BI+k^/V.p[w W*HwJzyٗ7aكw'PHࠇ!Pex8g~G~m|3N^8=_ qy5k1o,6)vA7:m>Sna>= nט'ocr|TOfry*ȿUg?bz6[/[%H٭7COBzXȬ:+6_>SԸq^\Hu9γNԥooDn*#I/1+3> stream xڥ\m6_%@Vmmc'I':UwH%R!)ۓ_ 4%(u&Ѝi5@jŦHFFJjS*z ՘vTc7qxP.؈BIElKKOF^ #,>F8Ezn#.odaPO` !(E쪠' =h ZGmHХ oJPE0%Murr,PJҠ_puh[=>X#48*bcJoG)6HRʍq%bP%b.*qT2BK|/Vb)g,)qD=Un<'R!F7};OR;VK5z)n/F" o1`Ѓ0 z!B]OљΗ%IIP:CHo xԳnp9j]#ToJQD xSphӰZZ ZS3/+5x*h S* HQ Yff8 . 4aB)YFY8fxsq͖:fuAIZqp8G8aC8 /)7' g g *  X%a/p^bi `’ƒRKIqlbK B6\`|!S[!IJ,1 `rb%:I36 )8ʩJ(D!hs&HS)NHqDII(x(H(DHuf#E]U"ũ%S,d%R%%S6uo0uX` lbc!SdCbaIv'dw3ɋ v,8@zӨ;L:%'$  S$L0J݄|(H,DvI%A%<_KEYР~WZ\HpJ(0T&vQ8THJa_HJat$") Fo.R#);P)m"Ct)#Y-C(Ki.iOk,D~)OӆC(K: ,N? XXBB͢,gJԏB$h4"AS8CR65&c ,l$gHqIXIvQ8`X,Rv豐$!heCjю+iX}$b\H݁]~؃.9ꑄCF##I8dcw:d#,\ -pHG #!9xL}8p1Is!FpxLzxxy8pN+m?H3ԥ/}-'!@ϩf0j=`~'4;>5f1oBz;hƃtj9ȱ<^y k͈HxI~S7m=3][.+֍$ys $ُ(R{juG?qpdށڱvm.am=$"w[^1,Y.PRB]u-yyWbw﫻@5 <8mH'?bp,;J'I3{q/>@ɉ=}/vGk.TnEjTJKI^]kaxW0Nxk6};# fN(h؜y !r 0Zj/tJ>C$4C:Aqjwa@z:< Ͼ>t&i}њg#оٙqg Pފpљ.u) ƌ̊40AdOimW5-V "4öoa-fI݄ % h k\T ]^|Pf˰K>&O@Sݏ1M7`4 ܤ :$y5Nxerq!J|TK4M^ôhAR9]bLڭ΋+gz|vc(AU.T~>v!P >Oz!ޱ/aqz*K ԙ9ȸ#lW$$Gkl=s3Լb8gjI/QE*ɥ:M_76NOi3 )hS}ǎ9ºssϦO| Їj(kT^Y(ZPL e|mm\U\ "5 ? >0FB7(y?_y6;ʩeQQ@t;vۏ?VG߭.Y57OnE"Qk,AKhYZ*]5&Y(|Ʈ3cOרywе?T4>7S'O2~Cj.ȗZ)TǺ;x-!e!ٸ]7>N$_/W;J#)E~oV7uE_H)ŊSpW _uj=[)+њ}صnIZpOjSF` K>~͗c 9xkϳLL_믧/Jw??4J.(?gZ`>4q*@SQx_ö;XSXӝ+XNZ֬\ ]]}ކ<-nV,tmy j|ж W"2Y3r- ^s8Y=‚ZUBw᳜BO{J@}_-m{ocbZd2\J򬚾|̚6]SHm> }a}~A f5p- Xz0)F>X%(vPaeǏ$0ثXeWk1:!+I1~ꖶ36&ê&XN$ kaR+&Ťi+c5El%iJ :#Eke v8vo9 HY=Ԯ"g\ OT&z+{>O6:\CZWUB:ߪNHPnڎ {%(gFkVsqoIRR~ɲ[?U_a_Q|kuS\U.䭬cv}77Gߎ 5^uE}g5͡#ftΟR$ ˆ OU?>8C`8fD"HF>*M~hv ["L~=C PrDm$>/z ӟ#?h~0`ea{s. O0ҟ)*Xc5?hyb~%SLI2% Q?Çg>2I$%,9%c+啯z׾co%s*SɜJ{Ɉҗ뙏Of&WLC1 4X1ןOZNQF1U L@[b9i椙k@'b)Zhu}OI8&ᘄSϯ3I?X횕09~'Eh'* endstream endobj 3094 0 obj << /Producer (pdfTeX-1.40.26) /Creator (TeX) /CreationDate (D:20240706194605Z) /ModDate (D:20240706194605Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) kpathsea version 6.4.0) >> endobj 3092 0 obj << /Type /ObjStm /N 2 /First 15 /Length 155 /Filter /FlateDecode >> stream x5 0y9A6?(B.h=HCR+=&^ofUPPiͨta h16h1md]?3̨=bahc%>ӽ;5+ϺƢY-AgP cdbQ-9>~4e endstream endobj 3095 0 obj << /Type /XRef /Index [0 3096] /Size 3096 /W [1 3 1] /Root 3093 0 R /Info 3094 0 R /ID [<7D09C7E6FE4B9344CB03C6C1BFBB4BC1> <7D09C7E6FE4B9344CB03C6C1BFBB4BC1>] /Length 7346 /Filter /FlateDecode >> stream x%y[uqnJWg=IOOӓ4|銚yz A&qb MHТӲihz6-bק"0l)\)hI4aM▩z|{x޿k[T*?JʒJT0Ƽj2`8 RexȻ5-΃I0 u,%rX+a0*ߍ[+'Z,U+S3 Vzn~o[6&x6;6;] `7{`/p!8 G(ЀSpY8]KpUkЄpn-  ><x /79*i=uc򞙷 |XW`|9o̭WNdVYIf%dVYIf%dVYIf%dVYIf%dVZ+RJI*%RJI*%RƙJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%RJI*%R>_R)C9/Re?p N8 <\"\p \&\pnm]1< B>OSe_\>H_  އ01xϞ x 5ĻR8|A*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*RJA*!<R)B9Rк~?>*+^-5\FuTWKA/RKA/X/սHPL<`!LCbXKa,VjXka`lM6lw` lmvvnx^CpQ8ǡ 8 4p.% W*5hu7܅{p@~ut?L{?Oz^`< [5»18!ΊD3H4#2H*#2H*#2H*K P 0,i"X K`),V*X k`-l ކl xv.  `?p8 84}8'3pyE \7܆PحTy1L- z\KR'oWVo5JPo;pxN93@={ a#b-:,n֍6Ȧp=!<3x/%蔷jm:miNtڦ6Mm:miNtڦ6Mm:miNtڦ6Mm:miNtڦ6Mm:m6Mm:miNtڦ6Mm:miNtڦ6Mm:miNtڦ6*F ia 2ׁF7z*?7A\:5uX ` [ac.)cmL\Lc9r~ڗ^ȑEW^KgrԾM9'nWk_r=sf-r4fɶ%b9bmSv9*nxј#6-vX΀GOޒv8|\K9;[rGb?;*ǍJވom=gByB1䣡IS4!G MjHh5Q 6\fɭf^pZ9qtUrkޑSJ8\']6,9|Kn;dFwjȦS ;|GnMYwUn?dvjC9B!cw!ߓ,c!!5y ʽ/C`xX0TGȩ qrJ0`ROʝSdq.WE[i]ƀ&\SN!D].7GfsJ0Ĵ;=b(0ļ0=Ceb6aykz.SL̃Rrِr萉(C&2:4=`!Wse Ӆxă(P~&La|~IV㋘}^.'샨˄q>샍rKQP-nfD)&7- >C}eJ}%}0 |`ϹC샽rGQxbԄ V `Aj$)`Aj@w?f{#>8)Zx}pJ20@^)<k\x}3M`EMKrOw T0@>>f(P݇x T7>eM80Սń]a D]Ʃ ]S*̮Juo f*wK8avݛI.0 ׽.\av!5b.=p),SWa ׽"\ u{Yu/ ׂD]q^K@6)n M`SWܺ煛!uT[u ER]q=- )nxONqwuŭ{B,[}+n݆)+n#pTNq)nݣ8.S}\Y|I9ŭ{X'nPWܺqgAa y9wZ8iu c q1VuWȬ+WSNa' ajn qJ0vw )ݘ;`RW }9S)xG`[w Y`|>pC(fOWb[maZtn ' tn 'nq:7  Ep!0{C4u] =k[r3¥ EsU(tWBlxu\fo( Kµ{"Bp=0{CQ| P: R:煛!n9'avsV EpD]foiuN wE:'{[Gp0{H}`NCxns\x}9& 0{KAt˙nsX'-w#ʸhfoi:u cttcO/b҉KIf+ 0{H')-w!LfoEQ!QG;.a[~;1=w 3{[!uBf3{ϭxg^x o 2{{!sY!/b^$';LʼnӈM %Bg^%>v j?:SD{!i!51tg[ΔދE^rO{Qc8r\g^nf3{/oM}fB*g^h( PȌShg?2{{}tg>,f_ A,(K!}IG>rg4\}f)ng>>2{Gxf؂Pf #w<هxG6#f#qPfk/b3aٻf퓋SAdxJtlÊW>"x4T[ `ٛI`2{C}1{]}D Ma}x^.f٫죘TY |Yxx66dB_ь͜ ǡA b(&>66zЌ?'HF܁6`~~fO wZtٓ=Ǧ̞r:Į_نS0{\xԗf0Gj0@*M?/w8qul62.0s6N7Me3_n6.5&ٲnsv0r ]w}ϫch7D}n?|Typ}xO^Ɠp^TW %!>ש֖fo_]_4*?i-T-DXϬHo ׂ^F̚T = lM'?74gvN Z3{@wfhxpFw4#3S;Z3'@vƳ3ڳ3g@Svh\ ؙ:sG^gc9BClބTLlvށb;&fPؿIئ|9S9hDOiQO]OijOvOiOOiOOiO>K1eR8-e4s9QzJSۅ 6 =?>%㠛mMi՗"gbwM魽񆉚;Җߎ06N{q|[Pl|SsS:s-[)5~9rOǞ{ҙGAG)]d%/ģ=oF+Rz8؁qY)HpOb.p#O0?al4RŰ ΤK %%iDGvJ h`|EUm\uJJN~'Em)}"6}9=>UT}|\FxJNI'O^JiG2,^OߌxRW"N˔~4_,Z.z9O4b=ߎ\,WN|yD^;$> 6zp=UO.А4-z ӈ6P#U=GYRķzq%U|;>ƍT}#VTX؊&NjTTR(rg RqւT\նTs,>LXekk|oĊjg;z/N~!B^Ns 8j?_D=*NCXŜM_Ghһj!ڋ^&gzSr}N>X}zg{j m♻g3x*{j?p<g.E,>L#tm;{%k1#LMhm˟0bc}zxdGo}.raܽHI0P GˆFRB#22c# #%r4?x##esD YPcDfrz%XVaG0zjnО*n#*~J_8Թk41ٌFs2MOĒB9&^ZsIXjgeش*B 4O#֌4g#k-ibf5b!;Muc@8{3B 4q+76d+ iE7ߚ ͸elQo.4ݣ7c7vZ M=-=4ѷx/xu?MAާ4x(y_:w4yǫgiI7OW/W/x*͟_NXB,KXNOcTF|yn'75'\+[斪91ڳ~lnCۤ-UskӜ,r=ܚ86i#ʭskb4Z7' 7"I%^NK]jRs\"\+̭%sBʵrZ2xI*mibnySXnUWn-[#U`Np&Vn[TYNf9dYNf9dYNf9dYn!׭r˾!L̵,r V@wUwt+R[C1- endstream endobj startxref 479125 %%EOF apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/000077500000000000000000000000001515050116100223365ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/000077500000000000000000000000001515050116100244075ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/000077500000000000000000000000001515050116100253535ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/API-Alphabetically.html000066400000000000000000000135471515050116100316000ustar00rootroot00000000000000 API Alphabetically (Tablicious v0.4.4) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/API-Reference.html000066400000000000000000000047261515050116100305570ustar00rootroot00000000000000 API Reference (Tablicious v0.4.4) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/API-by-Category.html000066400000000000000000000360351515050116100310440ustar00rootroot00000000000000 API by Category (Tablicious v0.4.4)

    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.

    8.1.9 Uncategorized

    caldays

    Create a ‘calendarDuration’ that is a given number of calendar days long.

    See caldays.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Copying.html000066400000000000000000000077441515050116100276650ustar00rootroot00000000000000 Copying (Tablicious v0.4.4)

    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Data-Sets-from-R.html000066400000000000000000000056651515050116100312020ustar00rootroot00000000000000 Data Sets from R (Tablicious v0.4.4)

    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.

    Date-and-Time-Representation.html000066400000000000000000000060501515050116100334740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html Date and Time Representation (Tablicious v0.4.4)

    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Datenum-Compatibility.html000066400000000000000000000074561515050116100324610ustar00rootroot00000000000000 Datenum Compatibility (Tablicious v0.4.4)

    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Defined-Time-Zones.html000066400000000000000000000060041515050116100315670ustar00rootroot00000000000000 Defined Time Zones (Tablicious v0.4.4)

    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Durations.html000066400000000000000000000046401515050116100302150ustar00rootroot00000000000000 Durations (Tablicious v0.4.4) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Example-Data-Sets.html000066400000000000000000000102141515050116100314150ustar00rootroot00000000000000 Example Data Sets (Tablicious v0.4.4)

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Getting-Started.html000066400000000000000000000064061515050116100312540ustar00rootroot00000000000000 Getting Started (Tablicious v0.4.4)

    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.4/tablicious-0.4.4.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Introduction.html000066400000000000000000000072341515050116100307300ustar00rootroot00000000000000 Introduction (Tablicious v0.4.4)

    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.4 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Missing-Functionality.html000066400000000000000000000105271515050116100325050ustar00rootroot00000000000000 Missing Functionality (Tablicious v0.4.4)

    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/NaC.html000066400000000000000000000075721515050116100267150ustar00rootroot00000000000000 NaC (Tablicious v0.4.4)

    8.2.45 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/NaS.html000066400000000000000000000074571515050116100267370ustar00rootroot00000000000000 NaS (Tablicious v0.4.4)

    8.2.46 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/NaT.html000066400000000000000000000075231515050116100267320ustar00rootroot00000000000000 NaT (Tablicious v0.4.4)

    8.2.47 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Table-Construction.html000066400000000000000000000070301515050116100317600ustar00rootroot00000000000000 Table Construction (Tablicious v0.4.4)

    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Table-Representation.html000066400000000000000000000100201515050116100322610ustar00rootroot00000000000000 Table Representation (Tablicious v0.4.4)

    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Tables-vs-SQL.html000066400000000000000000000113541515050116100305420ustar00rootroot00000000000000 Tables vs SQL (Tablicious v0.4.4)

    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Time-Zones.html000066400000000000000000000141201515050116100302310ustar00rootroot00000000000000 Time Zones (Tablicious v0.4.4)

    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/Validation-Functions.html000066400000000000000000000117411515050116100323050ustar00rootroot00000000000000 Validation Functions (Tablicious v0.4.4)

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/array2table.html000066400000000000000000000102251515050116100304510ustar00rootroot00000000000000 array2table (Tablicious v0.4.4)

    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/caldays.html000066400000000000000000000064471515050116100276740ustar00rootroot00000000000000 caldays (Tablicious v0.4.4)

    8.2.2 caldays

    Function File: out = caldays (x)

    Create a calendarDuration that is a given number of calendar days long.

    Input x is a numeric array specifying the number of calendar days.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, 0, x).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/calendarDuration-Class.html000066400000000000000000000063041515050116100325660ustar00rootroot00000000000000 calendarDuration Class (Tablicious v0.4.4)

    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/calendarDuration.html000066400000000000000000000105131515050116100315200ustar00rootroot00000000000000 calendarDuration (Tablicious v0.4.4)

    8.2.3 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.

    calendarDuration_002ecalendarDuration.html000066400000000000000000000077101515050116100353740ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.calendarDuration (Tablicious v0.4.4)

    8.2.3.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.

    calendarDuration_002edispstrs.html000066400000000000000000000062101515050116100337620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.dispstrs (Tablicious v0.4.4)

    8.2.3.2 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    calendarDuration_002eismissing.html000066400000000000000000000062101515050116100341140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.ismissing (Tablicious v0.4.4)

    8.2.3.3 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.

    calendarDuration_002eisnan.html000066400000000000000000000062541515050116100332270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.isnan (Tablicious v0.4.4)

    8.2.3.4 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.

    calendarDuration_002eminus.html000066400000000000000000000061241515050116100332460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.minus (Tablicious v0.4.4)

    8.2.3.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.

    calendarDuration_002emtimes.html000066400000000000000000000063151515050116100334130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.mtimes (Tablicious v0.4.4)

    8.2.3.6 calendarDuration.mtimes

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    This does not do true matrix multiplication, so at least one of the input arguments must be scalar.

    Returns a calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/calendarDuration_002eplus.html000066400000000000000000000067731515050116100331670ustar00rootroot00000000000000 calendarDuration.plus (Tablicious v0.4.4)

    8.2.3.7 calendarDuration.plus

    Method: out = plus (obj, B)

    Addition: add to a calendarDuration.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    B may be a calendarDuration, duration, or numeric. If B is numeric, it is converted to a calendarDuration using caldays(B).

    Returns a calendarDuration.

    calendarDuration_002etimes.html000066400000000000000000000061701515050116100332350ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.times (Tablicious v0.4.4)

    8.2.3.8 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor B.

    Returns a calendarDuration.

    calendarDuration_002euminus.html000066400000000000000000000055471515050116100334430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html calendarDuration.uminus (Tablicious v0.4.4)

    8.2.3.9 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj, which is equivalent to negating each of its components.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/calmonths.html000066400000000000000000000064611515050116100302400ustar00rootroot00000000000000 calmonths (Tablicious v0.4.4)

    8.2.4 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/calyears.html000066400000000000000000000057671515050116100300630ustar00rootroot00000000000000 calyears (Tablicious v0.4.4)

    8.2.5 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical.html000066400000000000000000000175731515050116100305330ustar00rootroot00000000000000 categorical (Tablicious v0.4.4)

    8.2.6 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002eaddcats.html000066400000000000000000000057541515050116100326030ustar00rootroot00000000000000 categorical.addcats (Tablicious v0.4.4)

    8.2.6.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002ecategorical.html000066400000000000000000000135771515050116100334000ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.categorical (Tablicious v0.4.4)

    8.2.6.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.

    categorical_002ecategories.html000066400000000000000000000061471515050116100332430ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.categories (Tablicious v0.4.4)

    8.2.6.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002ecellstr.html000066400000000000000000000062261515050116100326430ustar00rootroot00000000000000 categorical.cellstr (Tablicious v0.4.4)

    8.2.6.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002edispstrs.html000066400000000000000000000062351515050116100330460ustar00rootroot00000000000000 categorical.dispstrs (Tablicious v0.4.4)

    8.2.6.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002edouble.html000066400000000000000000000066471515050116100324540ustar00rootroot00000000000000 categorical.double (Tablicious v0.4.4)

    8.2.6.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.

    categorical_002eiscategory.html000066400000000000000000000062661515050116100332710ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.iscategory (Tablicious v0.4.4)

    8.2.6.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002eismissing.html000066400000000000000000000061211515050116100331720ustar00rootroot00000000000000 categorical.ismissing (Tablicious v0.4.4)

    8.2.6.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002eisnanny.html000066400000000000000000000062241515050116100326500ustar00rootroot00000000000000 categorical.isnanny (Tablicious v0.4.4)

    8.2.6.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002eisordinal.html000066400000000000000000000061301515050116100331510ustar00rootroot00000000000000 categorical.isordinal (Tablicious v0.4.4)

    8.2.6.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.

    categorical_002eisundefined.html000066400000000000000000000064421515050116100334110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.isundefined (Tablicious v0.4.4)

    8.2.6.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002emergecats.html000066400000000000000000000075641515050116100331530ustar00rootroot00000000000000 categorical.mergecats (Tablicious v0.4.4)

    8.2.6.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002emissing.html000066400000000000000000000074411515050116100326440ustar00rootroot00000000000000 categorical.missing (Tablicious v0.4.4)

    8.2.6.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined

    categorical_002eremovecats.html000066400000000000000000000074411515050116100332640ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.removecats (Tablicious v0.4.4)

    8.2.6.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.

    categorical_002erenamecats.html000066400000000000000000000067631515050116100332440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.renamecats (Tablicious v0.4.4)

    8.2.6.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.

    categorical_002ereordercats.html000066400000000000000000000072151515050116100334300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.reordercats (Tablicious v0.4.4)

    8.2.6.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002esetcats.html000066400000000000000000000062401515050116100326350ustar00rootroot00000000000000 categorical.setcats (Tablicious v0.4.4)

    8.2.6.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.

    categorical_002esqueezecats.html000066400000000000000000000061001515050116100334370ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html categorical.squeezecats (Tablicious v0.4.4)

    8.2.6.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002estring.html000066400000000000000000000062361515050116100325020ustar00rootroot00000000000000 categorical.string (Tablicious v0.4.4)

    8.2.6.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002esummary.html000066400000000000000000000060301515050116100326610ustar00rootroot00000000000000 categorical.summary (Tablicious v0.4.4)

    8.2.6.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/categorical_002eundefined.html000066400000000000000000000066331515050116100331360ustar00rootroot00000000000000 categorical.undefined (Tablicious v0.4.4)

    8.2.6.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/cell2table.html000066400000000000000000000101571515050116100302560ustar00rootroot00000000000000 cell2table (Tablicious v0.4.4)

    8.2.7 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/colvecfun.html000066400000000000000000000065331515050116100302340ustar00rootroot00000000000000 colvecfun (Tablicious v0.4.4)

    8.2.8 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/contains.html000066400000000000000000000074151515050116100300660ustar00rootroot00000000000000 contains (Tablicious v0.4.4)

    8.2.9 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datasets_002edescription.html000066400000000000000000000064641515050116100330550ustar00rootroot00000000000000 datasets.description (Tablicious v0.4.4)

    8.2.59.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datasets_002elist.html000066400000000000000000000065021515050116100314760ustar00rootroot00000000000000 datasets.list (Tablicious v0.4.4)

    8.2.59.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datasets_002eload.html000066400000000000000000000062271515050116100314460ustar00rootroot00000000000000 datasets.load (Tablicious v0.4.4)

    8.2.59.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime-Class.html000066400000000000000000000063611515050116100311060ustar00rootroot00000000000000 datetime Class (Tablicious v0.4.4)

    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime.html000066400000000000000000000200321515050116100300320ustar00rootroot00000000000000 datetime (Tablicious v0.4.4)

    8.2.10 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eNaT.html000066400000000000000000000075131515050116100311740ustar00rootroot00000000000000 datetime.NaT (Tablicious v0.4.4)

    8.2.10.25 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002ecolon.html000066400000000000000000000116541515050116100316250ustar00rootroot00000000000000 datetime.colon (Tablicious v0.4.4)

    8.2.10.1 datetime.colon

    Method: out = colon (lo, hi)
    Method: out = colon (hi, inc, hi)

    Generate a sequence of uniformly-spaced values.

    This method implements the behavior for the colon operator (lo:hi or lo:inc:hi calls) for the datetime type.

    "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time.

    The inc argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with duration.ofDays (inc). The default value for inc, used in the two-arg lo:hi is 1, that is, 1 day of exactly 24 hours.

    Returns a datetime vector.

    WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if inc is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.


    datetime_002econvertDatenumTimeZone.html000066400000000000000000000067531515050116100351110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html datetime.convertDatenumTimeZone (Tablicious v0.4.4)

    8.2.10.2 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edatenum.html000066400000000000000000000057751515050116100321570ustar00rootroot00000000000000 datetime.datenum (Tablicious v0.4.4)

    8.2.10.3 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time.

    Returns double array of same size as this.

    datetime_002edatenum2posix.html000066400000000000000000000060651515050116100332360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html datetime.datenum2posix (Tablicious v0.4.4)

    8.2.10.4 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edatestr.html000066400000000000000000000065741515050116100321660ustar00rootroot00000000000000 datetime.datestr (Tablicious v0.4.4)

    8.2.10.5 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edatestrs.html000066400000000000000000000066461515050116100323510ustar00rootroot00000000000000 datetime.datestrs (Tablicious v0.4.4)

    8.2.10.6 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edatestruct.html000066400000000000000000000066421515050116100326760ustar00rootroot00000000000000 datetime.datestruct (Tablicious v0.4.4)

    8.2.10.7 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edatetime.html000066400000000000000000000135061515050116100323050ustar00rootroot00000000000000 datetime.datetime (Tablicious v0.4.4)

    8.2.10.8 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edatevec.html000066400000000000000000000056511515050116100321260ustar00rootroot00000000000000 datetime.datevec (Tablicious v0.4.4)

    8.2.10.9 datetime.datevec

    Method: out = datevec (obj)

    Convert this to a datevec that represent the same local wall time.

    Returns double array of size [numel(obj) 6].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002ediff.html000066400000000000000000000060611515050116100314170ustar00rootroot00000000000000 datetime.diff (Tablicious v0.4.4)

    8.2.10.10 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002edispstrs.html000066400000000000000000000056621515050116100323700ustar00rootroot00000000000000 datetime.dispstrs (Tablicious v0.4.4)

    8.2.10.11 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eeq.html000066400000000000000000000062111515050116100311110ustar00rootroot00000000000000 datetime.eq (Tablicious v0.4.4)

    8.2.10.12 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002ege.html000066400000000000000000000062241515050116100311030ustar00rootroot00000000000000 datetime.ge (Tablicious v0.4.4)

    8.2.10.13 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002egmtime.html000066400000000000000000000060401515050116100317660ustar00rootroot00000000000000 datetime.gmtime (Tablicious v0.4.4)

    8.2.10.14 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002egt.html000066400000000000000000000062131515050116100311200ustar00rootroot00000000000000 datetime.gt (Tablicious v0.4.4)

    8.2.10.15 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002ehms.html000066400000000000000000000061071515050116100312770ustar00rootroot00000000000000 datetime.hms (Tablicious v0.4.4)

    8.2.10.16 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eisbetween.html000066400000000000000000000063101515050116100324710ustar00rootroot00000000000000 datetime.isbetween (Tablicious v0.4.4)

    8.2.10.17 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eisnan.html000066400000000000000000000060071515050116100316170ustar00rootroot00000000000000 datetime.isnan (Tablicious v0.4.4)

    8.2.10.18 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eisnat.html000066400000000000000000000055671515050116100316370ustar00rootroot00000000000000 datetime.isnat (Tablicious v0.4.4)

    8.2.10.19 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002ele.html000066400000000000000000000062441515050116100311120ustar00rootroot00000000000000 datetime.le (Tablicious v0.4.4)

    8.2.10.20 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002elinspace.html000066400000000000000000000067001515050116100323050ustar00rootroot00000000000000 datetime.linspace (Tablicious v0.4.4)

    8.2.10.21 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002elocaltime.html000066400000000000000000000066761515050116100324740ustar00rootroot00000000000000 datetime.localtime (Tablicious v0.4.4)

    8.2.10.22 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002elt.html000066400000000000000000000062341515050116100311300ustar00rootroot00000000000000 datetime.lt (Tablicious v0.4.4)

    8.2.10.23 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eminus.html000066400000000000000000000067641515050116100316540ustar00rootroot00000000000000 datetime.minus (Tablicious v0.4.4)

    8.2.10.24 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002ene.html000066400000000000000000000062251515050116100311130ustar00rootroot00000000000000 datetime.ne (Tablicious v0.4.4)

    8.2.10.26 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eofDatenum.html000066400000000000000000000060111515050116100324240ustar00rootroot00000000000000 datetime.ofDatenum (Tablicious v0.4.4)

    8.2.10.27 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eofDatestruct.html000066400000000000000000000062461515050116100331630ustar00rootroot00000000000000 datetime.ofDatestruct (Tablicious v0.4.4)

    8.2.10.28 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eplus.html000066400000000000000000000070541515050116100314750ustar00rootroot00000000000000 datetime.plus (Tablicious v0.4.4)

    8.2.10.29 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy.

    Returns datetime array the same size as A.

    datetime_002eposix2datenum.html000066400000000000000000000061621515050116100332340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html datetime.posix2datenum (Tablicious v0.4.4)

    8.2.10.30 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eposixtime.html000066400000000000000000000062411515050116100325300ustar00rootroot00000000000000 datetime.posixtime (Tablicious v0.4.4)

    8.2.10.31 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eproxyKeys.html000066400000000000000000000064561515050116100325340ustar00rootroot00000000000000 datetime.proxyKeys (Tablicious v0.4.4)

    8.2.10.32 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002etimeofday.html000066400000000000000000000061241515050116100324700ustar00rootroot00000000000000 datetime.timeofday (Tablicious v0.4.4)

    8.2.10.33 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eweek.html000066400000000000000000000055271515050116100314500ustar00rootroot00000000000000 datetime.week (Tablicious v0.4.4)

    8.2.10.34 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eymd.html000066400000000000000000000060751515050116100313050ustar00rootroot00000000000000 datetime.ymd (Tablicious v0.4.4)

    8.2.10.35 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/datetime_002eymdhms.html000066400000000000000000000060321515050116100320060ustar00rootroot00000000000000 datetime.ymdhms (Tablicious v0.4.4)

    8.2.10.36 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/days.html000066400000000000000000000062121515050116100272020ustar00rootroot00000000000000 days (Tablicious v0.4.4)

    8.2.11 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/discretize.html000066400000000000000000000121171515050116100304100ustar00rootroot00000000000000 discretize (Tablicious v0.4.4)

    8.2.12 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/dispstrs.html000066400000000000000000000065541515050116100301260ustar00rootroot00000000000000 dispstrs (Tablicious v0.4.4)

    8.2.13 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration-Class.html000066400000000000000000000057531515050116100311430ustar00rootroot00000000000000 duration Class (Tablicious v0.4.4)

    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration.html000066400000000000000000000122221515050116100300650ustar00rootroot00000000000000 duration (Tablicious v0.4.4)

    8.2.14 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002echar.html000066400000000000000000000056411515050116100314600ustar00rootroot00000000000000 duration.char (Tablicious v0.4.4)

    8.2.14.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002edispstrs.html000066400000000000000000000056711515050116100324210ustar00rootroot00000000000000 duration.dispstrs (Tablicious v0.4.4)

    8.2.14.2 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002ehours.html000066400000000000000000000057621515050116100317070ustar00rootroot00000000000000 duration.hours (Tablicious v0.4.4)

    8.2.14.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002elinspace.html000066400000000000000000000067371515050116100323500ustar00rootroot00000000000000 duration.linspace (Tablicious v0.4.4)

    8.2.14.4 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002emilliseconds.html000066400000000000000000000060441515050116100332260ustar00rootroot00000000000000 duration.milliseconds (Tablicious v0.4.4)

    8.2.14.5 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002eminutes.html000066400000000000000000000060201515050116100322170ustar00rootroot00000000000000 duration.minutes (Tablicious v0.4.4)

    8.2.14.6 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002eofDays.html000066400000000000000000000062041515050116100317640ustar00rootroot00000000000000 duration.ofDays (Tablicious v0.4.4)

    8.2.14.7 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002eseconds.html000066400000000000000000000057351515050116100322050ustar00rootroot00000000000000 duration.seconds (Tablicious v0.4.4)

    8.2.14.8 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/duration_002eyears.html000066400000000000000000000055101515050116100316610ustar00rootroot00000000000000 duration.years (Tablicious v0.4.4)

    8.2.14.9 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/eqn.html000066400000000000000000000074241515050116100270330ustar00rootroot00000000000000 eqn (Tablicious v0.4.4)

    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/head.html000066400000000000000000000074421515050116100271510ustar00rootroot00000000000000 head (Tablicious v0.4.4) apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/hours.html000066400000000000000000000062551515050116100274110ustar00rootroot00000000000000 hours (Tablicious v0.4.4)

    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/index.html000066400000000000000000001330171515050116100273550ustar00rootroot00000000000000 Top (Tablicious v0.4.4)

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.4.

    Table of Contents


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/iscalendarduration.html000066400000000000000000000062151515050116100321200ustar00rootroot00000000000000 iscalendarduration (Tablicious v0.4.4)

    8.2.18 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/iscategorical.html000066400000000000000000000061711515050116100310570ustar00rootroot00000000000000 iscategorical (Tablicious v0.4.4)

    8.2.19 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/isdatetime.html000066400000000000000000000061011515050116100303670ustar00rootroot00000000000000 isdatetime (Tablicious v0.4.4)

    8.2.20 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/isduration.html000066400000000000000000000060451515050116100304270ustar00rootroot00000000000000 isduration (Tablicious v0.4.4)

    8.2.21 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/isfile.html000066400000000000000000000044461515050116100275240ustar00rootroot00000000000000 isfile (Tablicious v0.4.4)

    8.2.22 isfile

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/isfolder.html000066400000000000000000000044361515050116100300570ustar00rootroot00000000000000 isfolder (Tablicious v0.4.4)

    8.2.23 isfolder

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/isnanny.html000066400000000000000000000073771515050116100277360ustar00rootroot00000000000000 isnanny (Tablicious v0.4.4)

    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/istable.html000066400000000000000000000064521515050116100276730ustar00rootroot00000000000000 istable (Tablicious v0.4.4)

    8.2.25 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/istabular.html000066400000000000000000000061721515050116100302350ustar00rootroot00000000000000 istabular (Tablicious v0.4.4)

    8.2.26 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/istimetable.html000066400000000000000000000065461515050116100305560ustar00rootroot00000000000000 istimetable (Tablicious v0.4.4)

    8.2.27 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate.html000066400000000000000000000122041515050116100301700ustar00rootroot00000000000000 localdate (Tablicious v0.4.4)

    8.2.28 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002eNaT.html000066400000000000000000000101051515050116100313170ustar00rootroot00000000000000 localdate.NaT (Tablicious v0.4.4)

    8.2.28.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002edatenum.html000066400000000000000000000054561515050116100323070ustar00rootroot00000000000000 localdate.datenum (Tablicious v0.4.4)

    8.2.28.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002edatestr.html000066400000000000000000000065721515050116100323200ustar00rootroot00000000000000 localdate.datestr (Tablicious v0.4.4)

    8.2.28.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002edatestrs.html000066400000000000000000000066741515050116100325060ustar00rootroot00000000000000 localdate.datestrs (Tablicious v0.4.4)

    8.2.28.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002edatestruct.html000066400000000000000000000070771515050116100330350ustar00rootroot00000000000000 localdate.datestruct (Tablicious v0.4.4)

    8.2.28.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002edispstrs.html000066400000000000000000000057471515050116100325300ustar00rootroot00000000000000 localdate.dispstrs (Tablicious v0.4.4)

    8.2.28.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002eisnan.html000066400000000000000000000060241515050116100317520ustar00rootroot00000000000000 localdate.isnan (Tablicious v0.4.4)

    8.2.28.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002eisnat.html000066400000000000000000000056501515050116100317640ustar00rootroot00000000000000 localdate.isnat (Tablicious v0.4.4)

    8.2.28.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002elocaldate.html000066400000000000000000000110351515050116100325700ustar00rootroot00000000000000 localdate.localdate (Tablicious v0.4.4)

    8.2.28.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002eposixtime.html000066400000000000000000000062771515050116100326750ustar00rootroot00000000000000 localdate.posixtime (Tablicious v0.4.4)

    8.2.28.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/localdate_002eymd.html000066400000000000000000000055241515050116100314370ustar00rootroot00000000000000 localdate.ymd (Tablicious v0.4.4)

    8.2.28.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/milliseconds.html000066400000000000000000000063601515050116100307330ustar00rootroot00000000000000 milliseconds (Tablicious v0.4.4)

    8.2.29 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/minutes.html000066400000000000000000000055711515050116100277350ustar00rootroot00000000000000 minutes (Tablicious v0.4.4)

    8.2.30 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/missing.html000066400000000000000000000075011515050116100277150ustar00rootroot00000000000000 missing (Tablicious v0.4.4)

    8.2.31 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/missing_002edispstrs.html000066400000000000000000000056671515050116100322520ustar00rootroot00000000000000 missing.dispstrs (Tablicious v0.4.4)

    8.2.31.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/missing_002eismissing.html000066400000000000000000000060311515050116100323660ustar00rootroot00000000000000 missing.ismissing (Tablicious v0.4.4)

    8.2.31.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/missing_002eisnan.html000066400000000000000000000057621515050116100315030ustar00rootroot00000000000000 missing.isnan (Tablicious v0.4.4)

    8.2.31.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/missing_002eisnanny.html000066400000000000000000000057731515050116100320540ustar00rootroot00000000000000 missing.isnanny (Tablicious v0.4.4)

    8.2.31.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/missing_002emissing.html000066400000000000000000000054341515050116100320400ustar00rootroot00000000000000 missing.missing (Tablicious v0.4.4)

    8.2.31.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeA.html000066400000000000000000000044641515050116100276110ustar00rootroot00000000000000 mustBeA (Tablicious v0.4.4)

    8.2.32 mustBeA

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeCellstr.html000066400000000000000000000045301515050116100310330ustar00rootroot00000000000000 mustBeCellstr (Tablicious v0.4.4)

    8.2.33 mustBeCellstr

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeCharvec.html000066400000000000000000000045541515050116100310040ustar00rootroot00000000000000 mustBeCharvec (Tablicious v0.4.4)

    8.2.34 mustBeCharvec

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeFinite.html000066400000000000000000000045521515050116100306450ustar00rootroot00000000000000 mustBeFinite (Tablicious v0.4.4)

    8.2.35 mustBeFinite

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeInteger.html000066400000000000000000000045501515050116100310220ustar00rootroot00000000000000 mustBeInteger (Tablicious v0.4.4)

    8.2.36 mustBeInteger

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeMember.html000066400000000000000000000045561515050116100306420ustar00rootroot00000000000000 mustBeMember (Tablicious v0.4.4)

    8.2.37 mustBeMember

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeNonempty.html000066400000000000000000000045621515050116100312410ustar00rootroot00000000000000 mustBeNonempty (Tablicious v0.4.4)

    8.2.38 mustBeNonempty

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeNumeric.html000066400000000000000000000045501515050116100310270ustar00rootroot00000000000000 mustBeNumeric (Tablicious v0.4.4)

    8.2.39 mustBeNumeric

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeReal.html000066400000000000000000000045421515050116100303110ustar00rootroot00000000000000 mustBeReal (Tablicious v0.4.4)

    8.2.40 mustBeReal

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeSameSize.html000066400000000000000000000045461515050116100311520ustar00rootroot00000000000000 mustBeSameSize (Tablicious v0.4.4)

    8.2.41 mustBeSameSize

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeScalar.html000066400000000000000000000046061515050116100306340ustar00rootroot00000000000000 mustBeScalar (Tablicious v0.4.4)

    8.2.42 mustBeScalar

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeScalarLogical.html000066400000000000000000000046141515050116100321260ustar00rootroot00000000000000 mustBeScalarLogical (Tablicious v0.4.4)

    8.2.43 mustBeScalarLogical

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/mustBeVector.html000066400000000000000000000045321515050116100306670ustar00rootroot00000000000000 mustBeVector (Tablicious v0.4.4)

    8.2.44 mustBeVector

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/pp.html000066400000000000000000000077071515050116100266730ustar00rootroot00000000000000 pp (Tablicious v0.4.4)

    8.2.48 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/scalarexpand.html000066400000000000000000000072321515050116100307120ustar00rootroot00000000000000 scalarexpand (Tablicious v0.4.4)

    8.2.49 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/seconds.html000066400000000000000000000062771515050116100277130ustar00rootroot00000000000000 seconds (Tablicious v0.4.4)

    8.2.50 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/size2str.html000066400000000000000000000064751515050116100300420ustar00rootroot00000000000000 size2str (Tablicious v0.4.4)

    8.2.51 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/splitapply.html000066400000000000000000000113461515050116100304470ustar00rootroot00000000000000 splitapply (Tablicious v0.4.4)

    8.2.52 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string.html000066400000000000000000000160451515050116100275550ustar00rootroot00000000000000 string (Tablicious v0.4.4)

    8.2.53 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002ecell.html000066400000000000000000000057061515050116100311450ustar00rootroot00000000000000 string.cell (Tablicious v0.4.4)

    8.2.53.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002ecellstr.html000066400000000000000000000057351515050116100317000ustar00rootroot00000000000000 string.cellstr (Tablicious v0.4.4)

    8.2.53.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002echar.html000066400000000000000000000062001515050116100311310ustar00rootroot00000000000000 string.char (Tablicious v0.4.4)

    8.2.53.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002ecmp.html000066400000000000000000000075021515050116100310010ustar00rootroot00000000000000 string.cmp (Tablicious v0.4.4)

    8.2.53.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002edecode.html000066400000000000000000000061651515050116100314510ustar00rootroot00000000000000 string.decode (Tablicious v0.4.4)

    8.2.53.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002edispstrs.html000066400000000000000000000064361515050116100321020ustar00rootroot00000000000000 string.dispstrs (Tablicious v0.4.4)

    8.2.53.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eempty.html000066400000000000000000000061231515050116100313560ustar00rootroot00000000000000 string.empty (Tablicious v0.4.4)

    8.2.53.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eencode.html000066400000000000000000000062761515050116100314660ustar00rootroot00000000000000 string.encode (Tablicious v0.4.4)

    8.2.53.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eerase.html000066400000000000000000000057761515050116100313340ustar00rootroot00000000000000 string.erase (Tablicious v0.4.4)

    8.2.53.9 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eismissing.html000066400000000000000000000061301515050116100322230ustar00rootroot00000000000000 string.ismissing (Tablicious v0.4.4)

    8.2.53.10 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eisnanny.html000066400000000000000000000057561515050116100317120ustar00rootroot00000000000000 string.isnanny (Tablicious v0.4.4)

    8.2.53.11 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eisstring.html000066400000000000000000000057011515050116100320630ustar00rootroot00000000000000 string.isstring (Tablicious v0.4.4)

    8.2.53.12 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002elower.html000066400000000000000000000061751515050116100313570ustar00rootroot00000000000000 string.lower (Tablicious v0.4.4)

    8.2.53.13 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002emissing.html000066400000000000000000000061141515050116100316710ustar00rootroot00000000000000 string.missing (Tablicious v0.4.4)

    8.2.53.14 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eplus.html000066400000000000000000000062411515050116100312040ustar00rootroot00000000000000 string.plus (Tablicious v0.4.4)

    8.2.53.15 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eregexprep.html000066400000000000000000000067471515050116100322350ustar00rootroot00000000000000 string.regexprep (Tablicious v0.4.4)

    8.2.53.16 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002ereverse.html000066400000000000000000000061631515050116100316770ustar00rootroot00000000000000 string.reverse (Tablicious v0.4.4)

    8.2.53.17 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.

    string_002ereverse_005fbytes.html000066400000000000000000000066771515050116100334330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html string.reverse_bytes (Tablicious v0.4.4)

    8.2.53.18 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002estrcat.html000066400000000000000000000062351515050116100315240ustar00rootroot00000000000000 string.strcat (Tablicious v0.4.4)

    8.2.53.19 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002estrcmp.html000066400000000000000000000065231515050116100315340ustar00rootroot00000000000000 string.strcmp (Tablicious v0.4.4)

    8.2.53.20 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002estrfind.html000066400000000000000000000067361515050116100317030ustar00rootroot00000000000000 string.strfind (Tablicious v0.4.4)

    8.2.53.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002estring.html000066400000000000000000000070631515050116100315320ustar00rootroot00000000000000 string.string (Tablicious v0.4.4)

    8.2.53.22 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002estrlength.html000066400000000000000000000072051515050116100322340ustar00rootroot00000000000000 string.strlength (Tablicious v0.4.4)

    8.2.53.23 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes

    string_002estrlength_005fbytes.html000066400000000000000000000066421515050116100337620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html string.strlength_bytes (Tablicious v0.4.4)

    8.2.53.24 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002estrrep.html000066400000000000000000000072131515050116100315400ustar00rootroot00000000000000 string.strrep (Tablicious v0.4.4)

    8.2.53.25 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/string_002eupper.html000066400000000000000000000057301515050116100313560ustar00rootroot00000000000000 string.upper (Tablicious v0.4.4)

    8.2.53.26 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/struct2table.html000066400000000000000000000067221515050116100306660ustar00rootroot00000000000000 struct2table (Tablicious v0.4.4)

    8.2.54 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table.html000066400000000000000000000260321515050116100273330ustar00rootroot00000000000000 table (Tablicious v0.4.4)

    8.2.55 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/tableOuterFillValue.html000066400000000000000000000045201515050116100321540ustar00rootroot00000000000000 tableOuterFillValue (Tablicious v0.4.4)

    8.2.56 tableOuterFillValue

    Not documented

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eaddvars.html000066400000000000000000000076761515050116100314430ustar00rootroot00000000000000 table.addvars (Tablicious v0.4.4)

    8.2.55.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eantijoin.html000066400000000000000000000070151515050116100316150ustar00rootroot00000000000000 table.antijoin (Tablicious v0.4.4)

    8.2.55.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002ecartesian.html000066400000000000000000000076451515050116100317640ustar00rootroot00000000000000 table.cartesian (Tablicious v0.4.4)

    8.2.55.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002econvertvars.html000066400000000000000000000073101515050116100323540ustar00rootroot00000000000000 table.convertvars (Tablicious v0.4.4)

    8.2.55.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002efindgroups.html000066400000000000000000000063621515050116100321660ustar00rootroot00000000000000 table.findgroups (Tablicious v0.4.4)

    8.2.55.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002egetvar.html000066400000000000000000000062431515050116100312740ustar00rootroot00000000000000 table.getvar (Tablicious v0.4.4)

    8.2.55.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002egetvars.html000066400000000000000000000061361515050116100314600ustar00rootroot00000000000000 table.getvars (Tablicious v0.4.4)

    8.2.55.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002egroupby.html000066400000000000000000000074561515050116100315020ustar00rootroot00000000000000 table.groupby (Tablicious v0.4.4)

    8.2.55.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eheight.html000066400000000000000000000057261515050116100312610ustar00rootroot00000000000000 table.height (Tablicious v0.4.4)

    8.2.55.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002ehorzcat.html000066400000000000000000000062671515050116100314640ustar00rootroot00000000000000 table.horzcat (Tablicious v0.4.4)

    8.2.55.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002einnerjoin.html000066400000000000000000000072741515050116100320040ustar00rootroot00000000000000 table.innerjoin (Tablicious v0.4.4)

    8.2.55.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eintersect.html000066400000000000000000000064641515050116100320110ustar00rootroot00000000000000 table.intersect (Tablicious v0.4.4)

    8.2.55.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eisempty.html000066400000000000000000000056471515050116100315050ustar00rootroot00000000000000 table.isempty (Tablicious v0.4.4)

    8.2.55.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eismember.html000066400000000000000000000061011515050116100316000ustar00rootroot00000000000000 table.ismember (Tablicious v0.4.4)

    8.2.55.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eismissing.html000066400000000000000000000072241515050116100320110ustar00rootroot00000000000000 table.ismissing (Tablicious v0.4.4)

    8.2.55.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eistable.html000066400000000000000000000054351515050116100314310ustar00rootroot00000000000000 table.istable (Tablicious v0.4.4)

    8.2.55.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002ejoin.html000066400000000000000000000074201515050116100307410ustar00rootroot00000000000000 table.join (Tablicious v0.4.4)

    8.2.55.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002emergevars.html000066400000000000000000000072511515050116100317770ustar00rootroot00000000000000 table.mergevars (Tablicious v0.4.4)

    8.2.55.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002emovevars.html000066400000000000000000000070121515050116100316410ustar00rootroot00000000000000 table.movevars (Tablicious v0.4.4)

    8.2.55.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002endims.html000066400000000000000000000056001515050116100311120ustar00rootroot00000000000000 table.ndims (Tablicious v0.4.4)

    8.2.55.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002enumel.html000066400000000000000000000060641515050116100311250ustar00rootroot00000000000000 table.numel (Tablicious v0.4.4)

    8.2.55.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eouterfillvals.html000066400000000000000000000060111515050116100326700ustar00rootroot00000000000000 table.outerfillvals (Tablicious v0.4.4)

    8.2.55.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eouterjoin.html000066400000000000000000000075341515050116100320260ustar00rootroot00000000000000 table.outerjoin (Tablicious v0.4.4)

    8.2.55.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eprettyprint.html000066400000000000000000000060111515050116100324010ustar00rootroot00000000000000 table.prettyprint (Tablicious v0.4.4)

    8.2.55.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erealjoin.html000066400000000000000000000077621515050116100316160ustar00rootroot00000000000000 table.realjoin (Tablicious v0.4.4)

    8.2.55.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eremovevars.html000066400000000000000000000060741515050116100321770ustar00rootroot00000000000000 table.removevars (Tablicious v0.4.4)

    8.2.55.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erenamevars.html000066400000000000000000000066601515050116100321520ustar00rootroot00000000000000 table.renamevars (Tablicious v0.4.4)

    8.2.55.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erepelem.html000066400000000000000000000066331515050116100314400ustar00rootroot00000000000000 table.repelem (Tablicious v0.4.4)

    8.2.55.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erepmat.html000066400000000000000000000064561515050116100313020ustar00rootroot00000000000000 table.repmat (Tablicious v0.4.4)

    8.2.55.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erestrict.html000066400000000000000000000105361515050116100316430ustar00rootroot00000000000000 table.restrict (Tablicious v0.4.4)

    8.2.55.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erowfun.html000066400000000000000000000156401515050116100313250ustar00rootroot00000000000000 table.rowfun (Tablicious v0.4.4)

    8.2.55.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002erows2vars.html000066400000000000000000000106551515050116100317560ustar00rootroot00000000000000 table.rows2vars (Tablicious v0.4.4)

    8.2.55.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esemijoin.html000066400000000000000000000071741515050116100316250ustar00rootroot00000000000000 table.semijoin (Tablicious v0.4.4)

    8.2.55.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    table_002esetDimensionNames.html000066400000000000000000000105071515050116100333500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html table.setDimensionNames (Tablicious v0.4.4)

    8.2.55.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esetRowNames.html000066400000000000000000000061241515050116100322510ustar00rootroot00000000000000 table.setRowNames (Tablicious v0.4.4)

    8.2.55.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.

    table_002esetVariableNames.html000066400000000000000000000075711515050116100331570ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html table.setVariableNames (Tablicious v0.4.4)

    8.2.55.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esetdiff.html000066400000000000000000000063311515050116100314260ustar00rootroot00000000000000 table.setdiff (Tablicious v0.4.4)

    8.2.55.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esetvar.html000066400000000000000000000071451515050116100313120ustar00rootroot00000000000000 table.setvar (Tablicious v0.4.4)

    8.2.55.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esetxor.html000066400000000000000000000065131515050116100313300ustar00rootroot00000000000000 table.setxor (Tablicious v0.4.4)

    8.2.55.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esize.html000066400000000000000000000072131515050116100307540ustar00rootroot00000000000000 table.size (Tablicious v0.4.4)

    8.2.55.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esplitapply.html000066400000000000000000000070651515050116100322100ustar00rootroot00000000000000 table.splitapply (Tablicious v0.4.4)

    8.2.55.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esplitvars.html000066400000000000000000000075351515050116100320400ustar00rootroot00000000000000 table.splitvars (Tablicious v0.4.4)

    8.2.55.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esqueeze.html000066400000000000000000000057121515050116100314650ustar00rootroot00000000000000 table.squeeze (Tablicious v0.4.4)

    8.2.55.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002estack.html000066400000000000000000000072201515050116100311050ustar00rootroot00000000000000 table.stack (Tablicious v0.4.4)

    8.2.55.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002esummary.html000066400000000000000000000067331515050116100315050ustar00rootroot00000000000000 table.summary (Tablicious v0.4.4)

    8.2.55.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002etable.html000066400000000000000000000125031515050116100310670ustar00rootroot00000000000000 table.table (Tablicious v0.4.4)

    8.2.55.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002etable2array.html000066400000000000000000000055511515050116100322150ustar00rootroot00000000000000 table.table2array (Tablicious v0.4.4)

    8.2.55.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002etable2cell.html000066400000000000000000000062201515050116100320100ustar00rootroot00000000000000 table.table2cell (Tablicious v0.4.4)

    8.2.55.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002etable2struct.html000066400000000000000000000071521515050116100324220ustar00rootroot00000000000000 table.table2struct (Tablicious v0.4.4)

    8.2.55.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002eunion.html000066400000000000000000000063771515050116100311440ustar00rootroot00000000000000 table.union (Tablicious v0.4.4)

    8.2.55.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002evarfun.html000066400000000000000000000102641515050116100313030ustar00rootroot00000000000000 table.varfun (Tablicious v0.4.4)

    8.2.55.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002evarnames.html000066400000000000000000000064201515050116100316150ustar00rootroot00000000000000 table.varnames (Tablicious v0.4.4)

    8.2.55.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002evertcat.html000066400000000000000000000063751515050116100314620ustar00rootroot00000000000000 table.vertcat (Tablicious v0.4.4)

    8.2.55.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/table_002ewidth.html000066400000000000000000000053541515050116100311250ustar00rootroot00000000000000 table.width (Tablicious v0.4.4)

    8.2.55.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/tail.html000066400000000000000000000076131515050116100272010ustar00rootroot00000000000000 tail (Tablicious v0.4.4)

    8.2.57 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/tblish_002edataset.html000066400000000000000000000243761515050116100316360ustar00rootroot00000000000000 tblish.dataset (Tablicious v0.4.4)

    8.2.58 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.

    tblish_002edataset_002eAirPassengers.html000066400000000000000000000075601515050116100347700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.AirPassengers (Tablicious v0.4.4)

    8.2.58.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    
    tblish_002edataset_002eBJsales.html000066400000000000000000000110421515050116100335330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.BJsales (Tablicious v0.4.4)

    8.2.58.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eBOD.html000066400000000000000000000102641515050116100326210ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.BOD (Tablicious v0.4.4)

    8.2.58.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eChickWeight.html000066400000000000000000000113071515050116100344050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.ChickWeight (Tablicious v0.4.4)

    8.2.58.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    
    tblish_002edataset_002eDNase.html000066400000000000000000000111741515050116100332100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.DNase (Tablicious v0.4.4)

    8.2.58.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    
    tblish_002edataset_002eEuStockMarkets.html000066400000000000000000000111351515050116100351170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.EuStockMarkets (Tablicious v0.4.4)

    8.2.58.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    
    tblish_002edataset_002eFormaldehyde.html000066400000000000000000000114211515050116100346140ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Formaldehyde (Tablicious v0.4.4)

    8.2.58.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    
    tblish_002edataset_002eHairEyeColor.html000066400000000000000000000151061515050116100345420ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.HairEyeColor (Tablicious v0.4.4)

    8.2.58.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eHarman23cor.html000066400000000000000000000102741515050116100342750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Harman23cor (Tablicious v0.4.4)

    8.2.58.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eHarman74cor.html000066400000000000000000000103511515050116100342770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Harman74cor (Tablicious v0.4.4)

    8.2.58.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    
    tblish_002edataset_002eIndometh.html000066400000000000000000000110071515050116100337600ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Indometh (Tablicious v0.4.4)

    8.2.58.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    tblish_002edataset_002eInsectSprays.html000066400000000000000000000104461515050116100346460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.InsectSprays (Tablicious v0.4.4)

    8.2.58.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    
    tblish_002edataset_002eJohnsonJohnson.html000066400000000000000000000102601515050116100351660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.JohnsonJohnson (Tablicious v0.4.4)

    8.2.58.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    
    tblish_002edataset_002eLakeHuron.html000066400000000000000000000104761515050116100341120ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.LakeHuron (Tablicious v0.4.4)

    8.2.58.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    
    tblish_002edataset_002eLifeCycleSavings.html000066400000000000000000000126301515050116100354060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.LifeCycleSavings (Tablicious v0.4.4)

    8.2.58.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    
    tblish_002edataset_002eLoblolly.html000066400000000000000000000111041515050116100337770ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Loblolly (Tablicious v0.4.4)

    8.2.58.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    
    tblish_002edataset_002eNile.html000066400000000000000000000112171515050116100331030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Nile (Tablicious v0.4.4)

    8.2.58.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    
    tblish_002edataset_002eOrange.html000066400000000000000000000115241515050116100334300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Orange (Tablicious v0.4.4)

    8.2.58.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    
    tblish_002edataset_002eOrchardSprays.html000066400000000000000000000124761515050116100350100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.OrchardSprays (Tablicious v0.4.4)

    8.2.58.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    
    tblish_002edataset_002ePlantGrowth.html000066400000000000000000000102201515050116100344560ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.PlantGrowth (Tablicious v0.4.4)

    8.2.58.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    
    tblish_002edataset_002ePuromycin.html000066400000000000000000000124731515050116100342060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Puromycin (Tablicious v0.4.4)

    8.2.58.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    
    tblish_002edataset_002eTheoph.html000066400000000000000000000142621515050116100334460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Theoph (Tablicious v0.4.4)

    8.2.58.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    tblish_002edataset_002eTitanic.html000066400000000000000000000146051515050116100336130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.Titanic (Tablicious v0.4.4)

    8.2.58.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    tblish_002edataset_002eToothGrowth.html000066400000000000000000000115331515050116100345050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.ToothGrowth (Tablicious v0.4.4)

    8.2.58.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002eUCBAdmissions.html000066400000000000000000000141011515050116100346520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.UCBAdmissions (Tablicious v0.4.4)

    8.2.58.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    tblish_002edataset_002eUKDriverDeaths.html000066400000000000000000000147451515050116100350510ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.UKDriverDeaths (Tablicious v0.4.4)

    8.2.58.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    tblish_002edataset_002eUKLungDeaths.html000066400000000000000000000111001515050116100345010ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.UKLungDeaths (Tablicious v0.4.4)

    8.2.58.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    
    tblish_002edataset_002eUKgas.html000066400000000000000000000103711515050116100332260ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.UKgas (Tablicious v0.4.4)

    8.2.58.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    
    tblish_002edataset_002eUSAccDeaths.html000066400000000000000000000100551515050116100343020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.USAccDeaths (Tablicious v0.4.4)

    8.2.58.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    
    tblish_002edataset_002eUSArrests.html000066400000000000000000000137571515050116100341220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.USArrests (Tablicious v0.4.4)

    8.2.58.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    tblish_002edataset_002eUSJudgeRatings.html000066400000000000000000000116251515050116100350550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.USJudgeRatings (Tablicious v0.4.4)

    8.2.58.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    
    tblish_002edataset_002eUSPersonalExpenditure.html000066400000000000000000000111101515050116100364540ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.USPersonalExpenditure (Tablicious v0.4.4)

    8.2.58.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    
    tblish_002edataset_002eVADeaths.html000066400000000000000000000113271515050116100336550ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.VADeaths (Tablicious v0.4.4)

    8.2.58.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002eWWWusage.html000066400000000000000000000103551515050116100337270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.WWWusage (Tablicious v0.4.4)

    8.2.58.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eWorldPhones.html000066400000000000000000000105161515050116100344610ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.WorldPhones (Tablicious v0.4.4)

    8.2.58.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    
    tblish_002edataset_002eairmiles.html000066400000000000000000000072321515050116100340230ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.airmiles (Tablicious v0.4.4)

    8.2.58.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    
    tblish_002edataset_002eairquality.html000066400000000000000000000125541515050116100344050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.airquality (Tablicious v0.4.4)

    8.2.58.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    
    tblish_002edataset_002eanscombe.html000066400000000000000000000121471515050116100340060ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.anscombe (Tablicious v0.4.4)

    8.2.58.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    
    tblish_002edataset_002eattenu.html000066400000000000000000000114521515050116100335150ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.attenu (Tablicious v0.4.4)

    8.2.58.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    
    tblish_002edataset_002eattitude.html000066400000000000000000000111041515050116100340320ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.attitude (Tablicious v0.4.4)

    8.2.58.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    
    tblish_002edataset_002eaustres.html000066400000000000000000000102231515050116100336760ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.austres (Tablicious v0.4.4)

    8.2.58.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    
    tblish_002edataset_002ebeavers.html000066400000000000000000000106451515050116100336470ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.beavers (Tablicious v0.4.4)

    8.2.58.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    
    tblish_002edataset_002ecars.html000066400000000000000000000116731515050116100331520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.cars (Tablicious v0.4.4)

    8.2.58.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    
    tblish_002edataset_002echickwts.html000066400000000000000000000114241515050116100340330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.chickwts (Tablicious v0.4.4)

    8.2.58.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    
    tblish_002edataset_002eco2.html000066400000000000000000000116671515050116100327100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.co2 (Tablicious v0.4.4)

    8.2.58.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    
    tblish_002edataset_002ecrimtab.html000066400000000000000000000164021515050116100336360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.crimtab (Tablicious v0.4.4)

    8.2.58.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    tblish_002edataset_002ecupcake.html000066400000000000000000000104751515050116100336340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.cupcake (Tablicious v0.4.4)

    8.2.58.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    
    tblish_002edataset_002ediscoveries.html000066400000000000000000000106231515050116100345330ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.discoveries (Tablicious v0.4.4)

    8.2.58.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    
    tblish_002edataset_002eesoph.html000066400000000000000000000106651515050116100333400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.esoph (Tablicious v0.4.4)

    8.2.58.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    
    tblish_002edataset_002eeuro.html000066400000000000000000000116601515050116100331700ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.euro (Tablicious v0.4.4)

    8.2.58.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    
    tblish_002edataset_002eeurodist.html000066400000000000000000000101151515050116100340460ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.eurodist (Tablicious v0.4.4)

    8.2.58.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples

    tblish_002edataset_002efaithful.html000066400000000000000000000121141515050116100340130ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.faithful (Tablicious v0.4.4)

    8.2.58.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    
    tblish_002edataset_002efreeny.html000066400000000000000000000121071515050116100335030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.freeny (Tablicious v0.4.4)

    8.2.58.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    
    tblish_002edataset_002einfert.html000066400000000000000000000116041515050116100335030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.infert (Tablicious v0.4.4)

    8.2.58.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    
    tblish_002edataset_002eiris.html000066400000000000000000000121571515050116100331660ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.iris (Tablicious v0.4.4)

    8.2.58.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    
    tblish_002edataset_002eislands.html000066400000000000000000000104021515050116100336440ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.islands (Tablicious v0.4.4)

    8.2.58.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/tblish_002edataset_002elh.html000066400000000000000000000101751515050116100327000ustar00rootroot00000000000000 tblish.dataset.lh (Tablicious v0.4.4)

    8.2.58.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    
    tblish_002edataset_002elongley.html000066400000000000000000000115431515050116100336670ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.longley (Tablicious v0.4.4)

    8.2.58.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    
    tblish_002edataset_002elynx.html000066400000000000000000000113371515050116100332110ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.lynx (Tablicious v0.4.4)

    8.2.58.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    
    tblish_002edataset_002emorley.html000066400000000000000000000121361515050116100335240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.morley (Tablicious v0.4.4)

    8.2.58.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002emtcars.html000066400000000000000000000124301515050116100335030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.mtcars (Tablicious v0.4.4)

    8.2.58.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    
    tblish_002edataset_002enhtemp.html000066400000000000000000000105011515050116100335020ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.nhtemp (Tablicious v0.4.4)

    8.2.58.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    
    tblish_002edataset_002enottem.html000066400000000000000000000101431515050116100335170ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.nottem (Tablicious v0.4.4)

    8.2.58.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002enpk.html000066400000000000000000000113061515050116100330030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.npk (Tablicious v0.4.4)

    8.2.58.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    
    tblish_002edataset_002eoccupationalStatus.html000066400000000000000000000103651515050116100361040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.occupationalStatus (Tablicious v0.4.4)

    8.2.58.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002eprecip.html000066400000000000000000000103671515050116100335030ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.precip (Tablicious v0.4.4)

    8.2.58.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    
    tblish_002edataset_002epresidents.html000066400000000000000000000111731515050116100343750ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.presidents (Tablicious v0.4.4)

    8.2.58.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    
    tblish_002edataset_002epressure.html000066400000000000000000000112321515050116100340610ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.pressure (Tablicious v0.4.4)

    8.2.58.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    
    tblish_002edataset_002equakes.html000066400000000000000000000120531515050116100335040ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.quakes (Tablicious v0.4.4)

    8.2.58.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    
    tblish_002edataset_002erandu.html000066400000000000000000000111331515050116100333220ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.randu (Tablicious v0.4.4)

    8.2.58.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    
    tblish_002edataset_002erivers.html000066400000000000000000000102651515050116100335300ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.rivers (Tablicious v0.4.4)

    8.2.58.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    
    tblish_002edataset_002erock.html000066400000000000000000000110461515050116100331520ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.rock (Tablicious v0.4.4)

    8.2.58.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    
    tblish_002edataset_002esleep.html000066400000000000000000000113071515050116100333240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.sleep (Tablicious v0.4.4)

    8.2.58.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    
    tblish_002edataset_002estackloss.html000066400000000000000000000141761515050116100342310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.stackloss (Tablicious v0.4.4)

    8.2.58.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    tblish_002edataset_002estate.html000066400000000000000000000130031515050116100333270ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.state (Tablicious v0.4.4)

    8.2.58.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    
    tblish_002edataset_002esunspot_005fmonth.html000066400000000000000000000104541515050116100355310ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.sunspot_month (Tablicious v0.4.4)

    8.2.58.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    
    tblish_002edataset_002esunspot_005fyear.html000066400000000000000000000102141515050116100353360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.sunspot_year (Tablicious v0.4.4)

    8.2.58.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    
    tblish_002edataset_002esunspots.html000066400000000000000000000105131515050116100341100ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.sunspots (Tablicious v0.4.4)

    8.2.58.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    
    tblish_002edataset_002eswiss.html000066400000000000000000000140731515050116100333670ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.swiss (Tablicious v0.4.4)

    8.2.58.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    tblish_002edataset_002etreering.html000066400000000000000000000111751515050116100340360ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.treering (Tablicious v0.4.4)

    8.2.58.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    
    tblish_002edataset_002etrees.html000066400000000000000000000113451515050116100333400ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.trees (Tablicious v0.4.4)

    8.2.58.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    
    tblish_002edataset_002euspop.html000066400000000000000000000102461515050116100333630ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.uspop (Tablicious v0.4.4)

    8.2.58.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    
    tblish_002edataset_002evolcano.html000066400000000000000000000112151515050116100336530ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.volcano (Tablicious v0.4.4)

    8.2.58.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    
    tblish_002edataset_002ewarpbreaks.html000066400000000000000000000111771515050116100343620ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.warpbreaks (Tablicious v0.4.4)

    8.2.58.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    
    tblish_002edataset_002ewomen.html000066400000000000000000000113471515050116100333450ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.women (Tablicious v0.4.4)

    8.2.58.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    
    tblish_002edataset_002ezCO2.html000066400000000000000000000104531515050116100327720ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.dataset.zCO2 (Tablicious v0.4.4)

    8.2.58.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    
    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/tblish_002edatasets.html000066400000000000000000000064321515050116100320120ustar00rootroot00000000000000 tblish.datasets (Tablicious v0.4.4)

    8.2.59 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.

    tblish_002eevalWithTableVars.html000066400000000000000000000075671515050116100335240ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.evalWithTableVars (Tablicious v0.4.4)

    8.2.60 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict

    tblish_002eexamples_002eSpDb.html000066400000000000000000000077541515050116100332500ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.examples.SpDb (Tablicious v0.4.4)

    8.2.63 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).

    tblish_002eexamples_002ecoplot.html000066400000000000000000000150421515050116100337050ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.examples.coplot (Tablicious v0.4.4)

    8.2.61 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    tblish_002eexamples_002eplot_005fpairs.html000066400000000000000000000117571515050116100351650ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.examples.plot_pairs (Tablicious v0.4.4)

    8.2.62 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/tblish_002esizeof2.html000066400000000000000000000124311515050116100315570ustar00rootroot00000000000000 tblish.sizeof2 (Tablicious v0.4.4)

    8.2.64 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    tblish_002etable_002egrpstats.html000066400000000000000000000104771515050116100335340ustar00rootroot00000000000000apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html tblish.table.grpstats (Tablicious v0.4.4)

    8.2.65 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/timezones.html000066400000000000000000000077721515050116100302730ustar00rootroot00000000000000 timezones (Tablicious v0.4.4)

    8.2.66 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/todatetime.html000066400000000000000000000070101515050116100303760ustar00rootroot00000000000000 todatetime (Tablicious v0.4.4)

    8.2.67 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/vartype.html000066400000000000000000000064711515050116100277430ustar00rootroot00000000000000 vartype (Tablicious v0.4.4)

    8.2.68 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/vecfun.html000066400000000000000000000066301515050116100275340ustar00rootroot00000000000000 vecfun (Tablicious v0.4.4)

    8.2.69 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/html/years.html000066400000000000000000000064311515050116100273700ustar00rootroot00000000000000 years (Tablicious v0.4.4)

    8.2.70 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/tablicious.html000066400000000000000000027037261515050116100274540ustar00rootroot00000000000000 Tablicious v0.4.4

    Tablicious for GNU Octave

    This manual is for Tablicious, version 0.4.4.

    Table of Contents


    1 Introduction

    Time is an illusion. Lunchtime doubly so.

    Douglas Adams

    This is the manual for the Tablicious package version 0.4.4 for GNU Octave.

    Tablicious provides somewhat-Matlab-compatible tabular data and date/time support for GNU Octave. This includes a table class with support for filtering and join operations; datetime, duration, and related classes; Missing Data support; string and categorical data types; and other miscellaneous things.

    This document is a work in progress. You are invited to help improve it and submit patches.

    Tablicious’s classes are designed to be convenient to use while still being efficient. The data representations used by Tablicious are designed to be efficient and suitable for working with large-ish data sets. A “large-ish” data set is one that can have millions of elements or rows, but still fits in main computer memory. Tablicious’s main relational and arithmetic operations are all implemented using vectorized operations on primitive Octave data types.

    Tablicious was written by Andrew Janke <>. Support can be found on the Tablicious project GitHub page.


    2 Getting Started

    The easiest way to obtain Tablicious is by using Octave’s pkg package manager. To install the development prerelease of Tablicious, run this in Octave:

    pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.4.4/tablicious-0.4.4.tar.gz
    

    (Check the releases page at https://github.com/apjanke/octave-tablicious/releases to find out what the actual latest release number is.)

    For development, you can obtain the source code for Tablicious from the project repo on GitHub at https://github.com/apjanke/octave-tablicious. Make a local clone of the repo. Then add the inst directory in the repo to your Octave path.


    3 Table Representation

    Tablicious provides the table class for representing tabular data.

    A table is an array object that represents a tabular data structure. It holds multiple named “variables”, each of which is a column vector, or a 2-D matrix whose rows are read as records.

    A table is composed of multiple “variables”, each with a name, which all have the same number of rows. (A table variable is like a “column” in SQL tables or in R or Python/pandas dataframes. Whenever you read “variable” here, think “column”.) Taken together, the i-th element or row of each variable compose a single record or observation.

    Tables are good ways of arranging data if you have data that would otherwise be stored in a few separate variables which all need to be kept in the same shape and order, especially if you might want to do element-wise comparisons involving two or more of those variables. That’s basically all a table is: it holds a collection of variables, and makes sure they are all kept aligned and ordered in the same way.

    Tables are a lot like SQL tables or result sets, and are based on the same relational algebra theory that SQL is. Many common, even powerful, SQL operations can be done in Octave using table arrays. It’s like having your own in-memory SQL engine.


    3.1 Table Construction

    There are two main ways to construct a table array: build one up by combining multiple variables together, or convert an existing tabular-organized array into a table.

    To build an array from multiple variables, use the table(…) constructor, passing in all of your variables as separate inputs. It takes any number of inputs. Each input becomes a table variable in the new table object. If you pass your constructor inputs directly from variables, it automatically picks up their names and uses them as the table variable names. Otherwise, if you’re using more complex expressions, you’ll need to supply the 'VariableNames' option.

    To convert a tabular-organized array of another type into a table, use the conversion functions like array2table, struct2table and cell2table. array2table and cell2table take each column of the input array and turn it into a separate table variable in the resulting table. struct2table takes the fields of a struct and puts them into table variables.


    3.2 Tables vs SQL

    Here’s a table (ha!) of what SQL and relational algebar operations correspond to what Octave table operations.

    In this table, t is a variable holding a table array, and ix is some indexing expression.

    SQLRelationalOctave table
    SELECTPROJECTsubsetvars, t(:,ix)
    WHERERESTRICTsubsetrows, t(ix,:)
    INNER JOINJOINinnerjoin
    OUTER JOINOUTER JOINouterjoin
    FROM table1, table2, …Cartesian productcartesian
    GROUP BYSUMMARIZEgroupby
    DISTINCT(automatic)unique(t)

    Note that there is one big difference between relational algebra and SQL & Octave table: Relations in relational algebra are sets, not lists. There are no duplicate rows in relational algebra, and there is no ordering. So every operation there does an implicit DISTINCT/unique() on its results, and there‘s no ORDER BY/sort(). This is not the case in SQL or Octave table.

    Note for users coming from Matlab: Matlab does not provide a general groupby function. Instead, you have to variously use rowfun, grpstats, groupsummary, and manual code to accomplish “group by” operations.

    Note: I wrote this based on my understanding of relational algebra from reading C. J. Date books. Other people’s understanding and terminology may differ. - apjanke


    4 Date and Time Representation

    Tablicious provides the datetime class for representing points in time.

    There’s also duration and calendarDuration for representing periods or durations of time. Like vector quantities along the time line, as opposed to datetime being a point along the time line.


    4.1 datetime Class

    A datetime is an array object that represents points in time in the familiar Gregorian calendar.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    The underlying representation is that of a datenum (a double containing the number of days since the Matlab epoch), but encapsulating it in an object provides several benefits: friendly human-readable display, type safety, automatic type conversion, and time zone support. In addition to the underlying datenum array, a datetime inclues an optional TimeZone property indicating what time zone the datetimes are in.

    So, basically, a datetime is an object wrapper around a datenum array, plus time zone support.


    4.1.1 Datenum Compatibility

    While the underlying data representation of datetime is compatible with (in fact, identical to) that of datenums, you cannot directly combine them via assignment, concatenation, or most arithmetic operations.

    This is because of the signature of the datetime constructor. When combining objects and primitive types like double, the primitive type is promoted to an object by calling the other object’s one-argument constructor on it. However, the one-argument numeric-input consstructor for datetime does not accept datenums: it interprets its input as datevecs instead. This is due to a design decision on Matlab’s part; for compatibility, Octave does not alter that interface.

    To combine datetimes with datenums, you can convert the datenums to datetimes by calling datetime.ofDatenum or datetime(x, 'ConvertFrom', 'datenum'), or you can convert the datetimes to datenums by accessing its dnums field with x.dnums.

    Examples:

    dt = datetime('2011-03-04')
    dn = datenum('2017-01-01')
    [dt dn]
        ⇒ error: datenum: expected date vector containing [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND]
    [dt datetime.ofDatenum(dn)]
        ⇒ 04-Mar-2011   01-Jan-2017
    

    Also, if you have a zoned datetime, you can’t combine it with a datenum, because datenums do not carry time zone information.


    4.2 Time Zones

    Tablicious has support for representing dates in time zones and for converting between time zones.

    A datetime may be "zoned" or "zoneless". A zoneless datetime does not have a time zone associated with it. This is represented by an empty TimeZone property on the datetime object. A zoneless datetime represents the local time in some unknown time zone, and assumes a continuous time scale (no DST shifts).

    A zoned datetime is associated with a time zone. It is represented by having the time zone’s IANA zone identifier (e.g. 'UTC' or 'America/New_York') in its TimeZone property. A zoned datetime represents the local time in that time zone.

    By default, the datetime constructor creates unzoned datetimes. To make a zoned datetime, either pass the 'TimeZone' option to the constructor, or set the TimeZone property after object creation. Setting the TimeZone property on a zoneless datetime declares that it’s a local time in that time zone. Setting the TimeZone property on a zoned datetime turns it back into a zoneless datetime without changing the local time it represents.

    You can tell a zoned from a zoneless time zone in the object display because the time zone is included for zoned datetimes.

    % Create an unzoned datetime
    d = datetime('2011-03-04 06:00:00')
        ⇒  04-Mar-2011 06:00:00
    
    % Create a zoned datetime
    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
        ⇒  04-Mar-2011 06:00:00 America/New_York
    % This is equivalent
    d_ny = datetime('2011-03-04 06:00:00');
    d_ny.TimeZone = 'America/New_York'
        ⇒  04-Mar-2011 06:00:00 America/New_York
    
    % Convert it to Chicago time
    d_chi.TimeZone = 'America/Chicago'
        ⇒  04-Mar-2011 05:00:00 America/Chicago
    

    When you combine two zoned datetimes via concatenation, assignment, or arithmetic, if their time zones differ, they are converted to the time zone of the left-hand input.

    d_ny = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/New_York')
    d_la = datetime('2011-03-04 06:00:00', 'TimeZone', 'America/Los_Angeles')
    d_la - d_ny
        ⇒ 03:00:00
    

    You cannot combine a zoned and an unzoned datetime. This results in an error being raised.

    Warning: Normalization of "nonexistent" times (like between 02:00 and 03:00 on a "spring forward" DST change day) is not implemented yet. The results of converting a zoneless local time into a time zone where that local time did not exist are currently undefined.


    4.2.1 Defined Time Zones

    Tablicious’s time zone data is drawn from the IANA Time Zone Database, also known as the “Olson Database”. Tablicious includes a copy of this database in its distribution so it can work on Windows, which does not supply it like Unix systems do.

    You can use the timezones function to list the time zones known to Tablicious. These will be all the time zones in the IANA database on your system (for Linux and macOS) or in the IANA time zone database redistributed with Tablicious (for Windows).

    Note: The IANA Time Zone Database only covers dates from about the year 1880 to 2038. Converting time zones for datetimes outside that range is currently unimplemented. (Tablicious needs to add support for proleptic POSIX time zone rules, which are used to govern behavior outside that date range.)


    4.3 Durations


    4.3.1 duration Class

    A duration represents a period of time in fixed-length seconds (or minutes, hours, or whatever you want to measure it in.)

    A duration has a resolution of about a nanosecond for typical dates. The underlying representation is a double representing the number of days elapsed, similar to a datenum, except it’s interpreted as relative to some other reference point you provide, instead of being relative to the Matlab/Octave epoch.

    You can add or subtract a duration to a datetime to get another datetime. You can also add or subtract durations to each other.


    4.3.2 calendarDuration Class

    A calendarDuration represents a period of time in variable-length calendar components. For example, years and months can have varying numbers of days, and days in time zones with Daylight Saving Time have varying numbers of hours. A calendarDuration does arithmetic with "whole" calendar periods.

    calendarDurations and durations cannot be directly combined, because they are not semantically equivalent. (This may be relaxed in the future to allow durations to be interpreted as numbers of days when combined with calendarDurations.)

    d = datetime('2011-03-04 00:00:00')
        ⇒ 04-Mar-2011
    cdur = calendarDuration(1, 3, 0)
        ⇒ 1y 3mo
    d2 = d + cdur
        ⇒ 04-Jun-2012
    

    5 Validation Functions

    Tablicious provides several validation functions which can be used to check properties of function arguments, variables, object properties, and other expressions. These can be used to express invariants in your program and catch problems due to input errors, incorrect function usage, or other bugs.

    These validation functions are named following the pattern mustBeXxx, where Xxx is some property of the input it is testing. Validation functions may check the type, size, or other aspects of their inputs.

    The most common place for validation functions to be used will probably be at the beginning of functions, to check the input arguments and ensure that the contract of the function is not being violated. If in the future Octave gains the ability to declaratively express object property constraints, they will also be of use there.

    Be careful not to get too aggressive with the use of validation functions: while using them can make sure invariants are followed and your program is correct, they also reduce the code’s ability to make use of duck typing, reducing its flexibility. Whether you want to make this trade-off is a design decision you will have to consider.

    When a validation function’s condition is violated, it raises an error that includes a description of the violation in the error message. This message will include a label for the input that describes what is being tested. By default, this label is initialized with inputname(), so when you are calling a validator on a function argument or variable, you will generally not need to supply a label. But if you’re calling it on an object property or an expression more complex than a simple variable reference, the validator cannot automatically detect the input name for use in the label. In this case, make use of the optional trailing argument(s) to the functions to manually supply a label for the value being tested.

    % Validation of a simple variable does not need a label
    mustBeScalar (x);
    % Validation of a field or property reference does need a label
    mustBeScalar (this.foo, 'this.foo');
    

    6 Example Data Sets

    Tablicious comes with several example data sets that you can use to explore how its functions and objects work. These are accessed through the tblish.datasets and tblish.dataset classes.

    To see a list of the available data sets, run tblish.datasets.list(). Then to load one of the example data sets, run tblish.datasets.load('examplename'). For example:

    tblish.datasets.list
    t = tblish.datasets.load('cupcake')
    

    You can also load it by calling tblish.dataset.<name>. This does the same thing. For example:

    t = tblish.dataset.cupcake
    

    When you load a data set, it either returns all its data in a single variable (if you capture it), or loads its data into one or more variables in your workspace (if you call it with no outputs).

    Each example data set comes with help text that describes the data set and provides examples of how to work with it. This help is found using the doc command on tblish.dataset.<name>, where <name> is the name of the data set.

    For example:

    doc tblish.dataset.cupcake
    

    (The command help tblish.dataset.<name> ought to work too, but it currently doesn’t. This may be due to an issue with Octave’s help command.)


    6.1 Data Sets from R

    Many of Tablicious’ example data sets are based on the example datasets found in R’s datasets package. R can be found at https://www.r-project.org/, and documentation for its datasets is at https://rdrr.io/r/datasets/datasets-package.html. Thanks to the R developers for producing the original data sets here.

    Tablicious’ examples’ code tries to replicate the R examples, so it can be useful to compare the two of them if you are moving from one language to another.

    Core Octave currently lacks some of the plotting features found in the R examples, such as LOWESS smoothing and linear model characteristic plots, so you will just find “TODO” placeholders for these in Tablicious’ example code.


    7 Missing Functionality

    Tablicious is based on Matlab’s table and date/time APIs and supports some of their major functionality. But not all of it is implemented yet. The missing parts are currently:

    • File I/O like readtable() and writetable()
    • summary() categorical
    • Assignment to table variables using .-indexing
    • timetable
    • POSIX time zone support for years outside the IANA time zone database coverage
    • Week-of-year (ISO calendar) calculations
    • Various 'ConvertFrom' forms for datetime and duration constructors
    • Support for LDML formatting for datetime
    • Various functions:
      • between
      • caldiff
      • dateshift
      • week
    • isdst, isweekend
    • calendarDuration.split
    • duration.Format support
    • Moving window methods in fillmissing
    • UTCOffset and DSTOffset fields in the output of timezones()
    • Plotting support

    It is the author’s hope that many these will be implemented some day.

    These areas of missing functionality are tracked on the Tablicious issue tracker at https://github.com/apjanke/octave-tablicious/issues and https://github.com/users/apjanke/projects/3.


    8 API Reference


    8.1 API by Category

    8.1.1 Tables

    table

    Tabular data array containing multiple columnar variables.

    See table.

    array2table

    Convert an array to a table.

    See array2table.

    cell2table

    Convert a cell array to a table.

    See cell2table.

    struct2table

    Convert struct to a table.

    See struct2table.

    tableOuterFillValue

    See tableOuterFillValue.

    vartype

    Filter by variable type for use in suscripting.

    See vartype.

    istable

    True if input is a ‘table’ array or other table-like type, false otherwise.

    See istable.

    istimetable

    True if input is a ‘timetable’ array or other timetable-like type, false otherwise.

    See istimetable.

    istabular

    True if input is eitehr a ‘table’ or ‘timetable’ array, or an object like them.

    See istabular.

    tblish.evalWithTableVars

    Evaluate an expression against a table array’s variables.

    See tblish.evalWithTableVars.

    tblish.table.grpstats

    Statistics by group for a table array.

    See tblish.table.grpstats.

    8.1.2 Strings and Categoricals

    string

    A string array of Unicode strings.

    See string.

    NaS

    “Not-a-String".

    See NaS.

    contains

    Test if strings contain a pattern.

    See contains.

    dispstrs

    Display strings for array.

    See dispstrs.

    categorical

    Categorical variable array.

    See categorical.

    iscategorical

    True if input is a ‘categorical’ array, false otherwise.

    See iscategorical.

    NaC

    “Not-a-Categorical".

    See NaC.

    discretize

    Group data into discrete bins or categories.

    See discretize.

    8.1.3 Dates and Times

    datetime

    Represents points in time using the Gregorian calendar.

    See datetime.

    NaT

    “Not-a-Time”.

    See NaT.

    todatetime

    Convert input to a Tablicious datetime array, with convenient interface.

    See todatetime.

    localdate

    Represents a complete day using the Gregorian calendar.

    See localdate.

    isdatetime

    True if input is a ‘datetime’ array, false otherwise.

    See isdatetime.

    calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time.

    See calendarDuration.

    iscalendarduration

    True if input is a ‘calendarDuration’ array, false otherwise.

    See iscalendarduration.

    calmonths

    Create a ‘calendarDuration’ that is a given number of calendar months long.

    See calmonths.

    calyears

    Construct a ‘calendarDuration’ a given number of years long.

    See calyears.

    days

    Duration in days.

    See days.

    duration

    Represents durations or periods of time as an amount of fixed-length time (i.e.

    See duration.

    hours

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See hours.

    isduration

    True if input is a ‘duration’ array, false otherwise.

    See isduration.

    milliseconds

    Create a ‘duration’ X milliseconds long, or get the milliseconds in a ‘duration’ X.

    See milliseconds.

    minutes

    Create a ‘duration’ X hours long, or get the hours in a ‘duration’ X.

    See minutes.

    seconds

    Create a ‘duration’ X seconds long, or get the seconds in a ‘duration’ X.

    See seconds.

    timezones

    List all the time zones defined on this system.

    See timezones.

    years

    Create a ‘duration’ X years long, or get the years in a ‘duration’ X.

    See years.

    8.1.4 Missing Data

    missing

    Generic auto-converting missing value.

    See missing.

    isnanny

    Test if elements are NaN or NaN-like

    See isnanny.

    eqn

    Determine element-wise equality, treating NaNs as equal

    See eqn.

    8.1.5 Validation Functions

    mustBeA

    See mustBeA.

    mustBeCellstr

    See mustBeCellstr.

    mustBeCharvec

    See mustBeCharvec.

    mustBeFinite

    See mustBeFinite.

    mustBeInteger

    See mustBeInteger.

    mustBeMember

    See mustBeMember.

    mustBeNonempty

    See mustBeNonempty.

    mustBeNumeric

    See mustBeNumeric.

    mustBeReal

    See mustBeReal.

    mustBeSameSize

    See mustBeSameSize.

    mustBeScalar

    See mustBeScalar.

    mustBeScalarLogical

    See mustBeScalarLogical.

    mustBeVector

    See mustBeVector.

    8.1.6 Miscellaneous

    colvecfun

    Apply a function to column vectors in array.

    See colvecfun.

    dispstrs

    Display strings for array.

    See dispstrs.

    head

    Get first K rows of an array.

    See head.

    isfile

    See isfile.

    isfolder

    See isfolder.

    pp

    Alias for prettyprint, for interactive use.

    See pp.

    scalarexpand

    Expand scalar inputs to match size of non-scalar inputs.

    See scalarexpand.

    size2str

    Format an array size for display.

    See size2str.

    splitapply

    Split data into groups and apply function.

    See splitapply.

    tail

    Get last K rows of an array.

    See tail.

    vecfun

    Apply function to vectors in array along arbitrary dimension.

    See vecfun.

    tblish.sizeof2

    Approximate size of an array in bytes, with object support.

    See tblish.sizeof2.

    8.1.7 Example Datasets

    tblish.datasets

    Example dataset collection.

    See tblish.datasets.

    tblish.dataset

    The ‘tblish.dataset’ class provides convenient access to the various datasets included with Tablicious.

    See tblish.dataset.

    8.1.8 Example Code

    tblish.examples.coplot

    Conditioning plot.

    See tblish.examples.coplot.

    tblish.examples.plot_pairs

    Plot pairs of variables against each other.

    See tblish.examples.plot_pairs.

    tblish.examples.SpDb

    The classic Suppliers-Parts example database.

    See tblish.examples.SpDb.

    8.1.9 Uncategorized

    caldays

    Create a ‘calendarDuration’ that is a given number of calendar days long.

    See caldays.


    8.2 API Alphabetically


    8.2.1 array2table

    Function: out = array2table (c)
    Function: out = array2table (…, 'VariableNames', VariableNames)
    Function: out = array2table (…, 'RowNames', RowNames)

    Convert an array to a table.

    Converts a 2-D array to a table, with columns in the array becoming variables in the output table. This is typically used on numeric arrays, but it can be applied to any type of array.

    You may not want to use this on cell arrays, though, because you will end up with a table that has all its variables of type cell. If you use cell2table instead, columns of the cell array which can be condensed into primitive arrays will be. With array2table, they won’t be.

    See also: cell2table, table, struct2table


    8.2.2 caldays

    Function File: out = caldays (x)

    Create a calendarDuration that is a given number of calendar days long.

    Input x is a numeric array specifying the number of calendar days.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, 0, x).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.3 calendarDuration

    Class: calendarDuration

    Durations of time using variable-length calendar periods, such as days, months, and years, which may vary in length over time. (For example, a calendar month may have 28, 30, or 31 days.)

    Instance Variable of calendarDuration: char Format

    The format to display this calendarDuration in. Currently unsupported.

    This is a single value that applies to the whole array.


    8.2.3.1 calendarDuration.calendarDuration

    Constructor: obj = calendarDuration ()

    Constructs a new scalar calendarDuration of zero elapsed time.

    Constructor: obj = calendarDuration (Y, M, D)
    Constructor: obj = calendarDuration (Y, M, D, H, MI, S)

    Constructs new calendarDuration arrays based on input values.


    8.2.3.2 calendarDuration.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.3.3 calendarDuration.ismissing

    Method: out = ismissing (obj)

    True if input elements are missing.

    This is equivalent to ismissing.

    Returns logical array the same size as obj.


    8.2.3.4 calendarDuration.isnan

    Method: out = isnan (obj)

    True if input elements are NaN.

    This is equivalent to ismissing, and is provided for compatibility and polymorphic programming purposes.

    Returns logical array the same size as obj.


    8.2.3.5 calendarDuration.minus

    Method: out = times (A, B)

    Subtraction: Subtracts one calendarDuration from another.

    Returns a calendarDuration.


    8.2.3.6 calendarDuration.mtimes

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor.

    This does not do true matrix multiplication, so at least one of the input arguments must be scalar.

    Returns a calendarDuration.


    8.2.3.7 calendarDuration.plus

    Method: out = plus (obj, B)

    Addition: add to a calendarDuration.

    All the calendar elements (properties) of the two inputs are added together. No normalization is done across the elements, aside from the normalization of NaNs.

    B may be a calendarDuration, duration, or numeric. If B is numeric, it is converted to a calendarDuration using caldays(B).

    Returns a calendarDuration.


    8.2.3.8 calendarDuration.times

    Method: out = times (obj, B)

    Multiplication: Multiplies a calendarDuration by a numeric factor B.

    Returns a calendarDuration.


    8.2.3.9 calendarDuration.uminus

    Method: out = uminus (obj)

    Unary minus. Negates the sign of obj, which is equivalent to negating each of its components.


    8.2.4 calmonths

    Function File: out = calmonths (x)

    Create a calendarDuration that is a given number of calendar months long.

    Input x is a numeric array specifying the number of calendar months.

    This is a shorthand alternative to calling the calendarDuration constructor with calendarDuration(0, x, 0).

    Returns a new calendarDuration object of the same size as x.

    See calendarDuration.


    8.2.5 calyears

    Function: out = calyears (x)

    Construct a calendarDuration a given number of years long.

    This is a shorthand for calling calendarDuration(x, 0, 0).

    See calendarDuration.


    8.2.6 categorical

    Class: categorical

    Categorical variable array.

    A categorical array represents an array of values of a categorical variable. Each categorical array stores the element values along with a list of the categories, and indicators of whether the categories are ordinal (that is, they have a meaningful mathematical ordering), and whether the set of categories is protected (preventing new categories from being added to the array).

    In addition to the categories defined in the array, a categorical array may have elements of "undefined" value. This is not considered a category; rather, it is the absence of any known value. It is analagous to a NaN value.

    This class is not fully implemented yet. Missing stuff:

    • gt, ge, lt, le
    • Ordinal support in general
    • countcats
    • summary
    Instance Variable of categorical: uint16 code

    The numeric codes of the array element values. These are indexes into the cats category list.

    This is a planar property.

    Instance Variable of categorical: logical tfMissing

    A logical mask indicating whether each element of the array is missing (that is, undefined).

    This is a planar property.

    Instance Variable of categorical: cellstr cats

    The names of the categories in this array. This is the list into which the code values are indexes.

    Instance Variable of categorical: scalar_logical isOrdinal

    A scalar logical indicating whether the categories in this array have an ordinal relationship.


    8.2.6.1 categorical.addcats

    Method: out = addcats (obj, newcats)

    Add categories to categorical array.

    Adds the specified categories to obj, without changing any of its values.

    newcats is a cellstr listing the category names to add to obj.


    8.2.6.2 categorical.categorical

    Constructor: obj = categorical ()

    Constructs a new scalar categorical whose value is undefined.

    Constructor: obj = categorical (vals)
    Constructor: obj = categorical (vals, valueset)
    Constructor: obj = categorical (vals, valueset, category_names)
    Constructor: obj = categorical (…, 'Ordinal', Ordinal)
    Constructor: obj = categorical (…, 'Protected', Protected)

    Constructs a new categorical array from the given values.

    vals is the array of values to convert to categoricals.

    valueset is the set of all values from which vals is drawn. If omitted, it defaults to the unique values in vals.

    category_names is a list of category names corresponding to valueset. If omitted, it defaults to valueset, converted to strings.

    Ordinal is a logical indicating whether the category values in obj have a numeric ordering relationship. Defaults to false.

    Protected indicates whether obj should be protected, which prevents the addition of new categories to the array. Defaults to false.


    8.2.6.3 categorical.categories

    Method: out = categories (obj)

    Get a list of the categories in obj.

    Gets a list of the categories in obj, identified by their category names.

    Returns a cellstr column vector.


    8.2.6.4 categorical.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr array. The strings will be the category names for corresponding values, or '' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.6.5 categorical.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj. The display strings are either the category string, or '<undefined>' for undefined values.

    Returns a cellstr array the same size as obj.


    8.2.6.6 categorical.double

    Method: out = double (obj)

    Convert to double array, by getting the underlying code values.

    Converts obj to a string array. The doubles will be the underlying numeric code values of obj, or NaN for undefined values.

    The numeric code values of two different categorical arrays do *not* necessarily correspond to the same string values, and can *not* be meaningfully compared for equality or ordering.

    Returns a double array the same size as obj.


    8.2.6.7 categorical.iscategory

    Method: out = iscategory (obj, catnames)

    Test whether input is a category on a categorical array.

    catnames is a cellstr listing the category names to check against obj.

    Returns a logical array the same size as catnames.


    8.2.6.8 categorical.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing.

    For categorical arrays, undefined elements are considered to be missing.

    Returns a logical array the same size as obj.


    8.2.6.9 categorical.isnanny

    Method: out = isnanny (obj)

    Test whethere elements are NaN-ish.

    Checks where each element in obj is NaN-ish. For categorical arrays, undefined values are considered NaN-ish; any other value is not.

    Returns a logical array the same size as obj.


    8.2.6.10 categorical.isordinal

    Method: out = isordinal (obj)

    Whether obj is ordinal.

    Returns true if obj is ordinal (as determined by its IsOrdinal property), and false otherwise.


    8.2.6.11 categorical.isundefined

    Method: out = isundefined (obj)

    Test whether elements are undefined.

    Checks whether each element in obj is undefined. "Undefined" is a special value defined by categorical. It is equivalent to a NaN or a missing value.

    Returns a logical array the same size as obj.


    8.2.6.12 categorical.mergecats

    Method: out = mergecats (obj, oldcats)
    Method: out = mergecats (obj, oldcats, newcat)

    Merge multiple categories.

    Merges the categories oldcats into a single category. If newcat is specified, that new category is added if necessary, and all of oldcats are merged into it. newcat must be an existing category in obj if obj is ordinal.

    If newcat is not provided, all of odcats are merged into oldcats{1}.


    8.2.6.13 categorical.missing

    Static Method: out = categorical.missing ()
    Static Method: out = categorical.missing (sz)

    Create an array of missing (undefined) categoricals.

    Creates a categorical array whose elements are all missing (<undefined>).

    This is a convenience alias for categorical.undefined, so you can call it generically. It returns strictly the same results as calling categorical.undefined with the same arguments.

    Returns a categorical array.

    See also: categorical.undefined


    8.2.6.14 categorical.removecats

    Method: out = removecats (obj)

    Removes all unused categories from obj. This is equivalent to out = squeezecats (obj).

    Method: out = removecats (obj, oldcats)

    Remove categories from categorical array.

    Removes the specified categories from obj. Elements of obj whose values belonged to those categories are replaced with undefined.

    newcats is a cellstr listing the category names to add to obj.


    8.2.6.15 categorical.renamecats

    Method: out = renamecats (obj, newcats)
    Method: out = renamecats (obj, oldcats, newcats)

    Rename categories.

    Renames some or all of the categories in obj, without changing any of its values.


    8.2.6.16 categorical.reordercats

    Method: out = reordercats (obj)
    Method: out = reordercats (obj, newcats)

    Reorder categories.

    Reorders the categories in obj to match newcats.

    newcats is a cellstr that must be a reordering of obj’s existing category list. If newcats is not supplied, sorts the categories in alphabetical order.


    8.2.6.17 categorical.setcats

    Method: out = setcats (obj, newcats)

    Set categories for categorical array.

    Sets the categories to use for obj. If any current categories are absent from the newcats list, current values of those categories become undefined.


    8.2.6.18 categorical.squeezecats

    Method: out = squeezecats (obj)

    Remove unused categories.

    Removes all categories which have no corresponding values in obj’s elements.

    This is currently unimplemented.


    8.2.6.19 categorical.string

    Method: out = string (obj)

    Convert to string array.

    Converts obj to a string array. The strings will be the category names for corresponding values, or <missing> for undefined values.

    Returns a string array the same size as obj.


    8.2.6.20 categorical.summary

    Method: summary (obj)

    Display summary of array’s values.

    Displays a summary of the values in this categorical array. The output may contain info like the number of categories, number of undefined values, and frequency of each category.


    8.2.6.21 categorical.undefined

    Static Method: out = categorical.undefined ()
    Static Method: out = categorical.undefined (sz)

    Create an array of undefined categoricals.

    Creates a categorical array whose elements are all <undefined>.

    sz is the size of the array to create. If omitted or empty, creates a scalar.

    Returns a categorical array.

    See also: categorical.missing


    8.2.7 cell2table

    Function: out = cell2table (c)
    Function: out = cell2table (…, 'VariableNames', VariableNames)
    Function: out = cell2table (…, 'RowNames', RowNames)

    Convert a cell array to a table.

    Converts a 2-dimensional cell matrix into a table. Each column in the input c becomes a variable in out. For columns that contain all scalar values of cat-compatible types, they are “popped out” of their cells and condensed into a homogeneous array of the contained type.

    See also: array2table, table, struct2table


    8.2.8 colvecfun

    Function: out = colvecfun (fcn, x)

    Apply a function to column vectors in array.

    Applies the given function fcn to each column vector in the array x, by iterating over the indexes along all dimensions except dimension 1. Collects the function return values in an output array.

    fcn must be a function which takes a column vector and returns a column vector of the same size. It does not have to return the same type as x.

    Returns the result of applying fcn to each column in x, all concatenated together in the same shape as x.


    8.2.9 contains

    Function: out = colvecfun (str, pattern)
    Function: out = colvecfun (…, 'IgnoreCase', IgnoreCase)

    Test if strings contain a pattern.

    Tests whether the given strings contain the given pattern(s).

    str (char, cellstr, or string) is a list of strings to compare against pattern.

    pattern (char, cellstr, or string) is a list of patterns to match. These are literal plain string patterns, not regex patterns. If more than one pattern is supplied, the return value is true if the string matched any of them.

    Returns a logical array of the same size as the string array represented by str.

    See also: startsWith, endsWith


    8.2.10 datetime

    Class: datetime

    Represents points in time using the Gregorian calendar.

    The underlying values are doubles representing the number of days since the Matlab epoch of "January 0, year 0". This has a precision of around nanoseconds for typical times.

    A datetime array is an array of date/time values, with each element holding a complete date/time. The overall array may also have a TimeZone and a Format associated with it, which apply to all elements in the array.

    This is an attempt to reproduce the functionality of Matlab’s datetime. It also contains some Octave-specific extensions.

    Instance Variable of datetime: double dnums

    The underlying datenums that represent the points in time. These are always in UTC.

    This is a planar property: the size of dnums is the same size as the containing datetime array object.

    Instance Variable of datetime: char TimeZone

    The time zone this datetime array is in. Empty if this does not have a time zone associated with it (“unzoned”). The name of an IANA time zone if this does.

    Setting the TimeZone of a datetime array changes the time zone it is presented in for strings and broken-down times, but does not change the underlying UTC times that its elements represent.

    Instance Variable of datetime: char Format

    The format to display this datetime in. Currently unsupported.


    8.2.10.1 datetime.colon

    Method: out = colon (lo, hi)
    Method: out = colon (hi, inc, hi)

    Generate a sequence of uniformly-spaced values.

    This method implements the behavior for the colon operator (lo:hi or lo:inc:hi calls) for the datetime type.

    "Uniformly-spaced" means uniform in terms of the duration or calendarDuration value used as the increment. Calendar durations are not necessarily equal-sized in terms of the amount of actual time contained in them, so when using a calendarDuration as the increment, the resulting vector may not be, and often will not be, uniformly spaced in terms of actual (non-"calendar") time.

    The inc argument may be a duration, calendarDuration, or numeric. Numerics are taken to be a number of days (uniform-size days, not calendar days), and are converted to a duration object with duration.ofDays (inc). The default value for inc, used in the two-arg lo:hi is 1, that is, 1 day of exactly 24 hours.

    Returns a datetime vector.

    WARNING: There are issues with negative-direction sequences. When hi is less than lo, this will always produce an empty array, even if inc is a negative value. And there are cases with calendarDurations that have both Months, Days and/or Times with mixed signs that values may move in the "wrong" direction, or produce an infinite loop. If these problem cases can be correctly identified, but not corrected, those cases may raise an error future releases of Tablicious.


    8.2.10.2 datetime.convertDatenumTimeZone

    Static Method: out = datetime.convertDatenumTimeZone (dnum, fromZoneId, toZoneId)

    Convert a datenum from one time zone to another.

    dnum is a datenum array to convert.

    fromZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert from.

    toZoneId is a charvec containing the IANA Time Zone identifier for the time zone to convert to.

    Returns a datenum array the same size as dnum.


    8.2.10.3 datetime.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent the same local time.

    Returns double array of same size as this.


    8.2.10.4 datetime.datenum2posix

    Static Method: out = datetime.datenum2posix (dnums)

    Converts Octave datenums to Unix dates.

    The input datenums are assumed to be in UTC.

    Returns a double, which may have fractional seconds.


    8.2.10.5 datetime.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.10.6 datetime.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.10.7 datetime.datestruct

    Method: out = datestruct (obj)

    Converts this to a "datestruct" broken-down time structure.

    A "datestruct" is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, Day, Hour, Minute, and Second, each containing a double array the same size as the date array it represents.

    The values in the returned broken-down time are those of the local time in this’ defined time zone, if it has one.

    Returns a struct with fields Year, Month, Day, Hour, Minute, and Second. Each field contains a double array of the same size as this.


    8.2.10.8 datetime.datetime

    Constructor: obj = datetime ()

    Constructs a new scalar datetime containing the current local time, with no time zone attached.

    Constructor: obj = datetime (datevec)
    Constructor: obj = datetime (datestrs)
    Constructor: obj = datetime (in, 'ConvertFrom', inType)
    Constructor: obj = datetime (Y, M, D, H, MI, S)
    Constructor: obj = datetime (Y, M, D, H, MI, MS)
    Constructor: obj = datetime (…, 'Format', Format, 'InputFormat', InputFormat, 'Locale', InputLocale, 'PivotYear', PivotYear, 'TimeZone', TimeZone)

    Constructs a new datetime array based on input values.


    8.2.10.9 datetime.datevec

    Method: out = datevec (obj)

    Convert this to a datevec that represent the same local wall time.

    Returns double array of size [numel(obj) 6].


    8.2.10.10 datetime.diff

    Method: out = diff (obj)

    Differences between elements.

    Computes the difference between each successive element in obj, as a duration.

    Returns a duration array the same size as obj.


    8.2.10.11 datetime.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.10.12 datetime.eq

    Method: out = eq (A, B)

    True if A is equal to B. This defines the == operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.13 datetime.ge

    Method: out = ge (A, B)

    True if A is greater than or equal to B. This defines the >= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.14 datetime.gmtime

    Method: out = gmtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is in UTC time. If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.


    8.2.10.15 datetime.gt

    Method: out = gt (A, B)

    True if A is greater than B. This defines the > operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.16 datetime.hms

    Method: [h, m, s] = hms (obj)

    Get the Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10.17 datetime.isbetween

    Method: out = isbetween (obj, lower, upper)

    Tests whether the elements of obj are between lower and upper.

    All inputs are implicitly converted to datetime arrays, and are subject to scalar expansion.

    Returns a logical array the same size as the scalar expansion of the inputs.


    8.2.10.18 datetime.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.10.19 datetime.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.10.20 datetime.le

    Method: out = le (A, B)

    True if A is less than or equal toB. This defines the <= operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.21 datetime.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in date/time space.

    Constructs a vector of datetimes that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to datetimes.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.10.22 datetime.localtime

    Method: out = localtime (obj)

    Convert to TM_STRUCT structure in UTC time.

    Converts obj to a TM_STRUCT style structure array. The result is a local time in the system default time zone. Note that the system default time zone is always used, regardless of what TimeZone is set on obj.

    If obj is unzoned, it is assumed to be in UTC time.

    Returns a struct array in TM_STRUCT style.

    Example:

    dt = datetime;
    dt.TimeZone = datetime.SystemTimeZone;
    tm_struct = localtime (dt);
    

    8.2.10.23 datetime.lt

    Method: out = lt (A, B)

    True if A is less than B. This defines the < operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.24 datetime.minus

    Method: out = minus (A, B)

    Subtraction (- operator). Subtracts a duration, calendarDuration or numeric B from a datetime A, or subtracts two datetimes from each other.

    If both inputs are datetime, then the output is a duration. Otherwise, the output is a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    Returns an array the same size as A.


    8.2.10.25 datetime.NaT

    Static Method: out = datetime.NaT ()
    Static Method: out = datetime.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.


    8.2.10.26 datetime.ne

    Method: out = ne (A, B)

    True if A is not equal to B. This defines the != operator for datetimes.

    Inputs are implicitly converted to datetime using the one-arg constructor or conversion method.

    Returns logical array the same size as obj.


    8.2.10.27 datetime.ofDatenum

    Static Method: obj = datetime.ofDatenum (dnums)

    Converts a datenum array to a datetime array.

    Returns an unzoned datetime array of the same size as the input.


    8.2.10.28 datetime.ofDatestruct

    Static Method: obj = datetime.ofDatestruct (dstruct)

    Converts a datestruct to a datetime array.

    A datestruct is a special struct format used by Tablicious that has fields Year, Month, Day, Hour, Minute, and Second. It is not a standard Octave datatype.

    Returns an unzoned datetime array.


    8.2.10.29 datetime.plus

    Method: out = plus (A, B)

    Addition (+ operator). Adds a duration, calendarDuration, or numeric B to a datetime A.

    A must be a datetime.

    Numeric B inputs are implicitly converted to duration using duration.ofDays.

    WARNING: Arithmetic with calendarDuration arguments on datetimes in time zones which use Daylight Saving Time may be buggy.

    Returns datetime array the same size as A.


    8.2.10.30 datetime.posix2datenum

    Static Method: dnums = datetime.posix2datenum (pdates)

    Converts POSIX (Unix) times to datenums

    Pdates (numeric) is an array of POSIX dates. A POSIX date is the number of seconds since January 1, 1970 UTC, excluding leap seconds. The output is implicitly in UTC.


    8.2.10.31 datetime.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values (seconds since the Unix epoch)

    Converts this to POSIX time values that represent the same time. The returned values will be doubles that may include fractional second values. POSIX times are, by definition, in UTC.

    Returns double array of same size as this.


    8.2.10.32 datetime.proxyKeys

    Method: [keysA, keysB] = proxyKeys (a, b)

    Computes proxy key values for two datetime arrays. Proxy keys are numeric values whose rows have the same equivalence relationships as the elements of the inputs.

    This is primarily for Tablicious’s internal use; users will typically not need to call it or know how it works.

    Returns two 2-D numeric matrices of size n-by-k, where n is the number of elements in the corresponding input.


    8.2.10.33 datetime.timeofday

    Method: out = timeofday (obj)

    Get the time of day (elapsed time since midnight).

    For zoned datetimes, these will be local times in the associated time zone.

    Returns a duration array the same size as obj.


    8.2.10.34 datetime.week

    Method: out = week (obj)

    Get the week of the year.

    This method is unimplemented.


    8.2.10.35 datetime.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.10.36 datetime.ymdhms

    Method: [y, m, d, h, mi, s] = ymdhms (obj)

    Get the Year, Month, Day, Hour, Minute, and Second components of a obj.

    For zoned datetimes, these will be local times in the associated time zone.

    Returns double arrays the same size as obj.


    8.2.11 days

    Function: out = days (x)

    Duration in days.

    If x is numeric, then out is a duration array in units of fixed-length 24-hour days, with the same size as x.

    If x is a duration, then returns a double array the same size as x indicating the number of fixed-length days that each duration is.


    8.2.12 discretize

    Function: [Y, E] = discretize (X, n)
    Function: [Y, E] = discretize (X, edges)
    Function: [Y, E] = discretize (X, dur)
    Function: [Y, E] = discretize (…, 'categorical')
    Function: [Y, E] = discretize (…, 'IncludedEdge', IncludedEdge)

    Group data into discrete bins or categories.

    n is the number of bins to group the values into.

    edges is an array of edge values defining the bins.

    dur is a duration value indicating the length of time of each bin.

    If 'categorical' is specified, the resulting values are a categorical array instead of a numeric array of bin indexes.

    Returns: Y - the bin index or category of each value from X E - the list of bin edge values


    8.2.13 dispstrs

    Function: out = dispstrs (x)

    Display strings for array.

    Gets the display strings for each element of x. The display strings should be short, one-line, human-presentable strings describing the value of that element.

    The default implementation of dispstrs can accept input of any type, and has decent implementations for Octave’s standard built-in types, but will have opaque displays for most user-defined objects.

    This is a polymorphic method that user-defined classes may override with their own custom display that is more informative.

    Returns a cell array the same size as x.


    8.2.14 duration

    Class: duration

    Represents durations or periods of time as an amount of fixed-length time (i.e. fixed-length seconds). It does not care about calendar things like months and days that vary in length over time.

    This is an attempt to reproduce the functionality of Matlab’s duration. It also contains some Octave-specific extensions.

    Duration values are stored as double numbers of days, so they are an approximate type. In display functions, by default, they are displayed with millisecond precision, but their actual precision is closer to nanoseconds for typical times.

    Instance Variable of duration: double days

    The underlying datenums that represent the durations, as number of (whole and fractional) days. These are uniform 24-hour days, not calendar days.

    This is a planar property: the size of days is the same size as the containing duration array object.

    Instance Variable of duration: char Format

    The format to display this duration in. Currently unsupported.


    8.2.14.1 duration.char

    Method: out = char (obj)

    Convert to char. The contents of the strings will be the same as returned by dispstrs.

    This is primarily a convenience method for use on scalar objs.

    Returns a 2-D char array with one row per element in obj.


    8.2.14.2 duration.dispstrs

    Method: out = duration (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.14.3 duration.hours

    Method: out = hours (obj)

    Equivalent number of hours.

    Gets the number of fixed-length 60-minute hours that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.4 duration.linspace

    Method: out = linspace (from, to, n)

    Linearly-spaced values in time duration space.

    Constructs a vector of durations that represent linearly spaced points starting at from and going up to to, with n points in the vector.

    from and to are implicitly converted to durations.

    n is how many points to use. If omitted, defaults to 100.

    Returns an n-long datetime vector.


    8.2.14.5 duration.milliseconds

    Method: out = milliseconds (obj)

    Equivalent number of milliseconds.

    Gets the number of milliseconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.6 duration.minutes

    Method: out = minutes (obj)

    Equivalent number of minutes.

    Gets the number of fixed-length 60-second minutes that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.7 duration.ofDays

    Static Method: obj = duration.ofDays (dnums)

    Converts a double array representing durations in whole and fractional days to a duration array. This is the method that is used for implicit conversion of numerics in many cases.

    Returns a duration array of the same size as the input.


    8.2.14.8 duration.seconds

    Method: out = seconds (obj)

    Equivalent number of seconds.

    Gets the number of seconds that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.14.9 duration.years

    Method: out = years (obj)

    Equivalent number of years.

    Gets the number of fixed-length 365.2425-day years that is equivalent to this duration.

    Returns double array the same size as obj.


    8.2.15 eqn

    Function: out = eqn (A, B)

    Determine element-wise equality, treating NaNs as equal

    out = eqn (A, B)

    eqn is just like eq (the function that implements the == operator), except that it considers NaN and NaN-like values to be equal. This is the element-wise equivalent of isequaln.

    eqn uses isnanny to test for NaN and NaN-like values, which means that NaNs and NaTs are considered to be NaN-like, and string arrays’ “missing” and categorical objects’ “undefined” values are considered equal, because they are NaN-ish.

    Developer’s note: the name “eqn” is a little unfortunate, because “eqn” could also be an abbreviation for “equation”. But this name follows the isequaln pattern of appending an “n” to the corresponding non-NaN-equivocating function.

    See also: eq, isequaln, isnanny


    8.2.17 hours

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.

    If input is numeric, returns a duration array that is that many hours in time.

    If input is a duration, converts the duration to a number of hours.

    Returns an array the same size as x.


    8.2.18 iscalendarduration

    Function: out = iscalendarduration (x)

    True if input is a calendarDuration array, false otherwise.

    Respects iscalendarduration override methods on user-defined classes, even if they do not inherit from calendarDuration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.19 iscategorical

    Function: out = iscategorical (x)

    True if input is a categorical array, false otherwise.

    Respects iscategorical override methods on user-defined classes, even if they do not inherit from categorical or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.20 isdatetime

    Function: out = isdatetime (x)

    True if input is a datetime array, false otherwise.

    Respects isdatetime override methods on user-defined classes, even if they do not inherit from datetime or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.21 isduration

    Function: out = isduration (x)

    True if input is a duration array, false otherwise.

    Respects isduration override methods on user-defined classes, even if they do not inherit from duration or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.22 isfile

    Not documented


    8.2.23 isfolder

    Not documented


    8.2.24 isnanny

    Function: out = isnanny (X)

    Test if elements are NaN or NaN-like

    Tests if input elements are NaN, NaT, or otherwise NaN-like. This is true if isnan() or isnat() returns true, and is false for types that do not support isnan() or isnat().

    This function only exists because:

    1. Matlab decided to call their NaN values for datetime “NaT” instead, and test for them with a different “isnat()” function, and
    2. isnan() errors out for some types that do not support isnan(), like cells.

    isnanny() smooths over those differences so you can call it polymorphically on any input type. Hopefully.

    Under normal operation, isnanny() should not throw an error for any type or value of input.

    See also: ismissing, isnan, isnat, eqn, isequaln


    8.2.25 istable

    Function: out = istable (x)

    True if input is a table array or other table-like type, false otherwise.

    Respects istable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.26 istabular

    Function: out = istabular (x)

    True if input is eitehr a table or timetable array, or an object like them.

    Respects istable and istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    Returns a scalar logical.


    8.2.27 istimetable

    Function: out = istimetable (x)

    True if input is a timetable array or other timetable-like type, false otherwise.

    Respects istimetable override methods on user-defined classes, even if they do not inherit from table or were known to Tablicious at authoring time.

    User-defined classes should only override istimetable to return true if they conform to the table public interface. That interface is not well-defined or documented yet, so maybe you don’t want to do that yet.

    Returns a scalar logical.


    8.2.28 localdate

    Class: localdate

    Represents a complete day using the Gregorian calendar.

    This class is useful for indexing daily-granularity data or representing time periods that cover an entire day in local time somewhere. The major purpose of this class is "type safety", to prevent time-of-day values from sneaking in to data sets that should be daily only. As a secondary benefit, this uses less memory than datetimes.

    Instance Variable of localdate: double dnums

    The underlying datenum values that represent the days. The datenums are at the midnight that is at the start of the day it represents.

    These are doubles, but they are restricted to be integer-valued, so they represent complete days, with no time-of-day component.

    Instance Variable of localdate: char Format

    The format to display this localdate in. Currently unsupported.


    8.2.28.1 localdate.datenum

    Method: out = datenum (obj)

    Convert this to datenums that represent midnight on obj’s days.

    Returns double array of same size as this.


    8.2.28.2 localdate.datestr

    Method: out = datestr (obj)
    Method: out = datestr (obj, …)

    Format obj as date strings. Supports all arguments that core Octave’s datestr does.

    Returns date strings as a 2-D char array.


    8.2.28.3 localdate.datestrs

    Method: out = datestrs (obj)
    Method: out = datestrs (obj, …)

    Format obj as date strings, returning cellstr. Supports all arguments that core Octave’s datestr does.

    Returns a cellstr array the same size as obj.


    8.2.28.4 localdate.datestruct

    Method: out = datestruct (obj)

    Converts this to a “datestruct” broken-down time structure.

    A “datestruct” is a format of struct that Tablicious came up with. It is a scalar struct with fields Year, Month, and Day, each containing a double array the same size as the date array it represents. This format differs from the “datestruct” used by datetime in that it lacks Hour, Minute, and Second components. This is done for efficiency.

    The values in the returned broken-down time are those of the local time in obj’s defined time zone, if it has one.

    Returns a struct with fields Year, Month, and Day. Each field contains a double array of the same size as this.


    8.2.28.5 localdate.dispstrs

    Method: out = dispstrs (obj)

    Get display strings for each element of obj.

    Returns a cellstr the same size as obj.


    8.2.28.6 localdate.isnan

    Method: out = isnan (obj)

    True if input elements are NaT. This is an alias for isnat to support type compatibility and polymorphic programming.

    Returns logical array the same size as obj.


    8.2.28.7 localdate.isnat

    Method: out = isnat (obj)

    True if input elements are NaT.

    Returns logical array the same size as obj.


    8.2.28.8 localdate.localdate

    Constructor: obj = localdate ()

    Constructs a new scalar localdate containing the current local date.

    Constructor: obj = localdate (datenums)
    Constructor: obj = localdate (datestrs)
    Constructor: obj = localdate (Y, M, D)
    Constructor: obj = localdate (…, 'Format', Format)

    Constructs a new localdate array based on input values.


    8.2.28.9 localdate.NaT

    Static Method: out = localdate.NaT ()
    Static Method: out = localdate.NaT (sz)

    “Not-a-Time”: Creates NaT-valued arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    This static method is provided because the global NaT function creates datetimes, not localdates


    8.2.28.10 localdate.posixtime

    Method: out = posixtime (obj)

    Converts this to POSIX time values for midnight of obj’s days.

    Converts this to POSIX time values that represent the same date. The returned values will be doubles that will not include fractional second values. The times returned are those of midnight UTC on obj’s days.

    Returns double array of same size as this.


    8.2.28.11 localdate.ymd

    Method: [y, m, d] = ymd (obj)

    Get the Year, Month, and Day components of obj.

    Returns double arrays the same size as obj.


    8.2.29 milliseconds

    Function File: out = milliseconds (x)

    Create a duration x milliseconds long, or get the milliseconds in a duration x.

    If input is numeric, returns a duration array that is that many milliseconds in time.

    If input is a duration, converts the duration to a number of milliseconds.

    Returns an array the same size as x.


    8.2.30 minutes

    Function File: out = hours (x)

    Create a duration x hours long, or get the hours in a duration x.


    8.2.31 missing

    Class: missing

    Generic auto-converting missing value.

    missing is a generic missing value that auto-converts to other types.

    A missing array indicates a missing value, of no particular type. It auto- converts to other types when it is combined with them via concatenation or other array combination operations.

    This class is currently EXPERIMENTAL. Use at your own risk.

    Note: This class does not actually work for assignment. If you do this:

      x = 1:5
      x(3) = missing
    

    It’s supposed to work, but I can’t figure out how to do this in a normal classdef object, because there doesn’t seem to be any function that’s implicitly called for type conversion in that assignment. Darn it.


    8.2.31.1 missing.dispstrs

    Method: out = dispstrs (obj)

    Display strings.

    Gets display strings for each element in obj.

    For missing, the display strings are always '<missing>'.

    Returns a cellstr the same size as obj.


    8.2.31.2 missing.ismissing

    Method: out = ismissing (obj)

    Test whether elements are missing values.

    ismissing is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.3 missing.isnan

    Method: out = isnan (obj)

    Test whether elements are NaN.

    isnan is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.4 missing.isnanny

    Method: out = isnanny (obj)

    Test whether elements are NaN-like.

    isnanny is always true for missing arrays.

    Returns a logical array the same size as obj.


    8.2.31.5 missing.missing

    Constructor: obj = missing ()

    Constructs a scalar missing array.

    The constructor takes no arguments, since there’s only one missing value.


    8.2.32 mustBeA

    Not documented


    8.2.33 mustBeCellstr

    Not documented


    8.2.34 mustBeCharvec

    Not documented


    8.2.35 mustBeFinite

    Not documented


    8.2.36 mustBeInteger

    Not documented


    8.2.37 mustBeMember

    Not documented


    8.2.38 mustBeNonempty

    Not documented


    8.2.39 mustBeNumeric

    Not documented


    8.2.40 mustBeReal

    Not documented


    8.2.41 mustBeSameSize

    Not documented


    8.2.42 mustBeScalar

    Not documented


    8.2.43 mustBeScalarLogical

    Not documented


    8.2.44 mustBeVector

    Not documented


    8.2.45 NaC

    Function: out = NaC ()
    Function: out = NaC (sz)

    “Not-a-Categorical". Creates missing-valued categorical arrays.

    Returns a new categorical array of all missing values of the given size. If no input sz is given, the result is a scalar missing categorical.

    NaC is the categorical equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaC values never compare equal to any value, including other NaCs.

    NaC is a convenience function which is strictly a wrapper around categorical.undefined and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: categorical.undefined


    8.2.46 NaS

    Function: out = NaS ()
    Function: out = NaS (sz)

    “Not-a-String". Creates missing-valued string arrays.

    Returns a new string array of all missing values of the given size. If no input sz is given, the result is a scalar missing string.

    NaS is the string equivalent of NaN or NaT. It represents a missing, invalid, or null value. NaS values never compare equal to any value, including other NaSs.

    NaS is a convenience function which is strictly a wrapper around string.missing and returns the same results, but may be more convenient to type and/or more readable, especially in array expressions with several values.

    See also: string.missing


    8.2.47 NaT

    Function: out = NaT ()
    Function: out = NaT (sz)

    “Not-a-Time”. Creates missing-valued datetime arrays.

    Constructs a new datetime array of all NaT values of the given size. If no input sz is given, the result is a scalar NaT.

    NaT is the datetime equivalent of NaN. It represents a missing or invalid value. NaT values never compare equal to, greater than, or less than any value, including other NaTs. Doing arithmetic with a NaT and any other value results in a NaT.

    NaT currently cannot create NaT arrays of type localdate. To do that, use localdate.NaT instead.


    8.2.48 pp

    Function: pp (X)
    Function: pp (A, B, C, …)
    Function: pp ('A', 'B', 'C', …)
    Function: pp A B C

    Alias for prettyprint, for interactive use.

    This is an alias for prettyprint(), with additional name-conversion magic.

    If you pass in a char, instead of pretty-printing that directly, it will grab and pretty-print the variable of that name from the caller’s workspace. This is so you can conveniently run it from the command line.


    8.2.49 scalarexpand

    Function: [out1, out2, …, outN] = scalarexpand (x1, x2, …, xN)

    Expand scalar inputs to match size of non-scalar inputs.

    Expands each scalar input argument to match the size of the non-scalar input arguments, and returns the expanded values in the corresponding output arguments. repmat is used to do the expansion.

    Works on any input types that support size, isscalar, and repmat.

    It is an error if any of the non-scalar inputs are not the same size as all of the other non-scalar inputs.

    Returns as many output arguments as there were input arguments.

    Examples:

    x1 = rand(3);
    x2 = 42;
    x3 = magic(3);
    [x1, x2, x3] = scalarexpand (x1, x2, x3)
    

    8.2.50 seconds

    Function File: out = seconds (x)

    Create a duration x seconds long, or get the seconds in a duration x.

    If input is numeric, returns a duration array that is that many seconds in time.

    If input is a duration, converts the duration to a number of seconds.

    Returns an array the same size as x.


    8.2.51 size2str

    Function: out = size2str (sz)

    Format an array size for display.

    Formats the given array size sz as a string for human-readable display. It will be in the format “d1-by-d2-...-by-dN”, for the N dimensions represented by sz.

    sz is an array of dimension sizes, in the format returned by the size function.

    Returns a charvec.

    Examples:

    str = size2str (size (magic (4)))
        ⇒ str = 4-by-4
    

    8.2.52 splitapply

    Function: out = splitapply (func, X, G)
    Function: out = splitapply (func, X1, …, XN, G)
    Function: [Y1, …, YM] = splitapply (…)

    Split data into groups and apply function.

    func is a function handle to call on each group of inputs in turn.

    X, X1, …, XN are the input variables that are split into groups for the function calls. If X is a table, then its contained variables are “popped out” and considered to be the X1XN input variables.

    G is the grouping variable vector. It contains a list of integers that identify which group each element of the X input variables belongs to. NaNs in G mean that element is ignored.

    Vertically concatenates the function outputs for each of the groups and returns them in as many variables as you capture.

    Returns the concatenated outputs of applying func to each group.

    See also: table.groupby, table.splitapply


    8.2.53 string

    Class: string

    A string array of Unicode strings.

    A string array is an array of strings, where each array element is a single string.

    The string class represents strings, where:

    • Each element of a string array is a single string
    • A single string is a 1-dimensional row vector of Unicode characters
    • Those characters are encoded in UTF-8
      • This last bit depends on the fact that Octave chars are UTF-8 now

    This should correspond pretty well to what people think of as strings, and is pretty compatible with people’s typical notion of strings in Octave.

    String arrays also have a special “missing” value, that is like the string equivalent of NaN for doubles or “undefined” for categoricals, or SQL NULL.

    This is a slightly higher-level and more strongly-typed way of representing strings than cellstrs are. (A cellstr array is of type cell, not a text- specific type, and allows assignment of non-string data into it.)

    Be aware that while string arrays interconvert with Octave chars and cellstrs, Octave char elements represent 8-bit UTF-8 code units, not Unicode code points.

    This class really serves three roles:

    1. It is a type-safe object wrapper around Octave’s base primitive character types.
    2. It adds ismissing() semantics.
    3. And it introduces Unicode support.

    Not clear whether it’s a good fit to have the Unicode support wrapped up in this. Maybe it should just be a simple object wrapper wrapper, and defer Unicode semantics to when core Octave adopts them for char and cellstr. On the other hand, because Octave chars are UTF-8, not UCS-2, some methods like strlength() and reverse() are just going to be wrong if they delegate straight to chars.

    “Missing” string values work like NaNs. They are never considered equal, less than, or greater to any other string, including other missing strings. This applies to set membership and other equivalence tests.

    TODO: Need to decide how far to go with Unicode semantics, and how much to just make this an object wrapper over cellstr and defer to Octave’s existing char/string-handling functions.

    TODO: demote_strings should probably be static or global, so that other functions can use it to hack themselves into being string-aware.


    8.2.53.1 string.cell

    Method: out = cell (obj)

    Convert to cell array.

    Converts this to a cell, which will be a cellstr. Missing values are converted to ''.

    This method returns the same values as cellstr(obj); it is just provided for interface compatibility purposes.

    Returns a cell array of the same size as obj.


    8.2.53.2 string.cellstr

    Method: out = cellstr (obj)

    Convert to cellstr.

    Converts obj to a cellstr. Missing values are converted to ''.

    Returns a cellstr array of the same size as obj.


    8.2.53.3 string.char

    Method: out = char (obj)

    Convert to char array.

    Converts obj to a 2-D char array. It will have as many rows as obj has elements.

    It is an error to convert missing-valued string arrays to char. (NOTE: This may change in the future; it may be more appropriate) to convert them to space-padded empty strings.)

    Returns 2-D char array.


    8.2.53.4 string.cmp

    Method: [out, outA, outB] = cmp (A, B)

    Value ordering comparison, returning -1/0/+1.

    Compares each element of A and B, returning for each element i whether A(i) was less than (-1), equal to (0), or greater than (1) the corresponding B(i).

    TODO: What to do about missing values? Should missings sort to the end (preserving total ordering over the full domain), or should their comparisons result in a fourth "null"/"undef" return value, probably represented by NaN? FIXME: The current implementation does not handle missings.

    Returns a numeric array out of the same size as the scalar expansion of A and B. Each value in it will be -1, 0, or 1.

    Also returns scalar-expanded copies of A and B as outA and outB, as a programming convenience.


    8.2.53.5 string.decode

    Static Method: out = string.decode (bytes, charsetName)

    Decode encoded text from bytes.

    Decodes the given encoded text in bytes according to the specified encoding, given by charsetName.

    Returns a scalar string.

    See also: string.encode


    8.2.53.6 string.dispstrs

    Method: out = dispstrs (obj)

    Display strings for array elements.

    Gets display strings for all the elements in obj. These display strings will either be the string contents of the element, enclosed in "...", and with CR/LF characters replaced with '\r' and '\n' escape sequences, or "<missing>" for missing values.

    Returns a cellstr of the same size as obj.


    8.2.53.7 string.empty

    Function: out = empty (sz)

    Get an empty string array of a specified size.

    The argument sz is optional. If supplied, it is a numeric size array whose product must be zero. If omitted, it defaults to [0 0].

    The size may also be supplied as multiple arguments containing scalar numerics.

    Returns an empty string array of the requested size.


    8.2.53.8 string.encode

    Method: out = encode (obj, charsetName)

    Encode string in a given character encoding.

    obj must be scalar.

    charsetName (charvec) is the name of a character encoding. (TODO: Document what determines the set of valid encoding names.)

    Returns the encoded string as a uint8 vector.

    See also: string.decode.


    8.2.53.9 string.erase

    Method: out = erase (obj, match)

    Erase matching substring.

    Erases the substrings in obj which match the match input.

    Returns a string array of the same size as obj.


    8.2.53.10 string.ismissing

    Method: out = ismissing (obj)

    Test whether array elements are missing.

    For string arrays, only the special “missing” value is considered missing. Empty strings are not considered missing, the way they are with cellstrs.

    Returns a logical array the same size as obj.


    8.2.53.11 string.isnanny

    Method: out = isnanny (obj)

    Test whether array elements are NaN-like.

    Missing values are considered nannish; any other string value is not.

    Returns a logical array of the same size as obj.


    8.2.53.12 string.isstring

    Method: out = isstring (obj)

    Test if input is a string array.

    isstring is always true for string inputs.

    Returns a scalar logical.


    8.2.53.13 string.lower

    Method: out = lower (obj)

    Convert to lower case.

    Converts all the characters in all the strings in obj to lower case.

    This currently delegates to Octave’s own lower() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.53.14 string.missing

    Static Method: out = string.missing (sz)

    Missing string value.

    Creates a string array of all-missing values of the specified size sz. If sz is omitted, creates a scalar missing string.

    Returns a string array of size sz or [1 1].

    See also: NaS


    8.2.53.15 string.plus

    Method: out = plus (a, b)

    String concatenation via plus operator.

    Concatenates the two input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The concatenation is done by calling ‘strcat‘ on the inputs, and has the same behavior.

    Returns a string array the same size as the scalar expansion of its inputs.

    See also: string.strcat


    8.2.53.16 string.regexprep

    Method: out = regexprep (obj, pat, repstr)
    Method: out = regexprep (…, varargin)

    Replace based on regular expression matching.

    Replaces all the substrings matching a given regexp pattern pat with the given replacement text repstr.

    Returns a string array of the same size as obj.


    8.2.53.17 string.reverse

    Method: out = reverse (obj)

    Reverse string, character-wise.

    Reverses the characters in each string in obj. This operates on Unicode characters (code points), not on bytes, so it is guaranteed to produce valid UTF-8 as its output.

    Returns a string array the same size as obj.


    8.2.53.18 string.reverse_bytes

    Method: out = reverse_bytes (obj)

    Reverse string, byte-wise.

    Reverses the bytes in each string in obj. This operates on bytes (Unicode code units), not characters.

    This may well produce invalid strings as a result, because reversing a UTF-8 byte sequence does not necessarily produce another valid UTF-8 byte sequence.

    You probably do not want to use this method. You probably want to use string.reverse instead.

    Returns a string array the same size as obj.

    See also: string.reverse


    8.2.53.19 string.strcat

    Method: out = strcat (varargin)

    String concatenation.

    Concatenates the corresponding elements of all the input arrays, string-wise. Inputs that are not string arrays are converted to string arrays.

    The semantics of concatenating missing strings with non-missing strings has not been determined yet.

    Returns a string array the same size as the scalar expansion of its inputs.


    8.2.53.20 string.strcmp

    Method: out = strcmp (A, B)

    String comparison.

    Tests whether each element in A is exactly equal to the corresponding element in B. Missing values are not considered equal to each other.

    This does the same comparison as A == B, but is not polymorphic. Generally, there is no reason to use strcmp instead of == or eq on string arrays, unless you want to be compatible with cellstr inputs as well.

    Returns logical array the size of the scalar expansion of A and B.


    8.2.53.21 string.strfind

    Method: out = strfind (obj, pattern)
    Method: out = strfind (…, varargin)

    Find pattern in string.

    Finds the locations where pattern occurs in the strings of obj.

    TODO: It’s ambiguous whether a scalar this should result in a numeric out or a cell array out.

    Returns either an index vector, or a cell array of index vectors.


    8.2.53.22 string.string

    Constructor: obj = string ()
    Constructor: obj = string (in)

    Construct a new string array.

    The zero-argument constructor creates a new scalar string array whose value is the empty string.

    The other constructors construct a new string array by converting various types of inputs.

    • chars and cellstrs are converted via cellstr()
    • numerics are converted via num2str()
    • datetimes are converted via datestr()

    8.2.53.23 string.strlength

    Method: out = strlength (obj)

    String length in characters (actually, UTF-16 code units).

    Gets the length of each string, counted in UTF-16 code units. In most cases, this is the same as the number of characters. The exception is for characters outside the Unicode Basic Multilingual Plane, which are represented with UTF-16 surrogate pairs, and thus will count as 2 characters each.

    The reason this method counts UTF-16 code units, instead of Unicode code points (true characters), is for Matlab compatibility.

    This is the string length method you probably want to use, not strlength_bytes.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength_bytes


    8.2.53.24 string.strlength_bytes

    Method: out = strlength_bytes (obj)

    String length in bytes.

    Gets the length of each string in obj, counted in Unicode UTF-8 code units (bytes). This is the same as numel(str) for the corresponding Octave char vector for each string, but may not be what you actually want to use. You may want strlength instead.

    Returns double array of the same size as obj. Returns NaNs for missing strings.

    See also: string.strlength


    8.2.53.25 string.strrep

    Method: out = strrep (obj, match, replacement)
    Method: out = strrep (…, varargin)

    Replace occurrences of pattern with other string.

    Replaces matching substrings in obj with a given replacement string.

    varargin is passed along to the core Octave strrep function. This supports whatever options it does. TODO: Maybe document what those options are.

    Returns a string array of the same size as obj.


    8.2.53.26 string.upper

    Method: out = upper (obj)

    Convert to upper case.

    Converts all the characters in all the strings in obj to upper case.

    This currently delegates to Octave’s own upper() function to do the conversion, so whatever character class handling it has, this has.

    Returns a string array of the same size as obj.


    8.2.54 struct2table

    Function: out = struct2table (s)
    Function: out = struct2table (…, 'AsArray', AsArray)

    Convert struct to a table.

    Converts the input struct s to a table.

    s may be a scalar struct or a nonscalar struct array.

    The AsArray option is not implemented yet.

    Returns a table.


    8.2.55 table

    Class: table

    Tabular data array containing multiple columnar variables.

    A table is a tabular data structure that collects multiple parallel named variables. Each variable is treated like a column. (Possibly a multi-columned column, if that makes sense.) The types of variables may be heterogeneous.

    A table object is like an SQL table or resultset, or a relation, or a DataFrame in R or Pandas.

    A table is an array in itself: its size is nrows-by-nvariables, and you can index along the rows and variables by indexing into the table along dimensions 1 and 2.

    A note on accessing properties of a table array: Because .-indexing is used to access the variables inside the array, it can’t also be directly used to access properties as well. Instead, do t.Properties.<property> for a table t. That will give you a property instead of a variable. (And due to this mechanism, it will cause problems if you have a table with a variable named Properties. Try to avoid that.)

    WARNING ABOUT HANDLE CLASSES IN TABLE VARIABLES

    Using a handle class in a table variable (column) value may lead to unpredictable and buggy behavior! A handle class array is a reference type, and it holds shared mutable state, which may be shared with references to it in other table arrays or outside the table array. The table class makes no guarantees about what it will or will not do internally with arrays that are held in table variables, and any operation on a table holding handle arrays may have unpredictable and undesirable side effects. These side effects may change between versions of Tablicious.

    We currently recommend that you do not use handle classes in table variables. It may be okay to use handle classes *inside* cells or other non-handle composite types that are used in table variables, but this hasn’t been fully thought through or tested.

    See also: tblish.table.grpstats, tblish.evalWithTableVars, tblish.examples.SpDb

    Instance Variable of table: cellstr VariableNames

    The names of the variables in the table, as a cellstr row vector.

    Instance Variable of table: cell VariableValues

    A cell vector containing the values for each of the variables. VariableValues(i) corresponds to VariableNames(i).

    Instance Variable of table: cellstr RowNames

    An optional list of row names that identify each row in the table. This is a cellstr column vector, if present.

    Instance Variable of table: cellstr DimensionNames

    Names for the two dimensions of the table array, as a cellstr row vector. Always exactly 2-long, because tables are always exactly 2-D. Defaults to {"Row", "Variables"}. (I feel the singular "Row" and plural "Variables" here are inconsistent, but that’s what Matlab uses, so Tablicious uses it too, for Matlab compatibility.)


    8.2.55.1 table.addvars

    Method: out = addvars (obj, var1, …, varN)
    Method: out = addvars (…, 'Before', Before)
    Method: out = addvars (…, 'After', After)
    Method: out = addvars (…, 'NewVariableNames', NewVariableNames)

    Add variables to table.

    Adds the specified variables to a table.


    8.2.55.2 table.antijoin

    Method: [outA, ixA, outB, ixB] = antijoin (A, B)

    Natural antijoin (AKA “semidifference”).

    Computes the anti-join of A and B. The anti-join is defined as all the rows from one input which do not have matching rows in the other input.

    Returns: outA - all the rows in A with no matching row in B ixA - the row indexes into A which produced outA outB - all the rows in B with no matching row in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.3 table.cartesian

    Method: [out, ixs] = cartesian (A, B)

    Cartesian product of two tables.

    Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.

    Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.

    The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.

    This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.

    The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.4 table.convertvars

    Method: out = convertvars (obj, vars, dataType)

    Convert variables to specified data type.

    Converts the variables in obj specified by vars to the specified data type.

    vars is a cellstr or numeric vector specifying which variables to convert.

    dataType specifies the data type to convert those variables to. It is either a char holding the name of the data type, or a function handle which will perform the conversion. If it is the name of the data type, there must either be a one-arg constructor of that type which accepts the specified variables’ current types as input, or a conversion method of that name defined on the specified variables’ current type.

    Returns a table with the same variable names as obj, but with converted types.


    8.2.55.5 table.findgroups

    Method: [G, TID] = findgroups (obj)

    Find groups within a table’s row values.

    Finds groups within a table’s row values and get group numbers. A group is a set of rows that have the same values in all their variable elements.

    Returns: G - A double column vector of group numbers created from obj. TID - A table containing the row values corresponding to the group numbers.


    8.2.55.6 table.getvar

    Method: [out, name] = getvar (obj, varRef)

    Get value and name for single table variable.

    varRef is a variable reference. It may be a name or an index. It may only specify a single table variable.

    Returns: out – the value of the referenced table variable name – the name of the referenced table variable


    8.2.55.7 table.getvars

    Method: [out1, …] = getvars (obj, varRef)

    Get values for one ore more table variables.

    varRef is a variable reference in the form of variable names or indexes.

    Returns as many outputs as varRef referenced variables. Each output contains the contents of the corresponding table variable.


    8.2.55.8 table.groupby

    Method: [out] = groupby (obj, groupvars, aggcalcs)

    Find groups in table data and apply functions to variables within groups.

    This works like an SQL "SELECT ... GROUP BY ..." statement.

    groupvars (cellstr, numeric) is a list of the grouping variables, identified by name or index.

    aggcalcs is a specification of the aggregate calculations to perform on them, in the form {out_var, fcn, in_vars; ...}, where: out_var (char) is the name of the output variable fcn (function handle) is the function to apply to produce it in_vars (cellstr) is a list of the input variables to pass to fcn

    Returns a table.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.9 table.height

    Method: out = height (obj)

    Number of rows in table.

    For a zero-variable table, this currently always returns 0. This is a bug, and will change in the future. It should be possible for zero-variable table arrays to have any number of rows.


    8.2.55.10 table.horzcat

    Method: out = horzcat (varargin)

    Horizontal concatenation.

    Combines tables by horizontally concatenating them. Inputs that are not tables are automatically converted to tables by calling table() on them. Inputs must have all distinct variable names.

    Output has the same RowNames as varargin{1}. The variable names and values are the result of the concatenation of the variable names and values lists from the inputs.


    8.2.55.11 table.innerjoin

    Method: [out, ixa, ixb] = innerjoin (A, B)
    Method: […] = innerjoin (A, B, …)

    Combine two tables by rows using key variables.

    Computes the relational inner join between two tables. “Inner” means that only rows which had matching rows in the other input are kept in the output.

    TODO: Document options.

    Returns: out - A table that is the result of joining A and B ix - Indexes into A for each row in out ixb - Indexes into B for each row in out


    8.2.55.12 table.intersect

    Method: [C, ia, ib] = intersect (A, B)

    Set intersection.

    Computes the intersection of two tables. The intersection is defined to be the unique row values which are present in both of the two input tables.

    Returns: C - A table containing all the unique row values present in both A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.13 table.isempty

    Method: out = isempty (obj)

    Test whether array is empty.

    For tables, isempty is true if the number of rows is 0 or the number of variables is 0.


    8.2.55.14 table.ismember

    Method: [tf, loc] = ismember (A, B)

    Set membership.

    Finds rows in A that are members of B.

    Returns: tf - A logical vector indicating whether each A(i,:) was present in B. loc - Indexes into B of rows that were found.


    8.2.55.15 table.ismissing

    Method: out = ismissing (obj)
    Method: out = ismissing (obj, indicator)

    Find missing values.

    Finds missing values in obj’s variables.

    If indicator is not supplied, uses the standard missing values for each variable’s data type. If indicator is supplied, the same indicator list is applied across all variables.

    All variables in this must be vectors. (This is due to the requirement that size(out) == size(obj).)

    Returns a logical array the same size as obj.


    8.2.55.16 table.istable

    Method: tf = istable (obj)

    True if input is a table.


    8.2.55.17 table.join

    Method: [C, ib] = join (A, B)
    Method: [C, ib] = join (A, B, …)

    Combine two tables by rows using key variables, in a restricted form.

    This is not a "real" relational join operation. It has the restrictions that: 1) The key values in B must be unique. 2) Every key value in A must map to a key value in B. These are restrictions inherited from the Matlab definition of table.join.

    You probably don’t want to use this method. You probably want to use innerjoin or outerjoin instead.

    See also: table.innerjoin, table.outerjoin


    8.2.55.18 table.mergevars

    Method: out = mergevars (obj, vars)
    Method: out = mergevars (…, 'NewVariableName', NewVariableName)
    Method: out = mergevars (…, 'MergeAsTable', MergeAsTable)

    Merge table variables into a single variable.


    8.2.55.19 table.movevars

    Method: out = movevars (obj, vars, relLocation, location)

    Move around variables in a table.

    vars is a list of variables to move, specified by name or index.

    relLocation is 'Before' or 'After'.

    location indicates a single variable to use as the target location, specified by name or index. If it is specified by index, it is the index into the list of *unmoved* variables from obj, not the original full list of variables in obj.

    Returns a table with the same variables as obj, but in a different order.


    8.2.55.20 table.ndims

    Method: out = ndims (obj)

    Number of dimensions

    For tables, ndims(obj) is always 2, because table arrays are always 2-D (rows-by-columns).


    8.2.55.21 table.numel

    Method: out = numel (obj)

    Total number of elements in table (actually 1).

    For compatibility reasons with Octave’s OOP interface and subsasgn behavior, table’s numel is defined to always return 1. It is not useful for client code to query a table’s size using numel. This is an incompatibility with Matlab.


    8.2.55.22 table.outerfillvals

    Method: out = outerfillvals (obj)

    Get fill values for outer join.

    Returns a table with the same variables as this, but containing only a single row whose variable values are the values to use as fill values when doing an outer join.


    8.2.55.23 table.outerjoin

    Method: [out, ixa, ixb] = outerjoin (A, B)
    Method: […] = outerjoin (A, B, …)

    Combine two tables by rows using key variables, retaining unmatched rows.

    Computes the relational outer join of tables A and B. This is like a regular join, but also includes rows in each input which did not have matching rows in the other input; the columns from the missing side are filled in with placeholder values.

    TODO: Document options.

    Returns: out - A table that is the result of the outer join of A and B ixa - indexes into A for each row in out ixb - indexes into B for each row in out


    8.2.55.24 table.prettyprint

    Method: prettyprint (obj)

    Display table’s values in tabular format. This prints the contents of the table in human-readable, tabular form.

    Variables which contain objects are displayed using the strings returned by their dispstrs method, if they define one.


    8.2.55.25 table.realjoin

    Method: [out, ixs] = realjoin (A, B)
    Method: […] = realjoin (A, B, …)

    "Real" relational inner join, without key restrictions

    Performs a "real" relational natural inner join between two tables, without the key restrictions that JOIN imposes.

    Currently does not support tables which have RowNames. This may be added in the future.

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    Name/value option arguments are: Keys, LeftKeys, RightKeys, LeftVariables, RightVariables.

    FIXME: Document those options.

    Returns: out - A table that is the result of joining A and B ixs - Indexes into A for each row in out


    8.2.55.26 table.removevars

    Method: out = removevars (obj, vars)

    Remove variables from table.

    Deletes the variables specified by vars from obj.

    vars may be a char, cellstr, numeric index vector, or logical index vector.


    8.2.55.27 table.renamevars

    Method: out = renamevars (obj, renameMap)

    Rename variables in a table.

    Renames selected variables in the table obj based on the mapping provided in renameMap.

    renameMap is an n-by-2 cellstr array, with the old variable names in the first column, and the corresponding new variable names in the second column.

    Variables which are not included in renameMap are not modified.

    It is an error if any variables named in the first column of renameMap are not present in obj.

    Renames


    8.2.55.28 table.repelem

    Method: out = repelem (obj, R)
    Method: out = repelem (obj, R_1, R_2)

    Replicate elements of matrix.

    Replicates elements of this table matrix by applying repelem to each of its variables. This

    Only two dimensions are supported for repelem on tables.


    8.2.55.29 table.repmat

    Method: out = repmat (obj, sz)

    Replicate matrix.

    Repmats a table by repmatting each of its variables vertically.

    For tables, repmatting is only supported along dimension 1. That is, the values of sz(2:end) must all be exactly 1. This behavior may change in the future to support repmatting horizontally, with the added variable names being automatically changed to maintain uniqueness of variable names within the resulting table.

    Returns a new table with the same variable names and types as tbl, but with a possibly different row count.


    8.2.55.30 table.restrict

    Method: out = restrict (obj, expr)
    Method: out = restrict (obj, ix)

    Subset rows using variable expression or index.

    Subsets a table row-wise, using either an index vector or an expression involving obj’s variables.

    If the argument is a numeric or logical vector, it is interpreted as an index into the rows of this. (Just as with ‘subsetrows (this, index)‘.)

    If the argument is a char, then it is evaulated as an M-code expression, with all of this’ variables available as workspace variables, as with tblish.evalWithTableVars. The output of expr must be a numeric or logical index vector (This form is a shorthand for out = subsetrows (this, tblish.evalWithTableVars (this, expr)).)

    TODO: Decide whether to name this to "where" to be more like SQL instead of relational algebra.

    Examples:

    [s,p,sp] = tblish.examples.SpDb;
    prettyprint (restrict (p, 'Weight >= 14 & strcmp(Color, "Red")'))
    

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.

    See also: tblish.evalWithTableVars


    8.2.55.31 table.rowfun

    Method: out = varfun (func, obj)
    Method: out = varfun (…, 'OptionName', OptionValue, …)

    Apply function to rows in table and collect outputs.

    This applies the function func to the elements of each row of obj’s variables, and collects the concatenated output(s) into the variable(s) of a new table.

    func is a function handle. It should take as many inputs as there are variables in obj. Or, it can take a single input, and you must specify 'SeparateInputs', false to have the input variables concatenated before being passed to func. It may return multiple argouts, but to capture those past the first one, you must explicitly specify the 'NumOutputs' or 'OutputVariableNames' options.

    Supported name/value options:

    'OutputVariableNames'

    Names of table variables to store combined function output arguments in.

    'NumOutputs'

    Number of output arguments to call function with. If omitted, defaults to number of items in OutputVariableNames if it is supplied, otherwise defaults to 1.

    'SeparateInputs'

    If true, input variables are passed as separate input arguments to func. If false, they are concatenated together into a row vector and passed as a single argument. Defaults to true.

    'ErrorHandler'

    A function to call as a fallback when calling func results in an error. It is passed the caught exception, along with the original inputs passed to func, and it has a “second chance” to compute replacement values for that row. This is useful for converting raised errors to missing-value fill values, or logging warnings.

    'ExtractCellContents'

    Whether to “pop out” the contents of the elements of cell variables in obj, or to leave them as cells. True/false; default is false. If you specify this option, then obj may not have any multi-column cell-valued variables.

    'InputVariables'

    If specified, only these variables from obj are used as the function inputs, instead of using all variables.

    'GroupingVariables'

    Not yet implemented.

    'OutputFormat'

    The format of the output. May be 'table' (the default), 'uniform', or 'cell'. If it is 'uniform' or 'cell', the output variables are returned in multiple output arguments from 'rowfun'.

    Returns a table whose variables are the collected output arguments of func if OutputFormat is 'table'. Otherwise, returns multiple output arguments of whatever type func returned (if OutputFormat is 'uniform') or cells (if OutputFormat is 'cell').


    8.2.55.32 table.rows2vars

    Method: out = rows2vars (obj)
    Method: out = rows2vars (obj, 'VariableNamesSource', VariableNamesSource)
    Method: out = rows2vars (…, 'DataVariables', DataVariables)

    Reorient table, swapping rows and variables dimensions.

    This flips the dimensions of the given table obj, swapping the orientation of the contained data, and swapping the row names/labels and variable names.

    The variable names become a new variable named “OriginalVariableNames”.

    The row names are drawn from the column VariableNamesSource if it is specified. Otherwise, if obj has row names, they are used. Otherwise, new variable names in the form “VarN” are generated.

    If all the variables in obj are of the same type, they are concatenated and then sliced to create the new variable values. Otherwise, they are converted to cells, and the new table has cell variable values.


    8.2.55.33 table.semijoin

    Method: [outA, ixA, outB, ixB] = semijoin (A, B)

    Natural semijoin.

    Computes the natural semijoin of tables A and B. The semi-join of tables A and B is the set of all rows in A which have matching rows in B, based on comparing the values of variables with the same names.

    This method also computes the semijoin of B and A, for convenience.

    Returns: outA - all the rows in A with matching row(s) in B ixA - the row indexes into A which produced outA outB - all the rows in B with matching row(s) in A ixB - the row indexes into B which produced outB

    This is a Tablicious/Octave extension, not defined in the Matlab table interface.


    8.2.55.34 table.setdiff

    Method: [C, ia] = setdiff (A, B)

    Set difference.

    Computes the set difference of two tables. The set difference is defined to be the unique row values which are present in table A that are not in table B.

    Returns: C - A table containing the unique row values in A that were not in B. ia - Row indexes into A of the rows from A included in C.


    8.2.55.35 table.setDimensionNames

    Method: out = setDimensionNames (obj, names)
    Method: out = setDimensionNames (obj, ix, names)

    Set dimension names.

    Sets the DimensionNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of dimension names being assigned.

    ix is an index vector indicating which dimension names to set. If omitted, it sets all two of them. Since there are always two dimension, the indexes in ix may never be higher than 2.

    This method exists because the obj.Properties.DimensionNames = … assignment form did not originally work, possibly due to an Octave bug, or more likely due to a bug in Tablicious prior to the early 0.4.x versions. That was fixed around 0.4.4. This method may be deprecated and removed at some point, since it is not part of the standard Matlab table interface, and is now redundant with the obj.Properties.DimensionNames = … assignment form.


    8.2.55.36 table.setRowNames

    Method: out = setRowNames (obj, names)

    Set row names.

    Sets the row names on obj to names.

    names is a cellstr column vector, with the same number of rows as obj has.


    8.2.55.37 table.setvar

    Method: out = setvar (obj, varRef, value)

    Set value for a variable in table.

    This sets (adds or replaces) the value for a variable in obj. It may be used to change the value of an existing variable, or add a new variable.

    This method exists primarily because I cannot get obj.foo = value to work, apparently due to an issue with Octave’s subsasgn support.

    varRef is a variable reference, either the index or name of a variable. If you are adding a new variable, it must be a name, and not an index.

    value is the value to set the variable to. If it is scalar or a single string as charvec, it is scalar-expanded to match the number of rows in obj.


    8.2.55.38 table.setVariableNames

    Method: out = setVariableNames (obj, names)
    Method: out = setVariableNames (obj, ix, names)

    Set variable names.

    Sets the VariableNames for this table to a new list of names.

    names is a char or cellstr vector. It must have the same number of elements as the number of variable names being assigned.

    ix is an index vector indicating which variable names to set. If omitted, it sets all of them present in obj.

    This method exists because the obj.Properties.VariableNames = … assignment form does not work, possibly due to an Octave bug.


    8.2.55.39 table.setxor

    Method: [C, ia, ib] = setxor (A, B)

    Set exclusive OR.

    Computes the setwise exclusive OR of two tables. The set XOR is defined to be the unique row values which are present in one or the other of the two input tables, but not in both.

    Returns: C - A table containing all the unique row values in the set XOR of A and B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.40 table.size

    Method: sz = size (obj)
    Method: [nr, nv] = size (obj)
    Method: [nr, nv, …] = size (obj)

    Gets the size of a table.

    For tables, the size is [number-of-rows x number-of-variables]. This is the same as [height(obj), width(obj)].


    8.2.55.41 table.splitapply

    Method: out = splitapply (func, obj, G)
    Method: [Y1, …, YM] = splitapply (func, obj, G)

    Split table data into groups and apply function.

    Performs a splitapply, using the variables in obj as the input X variables to the splitapply function call.

    See also: splitapply, table.groupby, tblish.table.grpstats


    8.2.55.42 table.splitvars

    Method: out = splitvars (obj)
    Method: out = splitvars (obj, vars)
    Method: out = splitvars (…, 'NewVariableNames', NewVariableNames)

    Split multicolumn table variables.

    Splits multicolumn table variables into new single-column variables. If vars is supplied, splits only those variables. If vars is not supplied, splits all multicolumn variables.


    8.2.55.43 table.squeeze

    Method: obj = squeeze (obj)

    Remove singleton dimensions.

    For tables, this is always a no-op that returns the input unmodified, because tables always have exactly 2 dimensions, and 2-D arrays are unaffected by squeeze.


    8.2.55.44 table.stack

    Method: out = stack (obj, vars)
    Method: out = stack (…, 'NewDataVariableName', NewDataVariableName)
    Method: out = stack (…, 'IndexVariableName', IndexVariableName)

    Stack multiple table variables into a single variable.


    8.2.55.45 table.summary

    Method: summary (obj)

    Display a summary of a table’s data.

    Displays a summary of data in the input table. This will contain some statistical information on each of its variables. The output is printed to the Octave console (command window, stdout, or the like in your current session), in a format suited for human consumption. The output format is not fixed or formally defined, and may change over time. It is only suitable for human display, and not for parsing or programmatic use.

    This method supports, to some degree, extension by other packages. If your Octave session has loaded other packages which supply extension implementaions of ‘summary‘, Tablicious will use those in preference to its own internal implementation, and you will get different, and hopefully better, output.


    8.2.55.46 table.table

    Constructor: obj = table ()

    Constructs a new empty (0 rows by 0 variables) table.

    Constructor: obj = table (var1, var2, …, varN)

    Constructs a new table from the given variables. The variables passed as inputs to this constructor become the variables of the table. Their names are automatically detected from the input variable names that you used.

    Note: If you call the constructor with exactly three arguments, and the first argument is exactly the value ’__tblish_backdoor__’, that will trigger a special internal-use backdoor calling form, and you will get incorrect results. This is a bug in Tablicious.

    Constructor: obj = table ('Size', sz, 'VariableTypes', varTypes)

    Constructs a new table of the given size, and with the given variable types. The variables will contain the default value for elements of that type.

    Constructor: obj = table (…, 'VariableNames', varNames)
    Constructor: obj = table (…, 'RowNames', rowNames)

    Specifies the variable names or row names to use in the constructed table. Overrides the implicit names garnered from the input variable names.


    8.2.55.47 table.table2array

    Method: s = table2struct (obj)

    Converts obj to a homogeneous array.


    8.2.55.48 table.table2cell

    Method: c = table2cell (obj)

    Converts table to a cell array. Each variable in obj becomes one or more columns in the output, depending on how many columns that variable has.

    Returns a cell array with the same number of rows as obj, and with as many or more columns as obj has variables.


    8.2.55.49 table.table2struct

    Method: s = table2struct (obj)
    Method: s = table2struct (…, 'ToScalar', trueOrFalse)

    Converts obj to a scalar structure or structure array.

    Row names are not included in the output struct. To include them, you must add them manually: s = table2struct (tbl, ’ToScalar’, true); s.RowNames = tbl.Properties.RowNames;

    Returns a scalar struct or struct array, depending on the value of the ToScalar option.


    8.2.55.50 table.union

    Method: [C, ia, ib] = union (A, B)

    Set union.

    Computes the union of two tables. The union is defined to be the unique row values which are present in either of the two input tables.

    Returns: C - A table containing all the unique row values present in A or B. ia - Row indexes into A of the rows from A included in C. ib - Row indexes into B of the rows from B included in C.


    8.2.55.51 table.varfun

    Method: out = varfun (fcn, obj)
    Method: out = varfun (…, 'OutputFormat', outputFormat)
    Method: out = varfun (…, 'InputVariables', vars)
    Method: out = varfun (…, 'ErrorHandler', errorFcn)

    Apply function to table variables.

    Applies the given function fcn to each variable in obj, collecting the output in a table, cell array, or array of another type.


    8.2.55.52 table.varnames

    Method: out = varnames (obj)
    Method: out = varnames (obj, varNames)

    Get or set variable names for a table.

    Returns cellstr in the getter form. Returns an updated datetime in the setter form.


    8.2.55.53 table.vertcat

    Method: out = vertcat (varargin)

    Vertical concatenation.

    Combines tables by vertically concatenating them.

    Inputs that are not tables are automatically converted to tables by calling table() on them.

    The inputs must have the same number and names of variables, and their variable value types and sizes must be cat-compatible. The types of the resulting variables are the types that result from doing a ‘vertcat()‘ on the variables from the corresponding input tables, in the order they were input in.


    8.2.55.54 table.width

    Method: out = width (obj)

    Number of variables in table.

    Note that this is not the sum of the number of columns in each variable. It is just the number of variables.


    8.2.56 tableOuterFillValue

    Not documented


    8.2.57 tail

    Function: out = tail (A)
    Function: out = tail (A, k)

    Get last K rows of an array.

    Returns the array A, subsetted to its last k rows. This means subsetting it to the last (min (k, size (A, 1))) elements along dimension 1, and leaving all other dimensions unrestricted.

    A is the array to subset.

    k is the number of rows to get. k defaults to 8 if it is omitted or empty.

    If there are less than k rows in A, returns all rows.

    Returns an array of the same type as A, unless ()-indexing A produces an array of a different type, in which case it returns that type.

    See also: head


    8.2.58 tblish.dataset

    Class: tblish.dataset

    The tblish.dataset class provides convenient access to the various datasets included with Tablicious.

    This class just contains a bunch of static methods, each of which loads the dataset of that name. It is provided as a convenience so you can use tab completion or other run-time introspection on the dataset list.


    8.2.58.1 tblish.dataset.airmiles

    Static Method: out = airmiles ()

    Passenger Miles on Commercial US Airlines, 1937-1960

    Description

    The revenue passenger miles flown by commercial airlines in the United States for each year from 1937 to 1960.

    Source

    F.A.A. Statistical Handbook of Aviation.

    Examples

    t = tblish.dataset.airmiles;
    plot (t.year, t.miles);
    title ("airmiles data");
    xlabel ("Passenger-miles flown by U.S. commercial airlines")
    ylabel ("airmiles");
    
    

    8.2.58.2 tblish.dataset.AirPassengers

    Static Method: out = AirPassengers ()

    Monthly Airline Passenger Numbers 1949-1960

    Description

    The classic Box & Jenkins airline data. Monthly totals of international airline passengers, 1949 to 1960.

    Source

    Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976). Time Series Analysis, Forecasting and Control. Third Edition. San Francisco: Holden-Day. Series G.

    Examples

    ## TODO: This example needs to be ported from R.
    
    

    8.2.58.3 tblish.dataset.airquality

    Static Method: out = airquality ()

    New York Air Quality Measurements from 1973

    Description

    Daily air quality measurements in New York, May to September 1973.

    Format

    Ozone

    Ozone concentration (ppb)

    SolarR

    Solar R (lang)

    Wind

    Wind (mph)

    Temp

    Temperature (degrees F)

    Month

    Month (1-12)

    Day

    Day of month (1-31)

    Source

    New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).

    References

    Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983). Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.

    Examples

    t = tblish.dataset.airquality
    # Plot a scatter-plot plus a fitted line, for each combination of measurements
    vars = {"Ozone", "SolarR", "Wind", "Temp" "Month", "Day"};
    n_vars = numel (vars);
    figure;
    for i = 1:n_vars
      for j = 1:n_vars
        if (i == j)
          continue
        endif
        ix_subplot = (n_vars * (j - 1) + i);
        hax = subplot (n_vars, n_vars, ix_subplot);
        var_x = vars{i};
        var_y = vars{j};
        x = t.(var_x);
        y = t.(var_y);
        scatter (hax, x, y, 10);
        # Fit a cubic line to these points
        # TODO: Find out exactly what kind of fitted line R's example is using, and
        # port that.
        hold on
        p = polyfit (x, y, 3);
        x_hat = unique(x);
        p_y = polyval (p, x_hat);
        plot (hax, x_hat, p_y, "r");
      endfor
    endfor
    
    

    8.2.58.4 tblish.dataset.anscombe

    Static Method: out = anscombe ()

    Anscombe’s Quartet of “Identical” Simple Linear Regressions

    Description

    Four sets of x/y pairs which have the same statistical properties, but are very different.

    Format

    The data comes in an array of 4 structs, each with fields as follows:

    x

    The X values for this pair.

    y

    The Y values for this pair.

    Source

    Tufte, Edward R. (1989). The Visual Display of Quantitative Information. 13–14. Cheshire, CT: Graphics Press.

    References

    Anscombe, Francis J. (1973). Graphs in statistical analysis. The American Statistician, 27, 17–21.

    Examples

    data = tblish.dataset.anscombe
    
    # Pick good limits for the plots
    all_x = [data.x];
    all_y = [data.y];
    x_limits = [min(0, min(all_x)) max(all_x)*1.2];
    y_limits = [min(0, min(all_y)) max(all_y)*1.2];
    
    # Do regression on each pair and plot the input and results
    figure;
    haxs = NaN (1, 4);
    for i_pair = 1:4
      x = data(i_pair).x;
      y = data(i_pair).y;
      # TODO: Port the anova and other characterizations from the R code
      # TODO: Do a linear regression and plot its line
      hax = subplot (2, 2, i_pair);
      haxs(i_pair) = hax;
      xlabel (sprintf ("x%d", i_pair));
      ylabel (sprintf ("y%d", i_pair));
      scatter (x, y, "r");
    endfor
    
    # Fiddle with the plot axes parameters
    linkaxes (haxs);
    xlim (haxs(1), x_limits);
    ylim (haxs(1), y_limits);
    
    

    8.2.58.5 tblish.dataset.attenu

    Static Method: out = attenu ()

    Joyner-Boore Earthquake Attenuation Data

    Description

    Event data for 23 earthquakes in California, showing peak accelerations.

    Format

    event

    Event number

    mag

    Moment magnitude

    station

    Station identifier

    dist

    Station-hypocenter distance (km)

    accel

    Peak acceleration (g)

    Source

    Joyner, W.B., D.M. Boore and R.D. Porcella (1981). Peak horizontal acceleration and velocity from strong-motion records including records from the 1979 Imperial Valley, California earthquake. USGS Open File report 81-365. Menlo Park, CA.

    References

    Boore, D. M. and Joyner, W. B. (1982). The empirical prediction of ground motion. Bulletin of the Seismological Society of America, 72, S269–S268.

    Examples

    # TODO: Port the example code from R
    # It does coplot() and pairs(), which are higher-level plotting tools
    # than core Octave provides. This could turn into a long example if we
    # just use base Octave here.
    

    8.2.58.6 tblish.dataset.attitude

    Static Method: out = attitude ()

    The Chatterjee-Price Attitude Data

    Description

    Aggregated data from a survey of clerical employees at a large financial organization.

    Format

    rating

    Overall rating.

    complaints

    Handling of employee complaints.

    privileges

    Does not allow special privileges.

    learning

    Opportunity to learn.

    raises

    Raises based on performance.

    critical

    Too critical.

    advance

    Advancement.

    Source

    Chatterjee, S. and Price, B. (1977). Regression Analysis by Example. New York: Wiley. (Section 3.7, p.68ff of 2nd ed.(1991).)

    Examples

    t = tblish.dataset.attitude
    
    tblish.examples.plot_pairs (t);
    
    # TODO: Display table summary
    
    # TODO: Whatever those statistical linear-model plots are that R is doing
    
    
    

    8.2.58.7 tblish.dataset.austres

    Static Method: out = austres ()

    Australian Population

    Description

    Numbers of Australian residents measured quarterly from March 1971 to March 1994.

    Format

    date

    The month of the observation.

    residents

    The number of residents.

    Source

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.austres
    
    plot (datenum (t.date), t.residents);
    datetick x
    xlabel ("Month"); ylabel ("Residents"); title ("Australian Residents");
    
    

    8.2.58.8 tblish.dataset.beavers

    Static Method: out = beavers ()

    Body Temperature Series of Two Beavers

    Description

    Body temperature readings for two beavers.

    Format

    day

    Day of observation (in days since the beginning of 1990), December 12–13 (beaver1) and November 3–4 (beaver2).

    time

    Time of observation, in the form 0330 for 3:30am

    temp

    Measured body temperature in degrees Celsius.

    activ

    Indicator of activity outside the retreat.

    Source

    P. S. Reynolds (1994) Time-series analyses of beaver body temperatures. Chapter 11 of Lange, N., Ryan, L., Billard, L., Brillinger, D., Conquest, L. and Greenhouse, J. (Eds.) (1994) Case Studies in Biometry. New York: John Wiley and Sons.

    Examples

    # TODO: This example needs to be ported from R.
    

    8.2.58.9 tblish.dataset.BJsales

    Static Method: out = BJsales ()

    Sales Data with Leading Indicator

    Description

    Sales Data with Leading Indicator

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods, Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.10 tblish.dataset.BOD

    Static Method: out = BOD ()

    Biochemical Oxygen Demand

    Description

    Contains biochemical oxygen demand versus time in an evaluation of water quality.

    Format

    Time

    Time of the measurement (in days).

    demand

    Biochemical oxygen demand (mg/l).

    Source

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: John Wiley & Sons. Appendix A1.4.

    Originally from: Marske (1967). Biochemical Oxygen Demand Data Interpretation Using Sum of Squares Surface, M.Sc. Thesis, University of Wisconsin – Madison.

    Examples

    # TODO: Port this example from R
    
    

    8.2.58.11 tblish.dataset.cars

    Static Method: out = cars ()

    Speed and Stopping Distances of Cars

    Description

    Speed of cars and distances taken to stop. Note that the data were recorded in the 1920s.

    Format

    speed

    Speed (mph).

    dist

    Stopping distance (ft).

    Source

    Ezekiel, M. (1930). Methods of Correlation Analysis. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    
    t = tblish.dataset.cars;
    
    
    # TODO: Add Lowess smoothed lines to the plots
    
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data");
    
    figure;
    loglog (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars data (logarithmic scales)");
    
    # TODO: Do the linear model plot
    
    # Polynomial regression
    figure;
    plot (t.speed, t.dist, "o");
    xlabel ("Speed (mph)"); ylabel ("Stopping distance (ft)");
    title ("cars polynomial regressions");
    hold on
    xlim ([0 25]);
    x2 = linspace (0, 25, 200);
    for degree = 1:4
      [P, S, mu] = polyfit (t.speed, t.dist, degree);
      y2 = polyval(P, x2, [], mu);
      plot (x2, y2);
    endfor
    
    
    

    8.2.58.12 tblish.dataset.ChickWeight

    Static Method: out = ChickWeight ()

    Weight versus age of chicks on different diets

    Format

    weight

    a numeric vector giving the body weight of the chick (gm).

    Time

    a numeric vector giving the number of days since birth when the measurement was made.

    Chick

    an ordered factor with levels 18 < ... < 48 giving a unique identifier for the chick. The ordering of the levels groups chicks on the same diet together and orders them according to their final weight (lightest to heaviest) within diet.

    Diet

    a factor with levels 1, ..., 4 indicating which experimental diet the chick received.

    Source

    Crowder, M. and Hand, D. (1990). Analysis of Repeated Measures. London: Chapman and Hall. (example 5.3)

    Hand, D. and Crowder, M. (1996), Practical Longitudinal Data Analysis. London: Chapman and Hall. (table A.2)

    Pinheiro, J. C. and Bates, D. M. (2000) Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.ChickWeight
    
    tblish.examples.coplot (t, "Time", "weight", "Chick");
    
    

    8.2.58.13 tblish.dataset.chickwts

    Static Method: out = chickwts ()

    Chicken Weights by Feed Type

    Description

    An experiment was conducted to measure and compare the effectiveness of various feed supplements on the growth rate of chickens.

    Newly hatched chicks were randomly allocated into six groups, and each group was given a different feed supplement. Their weights in grams after six weeks are given along with feed types.

    Format

    weight

    Chick weight at six weeks (gm).

    feed

    Feed type.

    Source

    Anonymous (1948) Biometrika, 35, 214.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    # This example requires the statistics package from Octave Forge
    
    t = tblish.dataset.chickwts
    
    # Boxplot by group
    figure
    g = groupby (t, "feed", {
      "weight", @(x) {x}, "weight"
    });
    boxplot (g.weight, 1);
    xlabel ("feed"); ylabel ("Weight at six weeks (gm)");
    xticklabels ([{""} cellstr(g.feed')]);
    
    # Linear model
    # TODO: This linear model thing and anova
    
    

    8.2.58.14 tblish.dataset.co2

    Static Method: out = co2 ()

    Mauna Loa Atmospheric CO2 Concentration

    Description

    Atmospheric concentrations of CO2 are expressed in parts per million (ppm) and reported in the preliminary 1997 SIO manometric mole fraction scale. Contains monthly observations from 1959 to 1997.

    Format

    date

    Date of the month of the observation, as datetime.

    co2

    CO2 concentration (ppm).

    Details

    The values for February, March and April of 1964 were missing and have been obtained by interpolating linearly between the values for January and May of 1964.

    Source

    Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography (SIO), University of California, La Jolla, California USA 92093-0220.

    ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.

    References

    Cleveland, W. S. (1993). Visualizing Data. New Jersey: Summit Press.

    Examples

    t = tblish.dataset.co2;
    
    plot (datenum (t.date), t.co2);
    datetick ("x");
    xlabel ("Time"); ylabel ("Atmospheric concentration of CO2");
    title ("co2 data set");
    
    

    8.2.58.15 tblish.dataset.crimtab

    Static Method: out = crimtab ()

    Student’s 3000 Criminals Data

    Description

    Data of 3000 male criminals over 20 years old undergoing their sentences in the chief prisons of England and Wales.

    Format

    This dataset contains three separate variables. The finger_length and body_height variables correspond to the rows and columns of the count matrix.

    finger_length

    Midpoints of intervals of finger lengths (cm).

    body_height

    Body heights (cm).

    count

    Number of prisoners in this bin.

    Details

    Student is the pseudonym of William Sealy Gosset. In his 1908 paper he wrote (on page 13) at the beginning of section VI entitled Practical Test of the forgoing Equations:

    “Before I had succeeded in solving my problem analytically, I had endeavoured to do so empirically. The material used was a correlation table containing the height and left middle finger measurements of 3000 criminals, from a paper by W. R. MacDonell (Biometrika, Vol. I., p. 219). The measurements were written out on 3000 pieces of cardboard, which were then very thoroughly shuffled and drawn at random. As each card was drawn its numbers were written down in a book, which thus contains the measurements of 3000 criminals in a random order. Finally, each consecutive set of 4 was taken as a sample—750 in all—and the mean, standard deviation, and correlation of each sample etermined. The difference between the mean of each sample and the mean of the population was then divided by the standard deviation of the sample, giving us the z of Section III.”

    The table is in fact page 216 and not page 219 in MacDonell(1902). In the MacDonell table, the middle finger lengths were given in mm and the heights in feet/inches intervals, they are both converted into cm here. The midpoints of intervals were used, e.g., where MacDonell has “4’ 7"9/16 – 8"9/16”, we have 142.24 which is 2.54*56 = 2.54*(4’ 8").

    MacDonell credited the source of data (page 178) as follows: “The data on which the memoir is based were obtained, through the kindness of Dr Garson, from the Central Metric Office, New Scotland Yard... He pointed out on page 179 that: “The forms were drawn at random from the mass on the office shelves; we are therefore dealing with a random sampling.”

    Source

    http://pbil.univ-lyon1.fr/R/donnees/criminals1902.txt thanks to Jean R. Lobry and Anne-Béatrice Dufour.

    References

    Garson, J.G. (1900). The metric system of identification of criminals, as used in in Great Britain and Ireland. The Journal of the Anthropological Institute of Great Britain and Ireland, 30, 161–198.

    MacDonell, W.R. (1902). On criminal anthropometry and the identification of criminals. Biometrika, 1(2), 177–227.

    Student (1908). The probable error of a mean. Biometrika, 6, 1–25.

    Examples

    # TODO: Port this from R
    
    

    8.2.58.16 tblish.dataset.cupcake

    Static Method: out = cupcake ()

    Google Search popularity for "cupcake", 2004-2019

    Description

    Monthly popularity of worldwide Google search results for "cupcake", 2004-2019.

    Format

    Month

    Month when searches took place

    Cupcake

    An indicator of search volume, in unknown units

    Source

    Google Trends, https://trends.google.com/trends/explore?q=%2Fm%2F03p1r4&date=all, retrieved 2019-05-04 by Andrew Janke.

    Examples

    t = tblish.dataset.cupcake
    plot (datenum (t.Month), t.Cupcake)
    title ('“Cupcake” Google Searches'); xlabel ("Year"); ylabel ("Unknown popularity metric");
    
    

    8.2.58.17 tblish.dataset.discoveries

    Static Method: out = discoveries ()

    Yearly Numbers of Important Discoveries

    Description

    The numbers of “great” inventions and scientific discoveries in each year from 1860 to 1959.

    Format

    year

    Year.

    discoveries

    Number of “great” discoveries that year.

    Source

    The World Almanac and Book of Facts, 1975 Edition, pages 315–318.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.discoveries;
    
    plot (t.year, t.discoveries);
    xlabel ("Time"); ylabel ("Number of important discoveries");
    title ("discoveries data set");
    
    

    8.2.58.18 tblish.dataset.DNase

    Static Method: out = DNase ()

    Elisa assay of DNase

    Description

    Data obtained during development of an ELISA assay for the recombinant protein DNase in rat serum.

    Format

    Run

    Ordered categorical indicating the assay run.

    conc

    Known concentration of the protein (ng/ml).

    density

    Measured optical density in the assay (dimensionless).

    Source

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 134)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.DNase;
    
    # TODO: Port this from R
    
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @scatter);
    tblish.examples.coplot (t, "conc", "density", "Run", "PlotFcn", @loglog, ...
      "PlotArgs", {"o"});
    
    

    8.2.58.19 tblish.dataset.esoph

    Static Method: out = esoph ()

    Smoking, Alcohol and Esophageal Cancer

    Description

    Data from a case-control study of (o)esophageal cancer in Ille-et-Vilaine, France.

    Format

    item

    Age group (years).

    alcgp

    Alcohol consumption (gm/day).

    tobgp

    Tobacco consumption (gm/day).

    ncases

    Number of cases.

    ncontrols

    Number of controls

    Source

    Breslow, N. E. and Day, N. E. (1980) Statistical Methods in Cancer Research. Volume 1: The Analysis of Case-Control Studies. Oxford: IARC Lyon / Oxford University Press.

    Examples

    # TODO: Port this from R
    
    # TODO: Port the anova output
    
    # TODO: Port the fancy plot
    # This involves a "mosaic plot", which is not supported by Octave, so this will
    # take some work.
    
    

    8.2.58.20 tblish.dataset.euro

    Static Method: out = euro ()

    Conversion Rates of Euro Currencies

    Description

    Conversion rates between the various Euro currencies.

    Format

    This data comes in two separate variables.

    euro

    An 11-long vector of the value of 1 Euro in all participating currencies.

    euro_cross

    An 11-by-11 matrix of conversion rates between various Euro currencies.

    euro_date

    The date upon which these Euro conversion rates were fixed.

    Details

    The data set euro contains the value of 1 Euro in all currencies participating in the European monetary union (Austrian Schilling ATS, Belgian Franc BEF, German Mark DEM, Spanish Peseta ESP, Finnish Markka FIM, French Franc FRF, Irish Punt IEP, Italian Lira ITL, Luxembourg Franc LUF, Dutch Guilder NLG and Portuguese Escudo PTE). These conversion rates were fixed by the European Union on December 31, 1998. To convert old prices to Euro prices, divide by the respective rate and round to 2 digits.

    Source

    Unknown.

    This example data set was derived from the R 3.6.0 example datasets, and they do not specify a source.

    Examples

    # TODO: Port this from R
    
    # TODO: Example conversion
    
    # TODO: "dot chart" showing euro-to-whatever conversion rates and vice versa
    
    

    8.2.58.21 tblish.dataset.eurodist

    Static Method: out = eurodist ()

    Distances Between European Cities and Between US Cities

    Description

    eurodist gives road distances (in km) between 21 cities in Europe. The data are taken from a table in The Cambridge Encyclopaedia.

    UScitiesD gives “straight line” distances between 10 cities in the US.

    Format

    eurodist

    ?????

    TODO: Finish this.

    Source

    Crystal, D. Ed. (1990). The Cambridge Encyclopaedia. Cambridge: Cambridge University Press.

    The US cities distances were provided by Pierre Legendre.

    Examples


    8.2.58.22 tblish.dataset.EuStockMarkets

    Static Method: out = EuStockMarkets ()

    Daily Closing Prices of Major European Stock Indices

    Description

    Contains the daily closing prices of major European stock indices: Germany DAX (Ibis), Switzerland SMI, France CAC, and UK FTSE. The data are sampled in business time, i.e., weekends and holidays are omitted.

    Format

    A multivariate time series with 1860 observations on 4 variables.

    The starting date is the 130th day of 1991, with a frequency of 260 observations per year.

    Source

    The data were kindly provided by Erste Bank AG, Vienna, Austria.

    Examples

    
    t = tblish.dataset.EuStockMarkets;
    
    # The fact that we're doing this munging means that table might have
    # been the wrong structure for this data in the first place
    
    t2 = removevars (t, "day");
    index_names = t2.Properties.VariableNames;
    day = 1:height (t2);
    price = table2array (t2);
    
    price0 = price(1,:);
    
    rel_price = price ./ repmat (price0, [size(price, 1) 1]);
    
    figure;
    plot (day, rel_price);
    legend (index_names);
    xlabel ("Business day");
    ylabel ("Relative price");
    
    
    
    

    8.2.58.23 tblish.dataset.faithful

    Static Method: out = faithful ()

    Old Faithful Geyser Data

    Description

    Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA.

    Format

    eruptions

    Eruption time (mins).

    waiting

    Waiting time to next eruption (mins).

    Source

    W. Härdle.

    References

    Härdle, W. (1991). Smoothing Techniques with Implementation in S. New York: Springer.

    Azzalini, A. and Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. Applied Statistics, 39, 357–365.

    Examples

    t = tblish.dataset.faithful;
    
    # Munge the data, rounding eruption time to the second
    e60 = 60 * t.eruptions;
    ne60 = round (e60);
    # TODO: Port zapsmall to Octave
    eruptions = ne60 / 60;
    # TODO: Display mean relative difference and bins summary
    
    # Histogram of rounded eruption times
    figure
    hist (ne60, max (ne60))
    xlabel ("Eruption time (sec)")
    ylabel ("n")
    title ("faithful data: Eruptions of Old Faithful")
    
    # Scatter plot of eruption time vs waiting time
    figure
    scatter (t.eruptions, t.waiting)
    xlabel ("Eruption time (min)")
    ylabel ("Waiting time to next eruption (min)")
    title ("faithful data: Eruptions of Old Faithful")
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.58.24 tblish.dataset.Formaldehyde

    Static Method: out = Formaldehyde ()

    Determination of Formaldehyde

    Description

    These data are from a chemical experiment to prepare a standard curve for the determination of formaldehyde by the addition of chromatropic acid and concentrated sulphuric acid and the reading of the resulting purple color on a spectrophotometer.

    Format

    record

    Observation record number.

    carb

    Carbohydrate (ml).

    optden

    Optical Density

    Source

    Bennett, N. A. and N. L. Franklin (1954). Statistical Analysis in Chemistry and the Chemical Industry. New York: Wiley.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.Formaldehyde;
    
    figure
    scatter (t.carb, t.optden)
    # TODO: Add a linear model line
    xlabel ("Carbohydrate (ml)")
    ylabel ("Optical Density")
    title ("Formaldehyde data")
    
    # TODO: Add linear model summary output
    # TOD: Add linear model summary plot
    
    

    8.2.58.25 tblish.dataset.freeny

    Static Method: out = freeny ()

    Freeny’s Revenue Data

    Description

    Freeny’s data on quarterly revenue and explanatory variables.

    Format

    Freeny’s dataset consists of one observed dependent variable (revenue) and four explanatory variables (lagged quartery revenue, price index, income level, and market potential).

    date

    Start date of the quarter for the observation.

    y

    Observed quarterly revenue. TODO: Determine units (probably millions of USD?)

    lag_quarterly_revenue

    Quarterly revenue (y), lagged 1 quarter.

    price_index

    A price index

    income_level

    ??? TODO: Fill this in

    market_potential

    ??? TODO: Fill this in

    Source

    Freeny, A. E. (1977). A Portable Linear Regression Package with Test Programs. Bell Laboratories memorandum.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.freeny;
    
    summary (t)
    
    tblish.examples.plot_pairs (removevars (t, "date"))
    
    # TODO: Create linear model and print summary
    
    # TODO: Linear model plot
    
    

    8.2.58.26 tblish.dataset.HairEyeColor

    Static Method: out = HairEyeColor ()

    Hair and Eye Color of Statistics Students

    Description

    Distribution of hair and eye color and sex in 592 statistics students.

    Format

    This data set comes in multiple variables

    n

    A 3-dimensional array containing the counts of students in each bucket. It is arranged as hair-by-eye-by-sex.

    hair

    Hair colors for the indexes along dimension 1.

    eye

    Eye colors for the indexes along dimension 2.

    sex

    Sexes for the indexes along dimension 3.

    Details

    The Hair x Eye table comes rom a survey of students at the University of Delaware reported by Snee (1974). The split by Sex was added by Friendly (1992a) for didactic purposes.

    This data set is useful for illustrating various techniques for the analysis of contingency tables, such as the standard chi-squared test or, more generally, log-linear modelling, and graphical methods such as mosaic plots, sieve diagrams or association plots.

    Source

    http://euclid.psych.yorku.ca/ftp/sas/vcd/catdata/haireye.sas

    Snee (1974) gives the two-way table aggregated over Sex. The Sex split of the ‘Brown hair, Brown eye’ cell was changed to agree with that used by Friendly (2000).

    References

    Snee, R. D. (1974). Graphical display of two-way contingency tables. The American Statistician, 28, 9–12.

    Friendly, M. (1992a). Graphical methods for categorical data. SAS User Group International Conference Proceedings, 17, 190–200. http://www.math.yorku.ca/SCS/sugi/sugi17-paper.html

    Friendly, M. (1992b). Mosaic displays for loglinear models. Proceedings of the Statistical Graphics Section, American Statistical Association, pp. 61–68. http://www.math.yorku.ca/SCS/Papers/asa92.html

    Friendly, M. (2000). Visualizing Categorical Data. SAS Institute, ISBN 1-58025-660-0.

    Examples

    tblish.dataset.HairEyeColor
    
    # TODO: Aggregate over sex and display a table of counts
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.58.27 tblish.dataset.Harman23cor

    Static Method: out = Harman23cor ()

    Harman Example 2.3

    Description

    A correlation matrix of eight physical measurements on 305 girls between ages seven and seventeen.

    Format

    cov

    An 8-by-8 correlation matrix.

    names

    Names of the variables corresponding to the indexes of the correlation matrix’s dimensions.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 2.3.

    Examples

    tblish.dataset.Harman23cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.58.28 tblish.dataset.Harman74cor

    Static Method: out = Harman74cor ()

    Harman Example 7.4

    Description

    A correlation matrix of 24 psychological tests given to 145 seventh and eighth-grade children in a Chicago suburb by Holzinger and Swineford.

    Format

    cov

    A 2-dimensional correlation matrix.

    vars

    Names of the variables corresponding to the indexes along the dimensions of cov.

    Source

    Harman, H. H. (1976). Modern Factor Analysis, Third Edition Revised. Chicago: University of Chicago Press. Table 7.4.

    Examples

    tblish.dataset.Harman74cor;
    
    # TODO: Port factanal to Octave
    
    

    8.2.58.29 tblish.dataset.Indometh

    Static Method: out = Indometh ()

    Pharmacokinetics of Indomethacin

    Description

    Data on the pharmacokinetics of indometacin (or, older spelling, ‘indomethacin’).

    Format

    Subject

    Subject identifier.

    time

    Time since drug administration at which samples were drawn (hours).

    conc

    Plasma concentration of indomethacin (mcg/ml).

    Details

    Each of the six subjects were given an intravenous injection of indometacin.

    Source

    Kwan, Breault, Umbenhauer, McMahon and Duggan (1976). Kinetics of Indomethacin absorption, elimination, and enterohepatic circulation in man. Journal of Pharmacokinetics and Biopharmaceutics 4, 255–280.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.2.4, p. 129)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.


    8.2.58.30 tblish.dataset.infert

    Static Method: out = infert ()

    Infertility after Spontaneous and Induced Abortion

    Description

    This is a matched case-control study dating from before the availability of conditional logistic regression.

    Format

    education

    Index of the record.

    age

    Age in years of case.

    parity

    Count.

    induced

    Number of prior induced abortions, grouped into “0”, “1”, or “2 or more”.

    case_status

    0 = control, 1 = case.

    spontaneous

    Number of prior spontaneous abortions, grouped into “0”, “1”, or “2 or more”.

    stratum

    Matched set number.

    pooled_stratum

    Stratum number.

    Note

    One case with two prior spontaneous abortions and two prior induced abortions is omitted.

    Source

    Trichopoulos et al (1976). Br. J. of Obst. and Gynaec. 83, 645–650.

    Examples

    t = tblish.dataset.infert;
    
    # TODO: Port glm() (generalized linear model) stuff to Octave
    
    

    8.2.58.31 tblish.dataset.InsectSprays

    Static Method: out = InsectSprays ()

    Effectiveness of Insect Sprays

    Description

    The counts of insects in agricultural experimental units treated with different insecticides.

    Format

    spray

    The type of spray.

    count

    Insect count.

    Source

    Beall, G., (1942). The Transformation of data from entomological field experiments. Biometrika, 29, 243–262.

    References

    McNeil, D. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.InsectSprays;
    
    # TODO: boxplot
    
    # TODO: AOV plots
    
    

    8.2.58.32 tblish.dataset.iris

    Static Method: out = iris ()

    The Fisher Iris dataset: measurements of various flowers

    Description

    This is the classic Fisher Iris dataset.

    Format

    Species

    The species of flower being measured.

    SepalLength

    Length of sepals, in centimeters.

    SepalWidth

    Width of sepals, in centimeters.

    PetalLength

    Length of petals, in centimeters.

    PetalWidth

    Width of petals, in centimeters.

    Source

    http://archive.ics.uci.edu/ml/datasets/Iris

    References

    https://en.wikipedia.org/wiki/Iris_flower_data_set

    Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179-188. also in Contributions to Mathematical Statistics (John Wiley, NY, 1950).

    Duda, R.O., & Hart, P.E. (1973). Pattern Classification and Scene Analysis. (Q327.D83) New York: John Wiley & Sons. ISBN 0-471-22361-1. See page 218.

    The data were collected by Anderson, Edgar (1935). The irises of the Gaspe Peninsula. Bulletin of the American Iris Society, 59, 2–5.

    Examples

    # TODO: Port this example from R
    
    

    8.2.58.33 tblish.dataset.islands

    Static Method: out = islands ()

    Areas of the World’s Major Landmasses

    Description

    The areas in thousands of square miles of the landmasses which exceed 10,000 square miles.

    Format

    name

    The name of the island.

    area

    The area, in thousands of square miles.

    Source

    The World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.islands;
    
    # TODO: Port dot chart to Octave
    
    

    8.2.58.34 tblish.dataset.JohnsonJohnson

    Static Method: out = JohnsonJohnson ()

    Quarterly Earnings per Johnson & Johnson Share

    Description

    Quarterly earnings (dollars) per Johnson & Johnson share 1960–80.

    Format

    date

    Start date of the quarter.

    earnings

    Earnings per share (USD).

    Source

    Shumway, R. H. and Stoffer, D. S. (2000). Time Series Analysis and its Applications. Second Edition. New York: Springer. Example 1.1.

    Examples

    t = tblish.dataset.JohnsonJohnson
    
    # TODO: Yikes, look at all those plots. Port them to Octave.
    
    

    8.2.58.35 tblish.dataset.LakeHuron

    Static Method: out = LakeHuron ()

    Level of Lake Huron 1875-1972

    Description

    Annual measurements of the level, in feet, of Lake Huron 1875–1972.

    Format

    year

    Year of the measurement

    level

    Lake level (ft).

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series A, page 555.

    Brockwell, P. J. and Davis, R. A. (1996). Introduction to Time Series and Forecasting. New York: Springer. Sections 5.1 and 7.6.

    Examples

    t = tblish.dataset.LakeHuron;
    
    plot (t.year, t.level)
    xlabel ("Year")
    ylabel ("Lake level (ft)")
    title ("Level of Lake Huron")
    
    

    8.2.58.36 tblish.dataset.lh

    Static Method: out = lh ()

    Luteinizing Hormone in Blood Samples

    Description

    A regular time series giving the luteinizing hormone in blood samples at 10 minute intervals from a human female, 48 samples.

    Format

    sample

    The number of the observation.

    lh

    Level of luteinizing hormone.

    Source

    P.J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. Table A.1, series 3.

    Examples

    t = tblish.dataset.lh;
    
    plot (t.sample, t.lh);
    xlabel ("Sample Number");
    ylabel ("lh level");
    
    

    8.2.58.37 tblish.dataset.LifeCycleSavings

    Static Method: out = LifeCycleSavings ()

    Intercountry Life-Cycle Savings Data

    Description

    Data on the savings ratio 1960–1970.

    Format

    country

    Name of the country.

    sr

    Aggregate personal savings.

    pop15

    Percentage of population under 15.

    pop75

    Percentage of population over 75.

    dpi

    Real per-capita disposable income.

    ddpi

    Percent growth rate of dpi.

    Details

    Under the life-cycle savings hypothesis as developed by Franco Modigliani, the savings ratio (aggregate personal saving divided by disposable income) is explained by per-capita disposable income, the percentage rate of change in per-capita disposable income, and two demographic variables: the percentage of population less than 15 years old and the percentage of the population over 75 years old. The data are averaged over the decade 1960–1970 to remove the business cycle or other short-term fluctuations.

    Source

    The data were obtained from Belsley, Kuh and Welsch (1980). They in turn obtained the data from Sterling (1977).

    References

    Sterling, Arnie (1977). Unpublished BS Thesis. Massachusetts Institute of Technology.

    Belsley, D. A., Kuh. E. and Welsch, R. E. (1980). Regression Diagnostics. New York: Wiley.

    Examples

    t = tblish.dataset.LifeCycleSavings;
    
    # TODO: linear model
    
    # TODO: pairs plot with Lowess smoothed line
    
    

    8.2.58.38 tblish.dataset.Loblolly

    Static Method: out = Loblolly ()

    Growth of Loblolly pine trees

    Description

    Records of the growth of Loblolly pine trees.

    Format

    height

    Tree height (ft).

    age

    Tree age (years).

    Seed

    Seed source for the tree. Ordering is according to increasing maximum height.

    Source

    Kung, F. H. (1986). Fitting logistic growth curve with predetermined carrying capacity. Proceedings of the Statistical Computing Section, American Statistical Association, 340–343.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Loblolly;
    
    t2 = t(t.Seed == "329",:);
    scatter (t2.age, t2.height)
    xlabel ("Tree age (yr)");
    ylabel ("Tree height (ft)");
    title ("Loblolly data and fitted curve (Seed 329 only)")
    
    # TODO: Compute and plot fitted curve
    
    

    8.2.58.39 tblish.dataset.longley

    Static Method: out = longley ()

    Longley’s Economic Regression Data

    Description

    A macroeconomic data set which provides a well-known example for a highly collinear regression.

    Format

    Year

    The year.

    GNP_deflator

    GNP implicit price deflator (1954=100).

    GNP

    Gross National Product.

    Unemployed

    Number of unemployed.

    Armed_Forces

    Number of people in the armed forces.

    Population

    “Noninstitutionalized” population ≥ 14 years of age.

    Employed

    Number of people employed.

    Source

    J. W. Longley (1967). An appraisal of least-squares programs from the point of view of the user. Journal of the American Statistical Association, 62, 819–841.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.longley;
    
    # TODO: Linear model
    # TODO: opar plot
    
    

    8.2.58.40 tblish.dataset.lynx

    Static Method: out = lynx ()

    Annual Canadian Lynx trappings 1821-1934

    Description

    Annual numbers of lynx trappings for 1821–1934 in Canada. Taken from Brockwell & Davis (1991), this appears to be the series considered by Campbell & Walker (1977).

    Format

    year

    Year of the record.

    lynx

    Number of lynx trapped.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series and Forecasting Methods. Second edition. New York: Springer. Series G (page 557).

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Campbell, M. J. and Walker, A. M. (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

    Examples

    t = tblish.dataset.lynx;
    
    plot (t.year, t.lynx);
    xlabel ("Year");
    ylabel ("Lynx Trapped");
    
    

    8.2.58.41 tblish.dataset.morley

    Static Method: out = morley ()

    Michelson Speed of Light Data

    Description

    A classical data of Michelson (but not this one with Morley) on measurements done in 1879 on the speed of light. The data consists of five experiments, each consisting of 20 consecutive ‘runs’. The response is the speed of light measurement, suitably coded (km/sec, with 299000 subtracted).

    Format

    Expt

    The experiment number, from 1 to 5.

    Run

    The run number within each experiment.

    Speed

    Speed-of-light measurement.

    Details

    The data is here viewed as a randomized block experiment with experiment and run as the factors. run may also be considered a quantitative variate to account for linear (or polynomial) changes in the measurement over the course of a single experiment.

    Source

    A. J. Weekes (1986). A Genstat Primer. London: Edward Arnold.

    S. M. Stigler (1977). Do robust estimators work with real data? Annals of Statistics 5, 1055–1098. (See Table 6.)

    A. A. Michelson (1882). Experimental determination of the velocity of light made at the United States Naval Academy, Annapolis. Astronomic Papers, 1, 135–8. U.S. Nautical Almanac Office. (See Table 24.).

    Examples

    t = tblish.dataset.morley;
    
    # TODO: Port to Octave
    
    

    8.2.58.42 tblish.dataset.mtcars

    Static Method: out = mtcars ()

    Motor Trend 1974 Car Road Tests

    Description

    The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

    Format

    mpg

    Fuel efficiency in miles/gallon

    cyl

    Number of cylinders

    disp

    Displacement (cu. in.)

    hp

    Gross horsepower

    drat

    Rear axle ratio

    wt

    Weight (1,000 lbs)

    qsec

    1/4 mile time

    vs

    Engine type (0 = V-shaped, 1 = straight)

    am

    Transmission type (0 = automatic, 1 = manual)

    gear

    Number of forward gears

    carb

    Number of carburetors

    Note

    Henderson and Velleman (1981) comment in a footnote to Table 1: “Hocking [original transcriber]’s noncrucial coding of the Mazda’s rotary engine as a straight six-cylinder engine and the Porsche’s flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.”

    Source

    Henderson and Velleman (1981). Building multiple regression models interactively. Biometrics, 37, 391–411.

    Examples

    # TODO: Port this example from R
    

    8.2.58.43 tblish.dataset.nhtemp

    Static Method: out = nhtemp ()

    Average Yearly Temperatures in New Haven

    Description

    The mean annual temperature in degrees Fahrenheit in New Haven, Connecticut, from 1912 to 1971.

    Format

    year

    Year of the observation.

    temp

    Mean annual temperature (degrees F).

    Source

    Vaux, J. E. and Brinker, N. B. (1972) Cycles, 1972, 117–121.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.nhtemp;
    
    plot (t.year, t.temp);
    title ("nhtemp data");
    xlabel ("Mean annual temperature in New Haven, CT (deg. F)");
    
    

    8.2.58.44 tblish.dataset.Nile

    Static Method: out = Nile ()

    Flow of the River Nile

    Description

    Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

    Format

    year

    Year of the record.

    flow

    Annual flow (cubic meters).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/DKbook.html

    References

    Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92.

    Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51.

    Examples

    t = tblish.dataset.Nile;
    
    figure
    plot (t.year, t.flow);
    
    # TODO: Port the rest of the example to Octave
    
    

    8.2.58.45 tblish.dataset.nottem

    Static Method: out = nottem ()

    Average Monthly Temperatures at Nottingham, 1920-1939

    Description

    A time series object containing average air temperatures at Nottingham Castle in degrees Fahrenheit for 20 years.

    Format

    record

    Index of the record.

    lead

    Leading indicator.

    sales

    Sales volume.

    Source

    Anderson, O. D. (1976). Time Series Analysis and Forecasting: The Box-Jenkins approach. London: Butterworths. Series R.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.46 tblish.dataset.npk

    Static Method: out = npk ()

    Classical N, P, K Factorial Experiment

    Description

    A classical N, P, K (nitrogen, phosphate, potassium) factorial experiment on the growth of peas conducted on 6 blocks. Each half of a fractional factorial design confounding the NPK interaction was used on 3 of the plots.

    Format

    block

    Which block (1 to 6).

    N

    Indicator (0/1) for the application of nitrogen.

    P

    Indicator (0/1) for the application of phosphate.

    K

    Indicator (0/1) for the application of potassium.

    yield

    Yield of peas, in pounds/plot. Plots were 1/70 acre.

    Source

    Imperial College, London, M.Sc. exercise sheet.

    References

    Venables, W. N. and Ripley, B. D. (2002). Modern Applied Statistics with S. Fourth edition. New York: Springer.

    Examples

    t = tblish.dataset.npk;
    
    # TODO: Port aov() and LM to Octave
    
    

    8.2.58.47 tblish.dataset.occupationalStatus

    Static Method: out = occupationalStatus ()

    Occupational Status of Fathers and their Sons

    Description

    Cross-classification of a sample of British males according to each subject’s occupational status and his father’s occupational status.

    Format

    An 8-by-8 matrix of counts, with classifying fators origin (father’s occupational status, levels 1:8) and destination (son’s occupational status, levels 1:8).

    Source

    Goodman, L. A. (1979). Simple Models for the Analysis of Association in Cross-Classifications having Ordered Categories. J. Am. Stat. Assoc., 74 (367), 537–552.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.48 tblish.dataset.Orange

    Static Method: out = Orange ()

    Growth of Orange Trees

    Description

    Records of the growth of orange trees.

    Format

    Tree

    A categorical indicating on which tree the measurement is made. Ordering is according to increasing maximum diameter.

    age

    Age of the tree (days since 1968-12-31).

    circumference

    Trunk circumference (mm). This is probably “circumference at breast height”, a standard measurement in forestry.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Draper, N. R. and Smith, H. (1998). Applied Regression Analysis (3rd ed). New York: Wiley. (exercise 24.N).

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.Orange;
    
    # TODO: Port coplot to Octave
    
    # TODO: Linear model
    
    

    8.2.58.49 tblish.dataset.OrchardSprays

    Static Method: out = OrchardSprays ()

    Potency of Orchard Sprays

    Description

    An experiment was conducted to assess the potency of various constituents of orchard sprays in repelling honeybees, using a Latin square design.

    Format

    rowpos

    Row of the design.

    colpos

    Column of the design

    treatment

    Treatment level.

    decrease

    Response.

    Details

    Individual cells of dry comb were filled with measured amounts of lime sulphur emulsion in sucrose solution. Seven different concentrations of lime sulphur ranging from a concentration of 1/100 to 1/1,562,500 in successive factors of 1/5 were used as well as a solution containing no lime sulphur.

    The responses for the different solutions were obtained by releasing 100 bees into the chamber for two hours, and then measuring the decrease in volume of the solutions in the various cells.

    An 8 x 8 Latin square design was used and the treatments were coded as follows:

    A – highest level of lime sulphur B – next highest level of lime sulphur … G – lowest level of lime sulphur H – no lime sulphur

    Source

    Finney, D. J. (1947). Probit Analysis. Cambridge.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.OrchardSprays;
    
    tblish.examples.plot_pairs (t);
    
    

    8.2.58.50 tblish.dataset.PlantGrowth

    Static Method: out = PlantGrowth ()

    Results from an Experiment on Plant Growth

    Description

    Results from an experiment to compare yields (as measured by dried weight of plants) obtained under a control and two different treatment conditions.

    Format

    group

    Treatment condition group.

    weight

    Weight of plants.

    Source

    Dobson, A. J. (1983). An Introduction to Statistical Modelling. London: Chapman and Hall.

    Examples

    t = tblish.dataset.PlantGrowth;
    
    # TODO: Port anova to Octave
    
    

    8.2.58.51 tblish.dataset.precip

    Static Method: out = precip ()

    Annual Precipitation in US Cities

    Description

    The average amount of precipitation (rainfall) in inches for each of 70 United States (and Puerto Rico) cities.

    Format

    city

    City observed.

    precip

    Annual precipitation (in).

    Source

    Statistical Abstracts of the United States, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.precip;
    
    # TODO: Port dot plot to Octave
    
    

    8.2.58.52 tblish.dataset.presidents

    Static Method: out = presidents ()

    Quarterly Approval Ratings of US Presidents

    Description

    The (approximately) quarterly approval rating for the President of the United States from the first quarter of 1945 to the last quarter of 1974.

    Format

    date

    Approximate date of the observation.

    approval

    Approval rating (%).

    Details

    The data are actually a fudged version of the approval ratings. See McNeil’s book for details.

    Source

    The Gallup Organisation.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.presidents;
    
    figure
    plot (datenum (t.date), t.approval)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Approval rating (%)")
    title ("presidents data")
    
    

    8.2.58.53 tblish.dataset.pressure

    Static Method: out = pressure ()

    Vapor Pressure of Mercury as a Function of Temperature

    Description

    Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).

    Format

    temperature

    Temperature (deg C).

    pressure

    Pressure (mm Hg).

    Source

    Weast, R. C., ed. (1973). Handbook of Chemistry and Physics. Cleveland: CRC Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.pressure;
    
    figure
    plot (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    figure
    semilogy (t.temperature, t.pressure)
    xlabel ("Temperature (deg C)")
    ylabel ("Pressure (mm of Hg)")
    title ("pressure data: Vapor Pressure of Mercury")
    
    
    

    8.2.58.54 tblish.dataset.Puromycin

    Static Method: out = Puromycin ()

    Reaction Velocity of an Enzymatic Reaction

    Description

    Reaction velocity versus substrate concentration in an enzymatic reaction involving untreated cells or cells treated with Puromycin.

    Format

    state

    Whether the cell was treated.

    conc

    Substrate concentrations (ppm).

    rate

    Instantaneous reaction rates (counts/min/min).

    Details

    Data on the velocity of an enzymatic reaction were obtained by Treloar (1974). The number of counts per minute of radioactive product from the reaction was measured as a function of substrate concentration in parts per million (ppm) and from these counts the initial rate (or velocity) of the reaction was calculated (counts/min/min). The experiment was conducted once with the enzyme treated with Puromycin, and once with the enzyme untreated.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bates, D.M. and Watts, D.G. (1988). Nonlinear Regression Analysis and Its Applications. New York: Wiley. Appendix A1.3.

    Treloar, M. A. (1974). Effects of Puromycin on Galactosyltransferase in Golgi Membranes. M.Sc. Thesis, U. of Toronto.

    Examples

    t = tblish.dataset.Puromycin;
    
    # TODO: Port example to Octave
    
    

    8.2.58.55 tblish.dataset.quakes

    Static Method: out = quakes ()

    Locations of Earthquakes off Fiji

    Description

    The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.

    Format

    lat

    Latitude of event.

    long

    Longitude of event.

    depth

    Depth (km).

    mag

    Richter magnitude.

    stations

    Number of stations reporting.

    Details

    There are two clear planes of seismic activity. One is a major plate junction; the other is the Tonga trench off New Zealand. These data constitute a subsample from a larger dataset of containing 5000 observations.

    Source

    This is one of the Harvard PRIM-H project data sets. They in turn obtained it from Dr. John Woodhouse, Dept. of Geophysics, Harvard University.

    References

    G. E. P. Box and G. M. Jenkins (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    P. J. Brockwell and R. A. Davis (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.56 tblish.dataset.randu

    Static Method: out = randu ()

    Random Numbers from Congruential Generator RANDU

    Description

    400 triples of successive random numbers were taken from the VAX FORTRAN function RANDU running under VMS 1.5.

    Format

    record

    Index of the record.

    x

    X value of the triple.

    y

    Y value of the triple.

    z

    Z value of the triple.

    Details

    In three dimensional displays it is evident that the triples fall on 15 parallel planes in 3-space. This can be shown theoretically to be true for all triples from the RANDU generator.

    These particular 400 triples start 5 apart in the sequence, that is they are ((U[5i+1], U[5i+2], U[5i+3]), i= 0, ..., 399), and they are rounded to 6 decimal places.

    Under VMS versions 2.0 and higher, this problem has been fixed.

    Source

    David Donoho

    Examples

    t = tblish.dataset.randu;
    
    
    

    8.2.58.57 tblish.dataset.rivers

    Static Method: out = rivers ()

    Lengths of Major North American Rivers

    Description

    This data set gives the lengths (in miles) of 141 “major” rivers in North America, as compiled by the US Geological Survey.

    Format

    rivers

    A vector containing 141 observations.

    Source

    World Almanac and Book of Facts, 1975, page 406.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.rivers;
    
    longest_river = max (rivers)
    shortest_river = min (rivers)
    
    

    8.2.58.58 tblish.dataset.rock

    Static Method: out = rock ()

    Measurements on Petroleum Rock Samples

    Description

    Measurements on 48 rock samples from a petroleum reservoir.

    Format

    area

    Area of pores space, in pixels out of 256 by 256.

    peri

    Perimeter in pixels.

    shape

    Perimeter/sqrt(area).

    perm

    Permeability in milli-Darcies.

    Details

    Twelve core samples from petroleum reservoirs were sampled by 4 cross-sections. Each core sample was measured for permeability, and each cross-section has total area of pores, total perimeter of pores, and shape.

    Source

    Data from BP Research, image analysis by Ronit Katz, U. Oxford.

    Examples

    t = tblish.dataset.rock;
    
    figure
    scatter (t.area, t.perm)
    xlabel ("Area of pores space (pixels out of 256x256)")
    ylabel ("Permeability (milli-Darcies)")
    
    

    8.2.58.59 tblish.dataset.sleep

    Static Method: out = sleep ()

    Student’s Sleep Data

    Description

    Data which show the effect of two soporific drugs (increase in hours of sleep compared to control) on 10 patients.

    Format

    id

    Patient ID.

    group

    Drug given.

    extra

    Increase in hours of sleep.

    Details

    The group variable name may be misleading about the data: They represent measurements on 10 persons, not in groups.

    Source

    Cushny, A. R. and Peebles, A. R. (1905). The action of optical isomers: II hyoscines. The Journal of Physiology, 32, 501–510.

    Student (1908). The probable error of the mean. Biometrika, 6, 20.

    References

    Scheffé, Henry (1959). The Analysis of Variance. New York, NY: Wiley.

    Examples

    t = tblish.dataset.sleep;
    
    # TODO: Port to Octave
    
    

    8.2.58.60 tblish.dataset.stackloss

    Static Method: out = stackloss ()

    Brownlee’s Stack Loss Plant Data

    Description

    Operational data of a plant for the oxidation of ammonia to nitric acid.

    Format

    AirFlow

    Flow of cooling air.

    WaterTemp

    Cooling Water Inlet temperature.

    AcidConc

    Concentration of acid (per 1000, minus 500).

    StackLoss

    Stack loss

    Details

    “Obtained from 21 days of operation of a plant for the oxidation of ammonia (NH3) to nitric acid (HNO3). The nitric oxides produced are absorbed in a countercurrent absorption tower”. (Brownlee, cited by Dodge, slightly reformatted by MM.)

    AirFlow represents the rate of operation of the plant. WaterTemp is the temperature of cooling water circulated through coils in the absorption tower. AcidConc is the concentration of the acid circulating, minus 50, times 10: that is, 89 corresponds to 58.9 per cent acid. StackLoss (the dependent variable) is 10 times the percentage of the ingoing ammonia to the plant that escapes from the absorption column unabsorbed; that is, an (inverse) measure of the over-all efficiency of the plant.

    Source

    Brownlee, K. A. (1960, 2nd ed. 1965). Statistical Theory and Methodology in Science and Engineering. New York: Wiley. pp. 491–500.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Dodge, Y. (1996). The guinea pig of multiple regression. In: Robust Statistics, Data Analysis, and Computer Intensive Methods; In Honor of Peter Huber’s 60th Birthday, 1996, Lecture Notes in Statistics 109, Springer-Verlag, New York.

    Examples

    t = tblish.dataset.stackloss;
    
    # TODO: Create linear model and print summary
    
    

    8.2.58.61 tblish.dataset.state

    Static Method: out = state ()

    US State Facts and Figures

    Description

    Data related to the 50 states of the United States of America.

    Format

    abb

    State abbreviation.

    name

    State name.

    area

    Area (sq mi).

    lat

    Approximate center (latitude).

    lon

    Approximate center (longitude).

    division

    State division.

    revion

    State region.

    Population

    Population estimate as of July 1, 1975.

    Income

    Per capita income (1974).

    Illiteracy

    Illiteracy as of 1970 (percent of population).

    LifeExp

    Lfe expectancy in years (1969-71).

    Murder

    Murder and non-negligent manslaughter rate per 100,000 population (1976).

    HSGrad

    Percent high-school graduates (1970).

    Frost

    Mean number of days with minimum temperature below freezing (1931-1960) in capital or large city.

    Source

    U.S. Department of Commerce, Bureau of the Census (1977) Statistical Abstract of the United States.

    U.S. Department of Commerce, Bureau of the Census (1977) County and City Data Book.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.state;
    
    

    8.2.58.62 tblish.dataset.sunspot_month

    Static Method: out = sunspot_month ()

    Monthly Sunspot Data, from 1749 to “Present”

    Description

    Monthly numbers of sunspots, as from the World Data Center, aka SIDC. This is the version of the data that may occasionally be updated when new counts become available.

    Format

    month

    Month of the observation.

    sunspots

    Number of sunspots.

    Source

    WDC-SILSO, Solar Influences Data Analysis Center (SIDC), Royal Observatory of Belgium, Av. Circulaire, 3, B-1180 BRUSSELS. Currently at http://www.sidc.be/silso/datafiles.

    Examples

    t = tblish.dataset.sunspot_month;
    
    
    

    8.2.58.63 tblish.dataset.sunspot_year

    Static Method: out = sunspot_year ()

    Yearly Sunspot Data, 1700-1988

    Description

    Yearly numbers of sunspots from 1700 to 1988 (rounded to one digit).

    Format

    year

    Year of the observation.

    sunspots

    Number of sunspots.

    Source

    H. Tong (1996) Non-Linear Time Series. Clarendon Press, Oxford, p. 471.

    Examples

    t = tblish.dataset.sunspot_year;
    
    figure
    plot (t.year, t.sunspots)
    xlabel ("Year")
    ylabel ("Sunspots")
    
    

    8.2.58.64 tblish.dataset.sunspots

    Static Method: out = sunspots ()

    Monthly Sunspot Numbers, 1749-1983

    Description

    Monthly mean relative sunspot numbers from 1749 to 1983. Collected at Swiss Federal Observatory, Zurich until 1960, then Tokyo Astronomical Observatory.

    Format

    month

    Month of the observation.

    sunspots

    Number of observed sunspots.

    Source

    Andrews, D. F. and Herzberg, A. M. (1985) Data: A Collection of Problems from Many Fields for the Student and Research Worker. New York: Springer-Verlag.

    Examples

    t = tblish.dataset.sunspots;
    
    figure
    plot (datenum (t.month), t.sunspots)
    datetick ("x")
    xlabel ("Date")
    ylabel ("Monthly sunspot numbers")
    title ("sunspots data")
    
    
    

    8.2.58.65 tblish.dataset.swiss

    Static Method: out = swiss ()

    Swiss Fertility and Socioeconomic Indicators (1888) Data

    Description

    Standardized fertility measure and socio-economic indicators for each of 47 French-speaking provinces of Switzerland at about 1888.

    Format

    Fertility

    Ig, ‘common standardized fertility measure’.

    Agriculture

    % of males involved in agriculture as occupation.

    Examination

    % draftees receiving highest mark on army examination.

    Education

    % education beyond primary school for draftees.

    Catholic

    % ‘Catholic’ (as opposed to ‘Protestant’).

    InfantMortality

    Live births who live less than 1 year.

    All variables but ‘Fertility’ give proportions of the population.

    Source

    (paraphrasing Mosteller and Tukey):

    Switzerland, in 1888, was entering a period known as the demographic transition; i.e., its fertility was beginning to fall from the high level typical of underdeveloped countries.

    The data collected are for 47 French-speaking “provinces” at about 1888.

    Here, all variables are scaled to [0, 100], where in the original, all but Catholic were scaled to [0, 1].

    Note

    Files for all 182 districts in 1888 and other years have been available at https://opr.princeton.edu/archive/pefp/switz.aspx.

    They state that variables Examination and Education are averages for 1887, 1888 and 1889.

    References

    Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Monterey: Wadsworth & Brooks/Cole.

    Examples

    t = tblish.dataset.swiss;
    
    # TODO: Port linear model to Octave
    
    

    8.2.58.66 tblish.dataset.Theoph

    Static Method: out = Theoph ()

    Pharmacokinetics of Theophylline

    Description

    An experiment on the pharmacokinetics of theophylline.

    Format

    Subject

    Categorical identifying the subject on whom the observation was made. The ordering is by increasing maximum concentration of theophylline observed.

    Wt

    Weight of the subject (kg).

    Dose

    Dose of theophylline administerred orally to the subject (mg/kg).

    Time

    Time since drug administration when the sample was drawn (hr).

    conc

    Theophylline concentration in the sample (mg/L).

    Details

    Boeckmann, Sheiner and Beal (1994) report data from a study by Dr. Robert Upton of the kinetics of the anti-asthmatic drug theophylline. Twelve subjects were given oral doses of theophylline then serum concentrations were measured at 11 time points over the next 25 hours.

    These data are analyzed in Davidian and Giltinan (1995) and Pinheiro and Bates (2000) using a two-compartment open pharmacokinetic model, for which a self-starting model function, SSfol, is available.

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Boeckmann, A. J., Sheiner, L. B. and Beal, S. L. (1994). NONMEM Users Guide: Part V. NONMEM Project Group, University of California, San Francisco.

    Davidian, M. and Giltinan, D. M. (1995). Nonlinear Models for Repeated Measurement Data. London: Chapman & Hall. (section 5.5, p. 145 and section 6.6, p. 176)

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer. (Appendix A.29)

    Examples

    t = tblish.dataset.Theoph;
    
    # TODO: Coplot
    # TODO: Yet another linear model to port to Octave
    
    

    8.2.58.67 tblish.dataset.Titanic

    Static Method: out = Titanic ()

    Survival of passengers on the Titanic

    Description

    This data set provides information on the fate of passengers on the fatal maiden voyage of the ocean liner ‘Titanic’, summarized according to economic status (class), sex, age and survival.

    Format

    n is a 4-dimensional array resulting from cross-tabulating 2201 observations on 4 variables. The dimensions of the array correspond to the following variables:

    Class

    1st, 2nd, 3rd, Cre.

    Sex

    Male, Female.

    Age

    Child, Adult.

    Survived

    No, Yes.

    Details

    The sinking of the Titanic is a famous event, and new books are still being published about it. Many well-known facts—from the proportions of first-class passengers to the ‘women and children first’ policy, and the fact that that policy was not entirely successful in saving the women and children in the third class—are reflected in the survival rates for various classes of passenger.

    These data were originally collected by the British Board of Trade in their investigation of the sinking. Note that there is not complete agreement among primary sources as to the exact numbers on board, rescued, or lost.

    Due in particular to the very successful film ‘Titanic’, the last years saw a rise in public interest in the Titanic. Very detailed data about the passengers is now available on the Internet, at sites such as Encyclopedia Titanica (https://www.encyclopedia-titanica.org/).

    Source

    Dawson, Robert J. MacG. (1995). The ‘Unusual Episode’ Data Revisited. Journal of Statistics Education, 3.

    The source provides a data set recording class, sex, age, and survival status for each person on board of the Titanic, and is based on data originally collected by the British Board of Trade and reprinted in:

    British Board of Trade (1990). Report on the Loss of the ‘Titanic’ (S.S.). British Board of Trade Inquiry Report (reprint). Gloucester, UK: Allan Sutton Publishing.

    Examples

    tblish.dataset.Titanic;
    
    # TODO: Port mosaic plot to Octave
    
    # TODO: Check for higher survival rates in children and females
    
    

    8.2.58.68 tblish.dataset.ToothGrowth

    Static Method: out = ToothGrowth ()

    The Effect of Vitamin C on Tooth Growth in Guinea Pigs

    Description

    The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, orange juice or ascorbic acid (a form of vitamin C and coded as VC).

    Format

    supp

    Supplement type.

    dose

    Dose (mg/day).

    len

    Tooth length.

    Source

    C. I. Bliss (1952). The Statistics of Bioassay. Academic Press.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Crampton, E. W. (1947). The growth of the odontoblast of the incisor teeth as a criterion of vitamin C intake of the guinea pig. The Journal of Nutrition, 33(5), 491–504.

    Examples

    t = tblish.dataset.ToothGrowth;
    
    tblish.examples.coplot (t, "dose", "len", "supp");
    
    # TODO: Port Lowess smoothing to Octave
    
    

    8.2.58.69 tblish.dataset.treering

    Static Method: out = treering ()

    Yearly Treering Data, -6000-1979

    Description

    Contains normalized tree-ring widths in dimensionless units.

    Format

    A univariate time series with 7981 observations.

    Each tree ring corresponds to one year.

    Details

    The data were recorded by Donald A. Graybill, 1980, from Gt Basin Bristlecone Pine 2805M, 3726-11810 in Methuselah Walk, California.

    Source

    Time Series Data Library: http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/, series ‘CA535.DAT’.

    References

    For some photos of Methuselah Walk see https://web.archive.org/web/20110523225828/http://www.ltrr.arizona.edu/~hallman/sitephotos/meth.html.

    Examples

    t = tblish.dataset.treering;
    
    

    8.2.58.70 tblish.dataset.trees

    Static Method: out = trees ()

    Diameter, Height and Volume for Black Cherry Trees

    Description

    This data set provides measurements of the diameter, height and volume of timber in 31 felled black cherry trees. Note that the diameter (in inches) is erroneously labelled Girth in the data. It is measured at 4 ft 6 in above the ground.

    Format

    Girth

    Tree diameter (rather than girth, actually) in inches.

    Height

    Height in ft.

    Volume

    Volume of timber in cubic feet.

    Source

    Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976). The Minitab Student Handbook. Duxbury Press.

    References

    Atkinson, A. C. (1985). Plots, Transformations and Regression. Oxford: Oxford University Press.

    Examples

    t = tblish.dataset.trees;
    
    figure
    tblish.examples.plot_pairs (t);
    
    figure
    loglog (t.Girth, t.Volume)
    xlabel ("Girth")
    ylabel ("Volume")
    
    # TODO: Transform to log space for the coplot
    
    # TODO: Linear model
    
    

    8.2.58.71 tblish.dataset.UCBAdmissions

    Static Method: out = UCBAdmissions ()

    Student Admissions at UC Berkeley

    Description

    Aggregate data on applicants to graduate school at Berkeley for the six largest departments in 1973 classified by admission and sex.

    Format

    A 3-dimensional array resulting from cross-tabulating 4526 observations on 3 variables. The variables and their levels are as follows:

    Admit

    Admitted, Rejected.

    Gender

    Male, Female.

    Dept

    A, B, C, D, E, F.

    Details

    This data set is frequently used for illustrating Simpson’s paradox, see Bickel et al (1975). At issue is whether the data show evidence of sex bias in admission practices. There were 2691 male applicants, of whom 1198 (44.5%) were admitted, compared with 1835 female applicants of whom 557 (30.4%) were admitted. This gives a sample odds ratio of 1.83, indicating that males were almost twice as likely to be admitted. In fact, graphical methods (as in the example below) or log-linear modelling show that the apparent association between admission and sex stems from differences in the tendency of males and females to apply to the individual departments (females used to apply more to departments with higher rejection rates).

    Source

    The data are given in Box & Jenkins (1976). Obtained from the Time Series Data Library at http://www-personal.buseco.monash.edu.au/~hyndman/TSDL/.

    References

    Bickel, P. J., Hammel, E. A., and O’Connell, J. W. (1975). Sex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403. http://www.jstor.org/stable/1739581.

    Examples

    tblish.dataset.UCBAdmissions;
    
    # TODO: Port mosaic plot to Octave
    
    

    8.2.58.72 tblish.dataset.UKDriverDeaths

    Static Method: out = UKDriverDeaths ()

    Road Casualties in Great Britain 1969-84

    Description

    UKDriverDeaths is a time series giving the monthly totals of car drivers in Great Britain killed or seriously injured Jan 1969 to Dec 1984. Compulsory wearing of seat belts was introduced on 31 Jan 1983.

    Seatbelts is more information on the same problem.

    Format

    UKDriverDeaths is a table with the following variables:

    month

    Month of the observation.

    deaths

    Number of deaths.

    Seatbelts is a table with the following variables:

    month

    Month of the observation.

    DriversKilled

    Car drivers killed.

    drivers

    Same as UKDriverDeaths deaths count.

    front

    Front-seat passengers killed or seriously injured.

    rear

    Rear-seat passengers killed or seriously injured.

    kms

    Distance driven.

    PetrolPrice

    Petrol price.

    VanKilled

    Number of van (“light goods vehicle”) drivers killed.

    law

    0/1: was the seatbelt law in effect that month?

    Source

    Harvey, A.C. (1989). Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press. pp. 519–523.

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Harvey, A. C. and Durbin, J. (1986). The effects of seat belt legislation on British road casualties: A case study in structural time series modelling. Journal of the Royal Statistical Society series A, 149, 187–227.

    Examples

    tblish.dataset.UKDriverDeaths;
    d = UKDriverDeaths;
    s = Seatbelts;
    
    # TODO: Port the model and plots to Octave
    
    

    8.2.58.73 tblish.dataset.UKgas

    Static Method: out = UKgas ()

    UK Quarterly Gas Consumption

    Description

    Quarterly UK gas consumption from 1960Q1 to 1986Q4, in millions of therms.

    Format

    date

    Quarter of the observation

    gas

    Gas consumption (MM therms).

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/.

    Examples

    t = tblish.dataset.UKgas;
    
    plot (datenum (t.date), t.gas);
    datetick ("x")
    xlabel ("Month")
    ylabel ("Gas consumption (MM therms)")
    
    

    8.2.58.74 tblish.dataset.UKLungDeaths

    Static Method: out = UKLungDeaths ()

    Monthly Deaths from Lung Diseases in the UK

    Description

    Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979.

    Format

    date

    Month of the observation.

    ldeaths

    Total lung deaths.

    fdeaths

    Lung deaths among females.

    mdeaths

    Lung deaths among males.

    Source

    P. J. Diggle (1990). Time Series: A Biostatistical Introduction. Oxford. table A.3

    Examples

    t = tblish.dataset.UKLungDeaths;
    
    figure
    plot (datenum (t.date), t.ldeaths);
    title ("Total UK Lung Deaths")
    xlabel ("Month")
    ylabel ("Deaths")
    
    figure
    plot (datenum (t.date), [t.fdeaths t.mdeaths]);
    title ("UK Lung Deaths buy sex")
    legend ({"Female", "Male"})
    xlabel ("Month")
    ylabel ("Deaths")
    
    

    8.2.58.75 tblish.dataset.USAccDeaths

    Static Method: out = USAccDeaths ()

    Accidental Deaths in the US 1973-1978

    Description

    A time series giving the monthly totals of accidental deaths in the USA.

    Format

    month

    Month of the observation.

    deaths

    Accidental deaths.

    Source

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. New York: Springer.

    Examples

    t = tblish.dataset.USAccDeaths;
    
    

    8.2.58.76 tblish.dataset.USArrests

    Static Method: out = USArrests ()

    Violent Crime Rates by US State

    Description

    This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.

    Format

    State

    State name.

    Murder

    Murder arrests (per 100,000).

    Assault

    Assault arrests (per 100,000).

    UrbanPop

    Percent urban population.

    Rape

    Rape arrests (per 100,000).

    Note

    USArrests contains the data as in McNeil’s monograph. For the UrbanPop percentages, a review of the table (No. 21) in the Statistical Abstracts 1975 reveals a transcription error for Maryland (and that McNeil used the same “round to even” rule), as found by Daniel S Coven (Arizona).

    See the example below on how to correct the error and improve accuracy for the ‘<n>.5’ percentages.

    Source

    World Almanac and Book of Facts 1975. (Crime rates).

    Statistical Abstracts of the United States 1975, p.20, (Urban rates), possibly available as https://books.google.ch/books?id=zl9qAAAAMAAJ&pg=PA20.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.USArrests;
    
    summary (t);
    
    tblish.examples.plot_pairs (t(:,2:end));
    
    # TODO: Difference between USArrests and its correction
    
    # TODO: +/- 0.5 to restore the original <n>.5 percentages
    
    

    8.2.58.77 tblish.dataset.USJudgeRatings

    Static Method: out = USJudgeRatings ()

    Lawyers’ Ratings of State Judges in the US Superior Court

    Description

    Lawyers’ ratings of state judges in the US Superior Court.

    Format

    CONT

    Number of contacts of lawyer with judge.

    INTG

    Judicial integrity.

    DMNR

    Demeanor.

    DILG

    Diligence.

    CFMG

    Case flow managing.

    DECI

    Prompt decisions.

    PREP

    Preparation for trial.

    FAMI

    Familiarity with law.

    ORAL

    Sound oral rulings.

    WRIT

    Sound written rulings.

    PHYS

    Physical ability.

    RTEN

    Worthy of retention.

    Source

    New Haven Register, 14 January, 1977 (from John Hartigan).

    Examples

    t = tblish.dataset.USJudgeRatings;
    
    figure
    tblish.examples.plot_pairs (t(:,2:end));
    title ("USJudgeRatings data")
    
    

    8.2.58.78 tblish.dataset.USPersonalExpenditure

    Static Method: out = USPersonalExpenditure ()

    Personal Expenditure Data

    Description

    This data set consists of United States personal expenditures (in billions of dollars) in the categories: food and tobacco, household operation, medical and health, personal care, and private education for the years 1940, 1945, 1950, 1955 and 1960.

    Format

    A 2-dimensional matrix x with Category along dimension 1 and Year along dimension 2.

    Source

    The World Almanac and Book of Facts, 1962, page 756.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.USPersonalExpenditure;
    
    # TODO: Port medpolish() from R, whatever that is.
    
    

    8.2.58.79 tblish.dataset.uspop

    Static Method: out = uspop ()

    Populations Recorded by the US Census

    Description

    This data set gives the population of the United States (in millions) as recorded by the decennial census for the period 1790–1970.

    Format

    year

    Year of the census.

    population

    Population, in millions.

    Source

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.uspop;
    
    figure
    semilogy (t.year, t.population)
    xlabel ("Year")
    ylabel ("U.S. Population (millions)")
    
    

    8.2.58.80 tblish.dataset.VADeaths

    Static Method: out = VADeaths ()

    Death Rates in Virginia (1940)

    Description

    Death rates per 1000 in Virginia in 1940.

    Format

    A 2-dimensional matrix deaths, with age group along dimension 1 and demographic group along dimension 2.

    Details

    The death rates are measured per 1000 population per year. They are cross-classified by age group (rows) and population group (columns). The age groups are: 50–54, 55–59, 60–64, 65–69, 70–74 and the population groups are Rural/Male, Rural/Female, Urban/Male and Urban/Female.

    This provides a rather nice 3-way analysis of variance example.

    Source

    Molyneaux, L., Gilliam, S. K., and Florant, L. C.(1947) Differences in Virginia death rates by color, sex, age, and rural or urban residence. American Sociological Review, 12, 525–535.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.VADeaths;
    
    # TODO: Port to Octave
    
    

    8.2.58.81 tblish.dataset.volcano

    Static Method: out = volcano ()

    Topographic Information on Auckland’s Maunga Whau Volcano

    Description

    Maunga Whau (Mt Eden) is one of about 50 volcanos in the Auckland volcanic field. This data set gives topographic information for Maunga Whau on a 10m by 10m grid.

    Format

    A matrix volcano with 87 rows and 61 columns, rows corresponding to grid lines running east to west and columns to grid lines running south to north.

    Source

    Digitized from a topographic map by Ross Ihaka. These data should not be regarded as accurate.

    References

    Box, G. E. P. and Jenkins, G. M. (1976). Time Series Analysis, Forecasting and Control. San Francisco: Holden-Day. p. 537.

    Brockwell, P. J. and Davis, R. A. (1991). Time Series: Theory and Methods. Second edition. New York: Springer-Verlag. p. 414.

    Examples

    tblish.dataset.volcano;
    
    # TODO: Figure out how to do a topo map in Octave. Just a gridded color plot
    # should be fine. And then maybe do a 3-d mesh plot.
    
    

    8.2.58.82 tblish.dataset.warpbreaks

    Static Method: out = warpbreaks ()

    The Number of Breaks in Yarn during Weaving

    Description

    This data set gives the number of warp breaks per loom, where a loom corresponds to a fixed length of yarn.

    Format

    wool

    Type of wool (A or B).

    tension

    The level of tension (L, M, H).

    breaks

    Number of breaks.

    There are measurements on 9 looms for each of the six types of warp (AL, AM, AH, BL, BM, BH).

    Source

    Tippett, L. H. C. (1950). Technological Applications of Statistics. New York: Wiley. Page 106.

    References

    Tukey, J. W. (1977). Exploratory Data Analysis. Reading, Mass: Addison-Wesley.

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.warpbreaks;
    
    summary (t)
    
    # TODO: Port the plotting code and OPAR to Octave
    
    

    8.2.58.83 tblish.dataset.women

    Static Method: out = women ()

    Average Heights and Weights for American Women

    Description

    This data set gives the average heights and weights for American women aged 30–39.

    Format

    height

    Height (in).

    weight

    Weight (lbs).

    Details

    The data set appears to have been taken from the American Society of Actuaries Build and Blood Pressure Study for some (unknown to us) earlier year.

    The World Almanac notes: “The figures represent weights in ordinary indoor clothing and shoes, and heights with shoes”.

    Source

    The World Almanac and Book of Facts, 1975.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    t = tblish.dataset.women;
    
    figure
    scatter (t.height, t.weight)
    xlabel ("Height (in)")
    ylabel ("Weight (lb")
    title ("women data: American women aged 30-39")
    
    

    8.2.58.84 tblish.dataset.WorldPhones

    Static Method: out = WorldPhones ()

    The World’s Telephones

    Description

    The number of telephones in various regions of the world (in thousands).

    Format

    A matrix with 7 rows and 8 columns. The columns of the matrix give the figures for a given region, and the rows the figures for a year.

    The regions are: North America, Europe, Asia, South America, Oceania, Africa, Central America.

    The years are: 1951, 1956, 1957, 1958, 1959, 1960, 1961.

    Source

    AT&T (1961) The World’s Telephones.

    References

    McNeil, D. R. (1977). Interactive Data Analysis. New York: Wiley.

    Examples

    tblish.dataset.WorldPhones;
    
    # TODO: Port matplot() to Octave
    
    

    8.2.58.85 tblish.dataset.WWWusage

    Static Method: out = WWWusage ()

    WWWusage

    Description

    A time series of the numbers of users connected to the Internet through a server every minute.

    Format

    A time series of length 100.

    Source

    Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford: Oxford University Press. http://www.ssfpack.com/dkbook/

    References

    Makridakis, S., Wheelwright, S. C. and Hyndman, R. J. (1998). Forecasting: Methods and Applications. New York: Wiley.

    Examples

    # TODO: Come up with example code here
    
    

    8.2.58.86 tblish.dataset.zCO2

    Static Method: out = zCO2 ()

    Carbon Dioxide Uptake in Grass Plants

    Description

    The CO2 data set has 84 rows and 5 columns of data from an experiment on the cold tolerance of the grass species Echinochloa crus-galli.

    Format

    Details

    The CO2 uptake of six plants from Quebec and six plants from Mississippi was measured at several levels of ambient CO2 concentration. Half the plants of each type were chilled overnight before the experiment was conducted.

    Source

    Potvin, C., Lechowicz, M. J. and Tardif, S. (1990). The statistical analysis of ecophysiological response curves obtained from experiments involving repeated measures. Ecology, 71, 1389–1400.

    Pinheiro, J. C. and Bates, D. M. (2000). Mixed-effects Models in S and S-PLUS. New York: Springer.

    Examples

    t = tblish.dataset.zCO2;
    
    # TODO: Coplot
    # TODO: Port the linear model to Octave
    
    

    8.2.59 tblish.datasets

    Class: tblish.datasets

    Example dataset collection.

    tblish.datasets is a collection of example datasets to go with the Tablicious package.

    The tblish.datasets class provides methods for listing and loading the example datasets.


    8.2.59.1 datasets.description

    Static Method: description (datasetName)
    Static Method: out = description (datasetName)

    Get or display the description for a dataset.

    Gets the description for the named dataset. If the output is captured, it is returned as a charvec containing plain text suitable for human display. If the output is not captured, displays the description to the console.


    8.2.59.2 datasets.list

    Static Method: list ()
    Static Method: out = list ()

    List all datasets.

    Lists all the example datasets known to this class. If the output is captured, returns the list as a table. If the output is not captured, displays the list.

    Returns a table with variables Name, Description, and possibly more.


    8.2.59.3 datasets.load

    Static Method: load (datasetName)
    Static Method: out = load (datasetName)

    Load a specified dataset.

    datasetName is the name of the dataset to load, as found in the Name column of the dataset list.


    8.2.60 tblish.evalWithTableVars

    Function: out = tblish.evalWithTableVars (tbl, expr)

    Evaluate an expression against a table array’s variables.

    Evaluates the M-code expression expr in a workspace where all of tbl’s variables have been assigned to workspace variables.

    expr is a charvec containing an Octave expression.

    As an implementation detail, the workspace will also contain some variables that are prefixed and suffixed with "__". So try to avoid those in your table variable names.

    Returns the result of the evaluation.

    Examples:

    [s,p,sp] = tblish.examples.SpDb
    tmp = join (sp, p);
    shipment_weight = tblish.evalWithTableVars (tmp, "Qty .* Weight")
    

    See also: table.restrict


    8.2.61 tblish.examples.coplot

    Function: [fig, hax] = tblish.examples.coplot (tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (fig, tbl, xvar, yvar, gvar)
    Function: [fig, hax] = tblish.examples.coplot (…, OptionName, OptionValue, …)

    Conditioning plot.

    tblish.examples.coplot produces conditioning plots. This is a kind of plot that breaks up the data into groups based on one or two grouping variables, and plots each group of data in a separate subplot.

    tbl is a table containing the data to plot.

    xvar is the name of the table variable within tbl to use as the X values. May be a variable name or index.

    yvar is the name of the table variable within tbl to use as the Y values. May be a variable name or index.

    gvar is the name of the table variable or variables within tbl to use as the grouping variable(s). The grouping variables split the data into groups based on the distinct values in those variables. gvar may specify either one or two grouping variables (but not more). It can be provided as a charvec, cellstr, or index array. Records with a missing value for their grouping variable(s) are ignored.

    fig is the figure handle to plot into. If fig is not provided, a new figure is created.

    Name/Value options:

    PlotFcn

    The plotting function to use, supplied as a function handle. Defaults to @plot. It must be a function that provides the signature fcn(hax, X, Y, …).

    PlotArgs

    A cell array of arguments to pass in to the plotting function, following the hax, x, and y arguments.

    Returns: fig – the figure handle it plotted into hax – array of axes handles to all the axes for the subplots


    8.2.62 tblish.examples.plot_pairs

    Function: out = tblish.examples.plot_pairs (data)
    Function: out = tblish.examples.plot_pairs (data, plot_type)
    Function: out = tblish.examples.plot_pairs (fig, …)

    Plot pairs of variables against each other.

    data is the data holding the variables to plot. It may be either a table or a struct. Each variable or field in the table or struct is considered to be one variable. Each must hold a vector, and all the vectors of all the variables must be the same size.

    plot_type is a charvec indicating what plot type to do in each subplot. ("scatter" is the default.) Valid plot_type values are:

    "scatter"

    A plain scatter plot.

    "smooth"

    A scatter plot + fitted line, like R’s panel.smooth does.

    fig is an optional figure handle to plot into. If omitted, a new figure is created.

    Returns the created figure, if the output is captured.


    8.2.63 tblish.examples.SpDb

    Function: spdb = tblish.examples.SpDb ()
    Function: [s, p, sp] = tblish.examples.SpDb ()

    The classic Suppliers-Parts example database.

    Constructs the classic C. J. Date Suppliers-Parts ("SP") example database as tables. This database is the one used as an example throughout Date’s "An Introduction to Database Systems" textbook.

    Returns the database as a set of three table arrays. If one argout is captured, the tables are returned in the fields of a single struct. If multiple argouts are captured, the tables are returned as three argouts with a single table in each, in the order (s, p, sp).


    8.2.64 tblish.sizeof2

    Function: out = tblish.sizeof2 (x)

    Approximate size of an array in bytes, with object support.

    This is an alternative to Octave’s sizeof function that tries to provide meaningful support for objects, including the classes defined in Tablicious. It is named "sizeof2" instead of "sizeof" to avoid a "shadowing core function" warning when loading Tablicious, because it seems that Octave does not consider packages (namespaces) when detecting shadowed functions.

    This may be supplemented or replaced by sizeof override methods on Tablicious’s classes. I’m not sure whether Octave’s sizeof supports extension by method overrides, so I’m not doing that yet. If that happens, this sizeof2 function will stick around in a deprecated state for a while, and it will respect those override methods.

    For tables, this returns the sum of sizeof for all of its variables’ arrays, plus the size of the VariableNames and any other metadata stored in obj.

    This is currently broken for some types, because its implementation is in transition from overridden methods on Tablicious’s objects to a separate function.

    This is not supported, fully or at all, for all input types, but it has support for the types defined in Tablicious, plus some Octave built-in types, and makes a best effort at figuring out user-defined classdef objects. It currently does not have extensibility support for customization by classdef classes, but that may be added in the future, in which case its output may change significantly for classdef objects in future releases.

    x is an array of any type.

    Returns a scalar numeric. Returns NaN for types that are known to not be supported, instead of raising an error. Raises an error if it fails to determine the size of an input of a type that it thought was supported.

    See also: sizeof


    8.2.65 tblish.table.grpstats

    Function: [out] = tblish.table.grpstats (tbl, groupvar)
    Function: [out] = tblish.table.grpstats (…, 'DataVars', DataVars)

    Statistics by group for a table array.

    This is a table-specific implementation of grpstats that works on table arrays. It is supplied as a function in the +tblish package to avoid colliding with the global grpstats function supplied by the Statistics Octave Forge package. Depending on which version of the Statistics OF package you are using, it may or may not support table inputs to its grpstats function. This function is supplied as an alternative you can use in an environment where table arrays are not supported by the grpstats that you have, though you need to make code changes and call it as tblish.table.grpstats(tbl) instead of with a plain grpstats(tbl).

    See also: table.groupby, table.findgroups, table.splitapply


    8.2.66 timezones

    Function: out = timezones ()
    Function: out = timezones (area)

    List all the time zones defined on this system.

    This lists all the time zones that are defined in the IANA time zone database used by this Octave. (On Linux and macOS, that will generally be the system time zone database from /usr/share/zoneinfo. On Windows, it will be the database redistributed with the Tablicious package.

    If the return is captured, the output is returned as a table if your Octave has table support, or a struct if it does not. It will have fields/variables containing column vectors:

    Name

    The IANA zone name, as cellstr.

    Area

    The geographical area the zone is in, as cellstr.

    Compatibility note: Matlab also includes UTCOffset and DSTOffset fields in the output; these are currently unimplemented.


    8.2.67 todatetime

    Function: out = todatetime (x)

    Convert input to a Tablicious datetime array, with convenient interface.

    This is an alternative to the regular datetime constructor, with a signature and conversion logic that Tablicious’s author likes better.

    This mainly exists because datetime’s constructor signature does not accept datenums, and instead treats one-arg numeric inputs as datevecs. (For compatibility with Matlab’s interface.) I think that’s less convenient: datenums seem to be more common than datevecs in M-code, and it returns an object array that’s not the same size as the input.

    Returns a datetime array whose size depends on the size and type of the input array, but will generally be the same size as the array of strings or numerics the input array "represents".


    8.2.68 vartype

    Function: out = vartype (type)

    Filter by variable type for use in suscripting.

    Creates an object that can be used for subscripting into the variables dimension of a table and filtering on variable type.

    type is the name of a type as charvec. This may be anything that the isa function accepts, or 'cellstr' to select cellstrs, as determined by iscellstr.

    Returns an object of an opaque type. Don’t worry about what type it is; just pass it into the second argument of a subscript into a table object.


    8.2.69 vecfun

    Function: out = vecfun (fcn, x, dim)

    Apply function to vectors in array along arbitrary dimension.

    This function is not implemented yet.

    Applies a given function to the vector slices of an N-dimensional array, where those slices are along a given dimension.

    fcn is a function handle to apply.

    x is an array of arbitrary type which is to be sliced and passed in to fcn.

    dim is the dimension along which the vector slices lay.

    Returns the collected output of the fcn calls, which will be the same size as x, but not necessarily the same type.


    8.2.70 years

    Function File: out = years (x)

    Create a duration x years long, or get the years in a duration x.

    If input is numeric, returns a duration array in units of fixed-length years of 365.2425 days each.

    If input is a duration, converts the duration to a number of fixed-length years as double.

    Note: years creates fixed-length years, which may not be what you want. To create a duration of calendar years (which account for actual leap days), use calyears.

    See calyears.


    9 Copying

    apjanke-octave-tablicious-8a1b10f/docs/release/v0.4.4/user-guide/tablicious.pdf000066400000000000000000016751111515050116100272540ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 267 /Filter /FlateDecode >> stream xڍAO  0PਉnOCۚFƮ_(1MoW:ȣ {az9y+_>K&ZT(GS7Kybpq4& x{d<8"0UZI(eCZ^CK#x+6{>G QG,,Y t&~ޏ.&,ؓm6R-zkg6d+5<9l~G-nwOA!#}VAi~ endstream endobj 13 0 obj << /Length 667 /Filter /FlateDecode >> stream x}TKo0JؼmTʩ=8@v,xeLx̆}$> stream xMo@{^<ܠUPjqAL-'r{^۴DFBU"ήg>b`9]\ΌIY=mY_Ϡ0{dRS YqXnhv*sR_btr--20AvK:qo&0*ԩ$x0 ^ ՐfAY/EG@{ &#8LM \S˫jtJ-&uv"8>0҆+Ҹi^>)և=ڃZsWU;&;>T`G?%Fhɏ=9=&+:hN㿚W]ZN>Ux;z'UvJJp0)8$Hqv&-s9Z0_Ճǟ. Q endstream endobj 124 0 obj << /Length 1479 /Filter /FlateDecode >> stream x[n6+M3-&,X(p@VN$[2m $$Br9E!I;ܞnv3.>`9na|ݹRdzPo<1F<0gRw\ҏZਤ_PȰx0SapygH0OeSJIax GSx"[D8OUy6u!3s@L N X|L| H^I8B!2j)+`eb&#习]nɜd78u?bR48)ViJ ր$[@$&1: UiglH+||sAAMa o! S^/)C@oo҂"m$3I[F2$/0YLÇRBJ#$ǔƘ1GLuP3Wn֪)-vL+i5j׀NyMRޠ%heHrn)ҽay{?̮fY>f%hIzܥchIx IH媂L/ibƁ}xa%-iL֒Ҏ״Kd(4`].w܀F/$mmi6GgEPK zBFAW _i&z6,H 5z4)܀o?DpJ2XuKTH>5l\8Ewo/&Z.ni F=Z {ʆ:ÿ]U1 )˴i˒WYq2Y{7,2yu,h}gSϑqbEՂ*@gU8 R1 2歂)7I1h NY?RfSUNt1I"P.xkH1.IOFVNs=_&%yzF鳝GP6:Uk"\NC#FK#F`$GY!"qY 30e*42|60vF)KP$MQb'm9b]o_ՑLꍋ<%PZaSu:ޑjK?Q }.\ˤ<YJep(De'Jc?FהyHQddy*hdNS 3lql蔲iO{p];p-&e_uv^ .(\[p ܴ$w'W'I/NijևOA5%yG!dodYRx^@f8j^(.LgxmunBcwhHFHk/R~CFCJzB em/%.Hq@C nqHQ endstream endobj 227 0 obj << /Length 1353 /Filter /FlateDecode >> stream xMsF:fgzsLm6U98%kp$HeӀ$ov=oL"%23+%e ߟ?ވfxswg{?gZ|z[on~B*$d)LJ:L2oZ.z)[cg3y}w7W|o9aSHHfwQ6\1> Ʉ”ESMST4Mˤ/Sch1Z rTAբ"j@7_VKA`ˢwI>eiplM(rf$6qpSew4W;&=Jpfa m\bUSxa.!8w &kˆՄVmO6` w|(*\=-z2i u%c)dO$1pKA }ĥbėtdM){ 𽨁@ݳhc듫$'+#``qJ8z=s8_MM SdmXôkR5A>ڋE}֠*"V8.kC^o?r4ֿ槤s#DG8%ӫ/!~V vga`Gm>(|q1G`$jQ[_m?r|"0p A"e%&߄HUIϪk z rG cGexh6cdd7u(˸mGke5 64YDW]S9L{O%=|"\vi7l_tcgꩲΥʼJwזmilQTLf`|rkob&Iv >=v1=ӀٷXűl32P=8t$C] '#tt SG޼xn9uE.8kFBLS0sçwV9FLO>]l w3wkGQ{4HԆyeǠj`i7'm(.KgE$[$n1:xu64`:&BCL vSs7#rYp endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2398 /Filter /FlateDecode >> stream xڵ[M\ϯ1pM6?asI!G`jvCAdAblMJ)r /I5TABYa|bTM#J`| s? L(0W@j5z?1@4!3 f)T ËZZ(A:9 InrBPTK @ ܂P2@o*:HZBh z44fPR  EPkyTƇPDFzBW@o(E*Ԋ ZAZUG&U&4LeGʑJHHz eP PGw@CwFgi TI?.*&*t @B݌QN xGh`% 4 RW0"M :\ gXii$FϳЉ4SpiuAGF_]_ Z?uOD/ S{D3"r9zu:.?^N?=><_?ǧ[^~o >hb|B'C;Ͼj"-zw: ^s|}z|ޡpտ2'MCm{wT^Ҹ,6.Ӹy+{d Ŋ'+ "[a2PPPPPdCɆ٪>ǧ.O&(ݫ,L*%2V4jfD oϏouQJ)@QI+T\c1bǒ+իl|8ѩ81a#ajB5֞9dH;w ZM=6J&hel*#IǭĎ=sfw)UB:H`8HJ׻r$)ut*4rHba!BuGFڳqNu T#5@4$01Ls)o!ä)$š7utfΖKq,88T|ûl9oL?<|+)[M3do XK1biX#ƈ%CbŒ!dHLJ5j(PTCR J5j(P4Ci J3f(PtC J7n(PtC2 e0a(P C2 e}$/eyk5yϲʍc=˚RONYSVRT@Ə 95 |u;(\)EQ:@MƸ[HyGUSaNU6UiesXǶs%66eԴVSnI":P$If,/F !{܇0!2>QlvΫKSS!\GGdB&碷TQ…tZlnGP ׃:TnCYo^O$elidUZEE{o_*)utf szK^ r*\G+dL$\GFik:TayKM/qL.l/pʃ, Rccxm)7} )U&$QBG,,U7lSSj.!>m m8 y2sÅm ',e3&q%z&A&XrK.ҩ5+݂u2W3b95.5"@ B)[ZF9."Ќu$|cAq \H Lt qեu}Dmi(qtX5K,K5nSB]cϭCm&cѭ NW@QFv_:vrFqP`Z4zIasj\ȷkDس>*UG8Jsj\ȷe8Úڻtܠ]asj\ȷ#o޻ܸ޼;LsN v u(:R=HSN68ϋpZ0F< tFշ~-X.54V3f{sxfW?[>g/D76ofܑ=Ir$e{cx?.x;+rk7ܜ@N ' rGܤ@R )ȍ Nܬ@V + rgܴ@m3:ȍ rwܼ@^ /o.Ws @b 1ȍ Nr+6f8fv3nf`73 f͈xnf`73-{ܲ-{ܲ-o^/bsLGh*QN:]aEr"ٖGvB O9ꔮd # endstream endobj 336 0 obj << /Length 1329 /Filter /FlateDecode >> stream x\Ko6W =h T[I#k;ĐzxSŠ8372j 34Su6_⷟`nd*+_}(Dj fA??_8>I v|[L`hԜgjĮIJؔd[PNS7w3o;,/f[&@A(}Y(6Kf a`ѧ0R RJXr~'uDiE{"l-|7P5V_i˩}[<1~5RLR|W-T1ԊiOBC5Ր鍧hWCʈ^ED )c^%$^txy|NJVD !2B I8:zzĀ~R3(ׄgÖ=1u^օۇ_/8mI"VjI lR5(Qxzc:о}X-VK$\P"N0xr<ͦv};;"$Iݡt3 u|S4Le:@rt1+ &U8 eeǃZ$K[]Tcj&^ӿA7ÿLW{D>7`*FN-70EUYW^=M R(] Mv .͘lt*C<.aJjF)sZ#QQ-gUSׅ"jq]/!0A}IM0ˇPx'%P&3_JFҏ}+&Ir=gbN?7|b(U3%F̑Mq\XL?]Dk`U@\ăgx9l2NA80ؐuK8[cB 3K|D.g"x(Ia &ʗ=HA endstream endobj 230 0 obj << /Type /ObjStm /N 100 /First 900 /Length 2062 /Filter /FlateDecode >> stream xڵM]W2a#M "B`bfhο[}&iz>O1U2Px֕(I|h Fk'y Vt Ob"_Az1~ hY+ꎈKC&TS b2I5efLj%6^Z3(Sǻ#q}0"k._ FV~0$MY48Fm螌4Fl>O=Tՠ1OBy̞si$Yϫ d2Dtx5/dHdLtŚ,nHTIgE BKye@AhBMiٗZ4_P3j9 %4WX;iu:#h'z7gJY MFUʨ8_Ӌt~C>}K?W_>1FQTxdxEJAρpMf ͘w0osMEXnDJAlDpoN.r&] ;˨bVT˖6a鄙vV%d܌~b>^\܌~T䣏h ⓗZ0P2fL;ZcG0*>1Kg=-V[.bXnDوi>k\܌~WaFoJE=[ s3&k n8l!a鈉vd"̛Of1`B_4N++Hf ͘w0)6G(f+1<7c[a911s/0 يo_3~|#/$zR:%K8joD5DWv %$$$$$$$$$4444444444fЛ7Co z3f[Bo z+V[BBBBBBBBBB.z9apD(j3aqqqqqqqqqqЋzڣ=ioMk.zop7p5fMrǢDg[] }70TLюSh\°܄yv`˗"o\~bxe1Lۮuf{+< endstream endobj 444 0 obj << /Length 1370 /Filter /FlateDecode >> stream xKoFz&xtջk#sHaBMF_Oet#-D7g s.2N1j;c?xb8"^,m>Ȼk#[978\qO c*ȃNy˽Y W vozi6'E@$]<,XäʋsV6YS"zƭ8npփr Н}ΓZ/uHRۋ%)N";e:WE-\)gqv?TN-̊KpQ:x;xƓm~b 2bhIR}l.m5 ؁.jfZfW/ӳ]ϰ}&jlMZ3Mgt##~r!rrC%֘bh*FuZ|3ķxj`JpjهIomS0@TS^Ṽ I7L*3S1[_7KgM => stream xڽO)x/`\@t# ðV󪺆F`S4bϰ^H6YRID4SL$'KRRk"i9QT{DfW3QuIԗfDSH*%ZZ| 4Ti@Y%Ԭ*k6?%d|f]8GU'D+dOLY l%ꉻÆCc&`x VBՂ⨘ƤYNT_Ӭ2RZ(Ċ,1iUR*(uk8RY-pk t.mIXK4ɸJ)J ץY,Ĩ!Y=\FE{Di47TPeBmى815tY=ˉ$+-d4dUJ2xIdh'Ye]zZ\GZϨУP8Xii[0#k)+,'fȢ]h;3#硇}QC0 KA5WNvgN7%<_ѾOo~<wjyw:|xLo[\`)ܴye\1&={ίooyK_>٠][Mǃ@HY6,Л3zR,{cf,=b̄nFY4@+!leZyJJi fK0{cfzgL猱,=1o3&PfL})>=1o3U;ҟ\7btOc یud f:s^21mFLbZ2BXF4@XJ.U~ɱG ftOc 26݂&hP«m@ S%2mhBKzr{bfj-oC2`F4@0a` +ܼ21mFYe0,m"Fh If`Qڪ䱂Q#65ҔB>a{cߕ1`c]MKͼz(6DH1\[0{*cfQ*F*ρhi~D+C c}8=1o3+Q0Y`;~~yFi~c"eD!3"9etOc cQgL}N%sEtKC-}:}23=mJh 1n7}9F7K-FtOC یP:rڸ{Dy"W_񦶆8`21mƊT_#0F&F,{cfm=M$Hl7B<,0JHۊQъXPī1]#jG\מbS#6lL0cMVVAXF4@͈є ؤ`Vn+~#F4@͈۶`;JWxB="jcu31mFC70>*Vub6#nێVt ?s3D48+v-c};ܸř]wN8cPzpџ?.?_ԡ)/?,yVM[ZtݑVOHx~~{{:<^wz 7\opzMכ7]otzM[\orz-[Vi=mvOSU׫W]^u=7Zuz6k=Gz@]PUڡA-qvP$$ݦЁ0XB48Mᅀ]s -螆@_   XF4@;iͬ;濰 M|M׺/nQ< endstream endobj 554 0 obj << /Length 1396 /Filter /FlateDecode >> stream xMo6:s!=[ܶ{pl_l_ߑFD  f2dޙ # N_p0R2l1\ò8 ~J<^7 +z9Dq@!xfQ|~XM>|i&ʁg PhOϴ gL:V%5 ,2',=;QӋ~}.zBhwȤ,b*b_@EF^H?{B pCPcBf2 Ŕ1)hG(ɔ gQ`m2Q8 =jO*0Q =lƇPnڕv$,e i]ҧ =$۬RLJì s)xpYř.FLuKeUmVUE  :g$Q!Gv併Fݺ 3MzN0 ƹ E}E$bK_PE݂Yd!mFXaIJW.S//#dj .]l=*gÝ/ 1AG\-5*SuLU/T#2:IW LjԼ:F]> stream xڵ]\We|] v|〰tBcbvjο[=5G So?uδ^Z> l(g]VPT-\?PGIF |EVBԼj~BPeTh2t -*)v4lݛ(,:ƒ\g6SQ5r?yphb$ u9_[: Yv΢*)*~Ң$5UV~,:+xy}C:S 1u5)]zGohF6.+}5xȫV$޺V+cURFa 1~;>cWY(=4QwU 13Ze*ĘJCؔyR4~;mxIY&{*۫^-s`.*Hu2'&kqR> ?yBP0yu4J!J fdWL6sXO~E|,m@'..a *"Z^+ N^+cKM󮜿x:|_q:cawwOhwmf |S^(7ۇr~Y$U~$Z'a^1<by ^,7aݕSmŀ?Wf6b/v}[2bxnDqO/&U~sވ1<7cعlܥ̭r\܌~#|u?Dovz2cxnDG<81<7cHR÷ު"ܪue ͘wee0!\*±/{0^=7c8@sti՞hG"s#CAգoTy\܈~#vnqoQv7}]j.e#GR({#J2FYYYYYYYYYYЛ7Co z3fЛBo z+V[Bo]zkQRDQ(G2((((((((((888888b.w=== = = = = = = = =gc~Kzzzzz{wこxHzRw>gwY ?F?+ڭrlBlch}\-7a߁ٱKeϞ2fL;9]ߤa)\5n1`QJe<xβ|ZЋL/'ogy( endstream endobj 664 0 obj << /Length 1421 /Filter /FlateDecode >> stream x\nF+ dM-3ɴT;#!c #}{/dpQ")T,c_ ?\.ZW^^<48pƊw{}1f_n ܳgSL(J~S8 ЬN Vsf"˛ōmIvw ,py?p#?|27awB0EɂZH S%Yo|0/s.fi^y)(WSv. ?f+КMG,"IؔY]7ۦ4;'U{ $V-@w?yhJ,#@ĉ)b%Ҳ YRj)` TQHUZd@bBN{/&c\r1͑ϳ((Fcv: !`'tiX $Rt DTuiA*14n*\&\[4`&44AOt,O`~P: R2u۹Ӽ[=RőOkLQ@^I&_Y$B΂m[2B:G[ k» rqoMn6LHF9 mg'HG,{]sH\[FM~tqWn"-Q %:ɭ(1{G&^Y\WTyF I2Ͷnɭ` B<䏘#]](9U]nMKJPSUw@ ]u'IAV9~llK4j'Mx8Y+dBִOE] ^F/6Fu GU5Pбsq ֣RڊuDsfiBAksn&ZD8pDNH .7'O@)EXJ+;fإq) :.yyʙ??&aK*[}=(3Df b̺1s sy5MkԘch?!U=7ꇕ`l<N"rd.c"{݁bl6> stream xڵA$+t^TEHaabð3ƳͲx6==~J0ۍ]LeOR2,t[J0OTw\~)G/6}pްB穏 5Pd?uB>P'URhKJ -YcBgdvsiuVaY8xڠ1tURxvx)i0gAݩ 6gQ*D0 m\dYh6شUZ:)B^. -U3]Ih6{q0@@:}oW^yR1t$`LŚSGN.6flԛ? mμ- j +?\2,O7l7N!2XU #P&! S짃vv*)[i@ :2B(e#Laj8`hEL"&x ̏pQ ͚7N:(QADޝD|^AНꣃGի?qW?4tS@5,GZULqwիr~WxxPί}SeՆ1wZ~:V*yOLɌFjQ |"R=Ǎs3&`ɒ쓇"Hrs3&>qc۞jd܌~#(#\܌~#IZsC)1<7cߕP]Hgbi~ysކя .;1da鈉v᠊ 0ȌoWTFl{C恮Q&3fL;Vz`GeQGFJ~Nuq&H ePKƣKu5EKbҊ5Y._xnD+,Ԙ%_s|6W͘w0U}y2'51,1@4C7+F2fL#ZuYD1w?%*Cuue ͘w0v{1 H_ud܌~G2|})ōҍr#&$ƾ1Yj_'7b ͘w0bF1.*=1,7bݕ²ۗRcIT«&W [7 r#°܄~M~ǣL1`쳶+)u!ɈaD/׶IMhw2%PU]1<7cI{ɟ'#^,7aݕn~WG"^=7ci_xbk\tLq n.}??1<7cRWp)&cxnD),_OJe ͘w0b5cUe&3fL;ɪ{\y1VVB&?|J?!F̳.,> stream xMoFMVs4 p( U7R ޺H}(^P(N & sD &ٯ5Y_ΓhLϱf8yWJ2|v!~#FHÏC!@ { W($?Yr\.rnN@`z D\MC\t/E{X)JzA!k$X+mL?  U6@d֧mp9Q&g" kKvY>ƫ|92%c-FʴՃL1y].a@(wƝ!7*`\dHMtCŰCZߖZ5Cm F Isxa p~l&|Na RK-p[^XQ^,t+-npb? iE< {YYb7pʷE)&զy. Ҋ_ X1ݒvT9Qs^a>M7h 4ME\GR$WujBhz0$,.Jaא_ a!U"38\r+yU)l_"q oy=|= @* cE5uʴZ`)g<۽ܷ778ڃnq]8)s ~g64 =Z 2)\"ِѽxmխrM2/7Q)-6s$puʄ}M~iq6xͰ}QgiqSO'ӰFsAs#HnԪXtFiGDLN:}/nqn{6DewR/Q$]p'ksƣa奕+8d'{cwv?XэGl$˰L,LodT}SyQC\= ;6k,kw*j4ҘLv~XL;زW_Wψ &R6R_ҰP~(ꍶS> stream xڽ_\S1yQJ* nY!m’e&ǰ9V,Kr0ܾW觿{:ZDHkbH%U[֐jjjH-)i'H(Q6Bu(r[5QCȯDV 3,Qg'c$.2NZE3N\BakJ~%6[WVGO?7;=AUGݞf~O }Bl dyA]ϧ}wO?\҇Z>_>?RG.oKQmgM^tt~~o7ߜ*{Ӗ Nݬdb ɸo16>Y<}\}qbXNč~ 0j&ri=qbd>?úUt{s2n[T3aY˜d.e ɸo1}] ˈ {A97S79D1X$dHf!&nC=K/bxNč~37(DBQf#fna82-`m4͌97-F_1Zƌf,Xw=T7ɸo1bn~ `W7ˉF8ؿ_<_xp_:> 莐.cV;mj8:ޯv{>(6`%}_(ɸ?̛LJ)\}L>=~~wAa7sLo?r:j/O` S|y??^~w?_Q< R~zB$jW?e;3)]ΑH%Fj^z#F7BozgDJr5REZ=УУУУУУУУУУЋ`zzz5jЫWC^ z5jIIIIIIIIIIkB^ z-ZEϢ^ 6гг}'G3~[gOQ"lFWJKF>;r[͐TR^#hQ^MzMp#6_3*A/_m0oqb$}ɜn辥x!gS<ɂwE-A$h!Fy:a4D[ rh3Jgú̵\ t " endstream endobj 906 0 obj << /Length 1542 /Filter /FlateDecode >> stream xKsH:=bjY0@qPla-3X =#"NPd"@xd`Nh4?WI~ \^7jW>,YQeEh؟)zk~ vu3.u(w) US:PcFIJ@哳V½:xWcF1 oV$@3WSs߯EP  (;80=0j8{n -U6ӌt| ȬHTr(8nҼ9I(LԕM}ɋ>ޗeu e;JuMrdt8LR5fv5]8ޛ}[, endstream endobj 787 0 obj << /Type /ObjStm /N 100 /First 906 /Length 2123 /Filter /FlateDecode >> stream xڵO)xL.d;rI!" nZη+Nu f #jLyd5F*%z)ցIԷs^Jj÷k8|{OT82 $U5u*A( ‡H$Ѩ84R-ziҺTy`NbR)^kWNu#Bjp=%'Ƨ`,BsIW.5hΒ ߥIHCO"\OW *cIz5J2tqJޙx.3%]=632w ռ3R+~:Nh䝩Zſ9&÷tSÀ:[ q|8= o.ɷGw: l7.:(>A( F8]gPSğ1 LZMOk$@2#oR}Ǩ@(!Zշ!J e x 1IT Q1@D{p ?[7a3XDCϧ|ϧwO?\һ?||N%j uX&kamz"ߤ>AL|s)l⡷ogyf $n.f ɸog-3~sRo{փs2.ЏpLZKqۓb ɸocG<|:[)0nq8$I3$&Yn'=`!\n[r.1qkL1,'Bxjh*l1d\3Ed<1d\3"[c*!uf7zlQԦSJmi]-'B1]{]G nVA<'BvCLdbİtĕ~;"&lEŅ3pdL8n{oqΨHhPVe%Q e ɸog_<A9(lLt>2vqcd\3ECx2Vb;<'BSts)Bc6:.|i#[JY:B41ZA9ӻ=u:c vD-^U{|<| vF͐ъPe ɸogW 58 u *86ɸog,HpԦU[42n͵9md:25m7+ wJ<4BA flCAaK wqҊ*J:)tR4)QhM)$|ǴDrN) ֬\S\iSV%,)DrNI ]) 뎩DrNY] z^2xA9!mV3בc fptnZx=\bxckoG2W<|1+4ǾB1a~aO\p5t~{9o~Njo릿^~w^Y1[^x¹I$N ~-$J:[_rm-֮m-R5Z6jE_kz58888888888$$$$$$$$$$4444444444ZkB^ z-ZC/{xﱍwCz#F7Bozzzzzzzzv{SNC!L2~QՏs6OtV(=jң81<'BQ{i^++2L'JÝR#X$dT?wL 0+ wJdB[DY2˭蠗\iS"Cyѣe lxT-d\3]9Őa:)W %ckZ9dMRjkVɇC"K67V=ӃJtR4)1>,_> stream xՔJ19&fflQ M<,UעV) M6ݲĖ,da|CPZTBwy+e^Aq] t@Q JCiD?tL_,= 4QE9odbN*Fd?kNKGDW[;ܫA 욶jDeŖ(8Dpq / i-/yLM{Jfb>mU-;#8Ol .b[`Qd m M =!ZRfxio:nJ0ӛs l0 endstream endobj 918 0 obj << /Type /ObjStm /N 100 /First 889 /Length 1846 /Filter /FlateDecode >> stream xڵM6+꘽YI  $!LJG vmtɿ[lII%R"z%N <9H3hB1[R*Vʊt#W!7cEj̸IġXN&j98{˩E,GM&OH$> n jND*JH=J%r2ISHJRM=) tTX75H!zNr)ZN(EDxb`f-B1洩pYL%j/'-'SVPrcN) +SJƣ9l*r )kMڪf\a*9chc*K5P6F݅cGsYN1pDIjTJ+T*׍(zZy4M-  A պZ 7Zn] 5jde7Ms<լSt`C ԌT$RF3=A,h8et5L"f!Eͳg??f?7ۛwnv8ngzCpIbq> ={F~x}s9z_&!$ g%8j0GtEeOA R]I ZVEeO{_Ccje$ZWEeO2WbѨ]L i=fp$1A7'O_ rm=g>'݌Dy%QQ)1GnGIڣS)GFSp STMY {͌"]$b%ɺ$V`)6l.ɥ;D0{W:ۼE/Ѹ$({ Δ3J"qhIZr5ʮ3evGg]k 9j6Ȟ3dJ. l Y"͕f)8CFqhIl[!\]i>6ʞ3%B,]ҙrm=gJaYF0;AJQ$({ bK4^0`x c]\) 4dG%bCX"Z=e4̈9zmlCm|" .9S;nY?wo\h3 V{;_k:A;2_<^ev}X91V3Sʊasp,lD˜sS_Q1Rԗ 6\HNt"$j}LE0@ wE ڈ Fl oW _0x}x;웅_>GWoyw<b9O<`o> `0'OI~t '{O?|RoJ?ߝn%sbwӥ' ?|G祂ŧne~9Qqֵ߻‹Oy86L䵗GU/ endstream endobj 989 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1059 /Filter /FlateDecode >> stream xڝVMoF W̱$ΧM[Ph=D[J%hrlo"Q9$g2FU$e=^FWZGҶT( ЊȲa lDeQ*V4D(k<^d+*#&Sae"\`(Wr^2y@Qy/PA*s sSst1QEd[h,Vq>֨([b)J{$*EG< ƜrőXL * kǨ\cYÃ$N30o, MsZ&T@ [pȀr l`YYç~k_pj;/[@Q3V@!\ic Լd kN\ʥx[,#0TVrb`H(đ_t47\cLl,='éi 1@&[(Y#bXn/7qro9nFȕ^|snD = |h~ta!F9#J5>]=':˜ͭ͝ڤ]_MG|4}d{x-8jI̺ƊwiKy1ΤNQ~?ݖLbyLf4ug|g)gb~U¤ԧ1M"ΠëtsӘ& ynL' cΏeM^v6'uOǴTmvs47ލ0;J3]?}:OC:Sz8.z=lXu˄r /g# i2RGj:klvք]1aˈ'&"кRf[*._m׎_~9kNi.7qa}]5>34EZ&Dqf;,w7~!3؊ƻkbZQΦ0+]_7][ь\T٦9ZV*iI[hmV〭hωE1,{K[f#r endstream endobj 1181 0 obj << /Type /ObjStm /N 100 /First 960 /Length 965 /Filter /FlateDecode >> stream xڍVMsF W챽\w&gzL.7FdN)ҕ$ʯD5\"c,cBJ*S^Υ҅@`DxˆQ+LA O0`A°тXA2MHm-<^YWDrr]d E3ST>0 M]aT0bxAl UVc,NEWT1HsB.xa rc$)"OģU-dK{W&σ R2j\ <5ȩmӁjkf*f.&3ϛ!eG,Ad4kv9 ^g8֣)ss k>a~iFӷzQpsܮZs'wv>67[Ypnp}MH4RmF;ub/ˌzU̾9N=nEZ.!P*폾;9zOx{^/u.muq'|OMu尝/L $ܜ6GutN^jhsV7cZgZY]Y endstream endobj 1382 0 obj << /Type /ObjStm /N 100 /First 953 /Length 967 /Filter /FlateDecode >> stream xڍUMF ౽슜OAAC7@'YZrQח,{%kȜ7&"&:0Q~=8- (AVQ^E @%@Q[ PH$`,IPX Ł[H `1rXB!pf""9qV\EJ2< ,x#EMൺETARzNB Q5U zbZhdGC,e(V`(I$=xi K I]qsA=z@;*%8"YN:ul*:p:$p(7F99߱h]/t-d 2M'w&x" t('54K%.?J+uer ( i1tBP{M(;,\:o"t\ 'sD^d58='n2r1L]a%VOĞ_w~>w~ڟPwcSKK?+p^yӮkB=Оt/Ѽ:/e0Zo.ϩ:.U#vI#Qڏw1~W5Wǩj;̽nЊbC}H^.:k\sj}:^YjVm{hb5T_n%:TW<]1y Wt<^Ƚ-GyBqPqM)>#@{ leohpP k>s^>K@ka togP}~X"Z܀;4: ̡mYYjNKpa_֯i)Wn@ou[O}df=MPFg:| .Hke8V\tH77\4MZg!=ͦtr~#٩/ endstream endobj 1583 0 obj << /Type /ObjStm /N 100 /First 950 /Length 967 /Filter /FlateDecode >> stream xڅTMFW1{١/il\\fkجxO =S~^ae;}Ov<꬏MEY3d/M'fU?K5=TCѶļCW7 my8GZKjފ@}lcdrF[ T3Ɉ$ J*_"W7hZWu}^F,YLͿIQ74w2)vWK~]ѴG-ܹ`h~=eO9L8AOg(Wdsfi{ CYhB?ݙARv#r<f\~9RCOS3KhE's TM-;,뻅JԾkNLx&tio5߯py⭬oí`BR-ϡ[Zz7=C endstream endobj 1784 0 obj << /Type /ObjStm /N 100 /First 956 /Length 1019 /Filter /FlateDecode >> stream xڍVn6+x^qHJ$XE[]q,qLtbߛΣ$U)F^9k !t%S@sL e_UtŁQd UT (B*^V&e) Ge-gJY(=2UJkl+RƩZZHTsQMZxcI8^yia /9R>T <.0}Ը 5W nIA- ­`0#`7I${{Tܺ!+A@6 XqI+YQ=[j=χ=u Oҙ#Æ7+D૮Z)k{ VA0h OwHNc2K ٽd$“v9 Z, ]F2Ngauq`9&- `6imn*"{D3q"qdxNp k9{dˀ9Z0pQ`dTxNuM_uY4w]I)ӧXRM/}KXY) ,kPA& t/p8>ƧvNo`Iy:bpLJ]-@uOmC{ e;pNrm,wĊK3?A/hQ]s*+v^)yL―4]>=ROt#XPOKXQ3ߧ\ʊϩÔ6opcZh,n/pY!,D_1q|\VfY?vin.{t3Tw1.;@%ܮe|J]߷cTP}%~#ql_4r\(U]gxA@ oR}J8u ~zٿ|u:.yqץ};x{GsӦOq\?ic/?]򻙆iy^W< endstream endobj 1985 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1084 /Filter /FlateDecode >> stream xڍVMs6W^b.L&iLtƝ陦`cԐPR$[NvCU{e5?kUUx"U/98=B챤j1=lKEEM.'<AP,HktTN>4LCd)а̐g 29hWQ&5tB{hTI i5<4R9k%_/֗›=W[dAAИ-YeS+X k!^!UMܖf5Žu aZ"ؤ44%!V4imm>' Qi%Aض.37]P*EU|0m҂Q޻4s8ۧ.s qi_'j&\냦 e X)RU)ع!|xjet;7:AȤ׈sc(4,>aƦ.!Voߪ[ua{TW7xwͺ&0UޭW0tqKGPdq sIw<8~47BgLzχ_m e_o=lb+q3(:O;uOȱߵcp1c-K\GHawlӘOg56.2$Pbycg3=Cxtqs\O8m~6EXpWt$M7?,ϋ ڴd븜96~%nS\ 9v75y˳$@̞fX/0Ӹq8=T?HqY~K'{F%>^>\>6ߺ!?]?}]}Ůy3&r HqZ* qI &.p$/]} jȰ{̧/-)؍C&̄I_fx ?^FH|}K\)]ԜW0: ky(N7v]*^ endstream endobj 2186 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1105 /Filter /FlateDecode >> stream xڍVn8+x8h4N ̂ &ecm!褓*zi/]{Xę%K$KR/I@ՄD1Yp)`Pnq@3JhA Ȕ4hR \TACTeZAhYН(hE$&e MLe10.aU%+) -D"Y=@waR`#a:L WXS1,68BeԐLzjT GVIPJPCq5PC5]\xdZUPôI;r%ryC~M=,&3俥{ïNjлv b~|kO|JC}M_!OM[ e;t!~{m\uyןK3ՆSJgsBJ pPQy5V!.uħ]{g9*èDy\=uh:7x#܍ !RcOC(]Mv3qTiu~[oČQʊk>|;#9fI /{^` T^B3umȊlƫ޻|/;pQ)<6/RC"#]|?*S?[?gsMz$?/oݚy8f|#~{[GнmT ,\ xk9` $b endstream endobj 2388 0 obj << /Length 1393 /Filter /FlateDecode >> stream xڍWݏ4b D|q|Q8T(TJ< ʃ7uUt?쥴:2όi/ߤ7u)`6MwzxۋL.$:f{yrm"}yl(ϲ<%Ye^PE%r>-ɋ,8 |S#kYŪM:XؚNúm' vXH)_*:Y~v#v`в7 眎0ZeIn:7+@䣱Kt0N0^IlJDjך S0sR޳wqG#K22¬^8 (T"M H>p Jf=0v\JVfNʙ]IéԪ l ysCΣatS% !dޣKo;,(/ ?i'W*$L kV 'V,8Qk0D-37)ӣ HY,l skΊT.+ꃺ_ 50*|OgJDVC"Ѩ[>N>U2s_H]m݌sV|>:ǵ$Ҫ5X`hhȵEҔ?rX{!sO4uFuhjxi>X*],s?&C06S{?-y[!|G+.&>Zh? *n > FC-7Q tg$Ӯ3kӂFb}QˋpQr$͡e2;KP|woՑ )dii3Q Ö.6 lSdU }r|Uk6Ά㰸{=q{:ߝ J<B@fij{m&UcF'-v:#x5 y34zM.EխθUŹVh7၅Ba޿/46EBVP*bQ2XVRJ8Yex!,\H6{X?&Pq?M;O]ԛ4OW_zeć~}{{v 6%\*Nl+QQPS endstream endobj 2397 0 obj << /Length 852 /Filter /FlateDecode >> stream xڕUQ8~ϯT 6>U]oBήc!-])PϡXߠs赧vaG-%o7)Օ\oN֎4=t9z8zP$vs O}7&}̨"$"W&HqAs.q Z Gwe$DLdɄ>&BIl34;KƅĉS 20Ğ 6;?M.,pFʛ݋>=)41=6!xpງ0,W.N!d]d]x!7A-ތЩܵl!6&+ DFR?ԶD'/7:Oms[JFXDݾP~}ûjf^:p\wCo+@7R^e7'ֽ Yu\պH͙rմyo ^x6j/THc endstream endobj 2401 0 obj << /Length 2845 /Filter /FlateDecode >> stream xڭZYs8~ϯ%t!L3Tq-T(ҦJVL 6}| E"fE4˴ Q͌Pn 烕\$(,B.gJ$=쿁>g=$W>2g* cJs*mn$˓Bڞuvlk]UMB=gaT'9Uk5'qVK+neW:䥔<ī#Y&qg_XnLoW7my['˲+C>+BR$5󤀰q/3_VpY<+Q6W$fU))<Y&x-!0 U^4؜Y[wՖ)"7P%ˍ].ܞS~aZݪZDN@.hֻMͯnqqL֓Lߔ=bdr &οU8hܲe+V7GX_C[_if7\f= I1E2rSIdT&+f5^_I0 sX< 'm:|)ro <7Y5JZL zRc m^+6'*, T2uU/> pixх BEB Cjꟶe$JT( Ր#em;^fS=6K&C,;Ub9[Vcwڬ`m! Cŧ&&mQnn@Lhj@2RÀZsXnUkä%hȲz>WQVRJ7 o \vbܖt̕ ' è{+u ?evW OZO7H60:z4jݖ,Fhä 8-<8.Т-Df^t9ޝFr;`XrոʚEr<[ʎ@0T7+J<%O%*Cb^\HPQ-Zl ;o){;{3Q F$Eflp*|/=^Q(jA)%P-i5J w_D(Bf5$p, iNǂ0[D\]F JX;RJoqYa(a!ҟĺvѲ)A8hz )T^pyp@bc9eN3=z{^ U[:V3c8jI(a%%q5`>^94jy6 `DfL/k_chVºZVl-u$l+LKaG<,ZFU=]ǥuIc*4R(FT|\GF_*~%%[վ'bU7vÊ^/XdCj6d3 Yhz<47A +[9U*I%3` m@ؔL0DN+e+&!H ?KTJꊲ&lnݖW_I(ec3ǝQ m{m{_k#?U;S۹yn`Q (6U(35*P6Iѫۤ׺JD);5IP3pS{@4)(D'%Z{ ؤɒѱC.'NM='l-ۖ͐eO[0ݹ$4.3E -XAUC+qiωGV|7y q(krNJl9tT7SJHp ^fdpVY5 ?F8 MAU6)}'K8KFq B 6M%L:w[ZȏA^Ï24"^@Q>)^mpcšN6+4+ˍu#L6S5\]X;](ƺ[PߡEnV?13|[U5xLǃfcY:"D~7p/]X }m4LojХS/E2{+mqzD#:%F9]AO/\ 8{Ѐzw)XW) S%J>ܳTf멕VqJ#\Dӹ_8Bg\n-&FYmִKiuQkhqW~vqy\}8]s?}}>>|8`y\%?AU}kɛ_<~Y=uޚ=9bq05}c0L~SFCc8BC"4I\oJٶW$iR'[8L;G[7ۗOl_ >B?_kݸfzaoﮪ endstream endobj 2406 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڍVn6}W,rHEi᠉Q{_@V#[%k !5> stream xڵYmoܸ_"^V_$]iܡIМ5j=8q}g8CYZ+97@aH> Wb<ޥJ\g$5D=L/fɟ7f'cǹ]vFZa׻*w#s'/L[ue{WS7oLnԙH ȭdnzYf趔R(fRx%RifE]S_|eΦ!{^Gםo\(dD+!6"SE2ѭo#Ok˻CpnKh8rAwo121x5&@BwM ?i45ƜXag|Qj$HtT-Ip')lOY2iI&llk^jլs(s42aJz~̙53{  )7 /Κf,{nuS~諏]_*+Ys%fI#z*!q:ǎ:QCt80:kmt~wtd\4ŜFdrx~d9=]v`–\hC w,E[,uAsc'_1(hj˪obAQKS$` m9zE{xu#um"OfؖtlQb-=4Y'* =C^I6궨IB|&*[2|v'!;cL"z )H<ʺpi'U _ؠ'u1ϙҐP(Dwvm`^4o qY橹YFAR'xv|݉R 8&c ϙaܧf͂Ų{a> Q p\B$1"UrNN =T륂ZK;k gN†7uY3氘g Ft,'^}IKd#O-V n\B ohÉJhďʐuC`FC)O*LId*^rpICwMRF[G: =5쑆nkG]#y>l [ ߠc7(sy:{A֔N)mB(4T4-P*jnS̊<liROX`fت=LHիs`9w9a}pœJ8&Xe]ӗs(LxIdGP̪0;vcŚ`h<}0u {D%7L0c,%9vc]vp5gcO`>yEo/7草ˣVWT_f6)|g*Rb$(/ cpc^Jޑ3ݛtSpځV﷯\҉=tՙ|qbco< v𦳅dC[ᶝ*< c|I0<[zIPfIcG 98ibtlOJ3"Y@q%b g}MTX}| )"%KkmD$aAY5%W mTl6gŵu _{@Mxj*d7Ȑȗ_1D?$r}9 $e` yt*rs }l?VGwigD"Q,b]J>~> Pczƨu(ח]R7Wٯzyo~z/?|͋'JMDPHPXeG*Ѐښsc>> stream xYm(PT _rA?l.m= MVْ^~}g8%y]m-N"Ù癡Ċ?J*R%:^eÊ_Fql{_Y v?j[}>VR*ЯMyXŎD:ʞ+[b-I,ɵAa_} Ǒ4Jht(aP4L7&veakTz`0!Ʒw̳lkB1|FQPV IeEc⁺w`1?I^q*g:{IV3€{lkPڂzİA#ń U%ZCoHPI8,L&ɯyJQ`qwNͯb%{Sɨ{MM$#&{E''JSU19ںZ$Z>Њ#8gfyCٕt5.EZw04H<'PBu!A ?[2!A`޼ӂdtnH1BC溏m%U(>ݧA,h!uSYU+5@Ӭ,%2=͑lP%sJyDR.3ܗkT_"3(3g Iș}vti;.QKAC%IPzjАDqU2  rq&ҳS?ڬ ꀟR/8mx~-TA++"hCab`͎iEEc%)e :2VJ!Xte -ٿudŬ4vҬ3Bψ\o*ebLDS A}".\r'O#>feQ۩pHw0"."-[b]5{jQ1\.x &uH j5}.rz0y,` Q8H]B6כWQlfs68mD:OܯkM67)6Wm~:7+0p NykYG"'҃<\Ǽfyf1Sf64ŧH훃u wIQe} iAA/4- u\JSe¬9 KP Vn?$Y_UQby*%wEI2Uo65^fd4?1sLU^oLho LbHߤ{@6(?M,Ë嫍m =0UƏ#ʄ3TttlD($KeFKA'YR +`wpg@\2.5*9'㱄B̪Ҽ.|'*`W3ٿ+7euJ{2.',+O^O^7ڦ4mܷ jRw)(=\:z Enab2W7.ZS>1/T+`B(դp9a\^aKfDsKxR$tH8P8 >`cQ뾾o~ޥy ] K.GԧG%͠v_RF@+wtu'<_@>9.Q1oGVf[u#I endstream endobj 2418 0 obj << /Length 2414 /Filter /FlateDecode >> stream xڵYێ }W4%j]f '"62Y|b{nwZk;uAL;sVAo;( n~|IH*O4OFjy!!͍PBnwQk1vk_M:jiLD5uM᮷U_zo [Z-;i-⡦黶9BwKh&c+Fw3.77oI !k8ڎ>QFKTrÃ@qP0B%lV4osa*R5V]٪L '*`xҼ>;WIj(Y'ojVf; ُ᭬e׷VNy)zDo˺h<:&xؗ9dχ~̺}xNYxCשO/jP|Q ZL[Br /Ƞ-)JCD%ς$m ' =+04qK ,_c2 !\ eUU܂ȎbYDMIXKqh*xkX.oA4нkx/'ᑵ ?K0H!S\xU)zdCX cP{N ` 쨤`<$s<( rYȹ׉:q2"1-hFB(ܫڎ{2>f>-S'7LE5a36 u\yԬG ZP/{dzLޑz %6x +hW{tk{֡du1"ԋ(j6NL0XOS~bGtnڹhEA$AE a Ƕܱ.Wq LNK̷C后==aɶ, ,ൂ쾖ceUپz/RTyK gX'\v$o&RI%upE[wƂXdӯ C3X:MUkF ˽l,&,ޮW$"_=x9b8"mV^LaǑЖ8t!3+GW*W#\.Q ѕ8>0#1"h؈8.>"}( 톖S2vzZ*_d"&>2- ]S5LJ -,^ۺ!{4,tJ%-zFr ɡ.\[yD(]Pmh#G]V I fVI8;LU_% o&WiGG$E`c(+ g=r*\0yz7eY"9pxb 8u }x2GgQML6xA m4:C՞&~_njuVOU Fٱ+/:73ܵWT{&WU&jh"/gIx:( %u r@T/X,"sS?|З/>=jQ]?vk\N!*M)C%ח6tB[zH*^d>Wt4o0;. cRwB=A8erjP!50-}82oPI<"<;p=!h ܯCIhi=b :z.` B=Wo8嶟o ӗ@R7z~}gTbEeD|9 Ci*Duܶ蛙'k*r Y -8:, l5m ܅zZ7/ρh})U3z58B424lÓ[)/L諾P4?L,g.ԥ{Vo1CTT` endstream endobj 2423 0 obj << /Length 1902 /Filter /FlateDecode >> stream xڥXI6WRDb"hiDl$2K}&Y+Ab0 H{6{Sbɴ8ߔ͛=Q'F w λ7߿OڇžP&Qi|}+ȷ$Ey26* #$qt̯%]FmS η۝Β-ңP<r6;jW:?]ςsQ<%zۙYI|iYZ>\N|Eiaëx13X,ϙur?vҡJ3ƈ@86shd?ʹod;sgAX'[$q2 yEvh-W" I? -0k~ ;yi!&hjFIמǁ];C^Cc-qFUѢti`0jx1ܔjB&1^MWhY!H뚐#ۼw6`V"$]FHT$a^$F3Ýy- X̊ WF*,dbrAive7T]}a2{V PzV '8Y*heD>B ;M+l'$xx0f_B#A7 a ڔp@ ps9XR+FwF hZP|«Kq\Yѵ-Ys0"9dyHN{$3 W8mY#'[ G;SK哯XX'A&)T!_V,Q \;r06@;ǹb>}p"v<_Vٲ6xms+yt*!ZƤXM=Άf|&%q- !ļ{/Is%Zϡ0RƁ.X;J~ȗ =PI} 킀xZFaړN{ɂǛPRPaKu {tm0LedLTC.,F6՗N3cR%HJ[ + ΝSЊ{|ҮK&пdKWmτ+lj n,U8  F$[0t#wiCT\48Y(]/p!Z,':  yx\KB\ox ;ӼtBEdP%TL/VPLXԚr|ҷl;!O)=R θ #wTR0ӖXͬ/<7<\B) wQ< GafLU*:*"+׍V{h:ϵ} a;\& l(m6DmVT(\q xɶGReRYvjj `yFa.<UE}a=Q[-o"CwjM~ T $ Kß#[ wf7 Wևw~@lU&$}a~UO$9FChx0?> stream xڥ]F=K.Qڇ6iUj ;3`×Utavfr?EE""߿=_p t+ \Q~q1 ,b] oYdֿxF|re2JWPq4/W&VJK*(1[,A סT*aƼ4 ]Uew˕RI7ƒip,ݎ]e *^|嘕YG%| 軂jZk#J2mA]^CTIFBI*z&Pa܁LSQ}˕ax?xg$yuC!۵M#:+تU"ѩ^v]C(3([)8:t)RM WNxcI ΂?4~\M% #,zā-+!cr+[m_**+v/䜾Re95Э5 h솠KHL-*FE%+I`/!)bx C:UWﺖbNP". `A(b"tdJos[Ue}? %wxVi>B9 - UvtC `GPH nRsb|;%koC)]5: ,=8[^b EKp[;=aS%W`|9s{8vfKT*Y!z= OX3C!t.g7~tFLL!F#k߆Izrݡwsȼ9l̩RЁ6TA]Qr#;@)-0C)rfu݁_ r:kӜ,'BLsQɘmӣlȯǸ$*X*6M>[4_LM\_+GyR7>I+ xl2` =PJO> stream xڭWYo6~ϯJ@Mc߲Mb,}%:FARI_*rA79CE,("Ky}ratD ,b]pJ .uˣ#D:pARP'XЈYuqKڧ.K%;ܔm#Qݢqy0&r'6Umen]<wNA Su!\V˩~+UA:,]X{}kB4"Sc;ȋKƘ3(_0OTA]YzW BtnaIP;iԥvqR('w -Lu%fӸ8rd.4$1V꤬Ux: p<= a%EGksQ< vĽQ3w9ۈĩgvDC]E5Bce3$iVW!C*qeA$"Q Ȝ$a:H,˦he\JTm}O2@6W;lBJ3mgtYcf7d/.=AbU'4^E] )v90z1KO/\qBrʦjUU/1U$B?͵TD5~Ӑ1{ft$6f` <|gN~{.UN3V-q{[4愅|]#ߴֹS?6fHs#esHN? R(:Zʭycc,dHx. 1ugǟqCݳ%$/O6cS~ u54#MI$<2v7L^s14,NGmYUCg9k.K MqoۭNC;p0YM`z%$<}drJ8> _vYXBIq Tx/TP]kFƲaG;~gy)ҷ?b2 Sw*^u3ns~y8o !Dv)8EgMO-3.b0&iBҐ`ʟH)NrMzeiv݆mo67Z.h\^8jʁAV'YB"3l>FfrDtTzW7f 'J; [8 endstream endobj 2451 0 obj << /Length 1043 /Filter /FlateDecode >> stream xڝWM6zY XK6HV JCrd˖ diqpDhP$A9)DT=՛|]  hBrHJOׇ#d%d͜4#Jaׄ\ʅ_.b(D1dAVJH< \+^K't UiޔFmZ|:)$l[FU:wK g!F):M SiJWj]F,sϪG,z_7ξS":L.wk$%@`ȌAL% $P;-TejX)O._rkcTPi3GKsB%ZJZJ^ 'H")1#VAN1i1wn<{'C>TW ~WWHc]<~M?HqO}PDLaۍCX$!GXR]jV^z!nѳШƂqUCɻJ`mܟYiJ\c1,;&OC䪻4:Al>̖g7? ݅`PYoݽ)4}yBNT#UWTvZ˗##>RdKQ z5/5KpmeZ]Hws (<=TmV5Q2\$ƀ0W3B:8!Kj4Kifi__ˬ勺6[Dn&ߢO1;hu'`l`VAshL|M3}dh70JEY-̉w6ӏjrցXAp֜ks.`42?.r:ʶoHqwj+#_ǾZׁة{HO L{)\O}k2 tL2@;wMI2 n^G BP1- endstream endobj 2469 0 obj << /Length 1114 /Filter /FlateDecode >> stream xڭWMo8W"UlCQui-"wR-9Sp8!N^Nz'; ݁݇Qp;z*_9r+n,ma~N|QkUP W$<?~H7g,_.NC!FWTBl.3E0մ^ߐ5mMU8! [HL NxAU)4VW%.J=e8m=NFгKS/J7䐉=NW/+*k2<@̆\VmZr79xDtn,byf)ci! pTՐK[^ #aI1dh|VV?u̞[ʍҘ(`4 '46~=}ZW1$ x(?lFD$ւ6`2Jߚ[QnyF!x\Ԫ)nFn=sU~+±c~8ֲ<- 1 VA2#SU@fOû l yT D.2caТ56]!hi0aEq`^:M1®;]A +^֦D}ܠq@4.Ä@w'\\.PB[T:EEN꿅(eZV5:\Ӣh8mp<-A؉cň]=]JU;UmXM Cs2â@ؤ66n#:{p t endstream endobj 2489 0 obj << /Length 1073 /Filter /FlateDecode >> stream xڭWmo6_oI%EҒMbV 1hi"9zɚdٲ+ ͻ{?8H)s+lnm`?>}"]˫79I U-WtVaD)E0bwj/>ɍeacDhxeo'Ʌ˗-2, =5 F7]-ZU2'ZxD9Vg)g eqbUl/b+3J/ Cld5qB'Ϫ^ZU𑡵ycVK%/BN0` U]HIQ;&\G,T7̱(L01&i(dvUW7όZ։{|Jk'?:&h+[{{x1a/@`! ^5,Ìsj㩼Gg#-WCPlD8G5rL=WEWU |15~FpǰI?\)37̱, N4|8kQEȁ/Z64{ 3a3k%%E2f3E\Q" '8B蝚>o$ lr1ڵQ#m@@q8`$3#ju*5/KPd!NG ETMOIOɇd0A7orB'):QVITETGkw~{(X^p~0+uRkoÜ\.IiFJӾ0$<(+nӽܵ,'Vg @v~,dbc@J3OEnUZ9ᱚζRDW?7K endstream endobj 2391 0 obj << /Type /ObjStm /N 100 /First 955 /Length 2300 /Filter /FlateDecode >> stream xZY۸~ׯn[d5Tز'Zh-SekHؖAoeIݍ>&|(SPG!H Q["*vNbʲU$ٛJI椬!;vN[V <<$EVYCޙ<g1 ACPx! h U28cpg^t &"f :"QU;O'JBeŁ3I9 `@'˅+0} ' JN)V ؕEqrPx \sĄ>{Aƌ=I΃Iਐ8`h$ 8d _O6=H"bESJ# x#H,$O%Kp(N.L) ˝L'ܭ_YvUf͆]dh^/y^T]ul5#L:z6๚_FZW'-BGi vUZrz{ŨG?f/ZAJM_σl's܍LG;6S%юM)blވבӾ]ͪ=#(Q,3uIߨh)k6@L:JkX4 D#rEYVv I٣?kFB=$kɝRS ^tk/9\63hfA5AG"'u|>?z75`ÅV]+[|ـ-:&3§tIT3nJ˖dj-;鴖{=o0>[Ӝfz\Pj+ xL,lއb_CvAcFEp?!nO: mOyq2GJG^R+'gQ~J'f3HeN8Ia_%)w~z xr)nxqwLkvv=iїM%N&2#hr\?dWɍ&`B=h)mB ׫_=Mԟ]tr.1믩X pLVO՗vG@yzv{aϕH9j[łD-rs_ȬO|}UW6٢f-0y?vםiFi"2LhHI+QxK_+iYX*;d-_:<y)oP^٫_φQۨ彶OF;#|F:/?5HJHQO2 eL*H t'#+x^|Qg0oe,cQ#@ fH>>z#0xdf՝n5\~j8htѲuFK&v0V06H:;w(quINgc^YHsN]w>~j6p j a{\Wh3W\93%@Мl.9`f)35`%zicUJH~Z`C`D>YH,|PX(~UΆ'i> stream xڝn0~ ) RMKoIi^XvhghRdٵe S ə!uL?ȗэhjs `TM]D^L>78y;C% E`.[cV|Q}?5a'F.Mq M:uiOԩ;r endstream endobj 2522 0 obj << /Length 1222 /Filter /FlateDecode >> stream xWMo6W4s/}adm"ݸd,-1 YR%9w)7z)|ęyÙ1 B X$ȶ'a vK0\,ZTB) VcU\;]wY,$aR?4bcBfjELH .4Jɕ{ri|'ܛ$-2owe٪HbKQb42&Sq)ST9qӶDD, _qrd_Px\Vw>`:#L{M:ӞˎF{|_ZLdUQ>ZNU@άI L=B5u{qkfwiM:\Yf/ / tc9Ap-b_IdH Aުx2td&%Frs|oiVEu8Ϫ23jcTg[],c D2_߄A8Mzm (<s=%{#sm0SOEt!yJۃW!C!_mˡOj#dv=/ PUa0 C_"2%V;c.|Ue_qv_XlWC kvyM۴y*/koUXPErfzcIQft7U-,?^gq 9k̾mk+X2ю;?i8l//˻+k73{W? xH7 }yo&’ )Md4(Qb/E}}!5`95'{D4Qޏs{`:iܟ9\t0d2rA2(Lg>ծ؊+h0kRCJb=Psx`DP #FyLT)DJ)b ӗִ&&l8͆`nu_ endstream endobj 2530 0 obj << /Length 2050 /Filter /FlateDecode >> stream xYKoFWm9~{صD dp Ejip_U]ͧz,YCY]]﯊Mn,Qf|Zj󰡇߿n6f;yK7: x׻;w 2j6Q$2}WՖ(7p؞ LwKG]B3FæoA$M>.+39}JcאcOvEI2!τNwB)Akh0п*H+3赫ݲ{E0 nqxK{@>w[6MXt9Qu^NtyFGAxXT㷭`[̝XEX..h>̩GQup-QWTӲ|XWDYS@2Eeu ݧǝ;bnmĊԟAj8F޹i HmKl{8/8XY0ꎨȁ$p  Ih쳲$<4Cty?eeJ`ncQSVyV1~Kw>_c6:u*iK E*p Mj\ZPQwuOIͦ 2%rvm2/J UeL;h&\|#2U1ל^)@(RUʦFMo8]AbuG.)-ZgtRRNJ|/-U O/R&\᳑mQoB"yR 4R hT5@$,=fzz EpJy!-iqZZ㳓r<)N'N,#;EZ݀`}tX}7I!k KJ,1Y" LCty{e21xC>O^xϱ~y9b鳗ƼQLdzdil]L@ L}Zy-M rԙLHr)DW,--u@I%xj;WiYpeڥ6ҢLeXbQA`a5-k͕Ws\-cCy-tB(~Si Yj xNXH +%~ 3&舘LxJuC=; _B̠\>p$&zA1Z>{ jKRaM >APt4pa=;![_s(K4_ s͌6+S$sڃAr( cIη!S~/Y1ma,[eڶzsۿ[$<ݶYQؤRq;~,=/)o=6-8LM:8Ҩ!6mmE&!b~{+* }dg_ p+; uI(ۖy LIe J ͼ#B?u#30ϾU˟-d5fо*^ ?tjDO_ӷzZ6l}\1#U9[y / u{ָOYhDۢơIt>˿8:Gh1>\Sxӏ瘘|x 'E_&&$?!\,B>" lr:fy{AZ|kN (=D}$8F;J?k̺TO%KQVE~PDblt^YmGh<ڱŢ,;w|+c6|vo~7ńOj=Džj5FZdraT/ 2y6ʞT/? endstream endobj 2534 0 obj << /Length 1326 /Filter /FlateDecode >> stream xXKo6W(+=$}a H}d[ Kr)9mw(R䥝4 [` p}3CYx&3I)J-ˋ5z\ Hzq/p$ųjjG?nDvt;{#Ά:ob O۽_z]m}wkƟe$ⓟӍ"^åYFCc:| jYZGf5S 3T:8082E-KUs>yN;y.3y?y]eS;S[wEUm`Y;maATs";Ê"]z{_f)=( F .KmMs"cNqozy>E7_ǁkW!)x :DIJKm^ڸw f<*2&CnZHj@Bx@Ó1 F>_,A^+Πbw-' ߡLN۩EbBmBϡSߎv+V27pM9KOQ@ ?(ݰuFnMwFaM۴״u㇖n7~sYq*[fG l7'6QmE)-Citu;GB "Љ[Yv PO7nܵ ZΕz PD +}$ڔz[|r1'rֻ.M4MNu C:̀.4 GmuɄt$}wK4ʞ~ 1$X rLKHA";Mj DGwT%fjZ$\=ҭ˺0WLP'5!B=צQSr}*p9V^yHZ BNנo-巖rRrE*GS#vP4;!ݭ endstream endobj 2539 0 obj << /Length 1933 /Filter /FlateDecode >> stream xXYo6~ϯXI DxJJчM HZ$n_?Ȼ]Zi;CRg( Zj8Ft]*朤"Ym"[WOϨ 0PpRhD(ݔvu\Su9Pn;]r!o~~j){rHv [QN"PiA(V0P*lB۬6Jri5R$$W!4P1I(@I*%C;Ykk5bHD߃zLMHI=HF>т0}hBN8Qa,IB,2vr,]CagnCK|Jj焤3UbFxIG>T!UoP;.k-e[We˽FFQ˫5'1Ijo@U:<QBk_{@oׯ rlu^38|E4Bvf0D||ab4&p΢rli<$@x<_fOL*'CZX c~!0p!b\ܺ5QїB%\{і ^Iƾ-rO\H!A!\\fãc*M)ޣ!~]gwo7q&Cw&p5O w d1WAfviU 7RnnWa7M r ߸ z1E8}Rx(1inVtCҘ.jB fPzs\>P&MzU3mWw>E*7uDWvt!)x;&Ճ.I,`i ﵓ^SX|`6߸ 9e{w=ucY}ffx< A PuYdН&O{E[w|zj'<b.@P{7`4m뙧LUP3MXL@^|dٱQkBjB,+T$R?KDN<'^4Y sxQdMsˣUlZ/&Myv[e.| )bCN֧Z7|;dkҭSra,ܙ`eQO?X#Ri@'>l&c&q@F]P-.q"2lMQ;e*Ŕon0aƬ7t[0 CWԺֻCW G hFIwVUK|‚[ $5/rnNk?Gg(Ȅ}DߜAml(]9cH 0ۯe0(>E.y$2h*y;e.yee@Oz$Y돲_w)8r