diff --git a/README b/README new file mode 100644 index 0000000..755cb35 --- /dev/null +++ b/README @@ -0,0 +1,9 @@ +This repository contains the RESTful API information for the OpenStack Compute project, also known as Nova. The Nova project provides open source cloud management and orchestration services. + +Contributing +============ +Our community welcomes all people interested in open source cloud computing, and there are no formal membership requirements. The best way to join the community is to talk with others online or at a meetup and offer contributions through Launchpad, the OpenStack wiki, or blogs. We welcome all types of contributions, from blueprint designs to documentation to testing to deployment scripts. + +Installing +========== +Refer to http://docs.openstack.org to learn more about installing an OpenStack Compute server that can respond to these API commands. \ No newline at end of file diff --git a/incubation/openstack-api-extensions/apix-intro-proposal.xml b/incubation/openstack-api-extensions/apix-intro-proposal.xml new file mode 100644 index 0000000..943521a --- /dev/null +++ b/incubation/openstack-api-extensions/apix-intro-proposal.xml @@ -0,0 +1,473 @@ + + OpenStack API Extensions + An Overview + + + 2010 + 2011 + Rackspace US, Inc. + + 2011-06-10 + + + Copyright details are filled in by the template. + + + + + This document provides an overview of the OpenStack API extension + mechanism. + + + + + Overview + + The OpenStack extension mechanism makes it possible to add + functionality to OpenStack APIs in a manner that ensures + compatibility with existing clients. This capability + allows OpenStack operators and vendors to provide + innovative functionality to their clients and provides a + means by which new features may be considered in upcoming + versions of OpenStack APIs. + + + This document describes the extension mechanism in detail. + It provides guidance to API implementors and clients on + developing and consuming API extensions, it describes the + rules by which extensions are governed, and it describes + the process used to promote API extensions to new features. + + + Please note that this document is a draft. It + is intended to give developers an opportunity to provide feedback. If you begin + implementing against this early access specification, please recognize that it is + still subject to change. Comments, feedback, and bug reports are always welcomed; + please submit these in the webhelp discussion forum at: http://docs.openstack.org/. + +
+ Intended Audience + This document is intended for software developers who wish either to implement or + to consume an extendable OpenStack API. It assumes that the reader has a general + understanding of: + + + ReSTful web services + + + HTTP/1.1 + + + JSON and/or XML data serialization formats + + + At least one OpenStack API: Compute, + Object Storage, etc. + + +
+
+ Organization of this Document + + + + + + + Provides background information on + OpenStack extensions and the OpenStack + extension mechanism. + + + + + Chapter 3, Extensions and ReST + + + Describes the specifics of implementing + and consuming extensions in ReST APIs. + + + + + Chapter 4, Extension Governance and Promotion + + + Describes API governance and the process + by which extensions can be promoted to new + features in future revisions of an API. + + + + + Chapter 5, Summary + + Briefly summarizes the benefits of the extension mechanism and + provides a brief overview of how extensions are used. + + + +
+
+ Document Change History + + + + Revision Date + Summary of Changes + + + + + June 10, 2011 + + + + Initial draft. + + + + + + +
+
+ + Background + + This chapter provides background information on OpenStack + extensions and the OpenStack extension mechanism. It + describes what extensions are, how the extension mechanism + in OpenStack is related to the OpenGL extension mechanism, + the differences between extensions and versions, the + concept of versioning extensions, and why extensions are + vital when defining a pluggable architecture. + +
+ What are Extensions? + + OpenStack APIs are defined strictly in two forms: a + human-readable specification (usually in the form of a + developer's guide) and a machine-processable + WADL. These specifications define the core actions, + capabilities, and media-types of the API. A client can + always depend on the availability of this + core API and implementers are + always required to support it in its entirety. Requiring strict adherence to the + core API allows clients to rely upon a minimal level + of functionality when interacting with multiple + implementations of the same API. + + + Note that it is quite possible that distinct + implementations of an OpenStack API exist. First + because API specifications are released under a free + license, so anyone may use them to implement a core + API. Furthermore, the OpenStack implementations + themselves are released under a free license, making + it possible to alter the code to create a specialized + version. Such a specialized implementation could + remain OpenStack-compatible even if it were to + implement new features or add new capabilities, but + only if it made the changes in a manner that ensures + that a client expecting a core API would continue to + function normally — this is where extensions + come in. + + An extension adds capabilities to an API beyond those + defined in the core. The introduction of new features, MIME types, actions, states, + headers, parameters, and resources can all be accomplished by means of extensions to + the core API. In order for extensions to work, the core API must be written in such + a manner that it allows for extensibility. Additionally, care should be taken to + ensure that extensions defined by different implementers don't clash with one + another, that clients can detect the presence of extensions via a standard method, + and that there is a clear promotion path at the end of which an extension may become + part of a future version of the core API. These actions, rules, and processes + together form the extension mechanism. It is important that + core APIs adhere to this mechanism in order to ensure compatibility as new + extensions are defined. Note also that while a core API may be written to allow for + extensibility, the extensions themselves are never part of the core. +
+
+ Relationship to OpenGL + + In the 1990s, OpenGL was developed as a portable open + graphics library standard. The goal was to provide a + cross-platform library that could enable developers to + produce 3D graphics at real time speeds (30-120 frames + per second). There were several major challenges to + meeting this goal. In order to be considered an open + standard, control needed to shift from Silicon + Graphics (SGI), who originally developed OpenGL, to an + independent Architecture Review Board (ARB) who would + be responsible for approving specification changes, + marking new releases, and ensuring conformance + testing. Additionally, the graphics library itself + would need to be designed in a manner that would allow + the establishment of a stable and portable platform + for developers. Finally, the library would need to + garner the support of graphics hardware vendors as + they would be providing the hardware acceleration + needed to meet the goal of performing at real-time + speeds. + + Gaining vendor support is challenging because vendors are often in direct + competition with one another. They differentiate themselves by creating innovative + new features and by providing niche functionality to their users. Thus, OpenGL was + faced with two competing requirements. On the one hand, it needed to abstract away + vendor differences in order to provide a stable cross-platform environment to + developers. On the other hand, in order to garner vendor support, it needed a method + by which vendors could differentiate themselves and provide innovative new features + and niche functionality to their users. + The OpenGL extension mechanism was developed to solve these problems. The + extension mechanism achieved balance between the two requirements by maintaining the + core specification under the direction of the Architecture Review Board while + allowing vendors to define extensions to the core OpenGL specification. The core + specification remained uncluttered and presented a unified view of common + functionality. Because extensions were detectable at run time, developers could + write portable applications that could adapt to the hardware on which they were + running. This method of allowing for an extensible API has proven to be a very + successful strategy. More than 500 extensions have been defined in OpenGL's lifetime + and many vendors, including NVidia, ATI, Apple, IBM, and Intel, have participated in + the process by developing their own custom extensions. Additionally, many key + innovations (such as vertex and fragment shaders) have been developed via the + extension process and are now part of the core OpenGL API. + OpenStack, while very different from OpenGL, shares many similar goals and faces + many of the same challenges. OpenStack APIs are designed to be open API standards. + An important goal is to provide developers with a ubiquitous, stable, any-scale + cloud development platform that abstracts away many of the differences between + hosting providers and their underlying infrastructure (hypervisors, load balancers, + etc.). A Policy Review Board, similar to OpenGL's Architecture Review Board, is + responsible for directing development of these APIs in a manner that ensures these + goals are met. As with OpenGL, OpenStack requires support from vendors (and cloud + providers) in order to be successful. As a result, OpenStack APIs also aim to + provide vendors with a platform which allows them to differentiate themselves by + providing innovative new features and niche functionality to their users. Because of + these similarities, the OpenStack extension mechanism described in this document is + modeled after the OpenGL extension mechanism. The methods by which extensions are + defined vary drastically, of course, since the nature of the APIs is very different + (C versus ReST); however, the manner in which extensions are documented, the way in + which vendors are attributed, and the promotion path that an extension follows, all + borrow heavily from OpenGL. +
+
+ Extensions and Versions + Extensions are always interpreted in relation to a version of the core API. In + other words, from a client's perspective, an extension modifies a + particular version of the core API in some way. In reality, an + extension may be applicable to several versions of an API at once. For example, a + particular extension may continue to be available as a core API moves from one + version to another. In fact, different implementations may decide to include support + for an extension at different versions. As explained in + the chapter on "Extension Governance and Promotion", + when an extension is defined, the minimal version of the core API that is required + to run the extension is specified; implementers are free to support the extension in + that version or in a later version of the core. Note, however, that because the + extension mechanism allows for promotion, an extension in one version of a core API + may become a standard feature in a later version. + + + As always, implementers are not required to + support an extension unless it is promoted to the + core. + + + Because several versions of the core API may be supported simultaneously, and + because each version may offer support for a different set of extensions, clients + must be able to detect what versions and extensions are available in a particular + deployment. Thus, both extensions and versions are queryable. Issuing a GET on the + base URL (/) of the API endpoint returns information about what + versions are available. Similarly, issuing a GET on the API's extensions resource + (/v1.1/extensions) returns information about what extensions are + available. (See + the chapter on "Extensions and ReST" + for details of such requests.) Note that, + since extensions modify a particular version of the API, the extensions + resource itself is always accessed at a particular version. + Backward-compatible changes in an API usually require a minor version bump. In an + extensible API, however, these changes can be brought in as extensions. The net + effect is that versions change infrequently and thus provide a stable platform on + which to develop. The Policy Review Board (PRB), with the help of project team + leaders, is responsible for ensuring that this stability is maintained by closely + guarding core API versions. Extensions, however, can be developed without the + consent or approval of the PRB. They can be developed in a completely decentralized + manner both by individual OpenStack developers and by commercial vendors. Because + extensions can be promoted to standard features, the development of new versions can + be influenced significantly by individual developers and the OpenStack client + community and is therefore not strictly defined by the PRB. In other words, new + features of a core API may be developed in a bottom-up fashion. + + That said, not all extensions are destined to be + promoted to the next API version. Core APIs always + deals with core functionality — functionality + that is supported by all implementations and is + applicable in common cases. Extensions that deal with + niche functionality should always remain extensions. + + + The table below summarizes the differences between + versions and extensions. + + + Versions versus Extensions + + + + + + Versions + Extensions + + + + + + + Rare + + Versions provide a stable + platform on which to develop. + + + + + + Frequent + + Extensions bring new features + to the market quickly and in a + compatible manner. + + + + + + + + Centralized + + Versions are maintained by the + entity that controls the API + Spec: the OpenStack Policy + Review Board. Only the PRB can + create a new version; only the + PRB defines what "OpenStack + Compute 1.1" means. + + + + + + Decentralized + + Extensions are maintained by + third parties, including + individual OpenStack + developers and software + vendors. Anyone can create an + extension. + + + + + + + + Core + + Versions support core + functionality. + + + + + + Niche + + Extensions provide specialized + functionality. + + + + + + + + Queryable + + Issuing a GET on the base + URL (/) of the + API endpoint returns + information about what + versions are available. + + + + + + Queryable + + Issuing a GET on the API's + extensions resource + (/v1.1/extensions) + returns information about what + extensions are available. + + + + + + +
+
+
+ Versioning Extensions + There is no explicit versioning mechanism for extensions. Nonetheless, there may + be cases in which a developer decides to update an extension after the extension has + been released and client support for the extension has been established. In these + cases, it is recommended that a new extension be created. The extension may have a + name that signifies its relationship to the previous version. For example, a + developer may append an integer to the extension name to signify that one extension + updates another: RAX-PIE2 updates RAX-PIE. + Extensions may have dependencies on other extensions. For example, + RAX-PIE2 may depend on RAX-PIE and may simply add + additional capabilities to it. In general, dependencies of this kind are discouraged + and implementers should strive to keep extensions independent. That said, extension + dependencies allow for the possibility of providing updates to existing extensions + even if the original extension is under the control of a different vendor. This is + particularly useful in cases where an existing extension has good client support. +
+
+ Extensions and Pluggability + Core APIs abstract away vendor differences in order to provide a cross-platform + environment to their clients. For example, a client should be able to interact with + an OpenStack load balancing service without worrying about whether the deployment + utilizes Zeus, Pound, or HAProxy on the backend. OpenStack implementations strive to + support multiple backends out of the box. They do so by employing software drivers. + Each driver is responsible for communicating to a specific backend and is in charge + of translating core API requests to it. + The core API contains only those capabilities which are applicable to all + backends; however, not all backends are created equal, with each backend offering a + distinct set of capabilities. Extensions play a critical role in exposing these + capabilities to clients. This is illustrated below. Here, extensions fill in the gap + between the common capabilities that the core API provides and the unique + capabilities of the Zeus load balancer. In a sense, one can think of extensions as + providing frontends to OpenStack plug-ins. +
+ Extensions and Pluggability + + + + + + + + +
+
+
+ + + + +
diff --git a/incubation/openstack-api-extensions/figures/apix-1service-core-extensions-manybackends.png b/incubation/openstack-api-extensions/figures/apix-1service-core-extensions-manybackends.png new file mode 100644 index 0000000..ef56fb8 Binary files /dev/null and b/incubation/openstack-api-extensions/figures/apix-1service-core-extensions-manybackends.png differ diff --git a/incubation/openstack-api-extensions/figures/apix-1service-core-extensions-manybackends.svg b/incubation/openstack-api-extensions/figures/apix-1service-core-extensions-manybackends.svg new file mode 100644 index 0000000..fa79343 --- /dev/null +++ b/incubation/openstack-api-extensions/figures/apix-1service-core-extensions-manybackends.svg @@ -0,0 +1,559 @@ + + + + + 2011-05-12 16:35Z + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1service-core-extensions-manybackends + + + Layer 1 + + + + + + + + + + + + + + LBaaS + + + + Zeus + + + + Pound + + + + HAProxy + + + + + + + + + Core + + + + + + + Extensions + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/pom.xml b/incubation/openstack-api-extensions/pom.xml new file mode 100644 index 0000000..c1a50e9 --- /dev/null +++ b/incubation/openstack-api-extensions/pom.xml @@ -0,0 +1,131 @@ + + + 4.0.0 + + org.openstack.docs + openstack-guide + 1.0.0-SNAPSHOT + jar + OpenStack Guides + + + Rackspace Research Repositories + + true + + + + rackspace-research + Rackspace Research Repository + http://maven.research.rackspacecloud.com/content/groups/public/ + + + + + rackspace-research + Rackspace Research Repository + http://maven.research.rackspacecloud.com/content/groups/public/ + + + + + + + + + + target/docbkx/pdf + + **/*.fo + + + + + + + com.rackspace.cloud.api + clouddocs-maven-plugin + 1.0.4 + + + + generate-pdf + generate-webhelp + + generate-sources + + + + + org.docbook + docbook-xml + 4.4 + runtime + + + + true + . + + apix-intro-proposal.xml + + false + reviewer + openstack + 1 + openstackdocs + 1 + UA-17511903-6 + + appendix toc,title + article/appendix nop + article toc,title + book title,figure,table,example,equation + chapter toc,title + part toc,title + preface toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf new file mode 100644 index 0000000..b93c813 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf differ diff --git a/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf new file mode 100644 index 0000000..008c09f Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf differ diff --git a/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf new file mode 100644 index 0000000..d4721f5 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf differ diff --git a/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf new file mode 100644 index 0000000..f124c8d Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf differ diff --git a/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt new file mode 100644 index 0000000..254d38d --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt @@ -0,0 +1,21 @@ +This typeface software ("SOFTWARE") is the property of FontSite Inc. Its +use by you is covered under the terms of an End-User License Agreement +("EULA"). By exercising your rights to make and use copies of this SOFTWARE, +you agree to be bound by the terms of this EULA. If you do not agree to the +terms of this EULA, you may not use the SOFTWARE. + +This SOFTWARE is a valuable asset of FontSite Inc. which is protected by +copyright laws and international copyright treaties, as well as other +intellectual property laws and treaties. The typeface software is licensed, +not sold. + +This EULA grants you the following rights: + +You may install and use an unlimited number of copies of this SOFTWARE. + +You may reproduce and distribute an unlimited number of copies of this +SOFTWARE, provided that each copy shall be a true and complete copy, +including all copyright and trademark notices, electronic documentation +(user guide in PDF format, etc.), and shall be accompanied by a copy of this +EULA. Copies of the SOFTWARE may not be distributed for profit either on a +standalone basis or included as part of your own product. \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/fonts/fontconfig.st b/incubation/openstack-api-extensions/target/docbkx/fonts/fontconfig.st new file mode 100644 index 0000000..10aea1e --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/fonts/fontconfig.st @@ -0,0 +1,35 @@ + + + + + . + + + 90 + + 90 + + + + + + + + + flate + + + + + + + + + $fontPath$ + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/1.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/1.svg new file mode 100644 index 0000000..e2e87dc --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/1.svg @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/10.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/10.svg new file mode 100644 index 0000000..4740f58 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/10.svg @@ -0,0 +1,18 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/11.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/11.svg new file mode 100644 index 0000000..09a0b2c --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/11.svg @@ -0,0 +1,16 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/12.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/12.svg new file mode 100644 index 0000000..9794044 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/12.svg @@ -0,0 +1,18 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/13.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/13.svg new file mode 100644 index 0000000..64268bb --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/13.svg @@ -0,0 +1,20 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/14.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/14.svg new file mode 100644 index 0000000..469aa97 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/14.svg @@ -0,0 +1,17 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/15.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/15.svg new file mode 100644 index 0000000..8202233 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/15.svg @@ -0,0 +1,19 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/16.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/16.svg new file mode 100644 index 0000000..01d6bf8 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/16.svg @@ -0,0 +1,20 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/17.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/17.svg new file mode 100644 index 0000000..0a04c55 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/17.svg @@ -0,0 +1,17 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/18.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/18.svg new file mode 100644 index 0000000..1cb891b --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/18.svg @@ -0,0 +1,21 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/19.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/19.svg new file mode 100644 index 0000000..e6fbb17 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/19.svg @@ -0,0 +1,20 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/2.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/2.svg new file mode 100644 index 0000000..07d0339 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/2.svg @@ -0,0 +1,17 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/20.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/20.svg new file mode 100644 index 0000000..ccbfd40 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/20.svg @@ -0,0 +1,20 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/21.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/21.svg new file mode 100644 index 0000000..93ec53f --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/21.svg @@ -0,0 +1,18 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/22.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/22.svg new file mode 100644 index 0000000..f48c5f3 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/22.svg @@ -0,0 +1,20 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/23.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/23.svg new file mode 100644 index 0000000..6624212 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/23.svg @@ -0,0 +1,22 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/24.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/24.svg new file mode 100644 index 0000000..a3d5525 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/24.svg @@ -0,0 +1,19 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/25.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/25.svg new file mode 100644 index 0000000..56614a9 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/25.svg @@ -0,0 +1,21 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/26.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/26.svg new file mode 100644 index 0000000..56faeac --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/26.svg @@ -0,0 +1,22 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/27.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/27.svg new file mode 100644 index 0000000..a75c812 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/27.svg @@ -0,0 +1,19 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/28.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/28.svg new file mode 100644 index 0000000..7f8cf1a --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/28.svg @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/29.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/29.svg new file mode 100644 index 0000000..cb63adf --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/29.svg @@ -0,0 +1,22 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/3.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/3.svg new file mode 100644 index 0000000..918be80 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/3.svg @@ -0,0 +1,19 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/30.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/30.svg new file mode 100644 index 0000000..dc43ba1 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/30.svg @@ -0,0 +1,22 @@ + + + + +]> + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/4.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/4.svg new file mode 100644 index 0000000..8eb6a53 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/4.svg @@ -0,0 +1,16 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/5.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/5.svg new file mode 100644 index 0000000..ca7a9f2 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/5.svg @@ -0,0 +1,18 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/6.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/6.svg new file mode 100644 index 0000000..783a0b9 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/6.svg @@ -0,0 +1,19 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/7.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/7.svg new file mode 100644 index 0000000..59b3714 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/7.svg @@ -0,0 +1,16 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/8.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/8.svg new file mode 100644 index 0000000..c1803a3 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/8.svg @@ -0,0 +1,20 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/callouts/9.svg b/incubation/openstack-api-extensions/target/docbkx/images/callouts/9.svg new file mode 100644 index 0000000..bc149d3 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/callouts/9.svg @@ -0,0 +1,19 @@ + + + + +]> + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/caution.svg b/incubation/openstack-api-extensions/target/docbkx/images/caution.svg new file mode 100644 index 0000000..e732a36 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/caution.svg @@ -0,0 +1,79 @@ + + + +image/svg+xml + + + + + + + + + + + + + + \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc-nd.svg b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc-nd.svg new file mode 100644 index 0000000..37a32df --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc-nd.svg @@ -0,0 +1,243 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc-sa.svg b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc-sa.svg new file mode 100644 index 0000000..514c251 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc-sa.svg @@ -0,0 +1,202 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc.svg b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc.svg new file mode 100644 index 0000000..597a622 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nc.svg @@ -0,0 +1,190 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nd.svg b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nd.svg new file mode 100644 index 0000000..6efd00d --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-nd.svg @@ -0,0 +1,203 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cc/by-sa.svg b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-sa.svg new file mode 100644 index 0000000..f850297 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cc/by-sa.svg @@ -0,0 +1,199 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cc/by.svg b/incubation/openstack-api-extensions/target/docbkx/images/cc/by.svg new file mode 100644 index 0000000..e44c25f --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cc/by.svg @@ -0,0 +1,155 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cloud/cover.svg b/incubation/openstack-api-extensions/target/docbkx/images/cloud/cover.svg new file mode 100644 index 0000000..d390ad2 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cloud/cover.svg @@ -0,0 +1,1650 @@ +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenStack API Extensions + + + (Jun 10, 2011) + + + + An Overview + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DRAFT + +docs.openstack.org + + \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cloud/openstack-cover.st b/incubation/openstack-api-extensions/target/docbkx/images/cloud/openstack-cover.st new file mode 100644 index 0000000..bd702f1 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cloud/openstack-cover.st @@ -0,0 +1,5262 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $title$ + + + $releaseinfo$ ($pubdate$) + + + + $subtitle$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +$draft.text$ +$status.text$ +docs.openstack.org + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/cloud/rackspace-cover.st b/incubation/openstack-api-extensions/target/docbkx/images/cloud/rackspace-cover.st new file mode 100644 index 0000000..a6b409c --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/cloud/rackspace-cover.st @@ -0,0 +1,5147 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $title$ + + + + $releaseinfo$ ($pubdate$) + + + + docs.rackspace.com/api + + + + $subtitle$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +$draft.text$ + +$status.text$ + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/home.svg b/incubation/openstack-api-extensions/target/docbkx/images/home.svg new file mode 100644 index 0000000..e803a31 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/home.svg @@ -0,0 +1,26 @@ + + + + + + + + +]> + + + + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/important.svg b/incubation/openstack-api-extensions/target/docbkx/images/important.svg new file mode 100644 index 0000000..a4378d8 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/important.svg @@ -0,0 +1,79 @@ + + + +image/svg+xml + + + + + + + + + + + + + + \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/images/next.svg b/incubation/openstack-api-extensions/target/docbkx/images/next.svg new file mode 100644 index 0000000..75fa83e --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/next.svg @@ -0,0 +1,19 @@ + + + + + + +]> + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/note.svg b/incubation/openstack-api-extensions/target/docbkx/images/note.svg new file mode 100644 index 0000000..0ddb7df --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/note.svg @@ -0,0 +1,108 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/images/prev.svg b/incubation/openstack-api-extensions/target/docbkx/images/prev.svg new file mode 100644 index 0000000..6d88ffd --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/prev.svg @@ -0,0 +1,19 @@ + + + + + + +]> + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/tip.svg b/incubation/openstack-api-extensions/target/docbkx/images/tip.svg new file mode 100644 index 0000000..e65ba68 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/tip.svg @@ -0,0 +1,115 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/images/up.svg b/incubation/openstack-api-extensions/target/docbkx/images/up.svg new file mode 100644 index 0000000..d31aa9c --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/up.svg @@ -0,0 +1,19 @@ + + + + + + +]> + + + + + + + + + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/images/warning.svg b/incubation/openstack-api-extensions/target/docbkx/images/warning.svg new file mode 100644 index 0000000..519e99d --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/images/warning.svg @@ -0,0 +1,75 @@ + + + +image/svg+xml + + + + + + + + + + + + \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/pdf/apix-intro-proposal.fo b/incubation/openstack-api-extensions/target/docbkx/pdf/apix-intro-proposal.fo new file mode 100644 index 0000000..ffee37d --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/pdf/apix-intro-proposal.fo @@ -0,0 +1,281 @@ +TrueCopyright © 2010, 2011 Rackspace US, Inc. All rights reserved.OpenStack API Extensions - An OverviewCloud API Docs PluginOpenStack API Extensions1. Overview1.1. Intended Audience1.2. Organization of this Document1.3. Document Change History2. Background2.1. What are Extensions?2.2. Relationship to OpenGL2.3. Extensions and Versions2.4. Versioning Extensions2.5. Extensions and Pluggability DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API Extensions: An OverviewCopyright © 2010, 2011 Rackspace US, Inc. All rights reserved. + This document provides an overview of the OpenStack API extension + mechanism. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  List of Figures2.1. Extensions and Pluggability DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  List of Tables2.1. Versions versus Extensions DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  1. OverviewTable of Contents1.1. Intended Audience 1.2. Organization of this Document 1.3. Document Change History + The OpenStack extension mechanism makes it possible to add + functionality to OpenStack APIs in a manner that ensures + compatibility with existing clients. This capability + allows OpenStack operators and vendors to provide + innovative functionality to their clients and provides a + means by which new features may be considered in upcoming + versions of OpenStack APIs. + + This document describes the extension mechanism in detail. + It provides guidance to API implementors and clients on + developing and consuming API extensions, it describes the + rules by which extensions are governed, and it describes + the process used to promote API extensions to new features. + Intended Audience1.1. Intended Audience This document is intended for software developers who wish either to implement or + to consume an extendable OpenStack API. It assumes that the reader has a general + understanding of: ReSTful web servicesHTTP/1.1JSON and/or XML data serialization formatsAt least one OpenStack API: Compute, + Object Storage, etc.Organization of this Document1.2. Organization of this DocumentChapter 2, Background + Provides background information on + OpenStack extensions and the OpenStack + extension mechanism. + + Describes the specifics of implementing + and consuming extensions in ReST APIs. + + Describes API governance and the process + by which extensions can be promoted to new + features in future revisions of an API. + Briefly summarizes the benefits of the extension mechanism and + provides a brief overview of how extensions are used. Document Change History1.3. Document Change History + Revision Date + Summary of Changes + + June 10, 2011 + + Initial draft. + + DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  OpenStack API ExtensionsJun 10, 2011 DRAFT -  2. BackgroundTable of Contents2.1. What are Extensions? 2.2. Relationship to OpenGL 2.3. Extensions and Versions 2.4. Versioning Extensions 2.5. Extensions and Pluggability + This chapter provides background information on OpenStack + extensions and the OpenStack extension mechanism. It + describes what extensions are, how the extension mechanism + in OpenStack is related to the OpenGL extension mechanism, + the differences between extensions and versions, the + concept of versioning extensions, and why extensions are + vital when defining a pluggable architecture. + What are Extensions?2.1. What are Extensions? + OpenStack APIs are defined strictly in two forms: a + human-readable specification (usually in the form of a + developer's guide) and a machine-processable + WADL. These specifications define the core actions, + capabilities, and media-types of the API. A client can + always depend on the availability of this + core API and implementers are + always required to support it in its entirety. Requiring strict adherence to the + core API allows clients to rely upon a minimal level + of functionality when interacting with multiple + implementations of the same API. + + Note that it is quite possible that distinct + implementations of an OpenStack API exist. First + because API specifications are released under a free + license, so anyone may use them to implement a core + API. Furthermore, the OpenStack implementations + themselves are released under a free license, making + it possible to alter the code to create a specialized + version. Such a specialized implementation could + remain OpenStack-compatible even if it were to + implement new features or add new capabilities, but + only if it made the changes in a manner that ensures + that a client expecting a core API would continue to + function normally — this is where extensions + come in. + An extension adds capabilities to an API beyond those + defined in the core. The introduction of new features, MIME types, actions, states, + headers, parameters, and resources can all be accomplished by means of extensions to + the core API. In order for extensions to work, the core API must be written in such + a manner that it allows for extensibility. Additionally, care should be taken to + ensure that extensions defined by different implementers don't clash with one + another, that clients can detect the presence of extensions via a standard method, + and that there is a clear promotion path at the end of which an extension may become + part of a future version of the core API. These actions, rules, and processes + together form the extension mechanism. It is important that + core APIs adhere to this mechanism in order to ensure compatibility as new + extensions are defined. Note also that while a core API may be written to allow for + extensibility, the extensions themselves are never part of the core. Relationship to OpenGL2.2. Relationship to OpenGL + In the 1990s, OpenGL was developed as a portable open + graphics library standard. The goal was to provide a + cross-platform library that could enable developers to + produce 3D graphics at real time speeds (30-120 frames + per second). There were several major challenges to + meeting this goal. In order to be considered an open + standard, control needed to shift from Silicon + Graphics (SGI), who originally developed OpenGL, to an + independent Architecture Review Board (ARB) who would + be responsible for approving specification changes, + marking new releases, and ensuring conformance + testing. Additionally, the graphics library itself + would need to be designed in a manner that would allow + the establishment of a stable and portable platform + for developers. Finally, the library would need to + garner the support of graphics hardware vendors as + they would be providing the hardware acceleration + needed to meet the goal of performing at real-time + speeds. + Gaining vendor support is challenging because vendors are often in direct + competition with one another. They differentiate themselves by creating innovative + new features and by providing niche functionality to their users. Thus, OpenGL was + faced with two competing requirements. On the one hand, it needed to abstract away + vendor differences in order to provide a stable cross-platform environment to + developers. On the other hand, in order to garner vendor support, it needed a method + by which vendors could differentiate themselves and provide innovative new features + and niche functionality to their users. The OpenGL extension mechanism was developed to solve these problems. The + extension mechanism achieved balance between the two requirements by maintaining the + core specification under the direction of the Architecture Review Board while + allowing vendors to define extensions to the core OpenGL specification. The core + specification remained uncluttered and presented a unified view of common + functionality. Because extensions were detectable at run time, developers could + write portable applications that could adapt to the hardware on which they were + running. This method of allowing for an extensible API has proven to be a very + successful strategy. More than 500 extensions have been defined in OpenGL's lifetime + and many vendors, including NVidia, ATI, Apple, IBM, and Intel, have participated in + the process by developing their own custom extensions. Additionally, many key + innovations (such as vertex and fragment shaders) have been developed via the + extension process and are now part of the core OpenGL API. OpenStack, while very different from OpenGL, shares many similar goals and faces + many of the same challenges. OpenStack APIs are designed to be open API standards. + An important goal is to provide developers with a ubiquitous, stable, any-scale + cloud development platform that abstracts away many of the differences between + hosting providers and their underlying infrastructure (hypervisors, load balancers, + etc.). A Policy Review Board, similar to OpenGL's Architecture Review Board, is + responsible for directing development of these APIs in a manner that ensures these + goals are met. As with OpenGL, OpenStack requires support from vendors (and cloud + providers) in order to be successful. As a result, OpenStack APIs also aim to + provide vendors with a platform which allows them to differentiate themselves by + providing innovative new features and niche functionality to their users. Because of + these similarities, the OpenStack extension mechanism described in this document is + modeled after the OpenGL extension mechanism. The methods by which extensions are + defined vary drastically, of course, since the nature of the APIs is very different + (C versus ReST); however, the manner in which extensions are documented, the way in + which vendors are attributed, and the promotion path that an extension follows, all + borrow heavily from OpenGL. Extensions and Versions2.3. Extensions and Versions Extensions are always interpreted in relation to a version of the core API. In + other words, from a client's perspective, an extension modifies a + particular version of the core API in some way. In reality, an + extension may be applicable to several versions of an API at once. For example, a + particular extension may continue to be available as a core API moves from one + version to another. In fact, different implementations may decide to include support + for an extension at different versions. As explained in + , + when an extension is defined, the minimal version of the core API that is required + to run the extension is specified; implementers are free to support the extension in + that version or in a later version of the core. Note, however, that because the + extension mechanism allows for promotion, an extension in one version of a core API + may become a standard feature in a later version. Note + As always, implementers are not required to + support an extension unless it is promoted to the + core. + Because several versions of the core API may be supported simultaneously, and + because each version may offer support for a different set of extensions, clients + must be able to detect what versions and extensions are available in a particular + deployment. Thus, both extensions and versions are queryable. Issuing a GET on the + base URL (/) of the API endpoint returns information about what + versions are available. Similarly, issuing a GET on the API's extensions resource + (/v1.1/extensions) returns information about what extensions are + available. (See + + for details of such requests.) Note that, + since extensions modify a particular version of the API, the extensions + resource itself is always accessed at a particular version. Backward-compatible changes in an API usually require a minor version bump. In an + extensible API, however, these changes can be brought in as extensions. The net + effect is that versions change infrequently and thus provide a stable platform on + which to develop. The Policy Review Board (PRB), with the help of project team + leaders, is responsible for ensuring that this stability is maintained by closely + guarding core API versions. Extensions, however, can be developed without the + consent or approval of the PRB. They can be developed in a completely decentralized + manner both by individual OpenStack developers and by commercial vendors. Because + extensions can be promoted to standard features, the development of new versions can + be influenced significantly by individual developers and the OpenStack client + community and is therefore not strictly defined by the PRB. In other words, new + features of a core API may be developed in a bottom-up fashion. + That said, not all extensions are destined to be + promoted to the next API version. Core APIs always + deals with core functionality — functionality + that is supported by all implementations and is + applicable in common cases. Extensions that deal with + niche functionality should always remain extensions. + + The table below summarizes the differences between + versions and extensions. + Table 2.1. Versions versus ExtensionsVersionsExtensions + Rare.  + Versions provide a stable + platform on which to develop. + + + Frequent.  + Extensions bring new features + to the market quickly and in a + compatible manner. + + + Centralized.  + Versions are maintained by the + entity that controls the API + Spec: the OpenStack Policy + Review Board. Only the PRB can + create a new version; only the + PRB defines what "OpenStack + Compute 1.1" means. + + + Decentralized.  + Extensions are maintained by + third parties, including + individual OpenStack + developers and software + vendors. Anyone can create an + extension. + + + Core.  + Versions support core + functionality. + + + Niche.  + Extensions provide specialized + functionality. + + + Queryable.  + Issuing a GET on the base + URL (/) of the + API endpoint returns + information about what + versions are available. + + + Queryable.  + Issuing a GET on the API's + extensions resource + (/v1.1/extensions) + returns information about what + extensions are available. + + Versioning Extensions2.4. Versioning Extensions There is no explicit versioning mechanism for extensions. Nonetheless, there may + be cases in which a developer decides to update an extension after the extension has + been released and client support for the extension has been established. In these + cases, it is recommended that a new extension be created. The extension may have a + name that signifies its relationship to the previous version. For example, a + developer may append an integer to the extension name to signify that one extension + updates another: RAX-PIE2 updates RAX-PIE. Extensions may have dependencies on other extensions. For example, + RAX-PIE2 may depend on RAX-PIE and may simply add + additional capabilities to it. In general, dependencies of this kind are discouraged + and implementers should strive to keep extensions independent. That said, extension + dependencies allow for the possibility of providing updates to existing extensions + even if the original extension is under the control of a different vendor. This is + particularly useful in cases where an existing extension has good client support. Extensions and Pluggability2.5. Extensions and Pluggability Core APIs abstract away vendor differences in order to provide a cross-platform + environment to their clients. For example, a client should be able to interact with + an OpenStack load balancing service without worrying about whether the deployment + utilizes Zeus, Pound, or HAProxy on the backend. OpenStack implementations strive to + support multiple backends out of the box. They do so by employing software drivers. + Each driver is responsible for communicating to a specific backend and is in charge + of translating core API requests to it. The core API contains only those capabilities which are applicable to all + backends; however, not all backends are created equal, with each backend offering a + distinct set of capabilities. Extensions play a critical role in exposing these + capabilities to clients. This is illustrated below. Here, extensions fill in the gap + between the common capabilities that the core API provides and the unique + capabilities of the Zeus load balancer. In a sense, one can think of extensions as + providing frontends to OpenStack plug-ins. Figure 2.1. Extensions and Pluggability \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/pdf/apix-intro-proposal.pdf b/incubation/openstack-api-extensions/target/docbkx/pdf/apix-intro-proposal.pdf new file mode 100644 index 0000000..9a9255c Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/pdf/apix-intro-proposal.pdf differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/comments.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/comments.js new file mode 100644 index 0000000..d846d6d --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/comments.js @@ -0,0 +1,8 @@ + + + + (function() { + var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; + dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js'; + (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); + })(); diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/ie.css b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/ie.css new file mode 100644 index 0000000..4c5f1c2 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/ie.css @@ -0,0 +1,13 @@ +.statustext{ + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1) + progid:DXImageTransform.Microsoft.BasicImage(opacity=.5); + width: 100%; + height: 30px; + right: -5px; + top:105px; + /* left: 280px; */ /* change to -12px; when sidebar is collapsed */ +} + +body #content{ + padding-top: 136px; +} diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning-openstack.css b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning-openstack.css new file mode 100644 index 0000000..9e2526e --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning-openstack.css @@ -0,0 +1,267 @@ +body { font: 12px Verdana, Geneva, sans-serif; } +p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } +h1 { font: 15pt Arial, Helvetica, geneva; + color: #cf2f19; +} +h2 { font: normal 12pt Arial, Helvetica, geneva; + color: black!important; +} + +#header { + position: fixed; + width: 100%; + height: 95px; + top: 0; + right: 0; + bottom: auto; + left: 0; + border-bottom: 1px solid #bbc4c5; + z-index: 2000; + background: white url(../images/book_open.png) no-repeat 250px center; +} + +#header h1, p.breadcrumbs { + margin-left: 300px; +} + +#header img { + float: left; + margin-left: 20px; + margin-top: 20px; +} + +#leftnavigation { + overflow: auto; + position: fixed; + height: auto; + top: 90px; + bottom: 0; + left: 0; + width: 280px; + z-index: 1500; + border-right:1px solid #bbc4c5; + padding: 0px; + background-color: #f2f7f7!important; +} + +#content { + position: relative; + top: 90px; /* left: 240px;*/ + right: auto; /* bottom: 20px; */ + margin: 0px 0px 0px 280px; + width: auto; + height: inherit; + padding-top: 10px; + padding-left: 30px; + padding-right: 30px; + color: #000000; + /*border-left: 2px solid #cccccc; overflow :scroll;*/ + z-index: 1000; + min-width:800px; +} + +#navheader { + position: fixed; + top: 65px; + right:4px; +} + +#content h1, #content h2 { color: #cc0000; } +.navfooter { bottom: 2%; } +.highlight { background-color: #c5d3c3; } +.highlightButton{ font-size: 0; } + +#content pre.literallayout, #content pre.programlisting +{ + -x-system-font: none; + background-color: silver; + border-bottom-color: #DEDEDE !important; + border-bottom-style: solid !important; + border-bottom-width: 1px !important; + border-left-color-ltr-source: physical !important; + border-left-color-rtl-source: physical !important; + border-left-color-value: #DEDEDE !important; + border-left-style-ltr-source: physical !important; + border-left-style-rtl-source: physical !important; + border-left-style-value: solid !important; + border-left-width-ltr-source: physical !important; + border-left-width-rtl-source: physical !important; + border-left-width-value: 1px !important; + border-right-color-ltr-source: physical !important; + border-right-color-rtl-source: physical !important; + border-right-color-value: #DEDEDE !important; + border-right-style-ltr-source: physical !important; + border-right-style-rtl-source: physical !important; + border-right-style-value: solid !important; + border-right-width-ltr-source: physical !important; + border-right-width-rtl-source: physical !important; + border-right-width-value: 1px !important; + border-top-color: #DEDEDE !important; + border-top-style: solid !important; + border-top-width: 1px !important; + color: #23302D; + display: block; + font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; + font-size: 12px !important; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + margin-bottom: 1em !important; + margin-left: 0 !important; + margin-right: 0 !important; + margin-top: 1em !important; + overflow-x: scroll; + padding-bottom: 0.5em !important; + padding-left: 0.5em !important; + padding-right: 0.5em !important; + padding-top: 0.5em !important; + width: 100%; +} + +/* Show Hide TOC tree */ +.pointLeft { + cursor: pointer; + padding-right: 20px; + display: block; +} +.pointRight { + cursor: pointer; + padding-right: 20px; + display: block; +} + +/* Search results Styling */ +.searchExpression { + color: #0050A0; + background-color: #EBEFF8; + font-size: 12pt; +} +.searchresult li a { + text-decoration: none; + color: #0050A0; +} +.searchresult li { + color: #0050A0; +} +.shortdesclink { + color: gray; + font-size: 9pt; +} +.searchText { + border: #BFCEE9 solid 1pt; + width: 11em +} +.searchButton { + margin-left: 3px; + background: #EBEFF8; + color: #0050A0; + border: #BFCEE9 solid 1pt; + font-weight: bold; + font-size: 10pt +} + +.title, div.toc>p{ + font-weight: bold; + } + +p.breadcrumbs { + margin-bottom: 0px; + margin-top: 33px; +} + +p.breadcrumbs a { + padding-right: 12px; + margin-right: 5px; + text-decoration: none; + color: #575757; + text-transform: uppercase; + font-size: 10px; + background: url(../images/breadcrumb-arrow.png) no-repeat right center; +} + +p.breadcrumbs a:hover { + text-decoration: underline; +} + +#header h1 { + margin-top: 2px; +} + +table.navLinks { + margin-right: 20px; +} + +table.navLinks td a { + text-decoration: none; + text-transform: uppercase; + color: black; + font-size: 11px; +} + +a.navLinkPrevious { + padding-left: 12px; + background: url(../images/previous-arrow.png) no-repeat left center; +} + +a.navLinkNext { + padding-right: 12px; + background: url(../images/next-arrow.png) no-repeat right center; +} + +a#showHideButton { + padding-left: 20px; + background: url(../images/sidebar.png) no-repeat left center; +} + + +.legal, .legal *{ + color: #555; + text-align: center; + padding-bottom: 10px; +} + +.internal + { + color : #0000CC; + } + +.writeronly + { + color : red; + } + +.remark, .remark .added, .remark .changed, .remark .deleted{ + background: yellow; + } + +tr th, tr th .internal, tr th .added, tr th .changed + { + background: #00589E; + color: white; + font-weight: bold; + text-align: left; + } + + +.statustext{ + position:fixed; + top:100px; + width: 0%; + height: 0%; + opacity: .3; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + white-space: nowrap; + color: red; + font-weight: bold; + font-size: 2em; + } + +div.note table tr th, div.caution table tr th, div.important table tr th, div.tip table tr th, div.warning table tr th{ + background: inherit; + color: inherit; +} \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning-rackspace.css b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning-rackspace.css new file mode 100644 index 0000000..9568a91 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning-rackspace.css @@ -0,0 +1,336 @@ +body { font: 12px Verdana, Geneva, sans-serif; } +p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } +h1 { font: 15pt Arial, Helvetica, geneva; + color: black!important!; +} +h2 { font: normal 12pt Arial, Helvetica, geneva; + color: black!important; +} + +#header { + position: fixed; + width: 100%; + height: 95px; + top: 0; + right: 0; + bottom: auto; + left: 0; + border-bottom: 1px solid #bbc4c5; + z-index: 2000; + background: #282828 url("../images/main_bg_fade.png") top left no-repeat; +} + +#header h1 { + color: #fff; + margin-left: 310px; +} + +#header h1, p.breadcrumbs { + margin-top: 30px; + margin-left: 310px; +} + +#header img { + float: left; + margin-left: 20px; + margin-top: 22px; +} + +#header p.breadcrumbs a { + color: #bbb; +} + +#leftnavigation { + overflow: auto; + position: fixed; + height: auto; + top: 90px; + bottom: 0; + left: 0; + width: 280px; + z-index: 1500; + border-right:1px solid #bbc4c5; + padding: 0px; + background-color: #f0f0f0!important; +} + +#content { + position: relative; + top: 90px; /* left: 240px;*/ + right: auto; /* bottom: 20px; */ + margin: 0px 0px 0px 280px; + width: auto; + height: inherit; + padding-top: 10px; + padding-left: 30px; + padding-right: 30px; + color: #000000; + /*border-left: 2px solid #cccccc; overflow :scroll;*/ + z-index: 1000; + min-width:800px; +} + +#navheader { + position: fixed; + background: #fff; + border-radius: 5px 0px 0px 5px; + padding-left: 10px; + right: 0px; + top: 37px; +} + +#content h1, #content h2 { color: black; } +.navfooter { bottom: 2%; } +.highlight { background-color: #c5d3c3; } +.highlightButton{ font-size: 0; } + +#content pre.literallayout, #content pre.programlisting +{ + -x-system-font: none; + background-color: silver; + border-bottom-color: #DEDEDE !important; + border-bottom-style: solid !important; + border-bottom-width: 1px !important; + border-left-color-ltr-source: physical !important; + border-left-color-rtl-source: physical !important; + border-left-color-value: #DEDEDE !important; + border-left-style-ltr-source: physical !important; + border-left-style-rtl-source: physical !important; + border-left-style-value: solid !important; + border-left-width-ltr-source: physical !important; + border-left-width-rtl-source: physical !important; + border-left-width-value: 1px !important; + border-right-color-ltr-source: physical !important; + border-right-color-rtl-source: physical !important; + border-right-color-value: #DEDEDE !important; + border-right-style-ltr-source: physical !important; + border-right-style-rtl-source: physical !important; + border-right-style-value: solid !important; + border-right-width-ltr-source: physical !important; + border-right-width-rtl-source: physical !important; + border-right-width-value: 1px !important; + border-top-color: #DEDEDE !important; + border-top-style: solid !important; + border-top-width: 1px !important; + color: #23302D; + display: block; + font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; + font-size: 12px !important; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + margin-bottom: 1em !important; + margin-left: 0 !important; + margin-right: 0 !important; + margin-top: 1em !important; + overflow-x: scroll; + padding-bottom: 0.5em !important; + padding-left: 0.5em !important; + padding-right: 0.5em !important; + padding-top: 0.5em !important; + width: 100%; +} + +/* Show Hide TOC tree */ +.pointLeft { + cursor: pointer; + padding-right: 20px; + display: block; +} +.pointRight { + cursor: pointer; + padding-right: 20px; + display: block; +} + +/* Search results Styling */ +.searchExpression { + color: #0050A0; + background-color: #EBEFF8; + font-size: 12pt; +} +.searchresult li a { + text-decoration: none; + color: #0050A0; +} +.searchresult li { + color: #0050A0; +} +.shortdesclink { + color: gray; + font-size: 9pt; +} +.searchText { + border: #BFCEE9 solid 1pt; + width: 11em +} +.searchButton { + margin-left: 3px; + background: #EBEFF8; + color: #0050A0; + border: #BFCEE9 solid 1pt; + font-weight: bold; + font-size: 10pt +} + +.title, div.toc>p{ + font-weight: bold; + } + +p.breadcrumbs { + display: inline; + margin-bottom: 0px; + margin-top: 33px; +} + +p.breadcrumbs a { + padding-right: 12px; + margin-right: 5px; + text-decoration: none; + color: #575757; + text-transform: uppercase; + font-size: 10px; +} + +p.breadcrumbs a:first-child { + background: url(../images/breadcrumb-arrow-white.png) no-repeat right center; +} + +p.breadcrumbs a:hover { + text-decoration: underline; +} + +#header h1 { + margin-top: 2px; +} + +table.navLinks { + margin-right: 20px; +} + +table.navLinks td a { + text-decoration: none; + text-transform: uppercase; + color: black; + font-size: 11px; +} + +a.navLinkPrevious { + padding-left: 12px; + background: url(../images/previous-arrow.png) no-repeat left center; +} + +a.navLinkNext { + padding-right: 12px; + background: url(../images/next-arrow.png) no-repeat right center; +} + +a#showHideButton { + padding-left: 20px; + background: url(../images/sidebar.png) no-repeat left center; +} + + +.filetree li span a { color: #777; } + +#treediv { -webkit-box-shadow: #CCC 0px 1px 2px 0px inset; } + +.legal, .legal *{ + color: #555; + text-align: center; + padding-bottom: 10px; +} + +.internal + { + color : #0000CC; + } + +.writeronly + { + color : red; + } + +.remark, .remark .added, .remark .changed, .remark .deleted{ + background: yellow; + } + +tr th, tr th .internal, tr th .added, tr th .changed + { + background: #00589E; + color: white; + font-weight: bold; + text-align: left; + } + +.statustext{ + position:fixed; + top:105px; + width: 0%; + height: 0%; + opacity: .3; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + white-space: nowrap; + color: red; + font-weight: bold; + font-size: 2em; + margin-top: 30px; + } + +#toolbar { + width: 100%; + height: 33px; + position: fixed; + top: 93px; + z-index: 99; + left: 280px; + color: #333; + line-height: 28px; + padding-left: 10px; +} + +#toolbar-left { + position: relative; + left: 0px; +} + +body p.breadcrumbs { + margin: 0px; + padding: 0px; + line-height: 28px; +} + +body #content { + position: static; + margin-top: 126px; + top: 0px; +} + +#header h1 { + position: fixed; + top: 35px; + left: -15px; + color: white!important; +} + +body.sidebar #toolbar{ + left: 0px; +} + +body.sidebar #toolbar-left{ + left: 0px; +} + +div#toolbar-left img { + vertical-align: text-top; +} + +div.note table tr th, div.caution table tr th, div.important table tr th, div.tip table tr th, div.warning table tr th{ + background: inherit; + color: inherit; +} \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning.css b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning.css new file mode 100644 index 0000000..9e2526e --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/css/positioning.css @@ -0,0 +1,267 @@ +body { font: 12px Verdana, Geneva, sans-serif; } +p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } +h1 { font: 15pt Arial, Helvetica, geneva; + color: #cf2f19; +} +h2 { font: normal 12pt Arial, Helvetica, geneva; + color: black!important; +} + +#header { + position: fixed; + width: 100%; + height: 95px; + top: 0; + right: 0; + bottom: auto; + left: 0; + border-bottom: 1px solid #bbc4c5; + z-index: 2000; + background: white url(../images/book_open.png) no-repeat 250px center; +} + +#header h1, p.breadcrumbs { + margin-left: 300px; +} + +#header img { + float: left; + margin-left: 20px; + margin-top: 20px; +} + +#leftnavigation { + overflow: auto; + position: fixed; + height: auto; + top: 90px; + bottom: 0; + left: 0; + width: 280px; + z-index: 1500; + border-right:1px solid #bbc4c5; + padding: 0px; + background-color: #f2f7f7!important; +} + +#content { + position: relative; + top: 90px; /* left: 240px;*/ + right: auto; /* bottom: 20px; */ + margin: 0px 0px 0px 280px; + width: auto; + height: inherit; + padding-top: 10px; + padding-left: 30px; + padding-right: 30px; + color: #000000; + /*border-left: 2px solid #cccccc; overflow :scroll;*/ + z-index: 1000; + min-width:800px; +} + +#navheader { + position: fixed; + top: 65px; + right:4px; +} + +#content h1, #content h2 { color: #cc0000; } +.navfooter { bottom: 2%; } +.highlight { background-color: #c5d3c3; } +.highlightButton{ font-size: 0; } + +#content pre.literallayout, #content pre.programlisting +{ + -x-system-font: none; + background-color: silver; + border-bottom-color: #DEDEDE !important; + border-bottom-style: solid !important; + border-bottom-width: 1px !important; + border-left-color-ltr-source: physical !important; + border-left-color-rtl-source: physical !important; + border-left-color-value: #DEDEDE !important; + border-left-style-ltr-source: physical !important; + border-left-style-rtl-source: physical !important; + border-left-style-value: solid !important; + border-left-width-ltr-source: physical !important; + border-left-width-rtl-source: physical !important; + border-left-width-value: 1px !important; + border-right-color-ltr-source: physical !important; + border-right-color-rtl-source: physical !important; + border-right-color-value: #DEDEDE !important; + border-right-style-ltr-source: physical !important; + border-right-style-rtl-source: physical !important; + border-right-style-value: solid !important; + border-right-width-ltr-source: physical !important; + border-right-width-rtl-source: physical !important; + border-right-width-value: 1px !important; + border-top-color: #DEDEDE !important; + border-top-style: solid !important; + border-top-width: 1px !important; + color: #23302D; + display: block; + font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; + font-size: 12px !important; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + margin-bottom: 1em !important; + margin-left: 0 !important; + margin-right: 0 !important; + margin-top: 1em !important; + overflow-x: scroll; + padding-bottom: 0.5em !important; + padding-left: 0.5em !important; + padding-right: 0.5em !important; + padding-top: 0.5em !important; + width: 100%; +} + +/* Show Hide TOC tree */ +.pointLeft { + cursor: pointer; + padding-right: 20px; + display: block; +} +.pointRight { + cursor: pointer; + padding-right: 20px; + display: block; +} + +/* Search results Styling */ +.searchExpression { + color: #0050A0; + background-color: #EBEFF8; + font-size: 12pt; +} +.searchresult li a { + text-decoration: none; + color: #0050A0; +} +.searchresult li { + color: #0050A0; +} +.shortdesclink { + color: gray; + font-size: 9pt; +} +.searchText { + border: #BFCEE9 solid 1pt; + width: 11em +} +.searchButton { + margin-left: 3px; + background: #EBEFF8; + color: #0050A0; + border: #BFCEE9 solid 1pt; + font-weight: bold; + font-size: 10pt +} + +.title, div.toc>p{ + font-weight: bold; + } + +p.breadcrumbs { + margin-bottom: 0px; + margin-top: 33px; +} + +p.breadcrumbs a { + padding-right: 12px; + margin-right: 5px; + text-decoration: none; + color: #575757; + text-transform: uppercase; + font-size: 10px; + background: url(../images/breadcrumb-arrow.png) no-repeat right center; +} + +p.breadcrumbs a:hover { + text-decoration: underline; +} + +#header h1 { + margin-top: 2px; +} + +table.navLinks { + margin-right: 20px; +} + +table.navLinks td a { + text-decoration: none; + text-transform: uppercase; + color: black; + font-size: 11px; +} + +a.navLinkPrevious { + padding-left: 12px; + background: url(../images/previous-arrow.png) no-repeat left center; +} + +a.navLinkNext { + padding-right: 12px; + background: url(../images/next-arrow.png) no-repeat right center; +} + +a#showHideButton { + padding-left: 20px; + background: url(../images/sidebar.png) no-repeat left center; +} + + +.legal, .legal *{ + color: #555; + text-align: center; + padding-bottom: 10px; +} + +.internal + { + color : #0000CC; + } + +.writeronly + { + color : red; + } + +.remark, .remark .added, .remark .changed, .remark .deleted{ + background: yellow; + } + +tr th, tr th .internal, tr th .added, tr th .changed + { + background: #00589E; + color: white; + font-weight: bold; + text-align: left; + } + + +.statustext{ + position:fixed; + top:100px; + width: 0%; + height: 0%; + opacity: .3; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + white-space: nowrap; + color: red; + font-weight: bold; + font-size: 2em; + } + +div.note table tr th, div.caution table tr th, div.important table tr th, div.tip table tr th, div.warning table tr th{ + background: inherit; + color: inherit; +} \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/ga.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/ga.js new file mode 100644 index 0000000..d9ddf34 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/ga.js @@ -0,0 +1,18 @@ + +_gaq.push(['_trackPageview']); + +var disqus_config = function () + { + var config = this; + config.callbacks.onNewComment.push (function () + { + _gaq.push (['_trackEvent', 'Disqus', 'Comment', 'null', 1]); + }); + }; + +(function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); +})(); + diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/caution.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/caution.png new file mode 100644 index 0000000..38c054b Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/caution.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/important.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/important.png new file mode 100644 index 0000000..b45bfc0 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/important.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/note.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/note.png new file mode 100644 index 0000000..672b847 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/note.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/tip.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/tip.png new file mode 100644 index 0000000..564e5c8 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/tip.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/warning.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/warning.png new file mode 100644 index 0000000..7059d60 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/admon/warning.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/book_open.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/book_open.png new file mode 100644 index 0000000..1086fbe Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/book_open.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/breadcrumb-arrow-white.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/breadcrumb-arrow-white.png new file mode 100644 index 0000000..7c0d42d Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/breadcrumb-arrow-white.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/breadcrumb-arrow.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/breadcrumb-arrow.png new file mode 100644 index 0000000..0b22b35 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/breadcrumb-arrow.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/1.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/1.png new file mode 100644 index 0000000..de682c6 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/1.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/10.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/10.png new file mode 100644 index 0000000..96c6ce4 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/10.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/11.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/11.png new file mode 100644 index 0000000..4550cb0 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/11.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/12.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/12.png new file mode 100644 index 0000000..ef0f635 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/12.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/13.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/13.png new file mode 100644 index 0000000..b4878f1 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/13.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/14.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/14.png new file mode 100644 index 0000000..a222d7b Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/14.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/15.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/15.png new file mode 100644 index 0000000..f6a76d5 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/15.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/16.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/16.png new file mode 100644 index 0000000..c5ef635 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/16.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/17.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/17.png new file mode 100644 index 0000000..85a2101 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/17.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/18.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/18.png new file mode 100644 index 0000000..7744d25 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/18.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/19.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/19.png new file mode 100644 index 0000000..44bacf8 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/19.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/2.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/2.png new file mode 100644 index 0000000..24ec0f6 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/2.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/20.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/20.png new file mode 100644 index 0000000..5e100fe Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/20.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/21.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/21.png new file mode 100644 index 0000000..c87e80a Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/21.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/22.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/22.png new file mode 100644 index 0000000..20593a4 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/22.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/23.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/23.png new file mode 100644 index 0000000..3909b9c Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/23.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/24.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/24.png new file mode 100644 index 0000000..963a9e7 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/24.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/25.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/25.png new file mode 100644 index 0000000..458a919 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/25.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/26.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/26.png new file mode 100644 index 0000000..74b2507 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/26.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/27.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/27.png new file mode 100644 index 0000000..611b8ce Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/27.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/28.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/28.png new file mode 100644 index 0000000..6aa21af Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/28.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/29.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/29.png new file mode 100644 index 0000000..6009b52 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/29.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/3.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/3.png new file mode 100644 index 0000000..01cdff1 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/3.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/30.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/30.png new file mode 100644 index 0000000..c4dc404 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/30.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/4.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/4.png new file mode 100644 index 0000000..1e42fb3 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/4.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/5.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/5.png new file mode 100644 index 0000000..635e7f8 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/5.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/6.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/6.png new file mode 100644 index 0000000..521aedd Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/6.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/7.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/7.png new file mode 100644 index 0000000..0d4b876 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/7.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/8.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/8.png new file mode 100644 index 0000000..50fa94d Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/8.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/9.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/9.png new file mode 100644 index 0000000..7190d5a Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/callouts/9.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc-nd.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc-nd.png new file mode 100644 index 0000000..25af3eb Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc-nd.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc-sa.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc-sa.png new file mode 100644 index 0000000..146f578 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc-sa.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc.png new file mode 100644 index 0000000..4b31285 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nc.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nd.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nd.png new file mode 100644 index 0000000..95cc47f Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-nd.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-sa.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-sa.png new file mode 100644 index 0000000..2917834 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by-sa.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by.png new file mode 100644 index 0000000..905983e Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/cc/by.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/favicon-openstack.ico b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/favicon-openstack.ico new file mode 100644 index 0000000..f3b9bf9 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/favicon-openstack.ico differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/favicon-rackspace.ico b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/favicon-rackspace.ico new file mode 100644 index 0000000..28b2e31 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/favicon-rackspace.ico differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/header-bg.gif b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/header-bg.gif new file mode 100644 index 0000000..f9efa28 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/header-bg.gif differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlight-blue.gif b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlight-blue.gif new file mode 100644 index 0000000..4fdabde Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlight-blue.gif differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlight-yellow.gif b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlight-yellow.gif new file mode 100644 index 0000000..3e847e7 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlight-yellow.gif differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlighter.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlighter.png new file mode 100644 index 0000000..7d875fa Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/highlighter.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/loading.gif b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/loading.gif new file mode 100644 index 0000000..6a56815 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/loading.gif differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/logo.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/logo.png new file mode 100644 index 0000000..b111258 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/logo.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/main_bg_fade.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/main_bg_fade.png new file mode 100644 index 0000000..9423ed4 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/main_bg_fade.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/next-arrow.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/next-arrow.png new file mode 100644 index 0000000..db595f4 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/next-arrow.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/openstack-logo.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/openstack-logo.png new file mode 100644 index 0000000..c08a93c Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/openstack-logo.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/page_white_text.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/page_white_text.png new file mode 100644 index 0000000..6a890d5 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/page_white_text.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/pdf.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/pdf.png new file mode 100644 index 0000000..9870362 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/pdf.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/previous-arrow.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/previous-arrow.png new file mode 100644 index 0000000..347bc53 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/previous-arrow.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/rackspace-logo.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/rackspace-logo.png new file mode 100644 index 0000000..dbb473b Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/rackspace-logo.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/search-icon.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/search-icon.png new file mode 100644 index 0000000..dfd5bb9 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/search-icon.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/showHideTreeIcons.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/showHideTreeIcons.png new file mode 100644 index 0000000..c1ec1f9 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/showHideTreeIcons.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/sidebar.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/sidebar.png new file mode 100644 index 0000000..5492671 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/sidebar.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/toc-icon.png b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/toc-icon.png new file mode 100644 index 0000000..2eb88d2 Binary files /dev/null and b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/images/toc-icon.png differ diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/jquery-1.4.2.min.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/jquery-1.4.2.min.js new file mode 100644 index 0000000..7c24308 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/jquery-1.4.2.min.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/jquery-ui-1.8.2.custom.min.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/jquery-ui-1.8.2.custom.min.js new file mode 100644 index 0000000..fec53e8 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/jquery-ui-1.8.2.custom.min.js @@ -0,0 +1,321 @@ +/*! + * jQuery UI 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +(function(c){c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.2",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Widget + */ +(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= +b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= +b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); +this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, +h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= +b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/*! + * jQuery UI Mouse 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&& +this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault(); +return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&& +this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX- +a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= +0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= +g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, +elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? +-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= +"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); +;/* + * jQuery UI Resizable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.resizable",d.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");d.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element, +_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&d.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(d('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!d(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var e=0;e');/sw|se|ne|nw/.test(g)&&f.css({zIndex:++a.zIndex});"se"==g&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[g]=".ui-resizable-"+g;this.element.append(f)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=d(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=d(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}d(this.handles[i])}};this._renderAxis(this.element);this._handles=d(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();d(this.element).addClass("ui-resizable-autohide").hover(function(){d(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){d(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){d(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; +if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(d(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), +e=this.element;this.resizing=true;this.documentScroll={top:d(document).scrollTop(),left:d(document).scrollLeft()};if(e.is(".ui-draggable")||/absolute/.test(e.css("position")))e.css({position:"absolute",top:c.top,left:c.left});d.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var g=m(this.helper.css("top"));if(a.containment){c+=d(a.containment).scrollLeft()||0;g+=d(a.containment).scrollTop()||0}this.offset= +this.helper.offset();this.position={left:c,top:g};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:c,top:g};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: +this.originalSize.width/this.originalSize.height||1;a=d(".ui-resizable-"+this.axis).css("cursor");d("body").css("cursor",a=="auto"?this.axis+"-resize":a);e.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,e=this._change[this.axis];if(!e)return false;c=e.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", +b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var e=this._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName);e=g&&d.ui.hasScroll(e[0],"left")?0:c.sizeDiff.height; +g={width:c.size.width-(g?0:c.sizeDiff.width),height:c.size.height-e};e=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var f=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(d.extend(g,{top:f,left:e}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}d("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop", +b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,e=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(e=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(e=="nw"){b.top= +a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,e=k(b.width)&&a.maxWidth&&a.maxWidthb.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(f)b.width=a.minWidth;if(h)b.height=a.minHeight;if(e)b.width=a.maxWidth;if(g)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height, +l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(f&&l)b.left=i-a.minWidth;if(e&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(g&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=d.browser.msie&&d.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+ +a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return d.extend(this._change.n.apply(this, +arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return d.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){d.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});d.extend(d.ui.resizable, +{version:"1.8.2"});d.ui.plugin.add("resizable","alsoResize",{start:function(){var b=d(this).data("resizable").options,a=function(c){d(c).each(function(){d(this).data("resizable-alsoresize",{width:parseInt(d(this).width(),10),height:parseInt(d(this).height(),10),left:parseInt(d(this).css("left"),10),top:parseInt(d(this).css("top"),10)})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else d.each(b.alsoResize,function(c){a(c)}); +else a(b.alsoResize)},resize:function(){var b=d(this).data("resizable"),a=b.options,c=b.originalSize,e=b.originalPosition,g={height:b.size.height-c.height||0,width:b.size.width-c.width||0,top:b.position.top-e.top||0,left:b.position.left-e.left||0},f=function(h,i){d(h).each(function(){var j=d(this),l=d(this).data("resizable-alsoresize"),p={};d.each((i&&i.length?i:["width","height","top","left"])||["width","height","top","left"],function(n,o){if((n=(l[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(/relative/.test(j.css("position"))&& +d.browser.opera){b._revertToRelativePosition=true;j.css({position:"absolute",top:"auto",left:"auto"})}j.css(p)})};typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?d.each(a.alsoResize,function(h,i){f(h,i)}):f(a.alsoResize)},stop:function(){var b=d(this).data("resizable");if(b._revertToRelativePosition&&d.browser.opera){b._revertToRelativePosition=false;el.css({position:"relative"})}d(this).removeData("resizable-alsoresize-start")}});d.ui.plugin.add("resizable","animate",{stop:function(b){var a= +d(this).data("resizable"),c=a.options,e=a._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName),f=g&&d.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height;g={width:a.size.width-(g?0:a.sizeDiff.width),height:a.size.height-f};f=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(d.extend(g,h&&f?{top:h,left:f}:{}),{duration:c.animateDuration,easing:c.animateEasing, +step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&d(e[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});d.ui.plugin.add("resizable","containment",{start:function(){var b=d(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof d?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= +d(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:d(document),left:0,top:0,width:d(document).width(),height:d(document).height()||document.body.parentNode.scrollHeight}}else{var e=d(a),g=[];d(["Top","Right","Left","Bottom"]).each(function(i,j){g[i]=m(e.css("padding"+j))});b.containerOffset=e.offset();b.containerPosition=e.position();b.containerSize={height:e.innerHeight()-g[3],width:e.innerWidth()-g[1]};c=b.containerOffset; +var f=b.containerSize.height,h=b.containerSize.width;h=d.ui.hasScroll(a,"left")?a.scrollWidth:h;f=d.ui.hasScroll(a)?a.scrollHeight:f;b.parentData={element:a,left:c.left,top:c.top,width:h,height:f}}}},resize:function(b){var a=d(this).data("resizable"),c=a.options,e=a.containerOffset,g=a.position;b=a._aspectRatio||b.shiftKey;var f={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))f=e;if(g.left<(a._helper?e.left:0)){a.size.width+=a._helper?a.position.left-e.left: +a.position.left-f.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?e.left:0}if(g.top<(a._helper?e.top:0)){a.size.height+=a._helper?a.position.top-e.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?e.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-f.left:a.offset.left-f.left)+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-f.top:a.offset.top- +e.top)+a.sizeDiff.height);g=a.containerElement.get(0)==a.element.parent().get(0);f=/relative|absolute/.test(a.containerElement.css("position"));if(g&&f)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(e+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-e;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=d(this).data("resizable"),a=b.options,c=b.containerOffset,e=b.containerPosition, +g=b.containerElement,f=d(b.helper),h=f.offset(),i=f.outerWidth()-b.sizeDiff.width;f=f.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f});b._helper&&!a.animate&&/static/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f})}});d.ui.plugin.add("resizable","ghost",{start:function(){var b=d(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, +display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=d(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=d(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});d.ui.plugin.add("resizable","grid",{resize:function(){var b= +d(this).data("resizable"),a=b.options,c=b.size,e=b.originalSize,g=b.originalPosition,f=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-e.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-e.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a}else if(/^(ne)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}else{if(/^(sw)$/.test(f)){b.size.width=e.width+h;b.size.height= +e.height+a}else{b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}b.position.left=g.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +; +/* + * jQuery UI Selectable 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting"); +b.unselecting=true;f._trigger("unselecting",c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f= +this;this.dragged=true;if(!this.options.disabled){var d=this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting"); +b.unselecting=true;f._trigger("unselecting",c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f= +this;this.dragged=true;if(!this.options.disabled){var d=this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); +false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, +destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== +"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", +c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), +"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); +(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| +this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); +else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); +this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, +destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); +;/* + * jQuery UI Dialog 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ +b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), +h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", +e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); +a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== +b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", +c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== +f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, +function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); +b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); +a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", +f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= +g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, +b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; +case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", +d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", +this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& +c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& +b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, +document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c= +d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| +(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": +"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", +function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", +null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", +function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, +j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", +function(){return false})},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, +"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", +true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide"); +this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", +null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, +select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); +if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, +abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= +function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); +c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| +typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, +arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ +b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, +10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* +a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); + if (this.classes) { + current.children("span").addClass(this.classes); + } + if (this.expanded) { + current.addClass("open"); + } + if (this.hasChildren || this.children && this.children.length) { + var branch = $("
      ").appendTo(current); + if (this.hasChildren) { + current.addClass("hasChildren"); + createNode.call({ + text:"placeholder", + id:"placeholder", + children:[] + }, branch); + } + if (this.children && this.children.length) { + $.each(this.children, createNode, [branch]) + } + } + } + $.each(response, createNode, [child]); + $(container).treeview({add: child}); + }); +} + +var proxied = $.fn.treeview; +$.fn.treeview = function(settings) { + if (!settings.url) { + return proxied.apply(this, arguments); + } + var container = this; + load(settings, "source", this, container); + var userToggle = settings.toggle; + return proxied.call(this, $.extend({}, settings, { + collapsed: true, + toggle: function() { + var $this = $(this); + if ($this.hasClass("hasChildren")) { + var childList = $this.removeClass("hasChildren").find("ul"); + childList.empty(); + load(settings, this.id, childList, container); + } + if (userToggle) { + userToggle.apply(this, arguments); + } + } + })); +}; + +})(jQuery); \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.css b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.css new file mode 100644 index 0000000..36d0394 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.css @@ -0,0 +1,90 @@ +.treeview, .treeview ul { + padding: 0; + margin: 0; + list-style: none; +} + +.treeview ul { + margin-top: 4px; +} + +.treeview .hitarea { + background: url(images/treeview-default.gif) -64px -25px no-repeat; + height: 16px; + width: 16px; + margin-left: -16px; + float: left; + cursor: pointer; +} +/* fix for IE6 */ +* html .hitarea { + display: inline; + float:none; +} + +.treeview li { + margin: 0; + padding: 3px 0 3px 16px; +} + +.treeview a.selected { + background-color: #eee; +} + +#treecontrol { margin: 1em 0; display: none; } + +.treeview .hover { color: black; cursor: pointer; } + +.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; } +.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; } + +.treeview .expandable-hitarea { background-position: -80px -3px; } + +.treeview li.last { background-position: 0 -1766px } +.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); } +.treeview li.lastCollapsable { background-position: 0 -111px } +.treeview li.lastExpandable { background-position: -32px -67px } + +.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; } + +.treeview-red li { background-image: url(images/treeview-red-line.gif); } +.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); } + +.treeview-black li { background-image: url(images/treeview-black-line.gif); } +.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); } + +.treeview-gray li { background-image: url(images/treeview-gray-line.gif); } +.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); } + +.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); } +.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); } + + +.filetree li { padding: 3px 0 2px 16px; } +.filetree span.folder, .filetree span.file { padding: 1px 0 1px 20px; display: block; } +.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; } +.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; } +.filetree span.file { background: url(images/page_white_text.png) 0 0 no-repeat; } + +.filetree li span a { + text-decoration: none; + font-size: 12px; + color: #517291; +} + +html, body {height:100%; margin: 0; padding: 0; } + +/* +html>body { + font-size: 16px; + font-size: 68.75%; +} Reset Base Font Size */ + /* +body { + font-family: Verdana, helvetica, arial, sans-serif; + font-size: 68.75%; + background: #fff; + color: #333; +} */ + +a img { border: none; } \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.js new file mode 100644 index 0000000..248e725 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.js @@ -0,0 +1,255 @@ +/* + * Treeview 1.4 - jQuery plugin to hide and show branches of a tree + * + * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ + * http://docs.jquery.com/Plugins/Treeview + * + * Copyright (c) 2007 Jörn Zaefferer + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ + * + */ + +;(function($) { + + $.extend($.fn, { + swapClass: function(c1, c2) { + var c1Elements = this.filter('.' + c1); + this.filter('.' + c2).removeClass(c2).addClass(c1); + c1Elements.removeClass(c1).addClass(c2); + return this; + }, + replaceClass: function(c1, c2) { + return this.filter('.' + c1).removeClass(c1).addClass(c2).end(); + }, + hoverClass: function(className) { + className = className || "hover"; + return this.hover(function() { + $(this).addClass(className); + }, function() { + $(this).removeClass(className); + }); + }, + heightToggle: function(animated, callback) { + animated ? + this.animate({ height: "toggle" }, animated, callback) : + this.each(function(){ + jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ](); + if(callback) + callback.apply(this, arguments); + }); + }, + heightHide: function(animated, callback) { + if (animated) { + this.animate({ height: "hide" }, animated, callback); + } else { + this.hide(); + if (callback) + this.each(callback); + } + }, + prepareBranches: function(settings) { + if (!settings.prerendered) { + // mark last tree items + this.filter(":last-child:not(ul)").addClass(CLASSES.last); + // collapse whole tree, or only those marked as closed, anyway except those marked as open + this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide(); + } + // return all items with sublists + return this.filter(":has(>ul)"); + }, + applyClasses: function(settings, toggler) { + this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) { + toggler.apply($(this).next()); + }).add( $("a", this) ).hoverClass(); + + if (!settings.prerendered) { + // handle closed ones first + this.filter(":has(>ul:hidden)") + .addClass(CLASSES.expandable) + .replaceClass(CLASSES.last, CLASSES.lastExpandable); + + // handle open ones + this.not(":has(>ul:hidden)") + .addClass(CLASSES.collapsable) + .replaceClass(CLASSES.last, CLASSES.lastCollapsable); + + // create hitarea + this.prepend("
      ").find("div." + CLASSES.hitarea).each(function() { + var classes = ""; + $.each($(this).parent().attr("class").split(" "), function() { + classes += this + "-hitarea "; + }); + $(this).addClass( classes ); + }); + } + + // apply event to hitarea + this.find("div." + CLASSES.hitarea).click( toggler ); + }, + treeview: function(settings) { + + if(typeof(window.treeCookieId) !== 'undefined' || window.treeCookieId === ""){ + treeCookieId = "treeview"; + } + + settings = $.extend({ + cookieId: treeCookieId + }, settings); + + if (settings.add) { + return this.trigger("add", [settings.add]); + } + + if ( settings.toggle ) { + var callback = settings.toggle; + settings.toggle = function() { + return callback.apply($(this).parent()[0], arguments); + }; + } + + // factory for treecontroller + function treeController(tree, control) { + // factory for click handlers + function handler(filter) { + return function() { + // reuse toggle event handler, applying the elements to toggle + // start searching for all hitareas + toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { + // for plain toggle, no filter is provided, otherwise we need to check the parent element + return filter ? $(this).parent("." + filter).length : true; + }) ); + return false; + }; + } + // click on first element to collapse tree + $("a:eq(0)", control).click( handler(CLASSES.collapsable) ); + // click on second to expand tree + $("a:eq(1)", control).click( handler(CLASSES.expandable) ); + // click on third to toggle tree + $("a:eq(2)", control).click( handler() ); + } + + // handle toggle event + function toggler() { + $(this) + .parent() + // swap classes for hitarea + .find(">.hitarea") + .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) + .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) + .end() + // swap classes for parent li + .swapClass( CLASSES.collapsable, CLASSES.expandable ) + .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) + // find child lists + .find( ">ul" ) + // toggle them + .heightToggle( settings.animated, settings.toggle ); + if ( settings.unique ) { + $(this).parent() + .siblings() + // swap classes for hitarea + .find(">.hitarea") + .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) + .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) + .end() + .replaceClass( CLASSES.collapsable, CLASSES.expandable ) + .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) + .find( ">ul" ) + .heightHide( settings.animated, settings.toggle ); + } + } + //Cookie Persistence + function serialize() { + function binary(arg) { + return arg ? 1 : 0; + } + var data = []; + branches.each(function(i, e) { + data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0; + }); + $.cookie(settings.cookieId, data.join("") ); + } + + function deserialize() { + var stored = $.cookie(settings.cookieId); + if ( stored ) { + var data = stored.split(""); + branches.each(function(i, e) { + $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ](); + }); + } + } + + // add treeview class to activate styles + this.addClass("treeview"); + + // prepare branches and find all tree items with child lists + var branches = this.find("li").prepareBranches(settings); + + switch(settings.persist) { + case "cookie": + var toggleCallback = settings.toggle; + settings.toggle = function() { + serialize(); + if (toggleCallback) { + toggleCallback.apply(this, arguments); + } + }; + deserialize(); + break; + case "location": + var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); }); + if ( current.length ) { + current.addClass("selected").parents("ul, li").add( current.next() ).show(); + } + break; + } + + branches.applyClasses(settings, toggler); + + // if control option is set, create the treecontroller and show it + if ( settings.control ) { + treeController(this, settings.control); + $(settings.control).show(); + } + + return this.bind("add", function(event, branches) { + $(branches).prev() + .removeClass(CLASSES.last) + .removeClass(CLASSES.lastCollapsable) + .removeClass(CLASSES.lastExpandable) + .find(">.hitarea") + .removeClass(CLASSES.lastCollapsableHitarea) + .removeClass(CLASSES.lastExpandableHitarea); + $(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, toggler); + }); + } + }); + + // classes used by the plugin + // need to be styled via external stylesheet, see first example + var CLASSES = $.fn.treeview.classes = { + open: "open", + closed: "closed", + expandable: "expandable", + expandableHitarea: "expandable-hitarea", + lastExpandableHitarea: "lastExpandable-hitarea", + collapsable: "collapsable", + collapsableHitarea: "collapsable-hitarea", + lastCollapsableHitarea: "lastCollapsable-hitarea", + lastCollapsable: "lastCollapsable", + lastExpandable: "lastExpandable", + last: "last", + hitarea: "hitarea" + }; + + // provide backwards compability + $.fn.Treeview = $.fn.treeview; + +})(jQuery); \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.min.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.min.js new file mode 100644 index 0000000..e693321 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.min.js @@ -0,0 +1,16 @@ +/* + * Treeview 1.4 - jQuery plugin to hide and show branches of a tree + * + * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ + * http://docs.jquery.com/Plugins/Treeview + * + * Copyright (c) 2007 Jörn Zaefferer + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ + * kasunbg: changed the cookieid name + * + */;(function($){$.extend($.fn,{swapClass:function(c1,c2){var c1Elements=this.filter('.'+c1);this.filter('.'+c2).removeClass(c2).addClass(c1);c1Elements.removeClass(c1).addClass(c2);return this;},replaceClass:function(c1,c2){return this.filter('.'+c1).removeClass(c1).addClass(c2).end();},hoverClass:function(className){className=className||"hover";return this.hover(function(){$(this).addClass(className);},function(){$(this).removeClass(className);});},heightToggle:function(animated,callback){animated?this.animate({height:"toggle"},animated,callback):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();if(callback)callback.apply(this,arguments);});},heightHide:function(animated,callback){if(animated){this.animate({height:"hide"},animated,callback);}else{this.hide();if(callback)this.each(callback);}},prepareBranches:function(settings){if(!settings.prerendered){this.filter(":last-child:not(ul)").addClass(CLASSES.last);this.filter((settings.collapsed?"":"."+CLASSES.closed)+":not(."+CLASSES.open+")").find(">ul").hide();}return this.filter(":has(>ul)");},applyClasses:function(settings,toggler){this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event){toggler.apply($(this).next());}).add($("a",this)).hoverClass();if(!settings.prerendered){this.filter(":has(>ul:hidden)").addClass(CLASSES.expandable).replaceClass(CLASSES.last,CLASSES.lastExpandable);this.not(":has(>ul:hidden)").addClass(CLASSES.collapsable).replaceClass(CLASSES.last,CLASSES.lastCollapsable);this.prepend("
      ").find("div."+CLASSES.hitarea).each(function(){var classes="";$.each($(this).parent().attr("class").split(" "),function(){classes+=this+"-hitarea ";});$(this).addClass(classes);});}this.find("div."+CLASSES.hitarea).click(toggler);},treeview:function(settings){if(typeof(window.treeCookieId) === 'undefined' || window.treeCookieId === ""){treeCookieId = "treeview";} settings=$.extend({cookieId: treeCookieId},settings);if(settings.add){return this.trigger("add",[settings.add]);}if(settings.toggle){var callback=settings.toggle;settings.toggle=function(){return callback.apply($(this).parent()[0],arguments);};}function treeController(tree,control){function handler(filter){return function(){toggler.apply($("div."+CLASSES.hitarea,tree).filter(function(){return filter?$(this).parent("."+filter).length:true;}));return false;};}$("a:eq(0)",control).click(handler(CLASSES.collapsable));$("a:eq(1)",control).click(handler(CLASSES.expandable));$("a:eq(2)",control).click(handler());}function toggler(){$(this).parent().find(">.hitarea").swapClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).swapClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().swapClass(CLASSES.collapsable,CLASSES.expandable).swapClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightToggle(settings.animated,settings.toggle);if(settings.unique){$(this).parent().siblings().find(">.hitarea").replaceClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).replaceClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().replaceClass(CLASSES.collapsable,CLASSES.expandable).replaceClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightHide(settings.animated,settings.toggle);}}function serialize(){function binary(arg){return arg?1:0;}var data=[];branches.each(function(i,e){data[i]=$(e).is(":has(>ul:visible)")?1:0;});$.cookie(settings.cookieId,data.join(""));}function deserialize(){var stored=$.cookie(settings.cookieId);if(stored){var data=stored.split("");branches.each(function(i,e){$(e).find(">ul")[parseInt(data[i])?"show":"hide"]();});}}this.addClass("treeview");var branches=this.find("li").prepareBranches(settings);switch(settings.persist){case"cookie":var toggleCallback=settings.toggle;settings.toggle=function(){serialize();if(toggleCallback){toggleCallback.apply(this,arguments);}};deserialize();break;case"location":var current=this.find("a").filter(function(){return this.href.toLowerCase()==location.href.toLowerCase();});if(current.length){current.addClass("selected").parents("ul, li").add(current.next()).show();}break;}branches.applyClasses(settings,toggler);if(settings.control){treeController(this,settings.control);$(settings.control).show();}return this.bind("add",function(event,branches){$(branches).prev().removeClass(CLASSES.last).removeClass(CLASSES.lastCollapsable).removeClass(CLASSES.lastExpandable).find(">.hitarea").removeClass(CLASSES.lastCollapsableHitarea).removeClass(CLASSES.lastExpandableHitarea);$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings,toggler);});}});var CLASSES=$.fn.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"};$.fn.Treeview=$.fn.treeview;})(jQuery); \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.pack.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.pack.js new file mode 100644 index 0000000..eddac49 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/jquery/treeview/jquery.treeview.pack.js @@ -0,0 +1,16 @@ +/* + * Treeview 1.4 - jQuery plugin to hide and show branches of a tree + * + * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ + * http://docs.jquery.com/Plugins/Treeview + * + * Copyright (c) 2007 Jörn Zaefferer + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ + * + */ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(4($){$.1l($.F,{E:4(b,c){l a=3.n(\'.\'+b);3.n(\'.\'+c).o(c).m(b);a.o(b).m(c);8 3},s:4(a,b){8 3.n(\'.\'+a).o(a).m(b).P()},1n:4(a){a=a||"1j";8 3.1j(4(){$(3).m(a)},4(){$(3).o(a)})},1h:4(b,a){b?3.1g({1e:"p"},b,a):3.x(4(){T(3)[T(3).1a(":U")?"H":"D"]();7(a)a.A(3,O)})},12:4(b,a){7(b){3.1g({1e:"D"},b,a)}1L{3.D();7(a)3.x(a)}},11:4(a){7(!a.1k){3.n(":r-1H:G(9)").m(k.r);3.n((a.1F?"":"."+k.X)+":G(."+k.W+")").6(">9").D()}8 3.n(":y(>9)")},S:4(b,c){3.n(":y(>9):G(:y(>a))").6(">1z").C(4(a){c.A($(3).19())}).w($("a",3)).1n();7(!b.1k){3.n(":y(>9:U)").m(k.q).s(k.r,k.t);3.G(":y(>9:U)").m(k.u).s(k.r,k.v);3.1r("").6("J."+k.5).x(4(){l a="";$.x($(3).B().1o("14").13(" "),4(){a+=3+"-5 "});$(3).m(a)})}3.6("J."+k.5).C(c)},z:4(g){g=$.1l({N:"z"},g);7(g.w){8 3.1K("w",[g.w])}7(g.p){l d=g.p;g.p=4(){8 d.A($(3).B()[0],O)}}4 1m(b,c){4 L(a){8 4(){K.A($("J."+k.5,b).n(4(){8 a?$(3).B("."+a).1i:1I}));8 1G}}$("a:10(0)",c).C(L(k.u));$("a:10(1)",c).C(L(k.q));$("a:10(2)",c).C(L())}4 K(){$(3).B().6(">.5").E(k.Z,k.Y).E(k.I,k.M).P().E(k.u,k.q).E(k.v,k.t).6(">9").1h(g.1f,g.p);7(g.1E){$(3).B().1D().6(">.5").s(k.Z,k.Y).s(k.I,k.M).P().s(k.u,k.q).s(k.v,k.t).6(">9").12(g.1f,g.p)}}4 1d(){4 1C(a){8 a?1:0}l b=[];j.x(4(i,e){b[i]=$(e).1a(":y(>9:1B)")?1:0});$.V(g.N,b.1A(""))}4 1c(){l b=$.V(g.N);7(b){l a=b.13("");j.x(4(i,e){$(e).6(">9")[1y(a[i])?"H":"D"]()})}}3.m("z");l j=3.6("Q").11(g);1x(g.1w){18"V":l h=g.p;g.p=4(){1d();7(h){h.A(3,O)}};1c();17;18"1b":l f=3.6("a").n(4(){8 3.16.15()==1b.16.15()});7(f.1i){f.m("1v").1u("9, Q").w(f.19()).H()}17}j.S(g,K);7(g.R){1m(3,g.R);$(g.R).H()}8 3.1t("w",4(a,b){$(b).1s().o(k.r).o(k.v).o(k.t).6(">.5").o(k.I).o(k.M);$(b).6("Q").1q().11(g).S(g,K)})}});l k=$.F.z.1J={W:"W",X:"X",q:"q",Y:"q-5",M:"t-5",u:"u",Z:"u-5",I:"v-5",v:"v",t:"t",r:"r",5:"5"};$.F.1p=$.F.z})(T);',62,110,'|||this|function|hitarea|find|if|return|ul||||||||||||var|addClass|filter|removeClass|toggle|expandable|last|replaceClass|lastExpandable|collapsable|lastCollapsable|add|each|has|treeview|apply|parent|click|hide|swapClass|fn|not|show|lastCollapsableHitarea|div|toggler|handler|lastExpandableHitarea|cookieId|arguments|end|li|control|applyClasses|jQuery|hidden|cookie|open|closed|expandableHitarea|collapsableHitarea|eq|prepareBranches|heightHide|split|class|toLowerCase|href|break|case|next|is|location|deserialize|serialize|height|animated|animate|heightToggle|length|hover|prerendered|extend|treeController|hoverClass|attr|Treeview|andSelf|prepend|prev|bind|parents|selected|persist|switch|parseInt|span|join|visible|binary|siblings|unique|collapsed|false|child|true|classes|trigger|else'.split('|'),0,{})) \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/main-openstack.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/main-openstack.js new file mode 100644 index 0000000..81a4e3f --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/common/main-openstack.js @@ -0,0 +1,198 @@ +/** + * Miscellaneous js functions for WebHelp + * Kasun Gajasinghe, http://kasunbg.blogspot.com + * David Cramer, http://www.thingbag.net + * + */ + +$(document).ready(function() { + + + // When you click on a link to an anchor, scroll down + // 105 px to cope with the fact that the banner + // hides the top 95px or so of the page. + // This code deals with the problem when + // you click on a link within a page. + $('a[href*=#]').click(function() { + if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') + && location.hostname == this.hostname) { + var $target = $(this.hash); + $target = $target.length && $target + || $('[name=' + this.hash.slice(1) +']'); + if ($target.length) { + var targetOffset = $target.offset().top - 105; + $('html,body') + .animate({scrollTop: targetOffset}, 200); + return false; + } + } + }); + + + + // $("#showHideHighlight").button(); //add jquery button styling to 'Go' button + //Generate tabs in nav-pane with JQuery + $(function() { + $("#tabs").tabs({ + cookie: { + // store cookie for 2 days. + expires: 2 + } + }); + }); + + //Generate the tree + $("#ulTreeDiv").attr("style",""); + $("#tree").treeview({ + collapsed: true, + animated: "medium", + control: "#sidetreecontrol", + persist: "cookie" + }); + + //after toc fully styled, display it. Until loading, a 'loading' image will be displayed + $("#tocLoading").attr("style","display:none;"); +// $("#ulTreeDiv").attr("style","display:block;"); + + //.searchButton is the css class applied to 'Go' button + $(function() { + $("button", ".searchButton").button(); + + $("button", ".searchButton").click(function() { return false; }); + }); + + //'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab) + if ($.cookie('ui-tabs-1') === '1') { //search tab is visible + if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) { + document.getElementById('textToSearch').value = $.cookie('textToSearch'); + Verifie('diaSearch_Form'); + searchHighlight($.cookie('textToSearch')); + $("#showHideHighlight").css("display","block"); + } + } + + syncToc(); //Synchronize the toc tree with the content pane, when loading the page. + //$("#doSearch").button(); //add jquery button styling to 'Go' button + + // When you click on a link to an anchor, scroll down + // 105 px to cope with the fact that the banner + // hides the top 95px or so of the page. + // This code deals with the problem when + // you click on a link from another page. + var hash = window.location.hash; + if(hash){ + var targetOffset = $(hash).offset().top - 105; + $('html,body').animate({scrollTop: targetOffset}, 200); + return false; + } + +}); + +/** + * Synchronize with the tableOfContents + */ +function syncToc(){ + var a = document.getElementById("webhelp-currentid"); + if (a != undefined) { + var b = a.getElementsByTagName("a")[0]; + + if (b != undefined) { + //Setting the background for selected node. + var style = a.getAttribute("style", 2); + if (style != null && !style.match(/background-color: Background;/)) { + a.setAttribute("style", "background-color: #DEE9E9; " + style); + b.setAttribute("style", "color: black;"); + } else if (style != null) { + a.setAttribute("style", "background-color: #DEE9E9; " + style); + b.setAttribute("style", "color: black;"); + } else { + a.setAttribute("style", "background-color: #DEE9E9; "); + b.setAttribute("style", "color: black;"); + } + } + + //shows the node related to current content. + //goes a recursive call from current node to ancestor nodes, displaying all of them. + while (a.parentNode && a.parentNode.nodeName) { + var parentNode = a.parentNode; + var nodeName = parentNode.nodeName; + + if (nodeName.toLowerCase() == "ul") { + parentNode.setAttribute("style", "display: block;"); + } else if (nodeName.toLocaleLowerCase() == "li") { + parentNode.setAttribute("class", "collapsable"); + parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea "); + } + a = parentNode; + } + } +} + +/** + * Code for Show/Hide TOC + * + */ +function showHideToc() { + var showHideButton = $("#showHideButton"); + var leftNavigation = $("#leftnavigation"); + var content = $("#content"); + + if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) { + //Hide TOC + showHideButton.removeClass('pointLeft').addClass('pointRight'); + content.css("margin", "0 0 0 0"); + leftNavigation.css("display","none"); + showHideButton.attr("title", "Show the TOC tree"); + } else { + //Show the TOC + showHideButton.removeClass('pointRight').addClass('pointLeft'); + content.css("margin", "0 0 0 280px"); + leftNavigation.css("display","block"); + showHideButton.attr("title", "Hide the TOC Tree"); + } +} + +/** + * Code for search highlighting + */ +var highlightOn = true; +function searchHighlight(searchText) { + highlightOn = true; + if (searchText != undefined) { + var wList; + var sList = new Array(); //stem list + //Highlight the search terms + searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, " 0) { + document.getElementById('textToSearch').value = $.cookie('textToSearch'); + Effectuer_recherche($.cookie('textToSearch')); + searchHighlight($.cookie('textToSearch')); + $("#showHideHighlight").css("display","block"); + } + } + + syncToc(); //Synchronize the toc tree with the content pane, when loading the page. + //$("#doSearch").button(); //add jquery button styling to 'Go' button + + // When you click on a link to an anchor, scroll down + // 105 px to cope with the fact that the banner + // hides the top 95px or so of the page. + // This code deals with the problem when + // you click on a link from another page. + var hash = window.location.hash; + if(hash){ + var targetOffset = $(hash).offset().top - 105; + $('html,body').animate({scrollTop: targetOffset}, 200); + return false; + } + +}); + +/** + * Synchronize with the tableOfContents + */ +function syncToc(){ + var a = document.getElementById("webhelp-currentid"); + if (a != undefined) { + var b = a.getElementsByTagName("a")[0]; + + if (b != undefined) { + //Setting the background for selected node. + var style = a.getAttribute("style", 2); + if (style != null && !style.match(/background-color: Background;/)) { + a.setAttribute("style", "background-color: #D8D8D8; " + style); + b.setAttribute("style", "color: black;"); + } else if (style != null) { + a.setAttribute("style", "background-color: #D8D8D8; " + style); + b.setAttribute("style", "color: black;"); + } else { + a.setAttribute("style", "background-color: #D8D8D8; "); + b.setAttribute("style", "color: black;"); + } + } + + //shows the node related to current content. + //goes a recursive call from current node to ancestor nodes, displaying all of them. + while (a.parentNode && a.parentNode.nodeName) { + var parentNode = a.parentNode; + var nodeName = parentNode.nodeName; + + if (nodeName.toLowerCase() == "ul") { + parentNode.setAttribute("style", "display: block;"); + } else if (nodeName.toLocaleLowerCase() == "li") { + parentNode.setAttribute("class", "collapsable"); + parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea "); + } + a = parentNode; + } + } +} + +/** + * Code for Show/Hide TOC + * + */ +function showHideToc() { + var showHideButton = $("#showHideButton"); + var leftNavigation = $("#leftnavigation"); + var content = $("#content"); + + if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) { + //Hide TOC + showHideButton.removeClass('pointLeft').addClass('pointRight'); + content.css("margin", "125px 0 0 0"); + leftNavigation.css("display","none"); + showHideButton.attr("title", "Show the TOC tree"); + $("body").addClass("sidebar"); + } else { + //Show the TOC + showHideButton.removeClass('pointRight').addClass('pointLeft'); + content.css("margin", "125px 0 0 280px"); + leftNavigation.css("display","block"); + showHideButton.attr("title", "Hide the TOC Tree"); + $("body").removeClass("sidebar"); + } +} + +/** + * Code for search highlighting + */ +var highlightOn = true; +function searchHighlight(searchText) { + highlightOn = true; + if (searchText != undefined) { + var wList; + var sList = new Array(); //stem list + //Highlight the search terms + searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, " 0) { + document.getElementById('textToSearch').value = $.cookie('textToSearch'); + Verifie('diaSearch_Form'); + searchHighlight($.cookie('textToSearch')); + $("#showHideHighlight").css("display","block"); + } + } + + syncToc(); //Synchronize the toc tree with the content pane, when loading the page. + //$("#doSearch").button(); //add jquery button styling to 'Go' button + + // When you click on a link to an anchor, scroll down + // 105 px to cope with the fact that the banner + // hides the top 95px or so of the page. + // This code deals with the problem when + // you click on a link from another page. + var hash = window.location.hash; + if(hash){ + var targetOffset = $(hash).offset().top - 105; + $('html,body').animate({scrollTop: targetOffset}, 200); + return false; + } + +}); + +/** + * Synchronize with the tableOfContents + */ +function syncToc(){ + var a = document.getElementById("webhelp-currentid"); + if (a != undefined) { + var b = a.getElementsByTagName("a")[0]; + + if (b != undefined) { + //Setting the background for selected node. + var style = a.getAttribute("style", 2); + if (style != null && !style.match(/background-color: Background;/)) { + a.setAttribute("style", "background-color: #DEE9E9; " + style); + b.setAttribute("style", "color: black;"); + } else if (style != null) { + a.setAttribute("style", "background-color: #DEE9E9; " + style); + b.setAttribute("style", "color: black;"); + } else { + a.setAttribute("style", "background-color: #DEE9E9; "); + b.setAttribute("style", "color: black;"); + } + } + + //shows the node related to current content. + //goes a recursive call from current node to ancestor nodes, displaying all of them. + while (a.parentNode && a.parentNode.nodeName) { + var parentNode = a.parentNode; + var nodeName = parentNode.nodeName; + + if (nodeName.toLowerCase() == "ul") { + parentNode.setAttribute("style", "display: block;"); + } else if (nodeName.toLocaleLowerCase() == "li") { + parentNode.setAttribute("class", "collapsable"); + parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea "); + } + a = parentNode; + } + } +} + +/** + * Code for Show/Hide TOC + * + */ +function showHideToc() { + var showHideButton = $("#showHideButton"); + var leftNavigation = $("#leftnavigation"); + var content = $("#content"); + + if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) { + //Hide TOC + showHideButton.removeClass('pointLeft').addClass('pointRight'); + content.css("margin", "0 0 0 0"); + leftNavigation.css("display","none"); + showHideButton.attr("title", "Show the TOC tree"); + } else { + //Show the TOC + showHideButton.removeClass('pointRight').addClass('pointLeft'); + content.css("margin", "0 0 0 280px"); + leftNavigation.css("display","block"); + showHideButton.attr("title", "Hide the TOC Tree"); + } +} + +/** + * Code for search highlighting + */ +var highlightOn = true; +function searchHighlight(searchText) { + highlightOn = true; + if (searchText != undefined) { + var wList; + var sList = new Array(); //stem list + //Highlight the search terms + searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, " + + + +Chapter 2. Background
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 

      + This chapter provides background information on OpenStack + extensions and the OpenStack extension mechanism. It + describes what extensions are, how the extension mechanism + in OpenStack is related to the OpenGL extension mechanism, + the differences between extensions and versions, the + concept of versioning extensions, and why extensions are + vital when defining a pluggable architecture. +



      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01.html new file mode 100644 index 0000000..a116733 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01.html @@ -0,0 +1,54 @@ + + + + +Chapter 1. Overview
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 

      + The OpenStack extension mechanism makes it possible to add + functionality to OpenStack APIs in a manner that ensures + compatibility with existing clients. This capability + allows OpenStack operators and vendors to provide + innovative functionality to their clients and provides a + means by which new features may be considered in upcoming + versions of OpenStack APIs. +

      + This document describes the extension mechanism in detail. + It provides guidance to API implementors and clients on + developing and consuming API extensions, it describes the + rules by which extensions are governed, and it describes + the process used to promote API extensions to new features. +



      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s01.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s01.html new file mode 100644 index 0000000..e641c4c --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s01.html @@ -0,0 +1,45 @@ + + + + +1.1. Intended Audience \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s02.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s02.html new file mode 100644 index 0000000..0a57bc5 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s02.html @@ -0,0 +1,54 @@ + + + + +1.2. Organization of this Document
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 
      Chapter 2, Background

      + Provides background information on + OpenStack extensions and the OpenStack + extension mechanism. +

      + Describes the specifics of implementing + and consuming extensions in ReST APIs. +

      + Describes API governance and the process + by which extensions can be promoted to new + features in future revisions of an API. +

      Briefly summarizes the benefits of the extension mechanism and + provides a brief overview of how extensions are used.



      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s03.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s03.html new file mode 100644 index 0000000..ba79b6c --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch01s03.html @@ -0,0 +1,50 @@ + + + + +1.3. Document Change History
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 
      + + + + + +
      Revision DateSummary of Changes
      June 10, 2011 +
      • Initial draft.

      +


      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s01.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s01.html new file mode 100644 index 0000000..222731f --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s01.html @@ -0,0 +1,81 @@ + + + + +2.1. What are Extensions?
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 

      + OpenStack APIs are defined strictly in two forms: a + human-readable specification (usually in the form of a + developer's guide) and a machine-processable + WADL. These specifications define the core actions, + capabilities, and media-types of the API. A client can + always depend on the availability of this + core API and implementers are + always required to support it in its entirety. Requiring strict adherence to the + core API allows clients to rely upon a minimal level + of functionality when interacting with multiple + implementations of the same API. +

      + Note that it is quite possible that distinct + implementations of an OpenStack API exist. First + because API specifications are released under a free + license, so anyone may use them to implement a core + API. Furthermore, the OpenStack implementations + themselves are released under a free license, making + it possible to alter the code to create a specialized + version. Such a specialized implementation could + remain OpenStack-compatible even if it were to + implement new features or add new capabilities, but + only if it made the changes in a manner that ensures + that a client expecting a core API would continue to + function normally — this is where extensions + come in. +

      An extension adds capabilities to an API beyond those + defined in the core. The introduction of new features, MIME types, actions, states, + headers, parameters, and resources can all be accomplished by means of extensions to + the core API. In order for extensions to work, the core API must be written in such + a manner that it allows for extensibility. Additionally, care should be taken to + ensure that extensions defined by different implementers don't clash with one + another, that clients can detect the presence of extensions via a standard method, + and that there is a clear promotion path at the end of which an extension may become + part of a future version of the core API. These actions, rules, and processes + together form the extension mechanism. It is important that + core APIs adhere to this mechanism in order to ensure compatibility as new + extensions are defined. Note also that while a core API may be written to allow for + extensibility, the extensions themselves are never part of the core.



      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s02.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s02.html new file mode 100644 index 0000000..c52fe1a --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s02.html @@ -0,0 +1,97 @@ + + + + +2.2. Relationship to OpenGL
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 

      + In the 1990s, OpenGL was developed as a portable open + graphics library standard. The goal was to provide a + cross-platform library that could enable developers to + produce 3D graphics at real time speeds (30-120 frames + per second). There were several major challenges to + meeting this goal. In order to be considered an open + standard, control needed to shift from Silicon + Graphics (SGI), who originally developed OpenGL, to an + independent Architecture Review Board (ARB) who would + be responsible for approving specification changes, + marking new releases, and ensuring conformance + testing. Additionally, the graphics library itself + would need to be designed in a manner that would allow + the establishment of a stable and portable platform + for developers. Finally, the library would need to + garner the support of graphics hardware vendors as + they would be providing the hardware acceleration + needed to meet the goal of performing at real-time + speeds. +

      Gaining vendor support is challenging because vendors are often in direct + competition with one another. They differentiate themselves by creating innovative + new features and by providing niche functionality to their users. Thus, OpenGL was + faced with two competing requirements. On the one hand, it needed to abstract away + vendor differences in order to provide a stable cross-platform environment to + developers. On the other hand, in order to garner vendor support, it needed a method + by which vendors could differentiate themselves and provide innovative new features + and niche functionality to their users.

      The OpenGL extension mechanism was developed to solve these problems. The + extension mechanism achieved balance between the two requirements by maintaining the + core specification under the direction of the Architecture Review Board while + allowing vendors to define extensions to the core OpenGL specification. The core + specification remained uncluttered and presented a unified view of common + functionality. Because extensions were detectable at run time, developers could + write portable applications that could adapt to the hardware on which they were + running. This method of allowing for an extensible API has proven to be a very + successful strategy. More than 500 extensions have been defined in OpenGL's lifetime + and many vendors, including NVidia, ATI, Apple, IBM, and Intel, have participated in + the process by developing their own custom extensions. Additionally, many key + innovations (such as vertex and fragment shaders) have been developed via the + extension process and are now part of the core OpenGL API.

      OpenStack, while very different from OpenGL, shares many similar goals and faces + many of the same challenges. OpenStack APIs are designed to be open API standards. + An important goal is to provide developers with a ubiquitous, stable, any-scale + cloud development platform that abstracts away many of the differences between + hosting providers and their underlying infrastructure (hypervisors, load balancers, + etc.). A Policy Review Board, similar to OpenGL's Architecture Review Board, is + responsible for directing development of these APIs in a manner that ensures these + goals are met. As with OpenGL, OpenStack requires support from vendors (and cloud + providers) in order to be successful. As a result, OpenStack APIs also aim to + provide vendors with a platform which allows them to differentiate themselves by + providing innovative new features and niche functionality to their users. Because of + these similarities, the OpenStack extension mechanism described in this document is + modeled after the OpenGL extension mechanism. The methods by which extensions are + defined vary drastically, of course, since the nature of the APIs is very different + (C versus ReST); however, the manner in which extensions are documented, the way in + which vendors are attributed, and the promotion path that an extension follows, all + borrow heavily from OpenGL.



      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s03.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s03.html new file mode 100644 index 0000000..57fb7c7 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s03.html @@ -0,0 +1,146 @@ + + + + +2.3. Extensions and Versions
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 

      Extensions are always interpreted in relation to a version of the core API. In + other words, from a client's perspective, an extension modifies a + particular version of the core API in some way. In reality, an + extension may be applicable to several versions of an API at once. For example, a + particular extension may continue to be available as a core API moves from one + version to another. In fact, different implementations may decide to include support + for an extension at different versions. As explained in + , + when an extension is defined, the minimal version of the core API that is required + to run the extension is specified; implementers are free to support the extension in + that version or in a later version of the core. Note, however, that because the + extension mechanism allows for promotion, an extension in one version of a core API + may become a standard feature in a later version.

      [Note]Note

      + As always, implementers are not required to + support an extension unless it is promoted to the + core. +

      Because several versions of the core API may be supported simultaneously, and + because each version may offer support for a different set of extensions, clients + must be able to detect what versions and extensions are available in a particular + deployment. Thus, both extensions and versions are queryable. Issuing a GET on the + base URL (/) of the API endpoint returns information about what + versions are available. Similarly, issuing a GET on the API's extensions resource + (/v1.1/extensions) returns information about what extensions are + available. (See + + for details of such requests.) Note that, + since extensions modify a particular version of the API, the extensions + resource itself is always accessed at a particular version.

      Backward-compatible changes in an API usually require a minor version bump. In an + extensible API, however, these changes can be brought in as extensions. The net + effect is that versions change infrequently and thus provide a stable platform on + which to develop. The Policy Review Board (PRB), with the help of project team + leaders, is responsible for ensuring that this stability is maintained by closely + guarding core API versions. Extensions, however, can be developed without the + consent or approval of the PRB. They can be developed in a completely decentralized + manner both by individual OpenStack developers and by commercial vendors. Because + extensions can be promoted to standard features, the development of new versions can + be influenced significantly by individual developers and the OpenStack client + community and is therefore not strictly defined by the PRB. In other words, new + features of a core API may be developed in a bottom-up fashion.

      + That said, not all extensions are destined to be + promoted to the next API version. Core APIs always + deals with core functionality — functionality + that is supported by all implementations and is + applicable in common cases. Extensions that deal with + niche functionality should always remain extensions. +

      + The table below summarizes the differences between + versions and extensions. +




      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s04.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s04.html new file mode 100644 index 0000000..98900a3 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s04.html @@ -0,0 +1,54 @@ + + + + +2.4. Versioning Extensions \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s05.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s05.html new file mode 100644 index 0000000..dd228c1 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/ch02s05.html @@ -0,0 +1,52 @@ + + + + +2.5. Extensions and Pluggability \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/index.html b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/index.html new file mode 100644 index 0000000..2cd2b8c --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/index.html @@ -0,0 +1,53 @@ + + + + +OpenStack API Extensions
      DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT -  DRAFT - 

      + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at +

      http://www.apache.org/licenses/LICENSE-2.0

      + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +

      2011-06-10

      Abstract

      + This document provides an overview of the OpenStack API extension + mechanism. +


      List of Figures

      2.1. Extensions and Pluggability

      List of Tables

      2.1. Versions versus Extensions


      \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/default.props b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/default.props new file mode 100644 index 0000000..22edf43 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/default.props @@ -0,0 +1 @@ +DEF01=a \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/en-us.props b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/en-us.props new file mode 100644 index 0000000..da284ce --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/en-us.props @@ -0,0 +1,45 @@ +DEF01=this +DEF02=is +DEF03=the +DEF04=in +DEF05=i +DEF06=on +DEF07=a +DEF08=about +DEF09=an +DEF10=are +DEF11=as +DEF12=at +DEF13=be +DEF14=by +DEF15=com +DEF16=de +DEF17=en +DEF18=for +DEF19=from +DEF20=how +DEF21=it +DEF22=la +DEF23=of +DEF24=on +DEF25=or +DEF26=that +DEF27=to +DEF28=was +DEF29=what +DEF30=when +DEF31=where +DEF32=who +DEF33=will +DEF34=with +DEF35=und +DEF36=Next +DEF37=Prev +DEF38=Home +DEF39=Motive +DEF40=Inc +DEF41=Copyright +DEF42=All +DEF43=rights +DEF44=reserved +DEF45=Up \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/es-es.props b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/es-es.props new file mode 100644 index 0000000..fb73bdc --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/es-es.props @@ -0,0 +1,179 @@ +DEF01=un +DEF02=una +DEF03=unas +DEF04=unos +DEF05=uno +DEF06=sobre +DEF07=todo +DEF08=tambin +DEF09=tras +DEF10=otro +DEF11=algn +DEF12=alguno +DEF13=alguna +DEF14=algunos +DEF15=algunas +DEF16=ser +DEF17=es +DEF18=soy +DEF19=eres +DEF20=somos +DEF21=sois +DEF22=estoy +DEF23=esta +DEF24=estamos +DEF25=estais +DEF26=estan +DEF27=como +DEF28=en +DEF29=para +DEF30=atras +DEF31=porque +DEF32=por +DEF33=estado +DEF34=estaba +DEF35=ante +DEF36=antes +DEF37=siendo +DEF38=ambos +DEF39=pero +DEF40=por +DEF41=poder +DEF42=puede +DEF43=puedo +DEF44=podemos +DEF45=podeis +DEF46=pueden +DEF47=fui +DEF48=fue +DEF49=fuimos +DEF50=fueron +DEF51=hacer +DEF52=hago +DEF53=hace +DEF54=hacemos +DEF55=haceis +DEF56=hacen +DEF57=cada +DEF58=fin +DEF59=incluso +DEF60=primero +DEF61=desde +DEF62=conseguir +DEF63=consigo +DEF64=consigue +DEF65=consigues +DEF66=conseguimos +DEF67=consiguen +DEF68=ir +DEF69=voy +DEF70=va +DEF71=vamos +DEF72=vais +DEF73=van +DEF74=vaya +DEF75=gueno +DEF76=ha +DEF77=tener +DEF78=tengo +DEF79=tiene +DEF80=tenemos +DEF81=teneis +DEF82=tienen +DEF83=el +DEF84=la +DEF85=lo +DEF86=las +DEF87=los +DEF88=su +DEF89=aqui +DEF90=mio +DEF91=tuyo +DEF92=ellos +DEF93=ellas +DEF94=nos +DEF95=nosotros +DEF96=vosotros +DEF97=vosotras +DEF98=si +DEF99=dentro +DEF100=solo +DEF101=solamente +DEF102=saber +DEF103=sabes +DEF104=sabe +DEF105=sabemos +DEF106=sabeis +DEF107=saben +DEF108=ultimo +DEF109=largo +DEF110=bastante +DEF111=haces +DEF112=muchos +DEF113=aquellos +DEF114=aquellas +DEF115=sus +DEF116=entonces +DEF117=tiempo +DEF118=verdad +DEF119=verdadero +DEF120=verdadera +DEF121=cierto +DEF122=ciertos +DEF123=cierta +DEF124=ciertas +DEF125=intentar +DEF126=intento +DEF127=intenta +DEF128=intentas +DEF129=intentamos +DEF130=intentais +DEF131=intentan +DEF132=dos +DEF133=bajo +DEF134=arriba +DEF135=encima +DEF136=usar +DEF137=uso +DEF138=usas +DEF139=usa +DEF140=usamos +DEF141=usais +DEF142=usan +DEF143=emplear +DEF144=empleo +DEF145=empleas +DEF146=emplean +DEF147=ampleamos +DEF148=empleais +DEF149=valor +DEF150=muy +DEF151=era +DEF152=eras +DEF153=eramos +DEF154=eran +DEF155=modo +DEF156=bien +DEF157=cual +DEF158=cuando +DEF159=donde +DEF160=mientras +DEF161=quien +DEF162=con +DEF163=entre +DEF164=sin +DEF165=trabajo +DEF166=trabajar +DEF167=trabajas +DEF168=trabaja +DEF169=trabajamos +DEF170=trabajais +DEF171=trabajan +DEF172=podria +DEF173=podrias +DEF174=podriamos +DEF175=podrian +DEF176=podriais +DEF177=yo +DEF178=aquel +DEF179=qu \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/htmlFileInfoList.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/htmlFileInfoList.js new file mode 100644 index 0000000..975d2d3 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/htmlFileInfoList.js @@ -0,0 +1,11 @@ +fil = new Array(); +fil["0"]= "Background.html@@@Chapter 2. Background@@@null"; +fil["1"]= "ch01.html@@@Chapter 1. Overview@@@null"; +fil["2"]= "ch01s01.html@@@1.1. Intended Audience@@@null"; +fil["3"]= "ch01s02.html@@@1.2. Organization of this Document@@@null"; +fil["4"]= "ch01s03.html@@@1.3. Document Change History@@@null"; +fil["5"]= "ch02s01.html@@@2.1. What are Extensions?@@@null"; +fil["6"]= "ch02s02.html@@@2.2. Relationship to OpenGL@@@null"; +fil["7"]= "ch02s03.html@@@2.3. Extensions and Versions@@@null"; +fil["8"]= "ch02s04.html@@@2.4. Versioning Extensions@@@null"; +fil["9"]= "ch02s05.html@@@2.5. Extensions and Pluggability@@@null"; diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/htmlFileList.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/htmlFileList.js new file mode 100644 index 0000000..c5f4c5e --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/htmlFileList.js @@ -0,0 +1,12 @@ +//List of files which are indexed. +fl = new Array(); +fl["0"]= "Background.html"; +fl["1"]= "ch01.html"; +fl["2"]= "ch01s01.html"; +fl["3"]= "ch01s02.html"; +fl["4"]= "ch01s03.html"; +fl["5"]= "ch02s01.html"; +fl["6"]= "ch02s02.html"; +fl["7"]= "ch02s03.html"; +fl["8"]= "ch02s04.html"; +fl["9"]= "ch02s05.html"; diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-1.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-1.js new file mode 100644 index 0000000..82a9178 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-1.js @@ -0,0 +1,161 @@ +var indexerLanguage="en"; +//Auto generated index for searching. +w["-"]="0,1,2,3,4,5,6,7,8,9"; +w["1"]="0,1,2,3,4,5,7,9"; +w["10"]="4"; +w["1990s"]="6"; +w["2"]="0,1,3,5,6,7,8,9"; +w["2011"]="4"; +w["3"]="0,1,4,7"; +w["30-120"]="6"; +w["3d"]="6"; +w["4"]="0,8"; +w["5"]="0,9"; +w["500"]="6"; +w["abl"]="7,9"; +w["abstract"]="6,9"; +w["acceler"]="6"; +w["access"]="7"; +w["accomplish"]="5"; +w["achiev"]="6"; +w["action"]="5"; +w["adapt"]="6"; +w["add"]="1,5,8"; +w["addit"]="5,6,8"; +w["adher"]="5"; +w["after"]="6,8"; +w["aim"]="6"; +w["all"]="5,6,7,9"; +w["allow"]="1,5,6,7,8"; +w["also"]="5,6"; +w["alter"]="5"; +w["alway"]="5,7"; +w["and"]="0,1,2,3,5,6,7,8,9"; +w["anoth"]="5,6,7,8"; +w["any-scal"]="6"; +w["anyon"]="5,7"; +w["api"]="1,2,3,5,6,7,9"; +w["append"]="8"; +w["appl"]="6"; +w["applic"]="6,7,9"; +w["approv"]="6,7"; +w["arb"]="6"; +w["architectur"]="0,6"; +w["assum"]="2"; +w["ati"]="6"; +w["attribut"]="6"; +w["audienc"]="1,2"; +w["avail"]="5,7"; +w["away"]="6,9"; +w["backend"]="9"; +w["background"]="0,3"; +w["backward-compat"]="7"; +w["balanc"]="6,9"; +w["base"]="7"; +w["becaus"]="5,6,7"; +w["becom"]="5,7"; +w["been"]="6,8"; +w["below"]="7,9"; +w["benefit"]="3"; +w["between"]="0,6,7,9"; +w["beyond"]="5"; +w["board"]="6,7"; +w["borrow"]="6"; +w["both"]="7"; +w["bottom-up"]="7"; +w["box"]="9"; +w["brief"]="3"; +w["briefli"]="3"; +w["bring"]="7"; +w["brought"]="7"; +w["bump"]="7"; +w["but"]="5"; +w["c"]="6"; +w["can"]="3,5,7,9"; +w["capabl"]="1,5,8,9"; +w["care"]="5"; +w["case"]="7,8"; +w["central"]="7"; +w["challeng"]="6"; +w["chang"]="1,4,5,6,7"; +w["chapter"]="0,1,3"; +w["charg"]="9"; +w["clash"]="5"; +w["clear"]="5"; +w["client"]="1,5,7,8,9"; +w["close"]="7"; +w["cloud"]="6"; +w["code"]="5"; +w["come"]="5"; +w["comment"]="0,1,2,3,4,5,6,7,8,9"; +w["commerci"]="7"; +w["common"]="6,7,9"; +w["communic"]="9"; +w["communiti"]="7"; +w["compat"]="1,5,7"; +w["compet"]="6"; +w["competit"]="6"; +w["complet"]="7"; +w["comput"]="2,7"; +w["concept"]="0"; +w["conform"]="6"; +w["consent"]="7"; +w["consid"]="1,6"; +w["consum"]="1,2,3"; +w["contain"]="9"; +w["content"]="0,1"; +w["continu"]="5,7"; +w["control"]="6,7,8"; +w["core"]="5,6,7,9"; +w["could"]="5,6"; +w["cours"]="6"; +w["creat"]="5,6,7,8,9"; +w["critic"]="9"; +w["cross-platform"]="6,9"; +w["custom"]="6"; +w["data"]="2"; +w["date"]="4"; +w["deal"]="7"; +w["decentr"]="7"; +w["decid"]="7,8"; +w["defin"]="0,5,6,7"; +w["depend"]="5,8"; +w["deploy"]="7,9"; +w["describ"]="0,1,3,6"; +w["design"]="6"; +w["destin"]="7"; +w["detail"]="1,7"; +w["detect"]="5,6,7"; +w["develop"]="1,2,5,6,7,8"; +w["differ"]="0,5,6,7,8,9"; +w["differenti"]="6"; +w["direct"]="6"; +w["discourag"]="8"; +w["disqus"]="0,1,2,3,4,5,6,7,8,9"; +w["distinct"]="5,9"; +w["do"]="9"; +w["document"]="1,2,3,4,6"; +w["don"]="5"; +w["draft"]="0,1,2,3,4,5,6,7,8,9"; +w["drastic"]="6"; +w["driver"]="9"; +w["each"]="7,9"; +w["effect"]="7"; +w["either"]="2"; +w["employ"]="9"; +w["enabl"]="0,1,2,3,4,5,6,7,8,9"; +w["end"]="5"; +w["endpoint"]="7"; +w["ensur"]="1,5,6,7"; +w["entireti"]="5"; +w["entiti"]="7"; +w["environ"]="6,9"; +w["equal"]="9"; +w["establish"]="6,8"; +w["etc"]="2,6"; +w["even"]="5,8"; +w["exampl"]="7,8,9"; +w["exist"]="1,5,8"; +w["expect"]="5"; +w["explain"]="7"; + diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-2.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-2.js new file mode 100644 index 0000000..55989b7 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-2.js @@ -0,0 +1,160 @@ +//Auto generated index for searching. +w["explicit"]="8"; +w["expos"]="9"; +w["extend"]="2"; +w["extens"]="0,1,3,5,6,7,8,9"; +w["face"]="6"; +w["fact"]="7"; +w["fashion"]="7"; +w["featur"]="1,3,5,6,7"; +w["figur"]="9"; +w["fill"]="9"; +w["final"]="6"; +w["first"]="5"; +w["follow"]="6"; +w["form"]="5"; +w["format"]="2"; +w["fragment"]="6"; +w["frame"]="6"; +w["free"]="5,7"; +w["frequent"]="7"; +w["frontend"]="9"; +w["function"]="1,5,6,7"; +w["furthermor"]="5"; +w["futur"]="3,5"; +w["gain"]="6"; +w["gap"]="9"; +w["garner"]="6"; +w["general"]="2,8"; +w["get"]="7"; +w["goal"]="6"; +w["good"]="8"; +w["govern"]="1,3"; +w["graphic"]="6"; +w["guard"]="7"; +w["guid"]="5"; +w["guidanc"]="1"; +w["hand"]="6"; +w["haproxi"]="9"; +w["hardwar"]="6"; +w["has"]="2,6,8"; +w["have"]="6,8"; +w["header"]="5"; +w["heavili"]="6"; +w["help"]="7"; +w["here"]="9"; +w["histori"]="1,4"; +w["host"]="6"; +w["howev"]="6,7,9"; +w["http"]="2"; +w["human-read"]="5"; +w["hypervisor"]="6"; +w["ibm"]="6"; +w["if"]="5,8"; +w["illustr"]="9"; +w["implement"]="2,3,5,7,8,9"; +w["implementor"]="1"; +w["import"]="5,6"; +w["includ"]="6,7"; +w["independ"]="6,8"; +w["individu"]="7"; +w["influenc"]="7"; +w["inform"]="0,3,7"; +w["infrastructur"]="6"; +w["infrequ"]="7"; +w["initi"]="4"; +w["innov"]="1,6"; +w["integ"]="8"; +w["intel"]="6"; +w["intend"]="1,2"; +w["interact"]="5,9"; +w["interpret"]="7"; +w["introduct"]="5"; +w["issu"]="7"; +w["it"]="5,8"; +w["itself"]="6,7"; +w["javascript"]="0,1,2,3,4,5,6,7,8,9"; +w["json"]="2"; +w["june"]="4"; +w["keep"]="8"; +w["key"]="6"; +w["kind"]="8"; +w["later"]="7"; +w["leader"]="7"; +w["least"]="2"; +w["legal"]="0,1,2,3,4,5,6,7,8,9"; +w["level"]="5"; +w["librari"]="6"; +w["licens"]="5"; +w["lifetim"]="6"; +w["load"]="6,9"; +w["machine-process"]="5"; +w["made"]="5"; +w["maintain"]="6,7"; +w["major"]="6"; +w["make"]="1,5"; +w["mani"]="6"; +w["manner"]="1,5,6,7"; +w["mark"]="6"; +w["market"]="7"; +w["may"]="1,5,7,8"; +w["mean"]="1,5,7"; +w["mechan"]="0,1,3,5,6,7,8"; +w["media-typ"]="5"; +w["meet"]="6"; +w["met"]="6"; +w["method"]="5,6"; +w["mime"]="5"; +w["minim"]="5,7"; +w["minor"]="7"; +w["model"]="6"; +w["modifi"]="7"; +w["more"]="6"; +w["move"]="7"; +w["multipl"]="5,9"; +w["must"]="5,7"; +w["name"]="8"; +w["natur"]="6"; +w["need"]="6"; +w["net"]="7"; +w["never"]="5"; +w["new"]="1,3,5,6,7,8"; +w["next"]="7"; +w["nich"]="6,7"; +w["no"]="8"; +w["nonetheless"]="8"; +w["normal"]="5"; +w["not"]="7,9"; +w["note"]="5,7"; +w["notic"]="0,1,2,3,4,5,6,7,8,9"; +w["now"]="6"; +w["nvidia"]="6"; +w["object"]="2"; +w["offer"]="7,9"; +w["often"]="6"; +w["onc"]="7"; +w["one"]="2,5,6,7,8,9"; +w["onli"]="5,7,9"; +w["open"]="6"; +w["opengl"]="0,6"; +w["openstack"]="0,1,2,3,5,6,7,9"; +w["openstack-compat"]="5"; +w["oper"]="1"; +w["order"]="5,6,9"; +w["organ"]="1,3"; +w["origin"]="6,8"; +w["other"]="6,7,8"; +w["out"]="9"; +w["overview"]="1,3"; +w["own"]="6"; +w["paramet"]="5"; +w["part"]="5,6"; +w["parti"]="7"; +w["particip"]="6"; +w["particular"]="7,8"; +w["path"]="5,6"; +w["per"]="6"; +w["perform"]="6"; +w["perspect"]="7"; +w["platform"]="6,7"; + diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-3.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-3.js new file mode 100644 index 0000000..dcb88a9 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/index-3.js @@ -0,0 +1,158 @@ +//Auto generated index for searching. +w["play"]="9"; +w["pleas"]="0,1,2,3,4,5,6,7,8,9"; +w["plug-in"]="9"; +w["pluggabl"]="0,9"; +w["polici"]="6,7"; +w["portabl"]="6"; +w["possibl"]="1,5,8"; +w["pound"]="9"; +w["power"]="0,1,2,3,4,5,6,7,8,9"; +w["prb"]="7"; +w["presenc"]="5"; +w["present"]="6"; +w["previous"]="8"; +w["problem"]="6"; +w["process"]="1,3,5,6"; +w["produc"]="6"; +w["project"]="7"; +w["promot"]="1,3,5,6,7"; +w["proven"]="6"; +w["provid"]="0,1,3,6,7,8,9"; +w["queryabl"]="7"; +w["quick"]="7"; +w["quit"]="5"; +w["rare"]="7"; +w["rax-pi"]="8"; +w["rax-pie2"]="8"; +w["reader"]="2"; +w["real"]="6"; +w["real-tim"]="6"; +w["realiti"]="7"; +w["recommend"]="8"; +w["relat"]="0,7"; +w["relationship"]="0,6,8"; +w["releas"]="5,6,8"; +w["reli"]="5"; +w["remain"]="5,6,7"; +w["request"]="7,9"; +w["requir"]="5,6,7"; +w["resourc"]="5,7"; +w["respons"]="6,7,9"; +w["rest"]="2,3,6"; +w["result"]="6"; +w["return"]="7"; +w["review"]="6,7"; +w["revis"]="3,4"; +w["role"]="9"; +w["rule"]="1,5"; +w["run"]="6,7"; +w["s"]="5,6,7"; +w["said"]="7,8"; +w["same"]="5,6"; +w["second"]="6"; +w["see"]="7"; +w["sens"]="9"; +w["serial"]="2"; +w["servic"]="2,9"; +w["set"]="7,9"; +w["sever"]="6,7"; +w["sgi"]="6"; +w["shader"]="6"; +w["share"]="6"; +w["shift"]="6"; +w["should"]="5,7,8,9"; +w["signifi"]="8"; +w["signific"]="7"; +w["silicon"]="6"; +w["similar"]="6,7"; +w["simpli"]="8"; +w["simultan"]="7"; +w["sinc"]="6,7"; +w["so"]="5,9"; +w["softwar"]="2,7,9"; +w["solv"]="6"; +w["some"]="7"; +w["spec"]="7"; +w["special"]="5,7"; +w["specif"]="3,5,6,9"; +w["specifi"]="7"; +w["speed"]="6"; +w["stabil"]="7"; +w["stabl"]="6,7"; +w["standard"]="5,6,7"; +w["state"]="5"; +w["storag"]="2"; +w["strategi"]="6"; +w["strict"]="5,7"; +w["strive"]="8,9"; +w["success"]="6"; +w["such"]="5,6,7"; +w["summar"]="3,7"; +w["summari"]="4"; +w["support"]="5,6,7,8,9"; +w["t"]="5"; +w["tabl"]="7"; +w["taken"]="5"; +w["team"]="7"; +w["test"]="6"; +w["than"]="6"; +w["their"]="1,6,9"; +w["them"]="5,6"; +w["themselv"]="5,6"; +w["there"]="5,6,8"; +w["therefor"]="7"; +w["these"]="5,6,7,8,9"; +w["they"]="6,7,9"; +w["think"]="9"; +w["third"]="7"; +w["those"]="5,9"; +w["thus"]="6,7"; +w["time"]="6"; +w["togeth"]="5"; +w["translat"]="9"; +w["two"]="5,6"; +w["type"]="5"; +w["ubiquit"]="6"; +w["unclutt"]="6"; +w["under"]="5,6,8"; +w["understand"]="2"; +w["unifi"]="6"; +w["uniqu"]="9"; +w["unless"]="7"; +w["upcom"]="1"; +w["updat"]="8"; +w["upon"]="5"; +w["url"]="7"; +w["use"]="1,3,5,8"; +w["user"]="6"; +w["usual"]="5,7"; +w["util"]="9"; +w["v1"]="7"; +w["vari"]="6"; +w["vendor"]="1,6,7,8,9"; +w["veri"]="6"; +w["version"]="0,1,5,7,8"; +w["versus"]="6,7"; +w["vertex"]="6"; +w["via"]="5,6"; +w["view"]="0,1,2,3,4,5,6,7,8,9"; +w["vital"]="0"; +w["wadl"]="5"; +w["way"]="6,7"; +w["web"]="2"; +w["were"]="5,6"; +w["whether"]="9"; +w["whi"]="0"; +w["which"]="1,3,5,6,7,8,9"; +w["while"]="5,6"; +w["wish"]="2"; +w["without"]="7,9"; +w["word"]="7"; +w["work"]="5"; +w["worri"]="9"; +w["would"]="5,6"; +w["write"]="6"; +w["written"]="5"; +w["xml"]="2"; + diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/ja-jp.props b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/ja-jp.props new file mode 100644 index 0000000..2756805 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/ja-jp.props @@ -0,0 +1 @@ +J01=\\u306B \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/nwSearchFnt.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/nwSearchFnt.js new file mode 100644 index 0000000..4d40ba5 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/nwSearchFnt.js @@ -0,0 +1,517 @@ +/*---------------------------------------------------------------------------- + * JavaScript for webhelp search + *---------------------------------------------------------------------------- + This file is part of the webhelpsearch plugin for DocBook WebHelp + Copyright (c) 2007-2008 NexWave Solutions All Rights Reserved. + www.nexwave.biz Nadege Quaine + http://kasunbg.blogspot.com/ Kasun Gajasinghe + */ + +//string initialization +var htmlfileList = "htmlFileList.js"; +var htmlfileinfoList = "htmlFileInfoList.js"; +var useCJKTokenizing = false; + +/* Cette fonction verifie la validite de la recherche entrre par l utilisateur */ +function Verifie(ditaSearch_Form) { + + // Check browser compatibitily + if (navigator.userAgent.indexOf("Konquerer") > -1) { + + alert(txt_browser_not_supported); + return; + } + + + var expressionInput = document.ditaSearch_Form.textToSearch.value.replace(/,/g,''); + //Set a cookie to store the searched keywords + $.cookie('textToSearch', expressionInput); + + + if (expressionInput.length < 1) { + + // expression is invalid + alert(txt_enter_at_least_1_char); + // reactive la fenetre de search (utile car cadres) + document.ditaSearch_Form.textToSearch.focus(); + } + else { + + // Effectuer la recherche + Effectuer_recherche(expressionInput); + + //Track with Google Analytics: + _gaq.push(['_trackEvent', 'Search', expressionInput, 'null', 1]); + + + // reactive la fenetre de search (utile car cadres) + document.ditaSearch_Form.textToSearch.focus(); + } +} + +var stemQueryMap = new Array(); // A hashtable which maps stems to query words + +/* This function parses the search expression, loads the indices and displays the results*/ +function Effectuer_recherche(expressionInput) { + + /* Display a waiting message */ + //DisplayWaitingMessage(); + + /*data initialisation*/ + var searchFor = ""; // expression en lowercase et sans les caracte res speciaux + //w = new Object(); // hashtable, key=word, value = list of the index of the html files + scriptLetterTab = new Scriptfirstchar(); // Array containing the first letter of each word to look for + var wordsList = new Array(); // Array with the words to look for + var finalWordsList = new Array(); // Array with the words to look for after removing spaces + var linkTab = new Array(); + var fileAndWordList = new Array(); + var txt_wordsnotfound = ""; + + + /*nqu: expressionInput, la recherche est lower cased, plus remplacement des char speciaux*/ + searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "= 0; i--) { + if (fileAndWordList[i] != undefined) { + linkTab.push("

      " + txt_results_for + " " + "" + fileAndWordList[i][0].motslisteDisplay + "" + "

      "); + + linkTab.push("
        "); + for (t in fileAndWordList[i]) { + //DEBUG: alert(": "+ fileAndWordList[i][t].filenb+" " +fileAndWordList[i][t].motsliste); + //linkTab.push("
      • "+fl[fileAndWordList[i][t].filenb]+"
      • "); + var tempInfo = fil[fileAndWordList[i][t].filenb]; + var pos1 = tempInfo.indexOf("@@@"); + var pos2 = tempInfo.lastIndexOf("@@@"); + var tempPath = tempInfo.substring(0, pos1); + var tempTitle = tempInfo.substring(pos1 + 3, pos2); + var tempShortdesc = tempInfo.substring(pos2 + 3, tempInfo.length); + + //file:///home/kasun/docbook/WEBHELP/webhelp-draft-output-format-idea/src/main/resources/web/webhelp/installation.html + var linkString = "
      • " + tempTitle + ""; + // var linkString = "
      • " + tempTitle + ""; + if ((tempShortdesc != "null")) { + linkString += "\n
        " + tempShortdesc + "
        "; + } + linkString += "
      • "; + linkTab.push(linkString); + } + linkTab.push("
      "); + } + } + } + + var results = ""; + if (linkTab.length > 0) { + /*writeln ("

      " + txt_results_for + " " + "" + cleanwordsList + "" + "
      "+"

      ");*/ + results = "

      "; + //write("

        "); + for (t in linkTab) { + results += linkTab[t].toString(); + } + results += "

        "; + } else { + results = "

        " + "Your search returned no results for " + "" + txt_wordsnotfound + "" + "

        "; + } + //alert(results); + document.getElementById('searchResults').innerHTML = results; +} + +function tokenize(wordsList){ + var stemmedWordsList = new Array(); // Array with the words to look for after removing spaces + var cleanwordsList = new Array(); // Array with the words to look for + for(var j in wordsList){ + var word = wordsList[j]; + if(typeof stemmer != "undefined" ){ + stemQueryMap[stemmer(word)] = word; + } else { + stemQueryMap[word] = word; + } + } + //stemmedWordsList is the stemmed list of words separated by spaces. + for (var t in wordsList) { + wordsList[t] = wordsList[t].replace(/(%22)|^-/g, ""); + if (wordsList[t] != "%20") { + scriptLetterTab.add(wordsList[t].charAt(0)); + cleanwordsList.push(wordsList[t]); + } + } + + if(typeof stemmer != "undefined" ){ + //Do the stemming using Porter's stemming algorithm + for (var i = 0; i < cleanwordsList.length; i++) { + var stemWord = stemmer(cleanwordsList[i]); + stemmedWordsList.push(stemWord); + } + } else { + stemmedWordsList = cleanwordsList; + } + return stemmedWordsList; +} + +//Invoker of CJKTokenizer class methods. +function cjkTokenize(wordsList){ + var allTokens= new Array(); + var notCJKTokens= new Array(); + var j=0; + for(j=0;j"; + return this.input.substring(this.offset,this.offset+2); + } + + function getAllTokens(){ + while(this.incrementToken()){ + var tmp = this.tokenize(); + this.tokens.push(tmp); + } + return this.unique(this.tokens); +// document.getElementById("content").innerHTML += tokens+" "; +// document.getElementById("content").innerHTML += "
        dada"+sortedTokens+" "; +// console.log(tokens.length+"dsdsds"); + /*for(i=0;i t2.length) { + return 1; + } else { + return -1; + } + //return t1.length - t2.length); +} \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/punctuation.props b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/punctuation.props new file mode 100644 index 0000000..d3e3fcd --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/punctuation.props @@ -0,0 +1,31 @@ +Punct01=\\u3002 +Punct02=\\u3003 +Punct03=\\u300C +Punct04=\\u300D +Punct05=\\u300E +Punct06=\\u300F +Punct07=\\u301D +Punct08=\\u301E +Punct09=\\u301F +Punct10=\\u309B +Punct11=\\u2018 +Punct12=\\u2019 +Punct13=\\u201A +Punct14=\\u201C +Punct15=\\u201D +Punct16=\\u201E +Punct17=\\u2032 +Punct18=\\u2033 +Punct19=\\u2035 +Punct20=\\u2039 +Punct21=\\u203A +Punct22=\\u201E +Punct23=\\u00BB +Punct24=\\u00AB +Punct25= +Punct26= +Punct27=\\u00A0 +Punct28=\\u2014 + + + diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/de_stemmer.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/de_stemmer.js new file mode 100644 index 0000000..7ff3822 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/de_stemmer.js @@ -0,0 +1,247 @@ +/* + * Author: Joder Illi + * + * Copyright (c) 2010, FormBlitz AG + * All rights reserved. + * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/german/stemmer.html + * Copyright of the algorithm is: Copyright (c) 2001, Dr Martin Porter and can be found at http://snowball.tartarus.org/license.php + * + * Redistribution and use in source and binary forms, with or without modification, is covered by the standard BSD license. + * + */ + +//var stemmer = function Stemmer() { + /* + German includes the following accented forms, + ä ö ü + and a special letter, ß, equivalent to double s. + The following letters are vowels: + a e i o u y ä ö ü + */ + + var stemmer = function(word) { + /* + Put u and y between vowels into upper case + */ + word = word.replace(/([aeiouyäöü])u([aeiouyäöü])/g, '$1U$2'); + word = word.replace(/([aeiouyäöü])y([aeiouyäöü])/g, '$1Y$2'); + + /* + and then do the following mappings, + (a) replace ß with ss, + (a) replace ae with ä, Not doing these, have trouble with diphtongs + (a) replace oe with ö, Not doing these, have trouble with diphtongs + (a) replace ue with ü unless preceded by q. Not doing these, have trouble with diphtongs + So in quelle, ue is not mapped to ü because it follows q, and in feuer it is not mapped because the first part of the rule changes it to feUer, so the u is not found. + */ + word = word.replace(/ß/g, 'ss'); + //word = word.replace(/ae/g, 'ä'); + //word = word.replace(/oe/g, 'ö'); + //word = word.replace(/([^q])ue/g, '$1ü'); + + /* + R1 and R2 are first set up in the standard way (see the note on R1 and R2), but then R1 is adjusted so that the region before it contains at least 3 letters. + R1 is the region after the first non-vowel following a vowel, or is the null region at the end of the word if there is no such non-vowel. + R2 is the region after the first non-vowel following a vowel in R1, or is the null region at the end of the word if there is no such non-vowel. + */ + + var r1Index = word.search(/[aeiouyäöü][^aeiouyäöü]/); + var r1 = ''; + if (r1Index != -1) { + r1Index += 2; + r1 = word.substring(r1Index); + } + + var r2Index = -1; + var r2 = ''; + + if (r1Index != -1) { + var r2Index = r1.search(/[aeiouyäöü][^aeiouyäöü]/); + if (r2Index != -1) { + r2Index += 2; + r2 = r1.substring(r2Index); + r2Index += r1Index; + } else { + r2 = ''; + } + } + + if (r1Index != -1 && r1Index < 3) { + r1Index = 3; + r1 = word.substring(r1Index); + } + + /* + Define a valid s-ending as one of b, d, f, g, h, k, l, m, n, r or t. + Define a valid st-ending as the same list, excluding letter r. + */ + + /* + Do each of steps 1, 2 and 3. + */ + + /* + Step 1: + Search for the longest among the following suffixes, + (a) em ern er + (b) e en es + (c) s (preceded by a valid s-ending) + */ + var a1Index = word.search(/(em|ern|er)$/g); + var b1Index = word.search(/(e|en|es)$/g); + var c1Index = word.search(/([bdfghklmnrt]s)$/g); + if (c1Index != -1) { + c1Index++; + } + var index1 = 10000; + var optionUsed1 = ''; + if (a1Index != -1 && a1Index < index1) { + optionUsed1 = 'a'; + index1 = a1Index; + } + if (b1Index != -1 && b1Index < index1) { + optionUsed1 = 'b'; + index1 = b1Index; + } + if (c1Index != -1 && c1Index < index1) { + optionUsed1 = 'c'; + index1 = c1Index; + } + + /* + and delete if in R1. (Of course the letter of the valid s-ending is not necessarily in R1.) If an ending of group (b) is deleted, and the ending is preceded by niss, delete the final s. + (For example, äckern -> äck, ackers -> acker, armes -> arm, bedürfnissen -> bedürfnis) + */ + + if (index1 != 10000 && r1Index != -1) { + if (index1 >= r1Index) { + word = word.substring(0, index1); + if (optionUsed1 == 'b') { + if (word.search(/niss$/) != -1) { + word = word.substring(0, word.length -1); + } + } + } + } + /* + Step 2: + Search for the longest among the following suffixes, + (a) en er est + (b) st (preceded by a valid st-ending, itself preceded by at least 3 letters) + */ + + var a2Index = word.search(/(en|er|est)$/g); + var b2Index = word.search(/(.{3}[bdfghklmnt]st)$/g); + if (b2Index != -1) { + b2Index += 4; + } + + var index2 = 10000; + var optionUsed2 = ''; + if (a2Index != -1 && a2Index < index2) { + optionUsed2 = 'a'; + index2 = a2Index; + } + if (b2Index != -1 && b2Index < index2) { + optionUsed2 = 'b'; + index2 = b2Index; + } + + /* + and delete if in R1. + (For example, derbsten -> derbst by step 1, and derbst -> derb by step 2, since b is a valid st-ending, and is preceded by just 3 letters) + */ + + if (index2 != 10000 && r1Index != -1) { + if (index2 >= r1Index) { + word = word.substring(0, index2); + } + } + + /* + Step 3: d-suffixes (*) + Search for the longest among the following suffixes, and perform the action indicated. + end ung + delete if in R2 + if preceded by ig, delete if in R2 and not preceded by e + ig ik isch + delete if in R2 and not preceded by e + lich heit + delete if in R2 + if preceded by er or en, delete if in R1 + keit + delete if in R2 + if preceded by lich or ig, delete if in R2 + */ + + var a3Index = word.search(/(end|ung)$/g); + var b3Index = word.search(/[^e](ig|ik|isch)$/g); + var c3Index = word.search(/(lich|heit)$/g); + var d3Index = word.search(/(keit)$/g); + if (b3Index != -1) { + b3Index ++; + } + + var index3 = 10000; + var optionUsed3 = ''; + if (a3Index != -1 && a3Index < index3) { + optionUsed3 = 'a'; + index3 = a3Index; + } + if (b3Index != -1 && b3Index < index3) { + optionUsed3 = 'b'; + index3 = b3Index; + } + if (c3Index != -1 && c3Index < index3) { + optionUsed3 = 'c'; + index3 = c3Index; + } + if (d3Index != -1 && d3Index < index3) { + optionUsed3 = 'd'; + index3 = d3Index; + } + + if (index3 != 10000 && r2Index != -1) { + if (index3 >= r2Index) { + word = word.substring(0, index3); + var optionIndex = -1; + var optionSubsrt = ''; + if (optionUsed3 == 'a') { + optionIndex = word.search(/[^e](ig)$/); + if (optionIndex != -1) { + optionIndex++; + if (optionIndex >= r2Index) { + word = word.substring(0, optionIndex); + } + } + } else if (optionUsed3 == 'c') { + optionIndex = word.search(/(er|en)$/); + if (optionIndex != -1) { + if (optionIndex >= r1Index) { + word = word.substring(0, optionIndex); + } + } + } else if (optionUsed3 == 'd') { + optionIndex = word.search(/(lich|ig)$/); + if (optionIndex != -1) { + if (optionIndex >= r2Index) { + word = word.substring(0, optionIndex); + } + } + } + } + } + + /* + Finally, + turn U and Y back into lower case, and remove the umlaut accent from a, o and u. + */ + word = word.replace(/U/g, 'u'); + word = word.replace(/Y/g, 'y'); + word = word.replace(/ä/g, 'a'); + word = word.replace(/ö/g, 'o'); + word = word.replace(/ü/g, 'u'); + + return word; + }; +//} \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/en_stemmer.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/en_stemmer.js new file mode 100644 index 0000000..f58012f --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/en_stemmer.js @@ -0,0 +1,187 @@ +// Porter stemmer in Javascript. Few comments, but it's easy to follow against the rules in the original +// paper, in +// +// Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, +// no. 3, pp 130-137, +// +// see also http://www.tartarus.org/~martin/PorterStemmer + +// Release 1 be 'andargor', Jul 2004 +// Release 2 (substantially revised) by Christopher McKenzie, Aug 2009 + + +var stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + return function (w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4, + origword = w; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) { w = stem + "i"; } + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + } +})(); \ No newline at end of file diff --git a/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/fr_stemmer.js b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/fr_stemmer.js new file mode 100644 index 0000000..34f9743 --- /dev/null +++ b/incubation/openstack-api-extensions/target/docbkx/webhelp/apix-intro-proposal/content/search/stemmers/fr_stemmer.js @@ -0,0 +1,299 @@ +/* + * Author: Kasun Gajasinghe + * E-Mail: kasunbg AT gmail DOT com + * Date: 09.08.2010 + * + * usage: stemmer(word); + * ex: var stem = stemmer(foobar); + * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/french/stemmer.html + * + * LICENSE: + * + * Copyright (c) 2010, Kasun Gajasinghe. 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. + * + * + * THIS SOFTWARE IS PROVIDED BY KASUN GAJASINGHE ''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 KASUN GAJASINGHE 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. + * + */ + +var stemmer = function(word){ +// Letters in French include the following accented forms, +// â à ç ë é ê è ï î ô û ù +// The following letters are vowels: +// a e i o u y â à ë é ê è ï î ô û ù + + word = word.toLowerCase(); + var oriWord = word; + word = word.replace(/qu/g, 'qU'); //have to perform first, as after the operation, capital U is not treated as a vowel + word = word.replace(/([aeiouyâàëéêèïîôûù])u([aeiouyâàëéêèïîôûù])/g, '$1U$2'); + word = word.replace(/([aeiouyâàëéêèïîôûù])i([aeiouyâàëéêèïîôûù])/g, '$1I$2'); + word = word.replace(/([aeiouyâàëéêèïîôûù])y/g, '$1Y'); + word = word.replace(/y([aeiouyâàëéêèïîôûù])/g, 'Y$1'); + + var rv=''; + var rvIndex = -1; + if(word.search(/^(par|col|tap)/) != -1 || word.search(/^[aeiouyâàëéêèïîôûù]{2}/) != -1){ + rv = word.substring(3); + rvIndex = 3; + } else { + rvIndex = word.substring(1).search(/[aeiouyâàëéêèïîôûù]/); + if(rvIndex != -1){ + rvIndex +=2; //+2 is to supplement the substring(1) used to find rvIndex + rv = word.substring(rvIndex); + } else { + rvIndex = word.length; + } + } + +// R1 is the region after the first non-vowel following a vowel, or the end of the word if there is no such non-vowel. +// R2 is the region after the first non-vowel following a vowel in R1, or the end of the word if there is no such non-vowel + var r1Index = word.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/); + var r1 = ''; + if (r1Index != -1) { + r1Index += 2; + r1 = word.substring(r1Index); + } else { + r1Index = word.length; + } + + var r2Index = -1; + var r2 = ''; + if (r1Index != -1) { + r2Index = r1.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/); + if (r2Index != -1) { + r2Index += 2; + r2 = r1.substring(r2Index); + r2Index += r1Index; + } else { + r2 = ''; + r2Index = word.length; + } + } + if (r1Index != -1 && r1Index < 3) { + r1Index = 3; + r1 = word.substring(r1Index); + } + + /* + Step 1: Standard suffix removal + */ + var a1Index = word.search(/(ance|iqUe|isme|able|iste|eux|ances|iqUes|ismes|ables|istes)$/); + var a2Index = word.search(/(atrice|ateur|ation|atrices|ateurs|ations)$/); + var a3Index = word.search(/(logie|logies)$/); + var a4Index = word.search(/(usion|ution|usions|utions)$/); + var a5Index = word.search(/(ence|ences)$/); + var a6Index = word.search(/(ement|ements)$/); + var a7Index = word.search(/(ité|ités)$/); + var a8Index = word.search(/(if|ive|ifs|ives)$/); + var a9Index = word.search(/(eaux)$/); + var a10Index = word.search(/(aux)$/); + var a11Index = word.search(/(euse|euses)$/); + var a12Index = word.search(/[^aeiouyâàëéêèïîôûù](issement|issements)$/); + var a13Index = word.search(/(amment)$/); + var a14Index = word.search(/(emment)$/); + var a15Index = word.search(/[aeiouyâàëéêèïîôûù](ment|ments)$/); + + if(a1Index != -1 && a1Index >= r2Index){ + word = word.substring(0,a1Index); + } else if(a2Index != -1 && a2Index >= r2Index){ + word = word.substring(0,a2Index); + var a2Index2 = word.search(/(ic)$/); + if(a2Index2 != -1 && a2Index2 >= r2Index){ + word = word.substring(0, a2Index2); //if preceded by ic, delete if in R2, + } else { //else replace by iqU + word = word.replace(/(ic)$/,'iqU'); + } + } else if(a3Index != -1 && a3Index >= r2Index){ + word = word.replace(/(logie|logies)$/,'log'); //replace with log if in R2 + } else if(a4Index != -1 && a4Index >= r2Index){ + word = word.replace(/(usion|ution|usions|utions)$/,'u'); //replace with u if in R2 + } else if(a5Index != -1 && a5Index >= r2Index){ + word = word.replace(/(ence|ences)$/,'ent'); //replace with ent if in R2 + } else if(a6Index != -1 && a6Index >= rvIndex){ + word = word.substring(0,a6Index); + if(word.search(/(iv)$/) >= r2Index){ + word = word.replace(/(iv)$/, ''); + if(word.search(/(at)$/) >= r2Index){ + word = word.replace(/(at)$/, ''); + } + } else if(word.search(/(eus)$/) != -1){ + var a6Index2 = word.search(/(eus)$/); + if(a6Index2 >=r2Index){ + word = word.substring(0, a6Index2); + } else if(a6Index2 >= r1Index){ + word = word.substring(0,a6Index2)+"eux"; + } + } else if(word.search(/(abl|iqU)$/) >= r2Index){ + word = word.replace(/(abl|iqU)$/,''); //if preceded by abl or iqU, delete if in R2, + } else if(word.search(/(ièr|Ièr)$/) >= rvIndex){ + word = word.replace(/(ièr|Ièr)$/,'i'); //if preceded by abl or iqU, delete if in R2, + } + } else if(a7Index != -1 && a7Index >= r2Index){ + word = word.substring(0,a7Index); //delete if in R2 + if(word.search(/(abil)$/) != -1){ //if preceded by abil, delete if in R2, else replace by abl, otherwise, + var a7Index2 = word.search(/(abil)$/); + if(a7Index2 >=r2Index){ + word = word.substring(0, a7Index2); + } else { + word = word.substring(0,a7Index2)+"abl"; + } + } else if(word.search(/(ic)$/) != -1){ + var a7Index3 = word.search(/(ic)$/); + if(a7Index3 != -1 && a7Index3 >= r2Index){ + word = word.substring(0, a7Index3); //if preceded by ic, delete if in R2, + } else { //else replace by iqU + word = word.replace(/(ic)$/,'iqU'); + } + } else if(word.search(/(iv)$/) != r2Index){ + word = word.replace(/(iv)$/,''); + } + } else if(a8Index != -1 && a8Index >= r2Index){ + word = word.substring(0,a8Index); + if(word.search(/(at)$/) >= r2Index){ + word = word.replace(/(at)$/, ''); + if(word.search(/(ic)$/) >= r2Index){ + word = word.replace(/(ic)$/, ''); + } else { word = word.replace(/(ic)$/, 'iqU'); } + } + } else if(a9Index != -1){ word = word.replace(/(eaux)/,'eau') + } else if(a10Index >= r1Index){ word = word.replace(/(aux)/,'al') + } else if(a11Index != -1 ){ + var a11Index2 = word.search(/(euse|euses)$/); + if(a11Index2 >=r2Index){ + word = word.substring(0, a11Index2); + } else if(a11Index2 >= r1Index){ + word = word.substring(0, a11Index2)+"eux"; + } + } else if(a12Index!=-1 && a12Index>=r1Index){ + word = word.substring(0,a12Index+1); //+1- amendment to non-vowel + } else if(a13Index!=-1 && a13Index>=rvIndex){ + word = word.replace(/(amment)$/,'ant'); + } else if(a14Index!=-1 && a14Index>=rvIndex){ + word = word.replace(/(emment)$/,'ent'); + } else if(a15Index!=-1 && a15Index>=rvIndex){ + word = word.substring(0,a15Index+1); + } + + /* Step 2a: Verb suffixes beginning i*/ + var wordStep1 = word; + var step2aDone = false; + if(oriWord == word.toLowerCase() || oriWord.search(/(amment|emment|ment|ments)$/) != -1){ + step2aDone = true; + var b1Regex = /([^aeiouyâàëéêèïîôûù])(îmes|ît|îtes|i|ie|ies|ir|ira|irai|iraIent|irais|irait|iras|irent|irez|iriez|irions|irons|iront|is|issaIent|issais|issait|issant|issante|issantes|issants|isse|issent|isses|issez|issiez|issions|issons|it)$/i; + if(word.search(b1Regex) >= rvIndex){ + word = word.replace(b1Regex,'$1'); + } + } + + /* Step 2b: Other verb suffixes*/ + if (step2aDone && wordStep1 == word) { + if (word.search(/(ions)$/) >= r2Index) { + word = word.replace(/(ions)$/, ''); + } else { + var b2Regex = /(é|ée|ées|és|èrent|er|era|erai|eraIent|erais|erait|eras|erez|eriez|erions|erons|eront|ez|iez)$/i; + if (word.search(b2Regex) >= rvIndex) { + word = word.replace(b2Regex, ''); + } else { + var b3Regex = /e(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i; + if (word.search(b3Regex) >= rvIndex) { + word = word.replace(b3Regex, ''); + } else { + var b3Regex2 = /(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i; + if (word.search(b3Regex2) >= rvIndex) { + word = word.replace(b3Regex2, ''); + } + } + } + } + } + + if(oriWord != word.toLowerCase()){ + /* Step 3 */ + var rep = ''; + if(word.search(/Y$/) != -1) { + word = word.replace(/Y$/, 'i'); + } else if(word.search(/ç$/) != -1){ + word = word.replace(/ç$/, 'c'); + } + } else { + /* Step 4 */ + //If the word ends s, not preceded by a, i, o, u, è or s, delete it. + if (word.search(/([^aiouès])s$/) >= rvIndex) { + word = word.replace(/([^aiouès])s$/, '$1'); + } + var e1Index = word.search(/ion$/); + if (e1Index >= r2Index && word.search(/[st]ion$/) >= rvIndex) { + word = word.substring(0, e1Index); + } else { + var e2Index = word.search(/(ier|ière|Ier|Ière)$/); + if (e2Index != -1 && e2Index >= rvIndex) { + word = word.substring(0, e2Index) + "i"; + } else { + if (word.search(/e$/) >= rvIndex) { + word = word.replace(/e$/, ''); //delete last e + } else if (word.search(/guë$/) >= rvIndex) { + word = word.replace(/guë$/, 'gu'); + } + } + } + } + + /* Step 5: Undouble */ + //word = word.replace(/(en|on|et|el|eil)(n|t|l)$/,'$1'); + word = word.replace(/(en|on)(n)$/,'$1'); + word = word.replace(/(ett)$/,'et'); + word = word.replace(/(el|eil)(l)$/,'$1'); + + /* Step 6: Un-accent */ + word = word.replace(/[éè]([^aeiouyâàëéêèïîôûù]+)$/,'e$1'); + word = word.toLowerCase(); + return word; +}; + +var eqOut = new Array(); +var noteqOut = new Array(); +var eqCount = 0; +/* +To test the stemming, create two arrays named "voc" and "COut" which are for vocabualary and the stemmed output. +Then add the vocabulary strings and output strings. This method will generate the stemmed output for "voc" and will +compare the output with COut. + (I used porter's voc and out files and did a regex to convert them to js objects. regex: /");\nvoc.push("/g . This + will add strings to voc array such that output would look like: voc.push("foobar"); ) drop me an email for any help. + */ +function testFr(){ + var start = new Date().getTime(); //execution time + eqCount = 0; + eqOut = new Array(); + noteqOut = new Array(); + for(var k=0;k + + + + + + + OpenStack API Extensions  + + + If not automatically redirected, click here: content/ch01.html + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/pom.xml b/openstack-compute-api-1.0/pom.xml new file mode 100644 index 0000000..e3dc548 --- /dev/null +++ b/openstack-compute-api-1.0/pom.xml @@ -0,0 +1,137 @@ + + + + 4.0.0 + + org.openstack.docs + openstack-guide + 1.0.0-SNAPSHOT + jar + OpenStack Guides + + + + + + Rackspace Research Repositories + + true + + + + rackspace-research + Rackspace Research Repository + http://maven.research.rackspacecloud.com/content/groups/public/ + + + + + rackspace-research + Rackspace Research Repository + http://maven.research.rackspacecloud.com/content/groups/public/ + + + + + + + + + target/docbkx/pdf + + **/*.fo + + + + + + + com.rackspace.cloud.api + clouddocs-maven-plugin + 1.0.5-SNAPSHOT + + + goal1 + + generate-pdf + + generate-sources + + false + + + + goal2 + + generate-webhelp + + generate-sources + + + 0 + openstackdocs + 1 + UA-17511903-6 + + appendix toc,title + article/appendix nop + article toc,title + book title,figure,table,example,equation + chapter toc,title + part toc,title + preface toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + src + + cs-devguide.xml + + reviewer + openstack + + + + + + diff --git a/openstack-compute-api-1.0/src/cs-devguide.xml b/openstack-compute-api-1.0/src/cs-devguide.xml new file mode 100644 index 0000000..72e7b6f --- /dev/null +++ b/openstack-compute-api-1.0/src/cs-devguide.xml @@ -0,0 +1,3289 @@ + + + + + + + + GET'> + PUT'> + POST'> + DELETE'> + + + + + + + + + '> + + + + + + + + + '> +]> + + OpenStack Compute Developer Guide API 1.0 + OpenStack Compute Dev Guide API 1.0 + + + + + + + + Rackspace Cloud + + + + 2009 + 2010 + 2011 + Rackspace US, Inc. + + API v1.0 + OpenStack™ Compute + 2011-01-21 + + + Copyright details are filled in by the template. + + + + This document is intended for software developers interested in developing + applications using the OpenStack Compute Application Programming Interface + (API). + + + this is a placeholder for the front cover + + + this is a placeholder for the back cover + OpenStack Compute API Operations Reference Summary + + Servers + + + + + Verb + URI + Description + + + + + &GET; + /servers + List servers + + + &GET; + /servers/detail + List servers details + + + &POST; + /servers + Create server + + + &GET; + /servers/id + List server details + + + &PUT; + /servers/id + Update server name/password + + + &DELETE; + /servers/id + Delete server + + + + + Server Addresses + + + + + Verb + URI + Description + + + + + &GET; + /servers/id/ips + List addresses + + + &GET; + /servers/id/ips/public + List public addresses + + + &GET; + /servers/id/ips/private + List private addresses + + + &PUT; + /servers/id/ips/public/address + Share an IP address + + + &DELETE; + /servers/id/ips/public/address + Unshare an IP address + + + + + Server Actions + + + + + Verb + URI + Description + + + + + &POST; + /servers/id/action + Initiate or confirm server action + + + + + Flavors + + + + + Verb + URI + Description + + + + + &GET; + /flavors + List flavors + + + &GET; + /flavors/detail + List flavors details + + + &GET; + /flavors/id + List flavor detail + + + + + Images + + + + + Verb + URI + Description + + + + + &GET; + /images + List images + + + &GET; + /images/detail + Get images details + + + &POST; + /images + Create image + + + &GET; + /images/id + List image details + + + &DELETE; + /images/id + Delete image + + + + + Backup Schedules + + + + + Verb + URI + Description + + + + + &GET; + /servers/id/backup_schedule + List backup schedules + + + &POST; + /servers/id/backup_schedule + Create/update backup schedule + + + &DELETE; + /servers/id/backup_schedule + Disable backup schedule + + + + + Shared IP Groups + + + + + Verb + URI + Description + + + + + &GET; + /shared_ip_groups + List shared IP groups + + + &GET; + /shared_ip_groups/detail + Get shared IP groups details + + + &POST; + /shared_ip_groups + Create shared IP group + + + &GET; + /shared_ip_groups/id + Get shared IP group details + + + &DELETE; + /shared_ip_groups/id + Delete shared IP group + + + + + + + Overview + + OpenStack Compute is a compute service that provides + server capacity in the cloud. Compute Servers come in + different flavors of memory, disk space, and CPU, and can + be provisioned in minutes. Interactions with Compute + Servers can occur programmatically via the OpenStack + Compute API. + + We welcome feedback, comments, and bug reports at bugs.launchpad.net/nova. + +
        + Intended Audience + This Guide is intended to assist software developers who want to develop + applications using the Rackspace Cloud Servers API. To use the information provided + here, you should first have a general understanding of the Rackspace Cloud Servers + service and have access to an active Rackspace Cloud Servers account. You should + also be familiar with: + + + ReSTful web services + + + HTTP/1.1 + + + JSON and/or XML data serialization formats + + +
        + +
        + Document Change History + This version of the Developer Guide replaces and + obsoletes all previous versions. The most recent changes + are described in the table below: + + + + Revision Date + Summary of Changes + + + + + Apr. 14, 2011 + + + + + Initial release. + + + + + + + +
        +
        + Additional Resources + You can download the most current version of this document from the OpenStack Docs + website at + http://docs.openstack.org. + For more details about the Cloud Servers service that this API is based upon, please refer to http://www.rackspacecloud.com/cloud_hosting_products/servers. Related + documents, including an API Language Binding Guide, are available at the same site, as are links + to Rackspace's official support channels, including knowledge base articles, forums, + phone, chat, and email. +
        + + +
        + + Concepts + To use the Cloud Servers API effectively, you should understand several key concepts: +
        + Server + + A server is a virtual machine instance in the Cloud + Servers system. Flavor and image are requisite + elements when creating a server. + +
        +
        + Flavor + + A flavor is an available hardware configuration for a + server. Each flavor has a unique combination of disk + space, memory capacity and priority for CPU time. + +
        +
        + Image + + An image is a collection of files used to create or + rebuild a server. Rackspace provides a number of + pre-built OS images by default. You may also create + custom images from cloud servers you have launched. + These custom images are useful for backup purposes or + for producing “gold” server images if you plan to + deploy a particular server configuration frequently. + +
        +
        + Backup Schedule + + A backup schedule can be defined to create server + images at regular intervals (daily and weekly). Backup + schedules are configurable per server. + +
        +
        + Reboot + + The reboot function allows for either a soft or hard + reboot of a server. With a soft reboot, the operating + system is signaled to restart, which allows for a + graceful shutdown of all processes. A hard reboot is + the equivalent of power cycling the server. + +
        +
        + Rebuild + + The rebuild function removes all data on the server + and replaces it with the specified image. Server ID + and IP addresses remain the same. + +
        +
        + Resize + + The resize function converts an existing server to a + different flavor, in essence, scaling the server up or + down. The original server is saved for a period of + time to allow rollback if there is a problem. All + resizes should be tested and explicitly confirmed, at + which time the original server is removed. All resizes + are automatically confirmed after 24 hours if they are + not confirmed or reverted. + +
        +
        + Shared IP Address + + Public IP addresses can be shared across multiple + servers for use in various high availability + scenarios. When an IP address is shared to another + server, the cloud network restrictions are modified to + allow each server to listen to and respond on that IP + address (you may optionally specify that the target + server network configuration be modified). Shared IP + addresses can be used with many standard heartbeat + facilities (e.g. keepalived) that monitor for failure + and manage IP failover. + +
        +
        + Shared IP Group + + A shared IP group is a collection of servers that can + share IPs with other members of the group. Any server + in a group can share one or more public IPs with any + other server in the group. With the exception of the + first server in a shared IP group, servers must be + launched into shared IP groups. A server may only be a + member of one shared IP group. + +
        +
        + + General API Information + The Cloud Servers API is implemented using a ReSTful web service interface. Like + other products in the Rackspace Cloud suite, Cloud Servers shares a common token + authentication system that allows seamless access between products and services. + + + All requests to authenticate and operate against Cloud + Servers are performed using SSL over HTTP (HTTPS) on + TCP port 443. + + +
        + Authentication + Each ReST request against the Cloud Servers system requires the inclusion of a + specific authorization token HTTP x-header, defined as X-Auth-Token. + Clients obtain this token, along with the Cloud Servers API URL, by first using the + Rackspace Cloud Authentication Service and supplying a valid username and API access + key. + The Rackspace Cloud Authentication Service is a ReSTful web service. It is + the entry point to all Rackspace Cloud APIs. + To access the Authentication Service, you must know whether your account is + US-based or UK-based: + + + + + US-based accounts authenticate through https://auth.api.rackspacecloud.com/v1.0. + + + + + UK-based accounts authenticate through https://lon.auth.api.rackspacecloud.com/v1.0. + + + + + Your account may be based in either the US or the UK; this is not determined + by your physical location but by the location of the Rackspace retail site which + was used to create your account: + + + + + If your account was + created via http://www.rackspacecloud.com, it is a US-based account. + + + + + If your account was + created via http:/www.rackspace.co.uk, it is a UK-based account. + + + + + If you are unsure how your account was created, use the Rackspace contact + information at either site to ask for help. + + + Request + + To authenticate, you must supply your username and API access key in x-headers: + + + + + + Use your Rackspace Cloud + username as the username for the API. Place it in the + X-Auth-User x-header. + + + + + Obtain your API access + key from the Rackspace Cloud Control Panel in the Your Account | + API Access section. Place it in the X-Auth-User + x-header. + + + + + + + Authentication Request (US-Based Account) + +GET /v1.0 HTTP/1.1 +Host: auth.api.rackspacecloud.com +X-Auth-User: jdoe +X-Auth-Key: a86850deb2742ec3cb41518e26aa2d89 + + + + + Response + The Cloud Servers API may return any of the HTTP/1.1 response codes defined + by + RFC-2616 Section 10. If authentication is successful, an HTTP status + 204 (No Content) is returned with three cloud + service headers, X-Server-Management-Url, + X-Storage-Url, X-CDN-Management-Url, as well as + X-Auth-Token. An HTTP status of 401 + (Unauthorized) is returned if authentication fails. All + operations against Cloud Servers should be performed against the URL specified + in X-Server-Management-Url (which is dynamic and subject to change) + and must include the X-Auth-Token header as noted above. The URLs + specified in X-Storage-Url and X-CDN-Management-Url + are specific to the Cloud Files product and may be ignored for purposes of + interacting with Cloud Servers. + + Authentication Response + +HTTP/1.1 204 No Content +Date: Mon, 12 Nov 2007 15:32:21 GMT +Server: Apache +X-Server-Management-Url: https://servers.api.rackspacecloud.com/v1.0/35428 +X-Storage-Url: https://storage.clouddrive.com/v1/CloudFS_9c83b-5ed4 +X-CDN-Management-Url: https://cdn.clouddrive.com/v1/CloudFS_9c83b-5ed4 +X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb +Content-Length: 0 +Content-Type: text/plain; charset=UTF-8 + + + + Authentication tokens are typically valid for 24 + hours. Applications should be designed to + re-authenticate after receiving a 401 + (Unauthorized) response. + + + Note that API operation URIs specified throughout this + document are relative, this is, they should be + appended to the end of the X-Server-Management-Url + that is returned from the authentication system. For + example, in the sample response above, you would list + servers by performing a &GET; against https://servers.api.rackspacecloud.com/v1.0/35428/servers. + + +
        + +
        + Request/Response Types + + The Cloud Servers API supports both the JSON and XML + data serialization formats. The request format is + specified using the Content-Type header + and is required for operations that have a request + body. The response format can be specified in + requests using either the Accept header + or adding an .xml or .json extension to the request + URI. Note that it is possible for a response to be + serialized using a format different from the request + (see example below). If no response format is + specified, JSON is the default. If conflicting + formats are specified using both an + Accept header and a query extension, the + query extension takes precedence. + + + + + + + + + + + + + + + + + + + + + + + + + +
        JSON and XML Response Formats
        FormatAccept HeaderQuery ExtensionDefault
        JSONapplication/json.jsonYes
        XMLapplication/xml.xmlNo
        + + Request with Headers: JSON + +POST /v1.0/214412/images HTTP/1.1 +Host: servers.api.rackspacecloud.com +Content-Type: application/json +Accept: application/xml +X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb + + +{ + "image" : { + "serverId" : 12, + "name" : "Just in case"} +} + + + + Response with Headers: XML + +HTTP/1.1 200 OKAY +Date: Mon, 12 Nov 2007 15:55:01 GMT +Server: Apache +Content-Length: 185 + + +Content-Type: application/xml; charset=UTF-8 +<image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0" + id="22" name="Just in case" serverId="12" + created="2010-10-10T12:00:00Z" + status="SAVING" progress="0" /> + + + + Notice, in the above example, that the content type is + set to application/json but application/xml is + requested via the Accept header. An alternative + method of achieving the same result is illustrated + below – this time we utilize a URI extension instead + of an Accept header. + + + Request with Extension: JSON + +POST /v1.0/214412/images .xml HTTP/1.1 +Host: servers.api.rackspacecloud.com +Content-Type: application/json +X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb + + +{ + "image" : { + "serverId" : 12, + "name" : "Just in case"} +} + + +
        + +
        + Content Compression + + Request and response body data may be encoded with + gzip compression in order to accelerate interactive + performance of API calls and responses. This is + controlled using the Accept-Encoding + header on the request from the client and indicated by + the Content-Encoding header in the server + response. Unless the header is explicitly set, + encoding defaults to disabled. + + + + + + + + + + + + + + + + + + + + + + +
        Encoding Headers
        Header TypeNameValue
        HTTP/1.1 RequestAccept-Encodinggzip
        HTTP/1.1 ResponseContent-Encodinggzip
        +
        +
        + Persistent Connections + + By default, the API supports persistent connections + via HTTP/1.1 keepalives. All connections will be kept + alive unless the connection header is set to close. + + + To prevent abuse, HTTP sessions have a timeout of 20 + seconds before being closed. + + + + The server may close the connection at any time + and clients should not rely on this behavior. + + +
        + +
        + Paginated Collections + + To reduce load on the service, list operations will + return a maximum of 1,000 items at a time. To + navigate the collection, the parameters + limit and + offset can be set in the URI + (e.g.?limit=0&offset=0). + If an offset is given beyond the end of a list an + empty list will be returned. Note that list operations + never return itemNotFound (404) + faults. + +
        +
        + Caching + + The Cloud Servers API makes extensive use of caching + layers at various tiers of the system. Purging + mechanisms exist to ensure that objects served out of + cache are accurate and up to date. &GET;s returning a + cached entity return a 203 + (Cached) to signal users that the value + is being served out of cache. Additionally, cached + entities have the following header set: + + + + + + + + + + + + + + + +
        Last Modified Header
        HeaderDescription
        Last-ModifiedDate and time when the entity was last updated in cache.
        +
        +
        + Efficient Polling with the + <parameter>Changes-Since</parameter> Parameter + The ReST API allows you to poll for the status of certain operations by + performing a &GET; on various elements. Rather than re-downloading and re-parsing + the full status at each polling interval, your ReST client may use the + changes-since parameter to check for changes since a + previous request. The changes-since time is specified as + Unix time (the + number of seconds since January 1, 1970, 00:00:00 UTC, not counting leap seconds). + If nothing has changed since the changes-since time, a + 304 (Not Modified) response will be returned. If data + has changed, only the items changed since the specified time will be returned in the + response. For example, performing a &GET; against + https://api.servers.rackspacecloud.com/v1.0/224532/servers?changes-since=1244012982 + would list all servers that have changed since Wed, 03 Jun 2009 07:09:42 UTC. +
        + +
        + Limits + + All accounts, by default, have a preconfigured set of + thresholds (or limits) to manage capacity and prevent + abuse of the system. The system recognizes two kinds + of limits: rate limits and + absolute limits. Rate limits + are thresholds that are reset after a certain amount + of time passes. Absolute limits are fixed. + + + + If the default limits are too low for your + particular application, please contact Rackspace + Cloud support to request an increase. All + requests require reasonable justification. + + +
        + Rate Limits + + We specify rate limits in terms of + both a human-readable wild-card URI and a machine-processable regular expression. + The regular expression boundary matcher '^' takes effect after + the root URI path. For example, the regular + expression ^/servers would match the bolded + portion of the following URI: + https://servers.api.rackspacecloud.com/v1.0/3542812/servers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Default Rate Limits
        VerbURIRegExDefault
        &POST;*.*10/min
        &POST;*/servers^/servers50/day
        &PUT;*.*10/min
        &GET;*changes-since*changes-since3/min
        &DELETE;*.*100/min
        + + Rate limits are applied in order relative to the + verb, going from least to most specific. For + example, although the threshold for &POST; to + */servers is 50 per day, one cannot &POST; to + */servers more than 10 times within a single + minute because the rate limits for any &POST; is + 10/min. + + + In the event you exceed the thresholds established + for your account, a 413 (Rate + Control) HTTP response will be + returned with a Reply-After header to + notify the client when they can attempt to try + again. + +
        + +
        + Absolute Limits + + “Maximum total amount of RAM (GB)” limits the + number of instances you can run based on the total aggregate + RAM size. For example, with the default limit of + 50GB, you may launch a maximum of 200 256MB cloud + servers, or 100 512MB cloud servers, or 50 1GB + cloud servers, or 20 2GB + 40 256MB cloud servers, + etc. These limits apply to creating as well as + resizing servers. + + + + + + + + + + + + + + + + + + + + + + + +
        Default Absolute Limits
        LimitDefault
        Maximum total amount of + RAM (GB)50
        Maximum number of shared + IP groups25
        Maximum number of members + per shared IP group25
        +
        +
        + Determining Limits Programmatically + + Applications can programmatically determine + current account limits using the /limits URI as + follows: + + + + + Verb + URI + Description + + + + + &GET; + /limits + Returns the current limits for your account + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), unauthorized (401), + badRequest (400), + overLimit (413) + + This operation does not require a request body. + + Limit Response: XML + + + + + + Limit Response: JSON + + +
        +
        +
        + API Version + + The Cloud Servers API uses a URI versioning + scheme. The first element of the path contains the + target version identifier + (e.g. https://servers.api.rackspacecloud.com/ + v1.0/… ) All requests (except to query for + version — see below) must contain a target + version. New features and functionality that do not + break API-compatibility will be introduced in the + current version of the API and the URI will remain + unchanged. Any features or functionality changes that + would necessitate a break in API-compatibility will + require a new version, which will result in the URI + version being updated accordingly. When new API + versions are released, older versions will be marked + as DEPRECATED. Rackspace will work with + developers and partners to ensure there is adequate + time to migrate to the new version before deprecated + versions are discontinued. + + + Your application can programmatically determine + available API versions by performing a &GET; on the + root URL (i.e. with the version and everything to the + right of it truncated) returned from the authentication + system. + + + Versions List Request + +GET HTTP/1.1 +Host: servers.api.rackspacecloud.com + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + 400, + 413, + 500, + 503 + + This operation does not require a request body. + + Versions List Response: XML + +<versions xmlns="http://docs.rackspacecloud.com/servers/api/v1.0" > + <version status="CURRENT" id="v1.0"/> + <version status="BETA" id="v1.1"/> +</versions> + + + + Versions List Response: JSON + +{"versions": [{ + "status": "CURRENT", + "id": "v1.0"}, + { + "status": "BETA", + "id": "v1.1" +}]} + + + + You can also obtain additional information about a + specific version by performing a &GET; on the base + version URL + (e.g. https://servers.api.rackspacecloud.com/v1.0/). + Version request URLs should always end with a trailing + slash (/). If the slash is omitted, the server may + respond with a 302 + redirection request. Format extensions may be placed + after the slash + (e.g. https://servers.api.rackspacecloud.com/v1.0/.xml). Note + that this is a special case that does not hold true + for other API requests. In general, requests such as + /servers.xml and /servers/.xml are handled + equivalently. + + + Version Details Request + +GET HTTP/1.1 +Host: servers.api.rackspacecloud.com/v1.0/ + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit(413) + + This operation does not require a request body + + Version Details Response: XML + + + + + + Version Details Response: JSON + + + + + + The detailed version response contains pointers to + both a human-readable and a machine-processable + description of the API service. The machine-processable description is written in the Web + Application Description Language (WADL). + + + If there is a discrepancy between the two specifications, the WADL is + authoritative as it contains the most accurate and up-to-date description of the + API service. + +
        +
        + Faults + When an error occurs, the system will return an HTTP error response code denoting + the type of error. The system will also return additional information about the + fault in the body of the response. + + Fault Response: XML + + + + + + Fault Response: JSON + + + + + The error code is returned in the body of the response for convenience. The + message section returns a human-readable message that is appropriate for display to + the end user. The details section is optional and may contain information—for example, a stack trace—to + assist in tracking down an error. The detail section may or may not be + appropriate for display to an end user. + + The root element of the fault (e.g. cloudServersFault) + may change depending on the type of error. The + following is a list of possible elements along with + their associated error codes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fault Elements and Error Codes
        Fault ElementAssociated Error CodesExpected in All Requests?
        cloudServersFault500, 400, other codes possible&CHECK;
        serviceUnavailable503&CHECK;
        unauthorized401&CHECK;
        badRequest400&CHECK;
        overLimit413&CHECK;
        badMediaType415 +
        badMethod405 +
        itemNotFound404 +
        buildInProgress409 +
        serverCapacityUnavailable503 +
        backupOrResizeInProgress409 +
        resizeNotAllowed403 +
        notImplemented501 +
        + + Fault Response, Item Not Found: XML + + + + + + Fault Response, Item Not Found: JSON + + + + + + From an XML schema perspective, all API faults are + extensions of the base fault type + CloudServersAPIFault. When working with a system that + binds XML to actual classes (such as JAXB), one should + be capable of using CloudServersAPIFault as a + “catch-all” if there's no interest in distinguishing + between individual fault types. + + + The OverLimit fault is generated when a rate limit + threshold is exceeded. For convenience, the fault + adds a replyAfter attribute that contains the content + of the Reply-After header in XML Schema 1.0 date/time + format. + + + Fault Response, Over Limit: XML + + + + + + Fault Response, Over Limit: JSON + + + + +
        +
        + + API Operations +
        + Servers +
        + List Servers + + + + Verb + URI + Description + + + + + &GET; + /servers + List all servers (IDs and names only) + + + &GET; + /servers/detail + List all servers (all details) + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + + + Office Annotation + + + Jorge Williams + + + 2009-06-26T14:30:46 + + + Well need to revisit. List all status even + the ones that don't enter into our state + transitions along with descriptions of each. + + + + This operation provides a list of servers + associated with your account. Servers that have + been deleted are not included in this list. + Servers contain a status attribute that can be + used as an indication of the current server state. + Servers with an ACTIVE status are + available for use. Other possible values for the + status attribute include: BUILD, + REBUILD, SUSPENDED, + QUEUE_RESIZE, + PREP_RESIZE, RESIZE, + VERIFY_RESIZE, PASSWORD, + RESCUE, REBOOT, + HARD_REBOOT, SHARE_IP, + SHARE_IP_NO_CONFIG, + DELETE_IP, and UNKNOWN. + + + When retrieving a list of servers via the + changes-since parameter (see Efficient Polling + with the Changes-Since Parameter), the list will + contain servers that have been deleted since the + changes-since time. + + + The Cloud Servers provisioning algorithm has an + anti-affinity property that attempts to spread out + customer VMs across hosts. Under certain + situations, VMs from the same customer may be + placed on the same host. + hostId represents the host + your cloud server runs on and can be used to + determine this scenario if it's relevant to your + application. + + + + HostId is unique + per account and is not + globally unique. + + + This operation does not require a request body. + + Servers List Response: XML (detail) + + + + + + Servers List Response: JSON (detail) + + + + +
        +
        + Create Server + + + + Verb + URI + Description + + + + + &POST; + /servers + Create a new server + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badMediaType(415), + itemNotFound (404), + badRequest (400), + serverCapacityUnavailable (503), + overLimit (413) + + + + + Status Transition: + + BUILD &ARROW; ACTIVE + + + + + + BUILD &ARROW; ERROR (on error) + + + + + + This operation asynchronously provisions a new + server. The progress of this operation depends on + several factors including location of the + requested image, network i/o, host load, and the + selected flavor. The progress of the request can + be checked by performing a &GET; on /server/ id , + which will return a progress attribute (0-100% + completion). + + + + Office Annotation + + + Jorge Williams + + + 2009-06-26T14:36:04 + + Removed... + + If the adminPass element is not specified in + the request... + + + Because adding a password on a request is + currently not supported. + + + + A password will be randomly generated for you and + returned in the response object. For security + reasons, it will not be returned in subsequent &GET; + calls against a given server ID. + + + Custom cloud server metadata can also be supplied + at launch time. This metadata is stored in the API + system where it is retrievable by querying the API + for server status. The maximum size of the + metadata key and value is each 255 bytes and the + maximum number of key-value pairs that can be + supplied per server is 5. + + + You may further customize a cloud server by + injecting data into the file system of the cloud + server itself. This is useful, for example, for + inserting ssh keys, setting configuration files, + or storing data that you want to retrieve from + within the instance itself. It is intended to + provide a minimal amount of launch-time + personalization. If significant customization is + required, a custom image should be created. The + max size of the file p ath data is 255 bytes while + the max size of the file contents is 10KB. Note + that the file contents should be encoded as a + Base64 string and the 10KB limit refers to the + number of bytes in the decoded data not the number + of characters in the encoded data. The maximum + number of file path/content pairs that can be + supplied is 5. Any existing files that match the + specified file will be renamed to include the + extension bak followed by a time stamp. For + example, the file /etc/passwd will be backed up as + /etc/passwd.bak.1246036261.5785 . All files will + have root and the root group as owner and group + owner, respectively and will allow user and group + read access only ( -r--r----- ). + + + Servers in the same shared IP group can share + public IPs for various high availability and load + balancing configurations. To launch an HA server, + include the optional sharedIpGroupId element and + the server will be launched into that shared IP + group. + + + If you intend to use a shared IP on the server + being created and have no need for a separate + public IP address, you may launch the server into + a shared IP group and specify an IP address from + that shared IP group to be used as its public IP. + You can accomplish this by specifying the public + shared IP address in your request. This is + optional and is only valid if sharedIpGroupId is + also supplied. + + + + sharedIpGroupId is an optional parameter and + for optimal performance, should ONLY be + specified when intending to share IPs between + servers. + + + + Server Create Request: XML + + + + Server Create Request: JSON + + + + Server Create Response: XML + + + + Server Create Response: JSON + + +
        +
        + Get Server Details + + + + Verb + URI + Description + + + + + &GET; + /servers/id + List details of the specified server + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + itemNotFound (404), + overLimit (413) + + + This operation returns the details of a specific + server by its ID. + + This operation does not require a request body. + + Server Details Response: XML + + + + Server Details Response: JSON + + +
        +
        + Update Server Name / Administrative Password + + + + Verb + URI + Description + + + + + &PUT; + /servers/id + Update the specified server's name and/or administrative password + + + + + Normal Response Code(s): + 204 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + overLimit (413) + + + + + Status Transition: + + ACTIVE &ARROW; + PASSWORD &ARROW; + ACTIVE + + + + + + This operation allows you to update the name of + the server and/or change the administrative + password. This operation changes the name of the + server in the Cloud Servers system and does not + change the server host name itself. + + + Server Update Request: XML + + + + + + Server Update Request: JSON + + + + + This operation does not contain a response body. +
        + +
        + Delete Server + + + + Verb + URI + Description + + + + + &DELETE; + /servers/id + Terminate the specified server + + + + + Normal Response Code(s): + 204 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), unauthorized (401), + itemNotFound (404), + unauthorized (401), + buildInProgress (409), + overLimit (413) + + + + + Status Transition: + + ACTIVE &ARROW; + DELETED + + + + + + SUSPENDED &ARROW; + DELETED + + + + + This operation deletes a cloud server instance from the system. + + + When a server is deleted, all images created + from that server are also removed. + + + This operation does not require a request or a response body. +
        +
        + +
        + Server Addresses +
        + List Addresses + + + + Verb + URI + Description + + + + + &GET; + /servers/id/ips + List all server addresses + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + This operation does not require a request body. + + Addresses List Response: XML + + + + + + Addresses List Response: JSON + + + + +
        +
        + List Public Addresses + + + + Verb + URI + Description + + + + + &GET; + /servers/id/ips/public + List all public server addresses + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + This operation does not require a request body. + + Public Addresses List Response: XML + + + + + + Public Addresses List Response: JSON + + + + +
        +
        + List Private Addresses + + + + Verb + URI + Description + + + + + &GET; + /servers/id/ips/private + List all private server addresses + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + This operation does not require a request body. + + Private Addresses List Response: XML + + + + + + Private Addresses List Response: JSON + + + + +
        +
        + Share an IP Address + + + + Verb + URI + Description + + + + + &PUT; + /servers/id/ips/public/address + Share an IP address to the specified server + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + overLimit (413) + + + + + Status Transition: + + ACTIVE &ARROW; + SHARE_IP &ARROW; + ACTIVE (if + configureServer + is true) + + + + + + ACTIVE &ARROW; + SHARE_IP_NO_CONFIG &ARROW; + ACTIVE + + + + + + This operation shares an IP from an existing + server in the specified shared IP group to another + specified server in the same group. By default, + the operation modifies cloud network restrictions + to allow IP traffic for the given IP to/from the + server specified, but does not bind the IP to the + server itself. A heartbeat facility + (e.g. keepalived) can then be used within the + servers to perform health checks and manage IP + failover. If the configureServer attribute is set + to true, the server is configured with the new + address, though the address is not enabled. Note + that configuring the server does require a reboot. + + + Share IP Request: XML + + + + + + Share IP Response: JSON + + + + + This operation does not return a response body. +
        +
        + Unshare an IP Address + + + + Verb + URI + Description + + + + + &DELETE; + /servers/id/ips/public/address + Remove a shared IP address from the specified server + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + overLimit (413) + + + + + Status Transition: + + ACTIVE &ARROW; + DELETE_IP &ARROW; + ACTIVE + + + + + This operation removes a shared IP address from the specified server. + This operation does not contain a request or response body. +
        +
        + +
        + Server Actions +
        + Reboot Server + + + + Verb + URI + Description + + + + + &POST; + /servers/id/action + Reboot the specified server + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + overLimit (413) + + + + + Status Transition: + + ACTIVE &ARROW; + REBOOT &ARROW; + ACTIVE (soft reboot) + + + + + + ACTIVE &ARROW; + HARD_REBOOT &ARROW; + ACTIVE (hard reboot) + + + + + + The reboot function allows for either a soft or + hard reboot of a server. With a soft reboot + (SOFT), the operating system is signaled to + restart, which allows for a graceful shutdown of + all processes. A hard reboot (HARD) is the + equivalent of power cycling the server. + + + Action Reboot: XML + + + + + + Action Reboot: JSON + + + + + This operation does not return a response body. +
        + +
        + Rebuild Server + + + + Verb + URI + Description + + + + + &POST; + /servers/id/action + Rebuild the specified server + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + serverCapacityUnavailable (503), + overLimit (413) + + + + + Status Transition: + + ACTIVE &ARROW; + REBUILD &ARROW; + ACTIVE + + + + + + ACTIVE &ARROW; + REBUILD &ARROW; + ERROR (on error) + + + + + + The rebuild function removes all data on the + server and replaces it with the specified + image. serverId and IP + addresses will remain the same. + + + Action Rebuild: XML + + + + + + Action Rebuild: JSON + + + + + This operation does not return a response body. +
        + +
        + Resize Server + + + + Verb + URI + Description + + + + + &POST; + /servers/id/action + Resize the specified server + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + serverCapacityUnavailable (503), + overLimit (413), + resizeNotAllowed (403) + + + + + Status Transition: + + ACTIVE &ARROW; + QUEUE_RESIZE &ARROW; + PREP_RESIZE &ARROW; + RESIZE &ARROW; + VERIFY_RESIZE + + + + + + ACTIVE &ARROW; + QUEUE_RESIZE &ARROW; + ACTIVE (on error) + + + + + + The resize function converts an existing server to + a different flavor, in essence, scaling the server + up or down. The original server is saved for a + period of time to allow rollback if there is a + problem. All resizes should be tested and + explicitly confirmed, at which time the original + server is removed. All resizes are automatically + confirmed after 24 hours if they are not + explicitly confirmed or reverted. + + + Action Resize: XML + + + + + + Action Resize: JSON + + + + + This operation does not return a response body. +
        + +
        + Confirm Resized Server + + + + Verb + URI + Description + + + + + &POST; + /servers/id/action + Confirm a pending resize action + + + + + Normal Response Code(s): + 204 + + + Error ResponseCode(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + serverCapacityUnavailable (503), + overLimit (413), + resizeNotAllowed (403) + + + + + Status Transition: + + VERIFY_RESIZE &ARROW; + ACTIVE + + + + + + During a resize operation, the original server is + saved for a period of time to allow roll back if + there is a problem. Once the newly resized server + is tested and has been confirmed to be functioning + properly, use this operation to confirm the + resize. After confirmation, the original server + is removed and cannot be rolled back to. All + resizes are automatically confirmed after 24 hours + if they are not explicitly confirmed or reverted. + + + Action Confirm Resize: XML + + + + + + Action Confirm Resize: JSON + + + + + This operation does not return a response body. +
        + +
        + Revert Resized Server + + + + Verb + URI + Description + + + + + &POST; + /servers/id/action + Cancel and revert a pending resize action + + + + + Normal Response Code(s): + 202 + + + Error ResponseCode(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + serverCapacityUnavailable (503), + overLimit (413), + resizeNotAllowed (403) + + + + + Status Transition: + + VERIFY_RESIZE &ARROW; + ACTIVE + + + + + + During a resize operation, the original server is + saved for a period of time to allow for roll back + if there is a problem. If you determine there is a + problem with a newly resized server, use this + operation to revert the resize and roll back to + the original server. All resizes are automatically + confirmed after 24 hours if they have not already + been confirmed explicitly or reverted. + + + Action Revert Resize: XML + + + + + + Action Revert Resize: JSON + + + + + This operation does not return a response body. +
        +
        + +
        + Flavors + + A flavor is an available hardware configuration for a + server. Each flavor has a unique combination of disk + space and memory capacity. + +
        + List Flavors + + + + Verb + URI + Description + + + + + &GET; + /flavors + List available flavors (IDs and names only) + + + &GET; + /flavors/detail + List available flavors (all details) + + + + + Normal Response Code(s): + 200, + 203 + + + Error ResponseCode(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + + This operation will list all available flavors + with details. + + + This operation does not require a request body. + + + Flavors List Response: XML (detail) + + + + + + Flavors List Response: JSON (detail) + + + + +
        + +
        + Get Flavor Details + + + + Verb + URI + Description + + + + + &GET; + /flavors/id + List details of the specified flavor + + + + + Normal Response Code(s): + 200, + 203 + + + Error ResponseCode(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + itemNotFound (404), + overLimit (413) + + This operation returns details of the specified flavor. + This operation does not require a request body. + + Flavor Details Response: XML + + + + + + Flavor Details Response: JSON + + + + +
        +
        + +
        + Images + + An image is a collection of files you use to create or + rebuild a server. Rackspace provides pre-built OS + images by default. You may also create custom images. + +
        + List Images + + + + Verb + URI + Description + + + + + &GET; + /images + List available images (IDs and names only) + + + &GET; + /images/detail + List available images (all details) + + + + + Normal Response Code(s): + 200, + 203 + + + Error ResponseCode(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + + This operation will list all images visible by the + account. + + + In-flight images will have the status attribute + set to SAVING and the conditional + progress element (0-100% completion) will also be + returned. Other possible values for the status + attribute include: UNKNOWN, + PREPARING, ACTIVE, + QUEUED, FAILED. Images + with an ACTIVE status are available + for install. + + This operation does not require a request body. + + Images List Response: XML (detail) + + + + + + Images List Response: JSON (detail) + + + + +
        +
        + Create Image + + + + Verb + URI + Description + + + + + &POST; + /images + Create a new image + + + + + Normal Response Code(s): + 202 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badMediaType(415), + itemNotFound (404), + badRequest (400), + serverCapacityUnavailable (503), + buildInProgress (409), + resizeNotAllowed (403), + backupOrResizeInProgress (409), + overLimit (413) + + + + + Status Transition: + + QUEUED &ARROW; PREPARING &ARROW; + SAVING &ARROW; ACTIVE + + + + + + QUEUED &ARROW; PREPARING &ARROW; + SAVING &ARROW; FAILED (on error) + + + + + + This operation creates a new image for the given + server ID. Once complete, a new image will be + available that can be used to rebuild or create + servers. The image creation status can be queried + by performing a &GET; on + /images/id and examining + the status and progress attributes. + + + + At present, image creation is an asynchronous + operation, so coordinating the creation with + data quiescence, etc. is currently not + possible. + + + + Image Create Request: XML + +<image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0" + name="Just in case" serverId="12" /> + + + + Image Create Request: JSON + +{ + "image" : { + "serverId" : 12, + "name" : "Just in case" + } +} + + + + Image Create Response: XML + +<image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0" + id="22" name="Just in case" + created="2010-10-10T12:00:00Z" + status="SAVING" progress="0" serverId="12"/> + + + + Image Create Response: JSON + +{ + "image" : { + "id" : 22, + "serverId" : 12, + "name" : "Just in case", + "created" : "2010-10-10T12:00:00Z", + "status" : "SAVING", + "progress" : 0 + } +} + + +
        + +
        + Get Image Details + + + + Verb + URI + Description + + + + + &GET; + /images/id + List details of the specified image + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + itemNotFound (404), + overLimit (413) + + This operation returns details of the specified image. + This operation does not require a request body. + + Image Details Response: XML + + + + + + Image Details Response: JSON + + + + +
        + +
        + Delete Image + + + + Verb + URI + Description + + + + + &DELETE; + /images/id + Deletes the specified image. + + + + + Normal Response Code(s): + 204 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + itemNotFound (404), + overLimit (413) + + This operation deletes an image from the system. + + Images are immediately removed. Currently, there + are no state transitions to track the delete + operation. + + This operation does not require a request body. + This operation does not contain a response body. +
        +
        + +
        + Backup Schedules + + In addition to creating images on demand, you may also + schedule periodic (daily and weekly) images via a + backup schedule. The daily and weekly images are + triggered automatically based on the backup schedule + established. The days/times specified for the backup + schedule are targets and actual start and completion + times may vary based on other activity in the + system. All backup times are in GMT. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Weekly Backup Schedule
        ValueDay
        DISABLEDWeekly backup disabled
        SUNDAYSunday
        MONDAYMonday
        TUESDAYTuesday
        WEDNESDAYWednesday
        THURSDAYThursday
        FRIDAYFriday
        SATURDAYSaturday
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Daily Backup Schedule
        ValueHour Range
        DISABLEDDaily backups disabled
        H_0000_02000000-0200
        H_0200_04000200-0400
        H_0400_06000400-0600
        H_0600_08000600-0800
        H_0800_10000800-1000
        H_1000_12001000-1200
        H_1200_14001200-1400
        H_1400_16001400-1600
        H_1600_18001600-1800
        H_1800_20001800-2000
        H_2000_22002000-2200
        H_2200_00002200-0000
        + +
        + List Backup Schedules + + + + Verb + URI + Description + + + + + &GET; + /servers/id/backup_schedule + List the backup schedule for the specified server + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + itemNotFound (404), + overLimit (413) + + This operation lists the backup schedule for the specified server. + This operation does not require a request body. + + Backup Schedule List Response: XML + + + + + + Backup Schedule List Response: JSON + + + + +
        + +
        + Create / Update Backup Schedule + + + + Verb + URI + Description + + + + + &POST; + /servers/id/backup_schedule + Enable/update the backup schedule for the specified server + + + + + Normal Response Code(s): + 204 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + badMediaType(415), + itemNotFound (404), + buildInProgress (409), + serverCapacityUnavailable (503), + backupOrResizeInProgress(409), + overLimit (413) + + + This operation creates a new backup schedule or + updates an existing backup schedule for the + specified server. Backup schedules will occur + only when the enabled attribute is set to true. + The weekly and daily attributes can be used to set + or to disable individual backup schedules. + + + Backup Schedule Update Request: XML + + + + + + Backup Schedule Update Request: JSON + + + + + This operation does not return a response body. +
        + +
        + Disable Backup Schedule + + + + Verb + URI + Description + + + + + &DELETE; + /servers/id/backup_schedule + Disables the backup schedule for the specified server + + + + + Normal Response Code(s): + 204 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + itemNotFound (404), + buildInProgress (409), + serverCapacityUnavailable (503), + backupOrResizeInProgress(409), + overLimit (413) + + This operation disables the backup schedule for the specified server. + This operation does not require a request body. + This operation does not return a response body. +
        +
        + +
        + Shared IP Groups + + A shared IP group is a collection of servers that can + share IPs with other members of the group. Any server + in a group can share one or more public IPs with any + other server in the group. With the exception of the + first server in a shared IP group, servers must be + launched into shared IP groups. A server may only be a + member of one shared IP group. + +
        + List Shared IP Groups + + + + Verb + URI + Description + + + + + &GET; + /shared_ip_groups + List shared ip groups (IDs and names only) + + + &GET; + /shared_ip_groups/detail + List shared ip groups (all details) + + + + + Normal Response Code(s): + 200, + 203 + + + Error ResponseCode(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + overLimit (413) + + + This operation provides a list of shared IP groups associated with your account. + + This operation does not require a request body. + + Shared IP Groups List Response: XML (detail) + + + + + + Shared IP Groups List Response: JSON (detail) + + + + +
        +
        + Create Shared IP Group + + + + Verb + URI + Description + + + + + &POST; + /shared_ip_groups + Create a new shared ip group + + + + + Normal Response Code(s): + 201 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badMediaType(415), + badRequest (400), + overLimit (413) + + + This operation creates a new shared IP + group. Please note, all responses to requests for + shared_ip_groups return an array of + servers. However, on a create request, the shared + IP group can be created empty or can be initially + populated with a single server. Submitting a + create request with a sharedIpGroup that contains + an array of servers will generate a badRequest + (400) fault. + + + Shared IP Group Create Request: XML + + + + Shared IP Group Create Request: JSON + + + + Shared IP Group Create Response: XML + + + + Shared IP Group Create Response: JSON + + +
        + +
        + Get Shared IP Group Details + + + + Verb + URI + Description + + + + + &GET; + /shared_ip_groups/id + List details of the specified shared IP group + + + + + Normal Response Code(s): + 200, + 203 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + badRequest (400), + itemNotFound (404), + overLimit (413) + + This operation returns details of the specified shared IP group. + + Shared IP Group Details Response: XML + + + + Shared IP Group Details Response: JSON + + + This operation does not require a request body. +
        + +
        + Delete Shared IP Group + + + + Verb + URI + Description + + + + + &DELETE; + /shared_ip_groups/id + Delete the specified shared IP group + + + + + Normal Response Code(s): + 204 + + + Error Response Code(s): + cloudServersFault (400, 500), + serviceUnavailable (503), + unauthorized (401), + itemNotFound (404), + overLimit (413) + + + This operation deletes the specified shared IP + group. This operation will only succeed if: + + + + + There are no active servers in the group + (i.e. they have all been terminated) or + + + + + No servers in the group are actively + sharing IPs. + + + + This operation does not require a request body. + This operation does not contain a response body. +
        +
        +
        +
        diff --git a/openstack-compute-api-1.0/src/figures/Arrow_east.png b/openstack-compute-api-1.0/src/figures/Arrow_east.png new file mode 100644 index 0000000..42d4f94 Binary files /dev/null and b/openstack-compute-api-1.0/src/figures/Arrow_east.png differ diff --git a/openstack-compute-api-1.0/src/figures/Arrow_east.svg b/openstack-compute-api-1.0/src/figures/Arrow_east.svg new file mode 100644 index 0000000..8e0b5e1 --- /dev/null +++ b/openstack-compute-api-1.0/src/figures/Arrow_east.svg @@ -0,0 +1,70 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/figures/Check_mark_23x20_02.png b/openstack-compute-api-1.0/src/figures/Check_mark_23x20_02.png new file mode 100644 index 0000000..2200f84 Binary files /dev/null and b/openstack-compute-api-1.0/src/figures/Check_mark_23x20_02.png differ diff --git a/openstack-compute-api-1.0/src/figures/Check_mark_23x20_02.svg b/openstack-compute-api-1.0/src/figures/Check_mark_23x20_02.svg new file mode 100644 index 0000000..3051a2f --- /dev/null +++ b/openstack-compute-api-1.0/src/figures/Check_mark_23x20_02.svg @@ -0,0 +1,60 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/openstack-compute-api-1.0/src/js/shjs/sh_java.js b/openstack-compute-api-1.0/src/js/shjs/sh_java.js new file mode 100644 index 0000000..731fc9f --- /dev/null +++ b/openstack-compute-api-1.0/src/js/shjs/sh_java.js @@ -0,0 +1,337 @@ +if (! this.sh_languages) { + this.sh_languages = {}; +} +sh_languages['java'] = [ + [ + [ + /\b(?:import|package)\b/g, + 'sh_preproc', + -1 + ], + [ + /\/\/\//g, + 'sh_comment', + 1 + ], + [ + /\/\//g, + 'sh_comment', + 7 + ], + [ + /\/\*\*/g, + 'sh_comment', + 8 + ], + [ + /\/\*/g, + 'sh_comment', + 9 + ], + [ + /\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g, + 'sh_number', + -1 + ], + [ + /"/g, + 'sh_string', + 10 + ], + [ + /'/g, + 'sh_string', + 11 + ], + [ + /(\b(?:class|interface))([ \t]+)([$A-Za-z0-9_]+)/g, + ['sh_keyword', 'sh_normal', 'sh_classname'], + -1 + ], + [ + /\b(?:abstract|assert|break|case|catch|class|const|continue|default|do|else|extends|false|final|finally|for|goto|if|implements|instanceof|interface|native|new|null|private|protected|public|return|static|strictfp|super|switch|synchronized|throw|throws|true|this|transient|try|volatile|while)\b/g, + 'sh_keyword', + -1 + ], + [ + /\b(?:int|byte|boolean|char|long|float|double|short|void)\b/g, + 'sh_type', + -1 + ], + [ + /~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g, + 'sh_symbol', + -1 + ], + [ + /\{|\}/g, + 'sh_cbracket', + -1 + ], + [ + /(?:[A-Za-z]|_)[A-Za-z0-9_]*(?=[ \t]*\()/g, + 'sh_function', + -1 + ], + [ + /([A-Za-z](?:[^`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\s]|[_])*)((?:<.*>)?)(\s+(?=[*&]*[A-Za-z][^`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\s]*\s*[`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\[\]]+))/g, + ['sh_usertype', 'sh_usertype', 'sh_normal'], + -1 + ] + ], + [ + [ + /$/g, + null, + -2 + ], + [ + /(?:?)|(?:?)/g, + 'sh_url', + -1 + ], + [ + /<\?xml/g, + 'sh_preproc', + 2, + 1 + ], + [ + //g, + 'sh_keyword', + -1 + ], + [ + /<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g, + 'sh_keyword', + 6, + 1 + ], + [ + /&(?:[A-Za-z0-9]+);/g, + 'sh_preproc', + -1 + ], + [ + /<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g, + 'sh_keyword', + -1 + ], + [ + /<(?:\/)?[A-Za-z][A-Za-z0-9]*/g, + 'sh_keyword', + 6, + 1 + ], + [ + /@[A-Za-z]+/g, + 'sh_type', + -1 + ], + [ + /(?:TODO|FIXME|BUG)(?:[:]?)/g, + 'sh_todo', + -1 + ] + ], + [ + [ + /\?>/g, + 'sh_preproc', + -2 + ], + [ + /([^=" \t>]+)([ \t]*)(=?)/g, + ['sh_type', 'sh_normal', 'sh_symbol'], + -1 + ], + [ + /"/g, + 'sh_string', + 3 + ] + ], + [ + [ + /\\(?:\\|")/g, + null, + -1 + ], + [ + /"/g, + 'sh_string', + -2 + ] + ], + [ + [ + />/g, + 'sh_preproc', + -2 + ], + [ + /([^=" \t>]+)([ \t]*)(=?)/g, + ['sh_type', 'sh_normal', 'sh_symbol'], + -1 + ], + [ + /"/g, + 'sh_string', + 3 + ] + ], + [ + [ + /-->/g, + 'sh_comment', + -2 + ], + [ + //g, + 'sh_comment', + -2 + ], + [ + //g, + 'sh_comment', + -2 + ], + [ + / array of links + // + // possible types include: import, include, element, + // attribute, complextype, simpleType + // + // each link contains the following properties: + // name : the name of the link + // href : the link itself + // title : a description of the link + links : new Object(), + + // + // A single link that points to the schema index document. + // + index : null, + + // + // Our initialization function + // + _init : function() { + // + // Load the menu... + // + var controllerDiv = document.getElementById("Controller"); + var mainMenu = this._menuMarkup("mainmenu"); + + for (var linkType in this.links) + { + var subItem = this._menuItemMarkup(mainMenu, linkType, "#", null); + var subMenu = this._menuMarkup (linkType+"_subMenu"); + + var items = this.links[linkType]; + for (var i=0;i Array of sample ids. + // + samples : new Object(), + + // + // An array of code data.. + // + // Code data is defined as an object with the following + // properties: + // + // type: The mimetype of the code...href: The location of the code + // or null if it's inline + // + // id: The id of the pre that contains the code. + // + // The initial object is the source code for the current document. + // + codes : new Array({ + id : "SrcContentCode", + type : "application/xml", + href : (function() { + var ret = location.href; + if (location.hash && (location.hash.length != 0)) + { + ret = ret.replace (location.hash, ""); + } + return ret; + })() + }), + + // + // Sets up the manager, begins the loading process... + // + _init : function() { + // + // Setup an array to hold data items to load, this is used by + // the loadSample method. + // + this._toLoad = new Array(); + + for (var i=0;i -1) && + (ieVersion < 8)) + { + code = trc.util.text.unix2dos (code); + } + + var pre = document.getElementById(codeData.id); + var preNodes = pre.childNodes; + // + // Remove placeholder data... + // + while (preNodes.length != 0) + { + pre.removeChild (preNodes[0]); + } + + // + // Set the correct class type... + // + switch (codeData.type) + { + /* + Javascript mimetypes + */ + case 'application/json': + case 'application/javascript': + case 'application/x-javascript': + case 'application/ecmascript': + case 'text/ecmascript': + case 'text/javascript': + trc.util.dom.setClassName (pre, "sh_javascript"); + break; + /* + Not real mimetypes but this is what we'll use for Java. + */ + case 'application/java': + case 'text/java': + trc.util.dom.setClassName (pre, "sh_java"); + break; + default: + trc.util.dom.setClassName (pre, "sh_xml"); + break; + } + + // + // Add new code... + // + pre.appendChild (document.createTextNode (code)); + }, + + // + // Retrives source code text + // + _getCodeText : function (codeData /* Info for the code to get*/) + { + var pre = document.getElementById(codeData.id); + pre.normalize(); + // + // Should be a single text node after pre... + // + return pre.firstChild.nodeValue; + }, + + + // + // Normalizes text by ensuring that top, bottom, right indent + // levels are equal for all samples. + // + _normalizeCodeText : function (top, /* integer, top indent in lines */ + bottom, /* integer, bottom indent in lines */ + right /* integer, right indent in spaces */ + ) + { + for (var i=0;i -1) && + (ieVersion < 7)) + { + element.className = name; + } + else + { + element.setAttribute ("class",name); + } + } +}; + +trc.util.text = { + // + // Useful RegExps + // + blank : new RegExp ("^\\s*$"), /* A blank string */ + indent : new RegExp ("^\\s+"), /* Line indent */ + lines : new RegExp ("$","m"), /* All lines */ + linechars : new RegExp ("(\n|\r)"), /* EOL line characters */ + tabs : new RegExp ("\t","g"), /* All tabs */ + + // + // We need this because microsoft browsers before IE 7, connot + // display pre-formatted text correctly win unix style line + // endings. + // + unix2dos : function(txt /* String */) { + //if already DOS... + if (txt.search(/\r\n/) != -1) + { + return txt; + } + return txt.replace (/\n/g, "\r\n"); + }, + + // + // Useful to normalize text. + // + dos2unix : function(txt /* String */) { + //if already unix... + if (txt.search(/\r\n/) == -1) + { + return txt; + } + + return txt.replace(/\r/g, ""); + }, + + // + // Create a string with a character repeated x times. + // + repString : function (length, /* integer, size of the string to create */ + ch /* string, The character to set the string to */ + ) + { + var ret = new String(); + for (var i=0;idep. + // + _deps : new Object(), + + // + // An array of callback functions, these should be called when all + // dependecies are loaded. + // + _callbacks : new Array(), + + // + // The init function simply calls the YUI loader... + // + _init : function() { + var yuiUtil = this; + + // + // It takes safari a while to load the YUI Loader if it hasn't + // loaded yet keep trying at 1/4 second intervals + // + if (!window.YAHOO) + { + window.setTimeout (function() { + yuiUtil._init(); + }, 250); + return; + } + + // + // Collect requirements... + // + var required = new Array(); + for (var req in this._deps) + { + required.push (req); + } + + // + // Load YUI dependecies... + // + var loader = new YAHOO.util.YUILoader({ + require: required, + loadOptional: true, + filter: "RAW", + onSuccess: function() { + yuiUtil._depsLoaded(); + }, + timeout: 10000, + combine: true + }); + loader.insert(); + }, + + // + // Called after all dependecies have been loaded + // + _depsLoaded : function() { + // + // Dependecies are loaded let everyone know. + // + for (var i=0;i + + diff --git a/openstack-compute-api-1.0/src/samples/address.json b/openstack-compute-api-1.0/src/samples/address.json new file mode 100644 index 0000000..9e7eac2 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/address.json @@ -0,0 +1,5 @@ +{ + "ip" : { + "addr" : "67.23.10.132" + } +} \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/address.xml b/openstack-compute-api-1.0/src/samples/address.xml new file mode 100644 index 0000000..09287bd --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/address.xml @@ -0,0 +1,2 @@ + + diff --git a/openstack-compute-api-1.0/src/samples/addresses.json b/openstack-compute-api-1.0/src/samples/addresses.json new file mode 100644 index 0000000..14e7f81 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/addresses.json @@ -0,0 +1,11 @@ +{ + "addresses" : { + "public" : [ + "67.23.10.132", + "67.23.10.131" + ], + "private" : [ + "10.176.42.16" + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/addresses.xml b/openstack-compute-api-1.0/src/samples/addresses.xml new file mode 100644 index 0000000..294274e --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/addresses.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/backup.json b/openstack-compute-api-1.0/src/samples/backup.json new file mode 100644 index 0000000..824e549 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/backup.json @@ -0,0 +1,7 @@ +{ + "backupSchedule" : { + "enabled" : true, + "weekly" : "THURSDAY", + "daily" : "H_0400_0600" + } +} diff --git a/openstack-compute-api-1.0/src/samples/backup.xml b/openstack-compute-api-1.0/src/samples/backup.xml new file mode 100644 index 0000000..45870bb --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/backup.xml @@ -0,0 +1,5 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/backupInProgress.json b/openstack-compute-api-1.0/src/samples/backupInProgress.json new file mode 100644 index 0000000..00bce30 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/backupInProgress.json @@ -0,0 +1,7 @@ +{ + "backupOrResizeInProgress" : { + "code" : 409, + "message" : "Backup Or Resize In Progress", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/backupInProgress.xml b/openstack-compute-api-1.0/src/samples/backupInProgress.xml new file mode 100644 index 0000000..b0240b8 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/backupInProgress.xml @@ -0,0 +1,4 @@ + + Backup Or Resize In Progress +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/badmediatype.json b/openstack-compute-api-1.0/src/samples/badmediatype.json new file mode 100644 index 0000000..79ee4f0 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/badmediatype.json @@ -0,0 +1,7 @@ +{ + "badMediaType" : { + "code" : 415, + "message" : "Bad Media Type", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/badmediatype.xml b/openstack-compute-api-1.0/src/samples/badmediatype.xml new file mode 100644 index 0000000..d344cde --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/badmediatype.xml @@ -0,0 +1,4 @@ + + Bad Media Type +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/badmethod.json b/openstack-compute-api-1.0/src/samples/badmethod.json new file mode 100644 index 0000000..307e021 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/badmethod.json @@ -0,0 +1,8 @@ + +{ + "badMethod" : { + "code" : 405, + "message" : "Bad Method", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/badmethod.xml b/openstack-compute-api-1.0/src/samples/badmethod.xml new file mode 100644 index 0000000..0e6c186 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/badmethod.xml @@ -0,0 +1,5 @@ + + + Bad Method +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/badrequest.json b/openstack-compute-api-1.0/src/samples/badrequest.json new file mode 100644 index 0000000..a7afecf --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/badrequest.json @@ -0,0 +1,7 @@ +{ + "badRequest" : { + "code" : 400, + "message" : "Bad Request", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/badrequest.xml b/openstack-compute-api-1.0/src/samples/badrequest.xml new file mode 100644 index 0000000..21d3e54 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/badrequest.xml @@ -0,0 +1,4 @@ + + Bad Request +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/build.json b/openstack-compute-api-1.0/src/samples/build.json new file mode 100644 index 0000000..20bc456 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/build.json @@ -0,0 +1,7 @@ +{ + "buildInProgress" : { + "code" : 409, + "message" : "In Progress", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/build.xml b/openstack-compute-api-1.0/src/samples/build.xml new file mode 100644 index 0000000..a421ad4 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/build.xml @@ -0,0 +1,4 @@ + + In Progress +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/confirmresize.json b/openstack-compute-api-1.0/src/samples/confirmresize.json new file mode 100644 index 0000000..432f612 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/confirmresize.json @@ -0,0 +1,3 @@ +{ + "confirmResize" : null +} diff --git a/openstack-compute-api-1.0/src/samples/confirmresize.xml b/openstack-compute-api-1.0/src/samples/confirmresize.xml new file mode 100644 index 0000000..21f9213 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/confirmresize.xml @@ -0,0 +1,3 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/fault.json b/openstack-compute-api-1.0/src/samples/fault.json new file mode 100644 index 0000000..41aa44f --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/fault.json @@ -0,0 +1,7 @@ +{ + "cloudServersFault" : { + "code" : 500, + "message" : "Fault!", + "details" : "Error Details..." + } +} \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/fault.xml b/openstack-compute-api-1.0/src/samples/fault.xml new file mode 100644 index 0000000..b189fcd --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/fault.xml @@ -0,0 +1,4 @@ + + Fault! +
        Error Details...
        +
        \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/flavor.json b/openstack-compute-api-1.0/src/samples/flavor.json new file mode 100644 index 0000000..acba891 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/flavor.json @@ -0,0 +1,8 @@ +{ + "flavor" : { + "id" : 1, + "name" : "256 MB Server", + "ram" : 256, + "disk" : 10 + } +} diff --git a/openstack-compute-api-1.0/src/samples/flavor.xml b/openstack-compute-api-1.0/src/samples/flavor.xml new file mode 100644 index 0000000..2a3b1fc --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/flavor.xml @@ -0,0 +1,5 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/flavors.json b/openstack-compute-api-1.0/src/samples/flavors.json new file mode 100644 index 0000000..63a6bec --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/flavors.json @@ -0,0 +1,16 @@ +{ + "flavors" : [ + { + "id" : 1, + "name" : "256 MB Server", + "ram" : 256, + "disk" : 10 + }, + { + "id" : 2, + "name" : "512 MB Server", + "ram" : 512, + "disk" : 20 + } + ] +} diff --git a/openstack-compute-api-1.0/src/samples/flavors.xml b/openstack-compute-api-1.0/src/samples/flavors.xml new file mode 100644 index 0000000..db6b6e7 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/flavors.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/image.json b/openstack-compute-api-1.0/src/samples/image.json new file mode 100644 index 0000000..a49ea60 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/image.json @@ -0,0 +1,11 @@ +{ + "image" : { + "id" : 1, + "name" : "CentOS 5.2", + "serverId" : 12, + "updated" : "2010-10-10T12:00:00Z", + "created" : "2010-08-10T12:00:00Z", + "status" : "SAVING", + "progress" : 80 + } +} diff --git a/openstack-compute-api-1.0/src/samples/image.xml b/openstack-compute-api-1.0/src/samples/image.xml new file mode 100644 index 0000000..6ab1fd7 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/image.xml @@ -0,0 +1,8 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/images.json b/openstack-compute-api-1.0/src/samples/images.json new file mode 100644 index 0000000..ce0446d --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/images.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "id" : 1, + "name" : "CentOS 5.2", + "updated" : "2010-10-10T12:00:00Z", + "created" : "2010-08-10T12:00:00Z", + "status" : "ACTIVE" + }, + { + "id" : 743, + "name" : "My Server Backup", + "serverId" : 12, + "updated" : "2010-10-10T12:00:00Z", + "created" : "2010-08-10T12:00:00Z", + "status" : "SAVING", + "progress" : 80 + } + ] +} diff --git a/openstack-compute-api-1.0/src/samples/images.xml b/openstack-compute-api-1.0/src/samples/images.xml new file mode 100644 index 0000000..f579331 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/images.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/ipgroup.json b/openstack-compute-api-1.0/src/samples/ipgroup.json new file mode 100644 index 0000000..dd6c013 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/ipgroup.json @@ -0,0 +1,7 @@ +{ + "sharedIpGroup" : { + "id" : 1234, + "name" : "Shared IP Group 1", + "servers" : [422] + } +} diff --git a/openstack-compute-api-1.0/src/samples/ipgroup.xml b/openstack-compute-api-1.0/src/samples/ipgroup.xml new file mode 100644 index 0000000..f75fb14 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/ipgroup.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/ipgroup2.json b/openstack-compute-api-1.0/src/samples/ipgroup2.json new file mode 100644 index 0000000..d397b1a --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/ipgroup2.json @@ -0,0 +1,6 @@ +{ + "sharedIpGroup" : { + "name" : "Shared IP Group 1", + "server" : 422 + } +} diff --git a/openstack-compute-api-1.0/src/samples/ipgroup2.xml b/openstack-compute-api-1.0/src/samples/ipgroup2.xml new file mode 100644 index 0000000..fca3656 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/ipgroup2.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/ipgroups.json b/openstack-compute-api-1.0/src/samples/ipgroups.json new file mode 100644 index 0000000..32e9677 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/ipgroups.json @@ -0,0 +1,14 @@ +{ + "sharedIpGroups" : [ + { + "id" : 1234, + "name" : "Shared IP Group 1", + "servers" : [422, 3445] + }, + { + "id" : 5678, + "name" : "Shared IP Group 2", + "servers" : [23203, 2456, 9891] + } + ] +} diff --git a/openstack-compute-api-1.0/src/samples/ipgroups.xml b/openstack-compute-api-1.0/src/samples/ipgroups.xml new file mode 100644 index 0000000..e93a470 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/ipgroups.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/limits.json b/openstack-compute-api-1.0/src/samples/limits.json new file mode 100644 index 0000000..e522801 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/limits.json @@ -0,0 +1,56 @@ +{ + "limits" : { + "rate" : [ + { + "verb" : "POST", + "URI" : "*", + "regex" : ".*", + "value" : 10, + "remaining" : 2, + "unit" : "MINUTE", + "resetTime" : 1244425439 + }, + { + "verb" : "POST", + "URI" : "*/servers", + "regex" : "^/servers", + "value" : 25, + "remaining" : 24, + "unit" : "DAY", + "resetTime" : 1244511839 + }, + { + "verb" : "PUT", + "URI" : "*", + "regex" : ".*", + "value" : 10, + "remaining" : 2, + "unit" : "MINUTE", + "resetTime" : 1244425439 + }, + { + "verb" : "GET", + "URI" : "*", + "regex" : ".*", + "value" : 3, + "remaining" : 3, + "unit" : "MINUTE", + "resetTime" : 1244425439 + }, + { + "verb" : "DELETE", + "URI" : "*", + "regex" : ".*", + "value" : 100, + "remaining" : 100, + "unit" : "MINUTE", + "resetTime" : 1244425439 + } + ], + "absolute" : { + "maxTotalRAMSize" : 51200, + "maxIPGroups" : 50, + "maxIPGroupMembers" : 25 + } + } +} diff --git a/openstack-compute-api-1.0/src/samples/limits.xml b/openstack-compute-api-1.0/src/samples/limits.xml new file mode 100644 index 0000000..c9bd37e --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/limits.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/notfound.json b/openstack-compute-api-1.0/src/samples/notfound.json new file mode 100644 index 0000000..64cf4af --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/notfound.json @@ -0,0 +1,7 @@ +{ + "itemNotFound" : { + "code" : 404, + "message" : "Not Found", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/notfound.xml b/openstack-compute-api-1.0/src/samples/notfound.xml new file mode 100644 index 0000000..2ec2884 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/notfound.xml @@ -0,0 +1,4 @@ + + Not Found +
        Error Details...
        +
        \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/notimplemented.json b/openstack-compute-api-1.0/src/samples/notimplemented.json new file mode 100644 index 0000000..fa7a16c --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/notimplemented.json @@ -0,0 +1,7 @@ +{ + "notImplemented" : { + "code" : 501, + "message" : "Not Implemented", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/notimplemented.xml b/openstack-compute-api-1.0/src/samples/notimplemented.xml new file mode 100644 index 0000000..334887c --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/notimplemented.xml @@ -0,0 +1,4 @@ + + Not Implemented +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/overlimit.json b/openstack-compute-api-1.0/src/samples/overlimit.json new file mode 100644 index 0000000..c772390 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/overlimit.json @@ -0,0 +1,8 @@ +{ + "overLimit" : { + "code" : 413, + "message" : "OverLimit Retry...", + "details" : "Error Details...", + "retryAfter" : "2010-08-01T00:00:00Z" + } +} diff --git a/openstack-compute-api-1.0/src/samples/overlimit.xml b/openstack-compute-api-1.0/src/samples/overlimit.xml new file mode 100644 index 0000000..a9bebe0 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/overlimit.xml @@ -0,0 +1,5 @@ + + OverLimit Retry... +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/private.json b/openstack-compute-api-1.0/src/samples/private.json new file mode 100644 index 0000000..d0d2057 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/private.json @@ -0,0 +1,5 @@ +{ + "private" : [ + "10.176.42.16" + ] +} diff --git a/openstack-compute-api-1.0/src/samples/private.xml b/openstack-compute-api-1.0/src/samples/private.xml new file mode 100644 index 0000000..7a336fe --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/private.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/openstack-compute-api-1.0/src/samples/public.json b/openstack-compute-api-1.0/src/samples/public.json new file mode 100644 index 0000000..29a06b0 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/public.json @@ -0,0 +1,6 @@ +{ + "public" : [ + "67.23.10.132", + "67.23.10.131" + ] +} diff --git a/openstack-compute-api-1.0/src/samples/public.xml b/openstack-compute-api-1.0/src/samples/public.xml new file mode 100644 index 0000000..2fb3254 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/public.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/rateLimits.xml b/openstack-compute-api-1.0/src/samples/rateLimits.xml new file mode 100644 index 0000000..92ecffb --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/rateLimits.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + … + diff --git a/openstack-compute-api-1.0/src/samples/reboot.json b/openstack-compute-api-1.0/src/samples/reboot.json new file mode 100644 index 0000000..2a070f9 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/reboot.json @@ -0,0 +1,5 @@ +{ + "reboot" : { + "type" : "HARD" + } +} diff --git a/openstack-compute-api-1.0/src/samples/reboot.xml b/openstack-compute-api-1.0/src/samples/reboot.xml new file mode 100644 index 0000000..b000ae6 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/reboot.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/rebuild.json b/openstack-compute-api-1.0/src/samples/rebuild.json new file mode 100644 index 0000000..56a02a2 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/rebuild.json @@ -0,0 +1,5 @@ +{ + "rebuild" : { + "imageId" : 2 + } +} diff --git a/openstack-compute-api-1.0/src/samples/rebuild.xml b/openstack-compute-api-1.0/src/samples/rebuild.xml new file mode 100644 index 0000000..aed0199 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/rebuild.xml @@ -0,0 +1,4 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/resize.json b/openstack-compute-api-1.0/src/samples/resize.json new file mode 100644 index 0000000..fd25323 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/resize.json @@ -0,0 +1,5 @@ +{ + "resize" : { + "flavorId" : 3 + } +} diff --git a/openstack-compute-api-1.0/src/samples/resize.xml b/openstack-compute-api-1.0/src/samples/resize.xml new file mode 100644 index 0000000..ed38aba --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/resize.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/resizeNotAllowed.json b/openstack-compute-api-1.0/src/samples/resizeNotAllowed.json new file mode 100644 index 0000000..45f652d --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/resizeNotAllowed.json @@ -0,0 +1,7 @@ +{ + "resizeNotAllowed" : { + "code" : 403, + "message" : "Resize Not Allowed", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/resizeNotAllowed.xml b/openstack-compute-api-1.0/src/samples/resizeNotAllowed.xml new file mode 100644 index 0000000..a4fb8ae --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/resizeNotAllowed.xml @@ -0,0 +1,4 @@ + + Resize Not Allowed +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/revertresize.json b/openstack-compute-api-1.0/src/samples/revertresize.json new file mode 100644 index 0000000..2ddf6e5 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/revertresize.json @@ -0,0 +1,3 @@ +{ + "revertResize" : null +} diff --git a/openstack-compute-api-1.0/src/samples/revertresize.xml b/openstack-compute-api-1.0/src/samples/revertresize.xml new file mode 100644 index 0000000..fca068d --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/revertresize.xml @@ -0,0 +1,3 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-encoding.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-encoding.json new file mode 100644 index 0000000..ce3caa2 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-encoding.json @@ -0,0 +1,16 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality" : [ + { + "path" : "/etc/banner.txt", + "contents" : "*(&)(*^^&%" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-encoding.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-encoding.xml new file mode 100644 index 0000000..151ddc4 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-encoding.xml @@ -0,0 +1,11 @@ + + + + + Apache1 + + + *(&)(*^^&% + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-length.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-length.json new file mode 100644 index 0000000..efc49cf --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-length.json @@ -0,0 +1,16 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality" : [ + { + "path" : "/etc/banner.jpg", + "contents" : "/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAQEBgQEBgkGBQYJCgcGBgcKCwkJCgkJCw8LDAwMDAsPDA0ODg4NDBERExMRERoZGRkaHR0dHR0dHR0dHQEGBwcMCwwWDw8WGRQQFBkdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d/8AAEQgBLAHCAwERAAIRAQMRAf/EALUAAAEFAQEBAAAAAAAAAAAAAAUCAwQGBwEIAAEAAgMBAQAAAAAAAAAAAAAAAQIAAwQFBhAAAgECBAMFBQUFAwkHAwUBAQIDEQQAIRIFMUEGUWEiEwdxgTJCFJGhUiMVscHRYjPhciTwgpKyQ1MlFgjxotJjozQXRFQ1wuJzg0U3EQACAgICAQIEBAQFBQEBAAAAARECIQMxEkFRBGEiMhOBoVIFcZGxQvCiIzMU0eFikrLB8f/aAAwDAQACEQMRAD8Aw2W0N+EgjBdtIKV545swJZ5AW57ebCUAavLYlSjijIR+4410tKIQ18MgZCVYHI4dgkkJHKT5jEkn5jisA1JHVidR7MjywyCPRIiajU93fgMA3cIT4hmMGpEIikcAqDTDNBaH0aTkxHaO/Cggkx37JpUeIKKBKZdmGkAd6e3meKVIVI1DmxyPdnjDu1yiuyNGimlntA2oiR1oy9lByxybYKIgZtVHnAhqAZAHjUYDXbAGTr+YpCquA8bijHiRgV9u0w1AYss/Mt1IBBHi4kdmNCt1Y7wPw285FWFKccaq+4G7DwjkjalajkcbaW7IZZJEfmHLgDhmQXCo+uj51YfZipVgrZ6B6bQD0yDE0/wV0aEdmo0ripqU/wCJup/tmH0mu7dFlGRUEgZDMYsehQYJBhsCtzRB4eFBjkb11cMkkmS3WFgZkqy5KSOAwFavUIL3u5J0w26As2StQ88Ua6qQSMXGySm0E87amUcF8IFcaXR1yCSFHaToGWI61GVSKAYiuvJahVpdXthN5BHmKwqGHZXupg/K0KwtA9/fOCUKM+XizKgc/wDtxX1q8LkEBG36m2Tb5PpbncImnGXlwHzG7KGnhH24u1e22K0pDLVYlDfNokOtGdATSskbUr2ZV447NJjJZ9uyJSTxzqTavHMqmjGJg+k94GYPtxZKFaaEMzsQVA7jzwRIPlWYGpP2dmCgwIczDLPPBFFW6ytIta4FgIsltbt9NUjuFMVQWpjVtCxuApWormDgoDYTttvuFd2jHhyyIxbRORYyQ92hkW6ZTmQBiu/JZUZs4WdgG40zxKojY89oqvWn8cK65DI6kK1pT7TgwBsdW3U8vvweovYWtsOSYiRJPpRHbR+Y6rT24bBFkB3HWmzW0jRSvErqaEM4FMDujTX29mpO2fWm0Xs3kwSRM9KkK4J/bg90C+i1VlBwzwlFkJCqwqCfsw+DM0IaeAfOvdxwJANtdQj5191cQg0bqI/MK+zAINm6iGZYfZgSSBo3keYJ+wYkkgaa6TjU58KAnEkkDEl2mdC1eeWBJIKH6qXrjp2ZISy69CMSPlLZ+yuA2Wa1kxzSvZz+7DGs0G0tVtwNSg6kpXnX5c+Rxydl+3BmZWOoo5W3DzrgERsoAJFBq9uN3tmmoCMxxWiRxE6XUispNNVeQyxthAZAmlWJDoWik1A54q6DIYhkZ2IqQQBQnBSQRcqnUGpQUANOBOAwHS3gpwIr4fZhYINIpVqtz5/sw0hZ95xdgla1IDEd9MQkYkvF10qtrs8l46UCJqRqccW3p8slHcrtq5jeqjxAggjl24y+MlhdNq6iP03lPJVvgocqDtxh26JKnWCbZLPPOLiByyI1VJ5jsxkt8osB15TexGOEZnKgGXfgrY1yDqfW9ncK4SZSD8teGDaLIZkv6dowVYUOWXLGjToTUipHwtNZqx4e7HRrRJDEiOzUZ1GfLB6kkYaNY9wiIPzjCbEA3Dp95B6dhAPD9JPzyIIbkcZ68M2r/bZlUIhWFPFQBRnjfhcnOYn/AAUNZXNSc/D+/HH96qtBQH3LcIpixUHLgBmcscWtWWVUjG3yQ390kIT4aMzHjjRr1OzUAsi1XvTgntY9RopIYDgTTtx1Pce1tCgQGbltFvYxBkALUzU/BjLf2sVljSQ7Kx29dV9fMscUal3c8EA/jwxZ7XXW1oA8spHVfUE+7LcW+2obbb/GdC1VmRPmcjM6uwZY61NNKcI2a9fUr9j09dbpHps0BKgOwYVJp8OmnM4dt+DSq+oatumOr4UDRCRhXxiHSvtoGGlsK0PC8Dkd1e21/GLmRbS6AFPMV7Z2oeZzUn2HCkicF0h3LcCIra90x3U6F7SZwVhnZczGZBVRJTMYNbFF9CKzd+pcNnPLaXSPBdQsY5YZEKsrDkRiyQLQ/BCl9Urc/CG55UODIPsMJ9M9bSbzuCQxo+j8RBAyxGxL6oUmyWERexWQ8eFcSDPEDdlCHuqU54KUkbLDHDoRzTLLFqQE8gDdUresD2CvdjPs5HqxqxjGtacuR7MNVCvkkTLFXxVwYCKjEBOY9o44KSBJJRbYcQcHAB9Ra8dNfdhlBCFvRtRYMQlcRsanJ5h6pETdR7gUXw+ZQV5ZYx+T1/tl/pIJensaHf6hQDo/fgrkq984oeg5YCNuR1pkgoCMaLI8u8spG9dZQ7Pd/SzTKjZEDTnnjPIVWUDn9QYCCRMKdynBkKqRD6kQF9PnEkcKIcQjqWLpHeh1G6lXZqsUoRTgaYetZKm8k/rCX/l+0kutTBY8/CMzU0xNihD0y4KinVsk66laQ17qYo7F3TA3J1FMRU+Ye0AcMTsL1Kp1lu0l/Ym3csCSKBzllzw1WPWsFF8kffiwct2zb9C0ojuiBTRVeTAY52/T6GZEXqncrTcrxLWxJj1t+aBmqqBy9uLfa6nXkLO2nQu43u3ruNrCwDsQur5l5nPHWWtlb2JFflsJIbua1uVKyxHSQcVV5LaucjLWwjkFCCoAPbU9mEvyQkSUYMqHUGGa0yFTniN4AfNbKOFCTiuRhM8ASMMuXd3YKYSPZxK9zFXJTIlRTkGrTDNgs8Gp73vdkvT86pqLMgTTIKA55ih5+zGu9l1MsFI2+NJEqSKchzrjCXnZIZ4pF05jiKD+GImRMI2/UN3boqAFGUaRSnDtpim2lTIIDGydSmB0FyGkANNQpQEZ50xn3aE1gkGm7MEvrcSBfEyihNK0OeWMmn2trMqYD6n3GPaPzGzReZoBxpjs0p0wGqKwfUOyTgy5d4xaP1OweoVrNPHbo6anNBngAdcFitrg3N7CxOlVYEtTC7KASybLHuTbd6dTANqEVrMpZRU+IHhTOmeMl31TNqX+m0YxsO9rutkJUlqQviYjSKjLLHP97ttMIwdAVvFxuk0whjd/JY0emVB25YVbF1yRVJu3CGFlhpoOQLcdQPtxj28DPBZbHbIvq454VBc0DFOWKfb+5tS6FsWrcZBHZqXJBQZ9px7Sj71K1yC5o7CexuL3cZvLsbeM3FxO+SxxoKlj+ynPGD3ftrbFCY0Tgrmx7TN1WY94v4ilg7kbPtHAsVzM1weege6uNXs/Z100hZb5Za8fxJu49LbOIPowivLKT50lCooeKrzocbNiSLNbbySdp2Pa7BfKtrcJQVZkJH2nFCqXuzLTabfbx6NJLBgCA3A5fs7aYdoqlgu76e2zc7WaG+gWWKTVIA4FaVoKHiMVWRbWzKTYKbdLnpq9JlghlW522cU8yIhslPbXhq5e/Geyg1LJW+rum/8AmsJf2OiPdbaPQifLcQ5lELH5ozwPYaHhixOBa2aM/vNl3Kwsze3MJSNJXtrlD4ZLedKeCUHhqDAqRkcNJW7WL36dXNjAI0UKJENatnX/AC78WKyKLWhG9bQfPsdWRBFQOWGjBlTO7ZFW8pyBwKoBYJI9MbDvGLAIrl/Hru3PA0FMU2WSxDVnFRxzHHBQvklPbxsaaqd3twYGHI7KIZ68NApIWyh4eZ7sTqQdWzgGRkwYAD9/tbZbBqPn2V7sSFA9Hk8t9Sqq9Q7gqcBKfvGMZ7L2v+2gt6cLXfzzogP34avJl9/9J6LZKbYvcgxpseYfJh3qBEDvnL4QM/fjL5L6PAHihQR8cznhvIZIdtFG9yRqHYM8EVs0/wBKbYJ5dKZyMe3ni7WZb/UGPVlQNpuBWlf/ABDCbuCzW8mNP1HDtsqxyMKU7cZ+pqdiVH1dtzKalakEA1ywOojsAOoN0g3GRRbHJczTt4YdVGq5BFf5+dPfiwYfXbJfLIcMrKAOHdxr34rTM0oirA0b6hXUOY4/bgyNybZ0j1rsq7KgEqG5jh8toJD8DKKHI8iMdHXuXWGY2nMGTdY7pa3e8efYCihNDnhq8WVezGWzzg066geOTzaZBRw/7cUv4ljRc22rbI9rLyRaNUOoS1IqSvMcOONDVepSyrxBmCs2RUCp/iMZEXeBNw9H0k5ca8sWVARQ6q3YCc+/AZGFpbkzRASF2KrQGQlgO4VwzmCuDtk4gowbw88VDQTTeR6dAFcq6jxwIIkQhKplGRHKtK/dghgma1S3cqc6cuXswsDKpsnp6xnsY3JJPljP3Y2aqqCrYoK76tW9bFsq5cs+eFuTW0YgIz+A8/l78A0yidssLndrUCM/1B8tMBFexqDa1tGkWDy3Mb6lBI48OGBvM85NVD/S+m01t8cv0dxErHjmpGOe/JuV/kPKmz33Um3WywJHI0Q4JVV+3GvZ7dWM7hmkdGPe7vbyXO4QhJm8JFQVC92eK17BNmdvMFgjbabG9+mfSrsMg1Kk9wOON7/27q8Fq1ypLBtdpK1wksQBi5aeP2Y5Oq0WUoR1Ya36IrZhtWjLOuPdaXNSkzz1BuVPRlrs0blzuu6WdpcFeUK6pWBp2lRliycGjUslktNxjht/KsZVigii+kFB+Z4TRgn95uJ54u4qCJY3HqWrsSCOBFWJY8e3GezbNKSSJVrIzgBlyHiVacjzNMAYsEDqsGjy9bnUcxTSpz8PYBw78NIsE2aBWtSBm4NDy0gjIDCPgiMc6vhurW9fcLJS1zZt5kkINPNt6+NaHj3d+M7N64I1ruK3F0X26SNIJZPqILm6H5Qs51GosE8VYJq1UZ54RyFQVvdrN9zj3ixuJ0uG2tZ7hbrS8aytED5cvjp+SVyT8OVcWplbpKBnQNxbQXaTznhpNKcBxxbVGXZrPRPTXUljd2QihZGFNPhPA8+GL5TMaYa2wUvO4mvuwiB5DkmcZ7zhwIAXkTNcSaf8uWK2sliGbSNlenDEQvkea2lZhSg51OBDGHo7KbiKYfqKPrZT9o/bidQDi2MxHEfbidWQG9RWMw298xwOI64Ho8nlbfxp3zcFY1ImYYyI9l7b/bQe9MlLb+/ci/tw1eTH+4P5UejWUfp6BuAUV/jjSeZfJmfUce0tujG5W3LcvMK6vvxXiQrghE7FGvi+lHZXTTBXUjI8F106JCUezrWnhCk/sw81FayXvoUWbyRtbmMqSSojFOfsw9SprI76hTW0VqxuSirqGrWK1z5ZHCbHBZXkyXed46chkUTy245CsVT/AKuE7V9C2AY/UnTQzWaE/wB2A1/1cHuhfwAG/bnt9+6NZSCShqzCMpQU4ZgfdhLOS6gE8H/e+7ALTU9v2qO52uGRm8xguS0oTlwOOXs96quDHBRN4sTtt55TAhXqadh7MaNW3upLAfNLFHSh8QyLE5juyxpqBogXRDrUgAk1WhBw5ZVDMTaBwrQ0/tGI1JIJ8W5MI0ikkZlThGxJWvcMTMQJ1HonDqXC+EGp5/bitIJHkYtIUOdTUHDkJIt7cPFrNVYgOv7a4CYHwErtYPpBFWsrsCgFDRAeJph9jF5OQ2TOmS01ZZZ4okJ2KxZQVpU8K8s8PVSEYnt3th5j5UyGI0NVSCbm/kIaJfhHPtwIN+vUegfS3U20wk8TGOHsxt1rBzt/IO9UJYo7ZjI2kaa6iCefdiu7KtZjn19kM/NqeOSthZNT4JmzbjZtutsodiS9MkP31wZyV24Ny2fak3BoWZgoUg+J9PLlibaSZ0pZeN4RLPo6ZKF0EEp8PHJSa45tl1ZsX0s8pR9S2ukabWQ8eLr2+zHT7FcM0n003Fb6yldIjFRiPE2r92Ldbkz2nsis+o11NY9TQXUBpKikjjnnwOMW+is2md32dFajlFv9NOvLvdr42E8RQx0aoNdVe3HO1ft1Fsky+89v0yjVuog8m2a0HjK1p+zHd6pKDlRkwrqBt4XfNsjnRv0+O7yKr4BI60qTWvsqKDGdNyaqJRguW3zz20xtbIrdTySuZ4E0iWMLm4UcWCrmaYtdsEVQrLuUQs5Hjk/NRGmKN8ZSoVh3jFXcsdSTFuVlaNqunSBQBlIaAMRUV9uJ2G64JUPVvTr3C2j3geYUCyRklQSa0ryOGkEF72q3tL3a3lhuIpgY3epIICR/FUDxYDYIgpPWPRjT7em8pcAJrZYpIV1Hxr41Nc6MB7iMUXRr03UwUbp7o+0s7oS20EyXRYgSQuEjk1/yuGVHHFvtxQ7NmmEB/VyG42bbUi36c3e87pGhWOeat0sSkqJWaIBHj8GkLQAnPli2iciszjp+O4uLpbe2J8w8AvGmLkV7UkjcvTrpW+2qIyT1PmkuSBkK4sqmjl2eTTNvFLrMZ5YdFPkMuaxn24YFQLck+dIRXhlhGx0M2tWcVz7sRCjzPKrDTWnswJGFpLPyr9mDkA6s1zTgfswckFiS65V+zByCAV1JPdLt7A6uBplgN4H1rJ5Z3p2k3i+eQUYzPq9xpjIj2ft/9upY/S4V3+TKvhXP34enJh/cPpR6NmFduA/lGNLPNeTC+t9P6+a0rQVr78Zm3LL6LABvpkSFhlUDurg5CC7CVY58iM86VFMMCyZt/pYweK3atQQW+/GinBjt9Qv1WJG3uOHiGX+divdwW05MG6qKqysWAIPdXFKNLK95i1rqFfaMQQXCQTTuzocQsqL8s/g51/twRi1WPXD2lksIUtKABkKUxy9ntFZyZUivb5usu5zGY1Ra6iK8DjXp1KmB0gK7ySMNVQDwPd240jkhY1KhF8RH34AsjTxeWDqUj24IyZIg2e8uYzJCKnSW0AHkK0r24fq+QdiXYzJHCueQFHTmT2YEqBZI6K3ibT4u/wC7FLYUPWbBr6FJjSItRq8sNXkDD999PHAkDBRKWBjKUJ00oRlyxZsiCvyNrMsFFA0jkTU4pgYn2YWUgkE9vDjhkoAQepImht6xrpBB9uGaL9ZTuRwp1Ej0f6Vj/hEFf90P2Y2a+Dje45BHqxC8ti6RipI4ZDnirYU6zExt16xyjz/vDCGuSdse2Xo3e1LIBRwWzGDGSu9sG52dxdWzQCN9PjFRQHlgb2ZXyi+7kZZ+iphqq7QSgse9T9mOa8m5P5WeTE6dv1AXWlMxxJ4k46fViduDUfS+wls9vdZXViWJ8Nf34v1IzWfzFW9Tyf19P7hFMZdv1Hf9i/lZM9IK/r8x/lUffia+Qe/4PRl0qS2yK+Y0gY02ZwGAepdgsP8AlrcL5FpNDEXibjSTUADTCtDVeTA7i73Db92ggLqZlpKt1Rm0+a5VnovxHFTZuSLL09Bv1/13N03e30V9bwW7g3dsSiqjENnz4kDC0yTZCDfW/TLpa3EjM5KJRZmYVCrkRUczyOFahl9GoyAul9hMdtdXEshe4iZGsvNatuyAZ+a9NY7iDXAbY611cyah0at2FdreMwB1KtbFlYZ5GjLmy/MPvw8FFmkXgbAlp0S0lqkkwnkPmVNfGVIWU1NACcssLbglLTYrt7aW1gLS1uL2GG+vrVp9uhutIUmE1ncByEby+SH4myxTrrnJo2W5hGL/APUS27/817PB1RHCnU1ttCWu8fSgC3laG6mFvOlOHnQaWK0GnhjQ0TUsfAqnpmiydWRA5jQf24i5E91ip6y2+1hj2qMooUla+/GhnJbI9jX6rIYVACzf0z7cMBAmdwskhpn34RjoZtWBcNSmXDEQpIe50ZUBHH2YMjQKS9y+EYMggdW+I4KKe3EkAr68j5R2ccTsCAP1RuJ/T2FBwOWI7YLdfJ5X3ZxLut9KPnmc09+MSPZaFGupafSoV32X2J+3Fmvk5/7hwejJiosRq4aRjSeb8mYb/BtD7o5uUty4yBkZQ33nCRWWMngHzQ9N0/MSyp/MyfvOLF0FbXxGlj6YVgVWxB7jHg/KBwX7oJ7IiL6PytHBfJpT2ZYasFc5E9e/SPDpuVjK6hq8wgc+84r2R5LEsmX77H04PFcR2ftkKfxwq6j4+IDMvScfAbeP9E4PyAcfEA9QzbXLNH+neQeJJtgAAtOdMV2a8F+sDa+/9uAWkS21Ahjy4dmK2Ui5dU8mleHOmWGQRbxCMqp+FgcuWWCBset1jjYOSV1ZDnT3Yi5AJu50mKoprpBUt2n+zDNhLD01uFsu3iNwBcRkg0FWKnmOWfM4spbBW+QNcSQLe3DxikeslFXgK/uxmtyMh36mBlBrlz7cKEbtVha4jB+A1Jw1eSNhuazgW2jkiQx+KpY8WBGX+QxbeokkKZakDOvKvDFMjBXbCooGb2jswZFsM9Vt/h/DUin2Ydsv0vJSBmMA6yPSPpWQdntx/wCWBX3Y16vpOL7hZYO9U5UgsZHkUsAPloDx78V7CjWsmMLvSLwgY5/iGFnBqhonbLvIfdrWP6cjU/Evw+7EkS8wbHETJJbkinjXL3Yr9y8GXyaPOpHR7kULeTIQpNK0B7MYJN1V8r/geT5uorpZyot4gATl4jzI5nHT7FSWEaT6ZbhNeWEjSKinUR+WKD78Xa3Jna+Yqfqcf+PJ/db9uMu36j0HsPpJ/o8td+mryVD9+Br5E999KPR80VbeLOgCg1xpscJjG72j3PS25QRZyPbsQeAGgq5qfYMNAEY/vXSUETG9sJo4BKC8gYl9RPiXSFOVOzhhb1RqrdwO+le129jeX12rAztJBDK1AC2pixFOQpngV4JZzY0feFtGUeciNrDkxEfL24rsW1YD23Y9oluC9tYoX1HXbhigYDxVFTpwAtstW2S2Vs5kgj0SNVNJADIOFMh8RHblidgQzR4Nwtdrt9vkkcR2sEUiTrkQqotVDDM+InCSMkykerGxL1RcbBtdht6nqWa2luoEVgipEtGdNRyyJJ7WzweqLK3an0PM3rpuSbt6tdRTxy+YlvJb2GupI8yxtYreXTX/AM1GOIzRpXykH0tWvVsR/wDLNPtxK/UV+6+k9a2o/wCExDgAnL2Y0nII22IDOcJVEYRlGlffhgIETaNT6szhGOhq0066rwpgoUkSGAfEtT24gRSNa/h5YJBwPaCnhy5YhBQe046PYMQAF6qltBtzeDOhxHwWa+TytuJB3K8KHwmaSnsrjGj2ej6Klu9JwP1yb/M4dmHpyc39x4R6Iu//AMeK/hH7MaTznkwfq9Ebf5CyitARlzxm8l1OCr7qoSpCLy5DtxYgtsgJNpYVQfYMMFm4ekAH0ds1ADQ8MueLqGR8jnqiQbZRSo8xe/5sU7iyiyYv1nCnksSoy54rNMlMAWnwjBgmSTa0VTpFAezvwoyHNPfy/wAhghI1KKoofdispH7ZBFIsrZrwIGJ2CxncZy7Kqj4DUEcvfixOQVRy2kaQ+PM8K8s8LaoWoCVvbxvGzBA7g+IccuNaYagovabUXU9ysbFI1YUArz5ZcsPVTgD5C+29Mz319cQQCvlBG1OAW0sKjD11y4F7QwNve2TbZvNxYzJpKhXGnIMGFdS15YovWGNR9kQEUm4RWbw1BPGoFeWAgtYNObpu9bY2uSfMlZA0EedUBFa92WNNqTUz90USO6LTmMcOBryxkNBNRnjkDoSKfZiCsl7oy3NnUmtRz44DH1vJSpk8t2XswyOxVyj0b6Uqf0e3p/ux+zG3VwcX3H1ED1StTdWUkYbQCOyvPC7EU6zFhsTA5z/90YToaZYV2DYAu6WshnJ0vXSBgqol24Nejj0S2y1rV1ofYMVe5M/k0O4cJ0i6lqAxSVpx4HgcYFlm1OKs8tXPT0BuK+a/E9nMk46fUpk0T03so7OxdY2ZjU11U44t1qClz2Kd6m1O/qK8EOMuz6jvey+kJejQrvs47AuJr5E9/wAI9KXCFrWKn4RjSzhMfsLdJITDONUUqtFIo5q40n7jieBTBruO4tby/wBoaQSSW00toJchURsRQ+7FNjdVYBVhc9XbbHHDtNmv000zkTKyAySoci2r5QKKrD2YmYHr17Qy6bHufVm7pDuO43VusDBoJtv+nGsE/wC0+orkf5aUwqyWWSXAbs4bnZ7k20pDx+GSzmHBqcY27+zuwXgWEw3JdvNHqhBS4k0hYxmS4zNDzwg6RcLKKCEwQuWnV0Rqy0YHWvwgGoqOGAyO2SD1r1LHsfWljvcu3/Xy2m2K9iLaQRTCZncGOQOCphfKrDNKVwrvA9dcrk8VX17cbpf3W53rB7q8nmurhwahpZpGdzXn4jhpNlVCLR6VrXqxAOUf78NXky+7+k9aW602qKv4f3Y1NHIGtpSspIwKisl3rrEupuFcRkqVK836yDyprAbma/uxQ7ItSPto3e3uJtCEEAUwa2TB1gNNbxPRi1O724eACltIuPmZ4MAHVtIf959+D1RDptLemb/fgdUQBdXWtuNtakmdDiWrgt1PJ5VvgBfXQGYEz0+3GNHsdP0VLp6SKTvEzc6oMPTk5v7jwj0Pd/8AsgpIppHs4Y1HnTJt62zb591kkmhUtX4i1Dl78VJKRk8Ai72DZJD+Zboa8y5/8WLVVAbGR0309pINrEQB/vO7+9hutSSaR6dWtraRxpbIsaAaUCMDl9+CkkU4k+65tra5CpOgddYrVtOdfbiq6TLa8me79sOxTxsJ7dGyzBkI/wD1YiVR3YrDdN9KL/8ASQ/505/8WGSqHs/UrW6W1na3nlWUaoAKskZ1LXlQ1OKLxOC+pG8p+3lXh82JAxFt8yoIzrzwiZSyRMAq0yOfEZYRgWSE0YZyePswyY3B8ihDlwGZ5YcLLJ0tss2+NPGjaSKEvmRTsyxbSssptaGSpLafpfqCe3nGjz4VMLMcm0nMmvPB+mwVaS19Ab1ts97uRuSsso8oaiPiOeY9nDGjTZdmU7MWK36m3tpuHWDNZkERW0UchH48zQ+wYy+4fzDaMLJXdvhhG52r3NBF5ilieHHKuKU0XW+k9FbiLQ9MzRRaRdyW5WFxTI6Tzx07Zoc6cJo85W60arZEHPl3Z+3HLaOguAs7VUaczyHP34EEYpYGlQLICSTQV4fZhGwJwV/eLT6eQkin7ffhqs6mi8noP0pH/B4AeUa5e7G7Xwcz3H1MG+q9zLa2UjxUqFp4lDc8LsZRrWTDzvO4k18xeP4F/hiuWamgjsG9bi28WsZlBUuARoWn7MSSu9cG0RljJbM2ZLip92F9yUPkvG7zGDo6R6kEQyNX2KTjmzk2xhnlCbe9yncN9U5JPIj+GOoVKpp3pdcXE23O00rP4jmxz+7F2oqtixVfUw/8fHboIxm2fUdz2f0hn0WWu+XBH8owdXJV75npW6U/SxheSioxpscPyOWCsIatlx4/bgwAxf1KsX2rrO88lKJuSjcYaCil2XTIvt1qT7cUXRr1vBn/APzhe2l7bxW4WYQsqRxyMsUIIJKqzPkM+BwjtgvVfIVtOod12aRnY7ewaSVjbJfrJMNCmRkIA0FWIIQVzbLCdi1Fo6Z9RbLqVxG4aOdWE4EooKA0A7BxywWRIvlld2x3e3tUlHmMw06RUAMKjj29gwJF6su1tdrFGY3OthpSKoCsun+XAbDWpRvXePd7jpuCTp+PXeS7VcSXOXjTb4ZCboxkc/LPP5a88DpOSyl4cHlPw6Rp+HKnsplhjYy5ekoDdWDujBp/nYenJi939J60QFdriy+X92NTORInZradi0oiYqvFgpphEx+jZI3faNxntT5UDEU1csgeGI2WV02Mj3r076yjvZrj6OZ4nOoGKrUquqmR40zxgtqs2dCmqEEem+mN42udBuNrJEZVEiFgSKHtPI9xw+vW0yjbRrwXNrWZ6FCMqY1QzGxa2VweYweoopbK47RTE6sBw2NzTiMTqQr/AFhZXS7c/iHA07sLauC/TEnlq6qLqetSfNepPM6jjKj2Or6al69IlP6rMw/EmWLNaycz9x4PQO4f/j6U+UDGhnnTBup2B3+bj/24zrkvrwVPeCNVBzPacPAIRBVAVyFcj250GGG6m6ejSkbdbZZlPfzxdXgyeTvqWQRGCOMig4o24ZZrWTJOsI0a2cgZ04D2YVFyRQHtoygoK5VBzpiJlsBbbbUvbeBeOFsGqJX0sn4R2YHYMH2x7Dd71OywqRHHQSOM8z2nErRsyuyHOoNhudolFvLUAqGU0+VsLZNOAa7JgQIyHTT34Ml0DkETu2ila8AO3ETBZmyelvSc9pJM5q7TRBmJA0K3EDG3TjJi2Wc4APrBGx3Db1lQGSNXXUBTwnlXnnir3D+aRtLyUezmmsTJJayeQ7gDUBqFOz24qpaGarKRuOQTXMkrEsWoXd82YjKrHAtlyMkLco7hCaBsmI4+44CQWsGoHffp+mikpCRJD5cRHxO2mi9/HGztFYZgVMmYouldZHPMnmcZjX4JlkWlXwZU41wOQMlNMID4znyzriloiQC3uZZhVe334lTo6EegfSoKNohqf9kuffTG/Xwc/wBx9THutumV39DbvmrgZg9+JasmVOCjr6LWppq1d+eB9ofuyZtno7aWV5DdgMTGaipywegtrt4LLeWZsbu2iP4xz7sZ/coVPJd5dvG69OfSng8bqR/eFMYNdOzNln8rMwT0P2lQPyeHa2OstaMvZh7Z+g4OnLR0t10KM6YspWBay2Y36lKf+YKZnwGhp34x7H8x3vZv5Q36Jr/xm4NDno44Orkr980elLvK2jpyUVxpszijtgxaCnLj34K4AZ3617RcX/TD7tZKWvtkY3KgVztnoswNM8vjHsxXbgv1OHBgdtbLud3GsdvqFzSUtpEuqpoWjVuDDhimTckoLZtnRUds4NY56uYgJogFiHEEqBnXnTAGq0G7/aLabbZJY0KzWsR1zwqqSMFzKqgNfH+zEsWJlo6Bgivdxtbu8ndtLKYpjVCUKjgpzpXL24qLbcF+uzW9eKM+IsETmcxkD7OJPHAkVKBr1Jmntt46c2bb6RXF/s2529pIyCSIyKEikVoz8QKT1pzxo18GO/Mnke72iSGxO4QxlI7aY2O5W7ElrW5WqgGuflyaTpJ4HLAsoNmrZOGWb0ejaTq3Qil3MY0quZPiwacie7q2j1/DY/S20C3gDaaalGa99T3Vxe2YqaYeQxBIVbSmaAMKDIcKDAN3UWbhwKHlQE9wHDEg0dDokLqoDHSKeGuXbidSxUZy4RbgrHxQ8fdzwIFdSu7ztM6TA2i0yJVV+c14dxwuTm7tHlAlTdqaMrA55HDSzBZRyd13fYf24mRUcMl1xAPdiZCVvrSW5G3Pka6TTAtMF2lZPLlxVp52biZG1e3UcZD1+vFUX70fz3Oev4lxbr5Ob+48G/39DZaTwKg04YvPPLkyXddj2263OWeSEl601ByKgd1cIq1YyeATedJ7JMatbse8SMMvtxYqVJPxI46P2IAgW704Gkrc/fgqtSdviad6dWNvYW8ccCGJESiqWLEinfhowUpqRnrbb7e8ljWYMw1A1ViACMV3SbyWVeSi7x0rtd3EyyRykU+WRgcDohuzXkrJ9PdqeipFPTsMxH7sFa0H7j9SLHs0W1yvaRalGnUI3OojOnE4o2JJmijwNeQ3aONOH34WEWyaBtfTsXTFjGSpRZJQrDTmSMbrLqpORe77IpXWl+17fySOpDKAqwnPQo5mnbjBZyw6sZKtHaF3BH38uYocKjarFs6d2Xb5UaWQAHic8+3D1Ume9mbB0NulpbEWDDVVaZ8TlzpjZqtGDJMMpHrcsd48FyFVXgYiicArZUFMV+4LtP1GRR/mT+VUVKmh5e/FFFk3P4Ex7cRmFRmSrVbtPIYe2Bqj+3bTPu25wbdaj8yYkMx4KvM4CUuELsv1Umtbj6Yxbd0+bgqQYYqqzEkswXIZ9uNT1JIwq8GSfRySKgpRm5e/GQ1SWTZ9m8qEmSOp7e/DIDZGutlnuLwsEopPwj+zFTRFYnx9DRToC8YqeNTgqpat0GgdOLNs9ssMcfAacsaaOEZ9l5YaF9O76mjqfbhuxQPpezUH5efZXB7EgdS8nrklffidgAHd5Xl3SAsNJ11pxrjL7hjV5L9t0pj2ZSuZCHLhjJp5Nl/pBQv5qDwAe/HVkwyImu5ZY2QoM+OeDJJKTvHSNrudz9RPGpIqM8VOsl9N7rwWXoHoSDbZWvFjCGSmkUpkOFcWUoLbda/JfNzIjQRrnpoDTBsJIvbGLwHuzpgoAL3e7itllluFBto0YzhhqUxlSGUjnqFcsKxsnmaGWLp7eyLaOW3sJJHl2v6gjzYI2YlVc8ssu/FFsHQq5qWuz3+3Oi5MyaWpSJ+KtXPRXM664RstVR1d4urkSru6JDZkVt4UcG4lAPAac1U1+I4rdjSqQWXpLdLG08yWSoSNfLWF6VVTkmphxoezFbLHkPWO62y3omuJvMdCHIizOZ8Ry4ZYKQt+DnW+4QepXqD0r03tiTJHs8M9wuhtLs160cSCZh8KNoZyo+VTnjVQw3wZp0+Oid/9UJ+n4NsuI7bctwvbDe7trnztvv7FzIPqUR41eCeOXRPCVZgDgsVSjQfQ709k6Gn3OTeIRLvElzJb2978SiztzoDIM9JlbxHnSmGoje32Rsomj0iNvhpmKcsWwL0OpcJD+Wp1tTwgHOnb/wBuJBcqQsjT38Mbkli5PFI86N7eAwJG+5iEdG8LEw024dMuLkN38MLIrtYJWV5Z3rabbVHPT+hJzH8rDI4kk+4/7h24WPTRsmGS1GdeeABqSvbw6Rxea4pMvDLIjs7MGTD7iqj4gc37jioy4UxJOazn6g34RidiQVnrfcqbY5IHwn7cLe2GXal8yPLMrBppH4apGNDzqxxkPX6/pRono7nfzH/zF4+zFmvk5v7kbvu2e3t2aa/djQzz5596jkb9cuQCwpnQMRT7DjMnkvrVQU3dppfPFJXHsdv44sQYRDW5kWoMrnIj+o38cEnVHof0cLNtVszEsfK+JiWPDvxfXgyeRr1GrriCsy+McCR+zFWzkt15Zn+5rI6hBJJmOTsDiqC2PgSdk2xDCrszsW/E7ZffixMqsiBu9stvfkJXNWzJJ+/Fd+TRr4B3lN+E/F2csAeDf+v9rRLqGBRpHmLISOFSMbK/NU5exRs/Aw/qezVd4nkmP5jkiPOg0rjBZNMOv6clcv3jj8AorA+EIB78BF1WK2e9vWulijkorHS4417xh0NdYk33006XimtFkdiZCKuXOeZzxt108mHrLIvrB0PHJtU80CGOC2jaVCPnlAr+7E20lD0t1tJ5silKSCWmTChHPtxjrhHUeQpay/UlVA0rGDp7anicNbIEXf0qs436r/NFQI1of87Fun6jP7ng3L1Juo7Xph9NPDE1BzrTLGrY4RjeWjBbHaw3lM6lqAFqd+f78c9G1uCz28FuqgFeGQPKmLE0I8kuK2tahguk9uDgARtxbqMl7jhk0I2TUNsAAFPfh8CySI2tvwnEwQkK9tzU+zBlCyPI9qctP34mCAHdvKO5whBSr54x+4aGryX6xKDaFDCo0HGXT9RrvwCg1qB8Hv7sdbBgkS0loKjTn2YJJQ7YWkF9cBAn5amrnt7sFZBhlyihisoAEUB3FE7v+zDvAwP3KnlZZqDlzr34psOhi63zZultil3vqG6SzsYVLVJUyyn5UgiJ1SO5yHLDICU8Hmnrz1D3jrw7huk0ku2bNaMlrtO027nNpiWdp2FPMm8tak8BwGKrGytUviwXNaR7p05tt/tjm5uIoDDc2pXRI0cDlGcA1DHMZAmnPAtktpyV6C4lW5EkEp1rWiTDUoC50KtU+7GdmmpYdsn3i8uHCzqFmBld0FEflnXlhC9OSy7ZbOfybuSsWlaB3KqdJJA0LStCTgwDgsdo99O1dsQeVErI9zMRFZxUHxPIaVp2DFiqU22egXtI5+mdsudw2txcwBDc9RbuzobyRZYyttZwW/xr9a9Ig5oqR1/FXFyqnhFN1ZQ7JqShektnue979e395KTNGrKqMxMUL3LhUjQcFAGrIYKQaVTZ6La5eHdJmjavnNqpXLJQBQ8sWJG2iFXe7NDRQaZVJJoFA4n2DDmqElLK7d+pmybbJLbTzgBfiIo8jjjmBwxU2Y7Xn6v5eAJL60dORSKkCTyo1RqQKiilKjxHjgYFe0vW0zQ79s0e77PuQMN0jfTTaARG/Dxg1zQ8Ri3oiLYef+qPUT1C6T6mudpvr+eO7tJKltfhYEkq4XhRhnjPevVgvsf8y99Ff9SW43ssdr1ZBDc6tKi9i/JevCj/AC6uwnI4XuSu2FBrtvvmzdRWplsnMiDN43FHQ/hYYZWTKNj7EDzbUErp4fuxZg5zQgzWf4a4mBSrddy2n6ZJ4aeE1PuOFvEGjX9SPLUjKZJCDkXb9pxjPXU+lGj+jag3cprxkFfdizXycv8AcXg327s2ubURKeI5ezGk4ElBvPShL+8kupAS0n8cItQVZkCb0LsrhtTqSe2uD9snZjB9AdvzopqeNTyxPtk7MvvR3R56ct1t0+BE0KDw4YsSgqzJC6r6MuN5lQhmGk6vDhL0ksrZortx6VXEwGqSSoFMiP4Yi1Bd2O2vpvd2sSx65KDtpXB+2K9jKX1vsk2y7jAJCSJC6VPGoFcUbawzTqsVyh7R8XfwxXBfJ6F68vrWa/jkUhkDIrAZ50OOhWsVOXdzeUed/UKec77OhYiAtRFQ8BjBd/MTWsAGONXUnTUKfABxzwqLT6FWtJ9aGjggg9h44JZVm6ekHVUlwRbTmsqUBc8wcadF5wYtletjTuubZNw2OQNmrIQRyIIxqspQHweNW20pvEu2yeExSyqa9imo+7GCqzB01aaphaTbUtIoHTPWxQ17lrg3rBEy2+mgMfU41ZakX/WxZp+op9zwah6n32vY1jBzkog95pi/c8GVfUij29tDGip2AcMZEabMmRxQ0rU4bAkkiOKEUGdByw2CSS4Y7cca4ZQLJMRLftOGwI2Pxpa154mAD6paZUJxIQR9EtSf3E4OASAd3WMblB5X4/fjJ7iBq8l8sEX9IXXw0k+7GTT9Rsv9IL0WekZn2csdYwCRBbSuIowSzGiiuWfPBgBbtm2q0sbfzflUFmJ5nFiQeD6a4+ouDDEC0snBBnRO4DCtkRnnqd6u7B0fHJtG0tHu3UgGhLeMhrS1c5armQZMV/3ae8jFdmX0o7Hnu+3Lc9+v33berl72+kr5t1OatXkEHwonIKoAGFTNaqkhN5H5Ow7DCVIe9ubm8Y8iqkRrl3BcJOQ9Q36e2o3jp+Wymuzax2V9JPFcTFdFu9zCqUiNNaNN5dHPA6V54W7xB6P9k/atfune95aSSSXPZ+vwF7tBCs0c+2QRdQ1VpbmExpb3FvIp0sPy2DyrUZMF4ccIs5OT7rRbRttrbl1cYJXT+3xSLqt4oYJJQ0hiR5F8qg4Vk7ODHAgqVmWfbtmvrCGMXrxariNprK4Hl3JZVyOuQsUIR8qUqOYwygDrJNv+gerdy6XbqjcbfcNzgtWjnis7CMSRsEcVaQSeWDGgBOiCJ2P4hgT6IDqoyBd69S9rsdi3HbbK2WHqi8ilhvpbdGk823fxP56vQR6NIk0jOoHDBo4zEP8Aqep997/2m/R9lKzrWi6J/wBr8/N5CfpVebdbWuy2ezFZ7W6F3u29XE6/mRpZRlY1NP8AambhTKmHdsnmK2/Fmg22/JfWabgIWjknBmCsCCKmuY7hzxeng2URnvWvqf8AViXbtpLLGraZrquTKvEJzpXAdynfvnCMxl3qFZWnGqaapOo5VJ5nFLZjyDnvbiXwsaAktpIqK9tcK2Fcmyf9OvVMse6XnRt4SIryM3lkpOSzRjxhe5lzxp1WnBbXJM/6kumVeHausII81J2++ZQAaHxRMx50zUYGxSpLLVmpj+3WMwOuACRD8hoDTkKHj7MZOxRVYNJ6Q3vctjmElpcFBHQhJa0SvFGBzMZ5qeHEYVuCzqbLse5WW+2f1QU29wppcW5NdDHMMpHFG5Y0a7JnP263R/AIfS2x/wBp9+LYKZBG/bJb39sYtYzBBGEtXA9bQZncelFizsQiiprlTI4o+0ba+8sgr0z0QNjn1W2lQxqaUrhqUaK9vuLXL3E14oAFezji6GZMj6z3/CtPacHJIYsT33Mn7cTIIFCe/A5/twZZIFfUX4GdcTIIENc39KZ4MsMCDdbiK8aYEsEDL3e5ctXZ2YMskMyT1Ye8k3KyNxXQHcA8wxXGfdyjTp8lLoPw93vxXg0wXdNz3e8b6y506KVWPUSQ1ONcXO7ZyOpnHVx82/1agX+IqeFTjPYuogVEqRhZGLFuBpwwB2OoxlOjNzwNMQicF79NLiWz3cJICEyoDx45Vxbp+oq3ZR6OuCLzYyDnqTl7MdApPJfW1kNu6/nRPCJW8wV4eJaH9mMVlFzdqzWDtzL5kNrIxBKSaAoyFGB4e3E2clteSw9BmnUcb8KR8eXHB0r5infwi+dZO93DZRZkNIC3Zli7cjPT60Clgj5nPjjNCLJHlhiAyY0GHVUTyOpBDlVvsw0CkqKGHLxn2YKSFaJSxW9ANZw0IDHo4rflIe3EhAgfWG3Oes/sxIQR1YLfLxnBhAA25NDFuMNPEQ1M+zGT3Ay5NBtBbNsYNaEoeHHGbV9Rrt9BXxbwED8w0pjqQYYQd2DY1kYXLEkt8NeQw1UQIdUb9s3TO0S7hvFyttt9vRXcjU8kvKONB8ch5AYsbJyecutPV7f9/E9ltBfaNrmJEiRNS7mTsllX4VI+RMUWsa6aI5M0ki8FbdtP4kABXtrit5NSUDLbjd2iMXVGy0jJlP2YnBGHuvWk2V+n9gT/ANzt23IZiwqBNcjU4UezFdRm8AS2XcbG3t9xs7ho5iqyt5dCpAcldS0KnSe0ZYLzyWUtZJqrab+MBKw3zXeyblvNql/fS5fVPQtXs8sjQMuzlhXgRp2LLsnUFlbSRz/TSLFF4Ht4wAWTUWCgitKezCOw61sIp1LAm5B7Lb7lFlLvGkhARTQB2Zj8zDjgyFVaGOpvV31FvLAbIu4vtW3xL5eiydzcSL2y3TfmNlyWmLFYpdFJWNjgltOlb/engIt90mNh9aQC3gHmSRK7eKsgzcjlxwPIycB7YLiXoz00Xdbhngueo7zybCVVFUsYnrM1KigJU17iMD+6CV5NEuZpprN7CCctFMFEultWsuoJCkcFpyxLWZptcqu/dJKq/mIREf8AaJwWvCvZip2grrrkq+4en+6wxPd2kTTQqcpUzyOeYFcsBbAvQVuS2mtnKyrQDJhnUe7iMWJyUurQa6K3uTYeq9p3iI0FrcxM6nh5TMFcf6JxbrcMenJ6u9UOnY9/6A32wgUO/wBOb20y1HXBSVSB2la4vt6GivJ5n6dtZJUWeNNahQzIOOeZoOWMDKq1y16FmlWOWIGGQFiPC/zr/e7ac8Vu2S1IO9F9VSW9/BbbmphkP5JcfBLH2ZZahxGIn1clezWrKDUzbTHxI6sh8SsDQFTmDjoLKk47UNobe0uSKEjB6gkYewn/AAiuB1BAlbC7U1AzwYB+I75F/wAh9+JBDoh3AcBX34MMkDgj3HspiQwnQm4Anwn7cSGQ+039Mx99MSGA4Tf0pT78SGMNt+oV+E92eJDBkj3Fzdwf1Kj34mRTI/Uvcvq90tVY+FdbFTmajIHGba8mzQip/UJ2868MJBeGJ988qwEMHgkoKsTwNOWC7nO6uSo3UbXE0k9wSyk1DHnistSgFzPLrZUY6SahV7ueCiJFh6P279Svwp4EUoP34spWWVXZr9v0T9FDDf28dJEHipzXGxa4Km5RoPTW4rNt0llMaOq0FeymWLUwVyec/WyA2nVkU6jSzRsNfLwtjHt+o1e3fJTtuvZriRFkJoDUDvxW2aUXzouZYtz885jymAbkM8WamlYq3ZL5cXcV5JZgn+krEr2mmWLtt6mOvIx9MDz450GM6geRS2teDHDYBItbPPJvZiSl5ISI7M/j/dgqyfkUfW1JGTZ4Yg4LYA/GKDjgSiDq2w/3g7hg4IOranL8wVw0AAe6R6dxhNdXiyOMnuFA9eS+2UZbZhQ/IczjLp+o1X+kF2ll5s0aNINPEjtx14MMF5a82/YdluN2vphBaWcL3FzN/u4oxUn28lHbizgMHlT1A6+3HrndTuFyptrC1rHte3aqiBD8TsRk075a29wyxXaxr16uvPJS5pyZArcCOIxU2aVgSzaQSDnQHuwshHdktBvfUG1bQ9NN1dRRyE1+DVqIPuGA2Af9Rbs7t1ru9yWoscwt4iPlWBQg9xwtOB2gVst5DbXP0e5RmW3kJ0oH8tkkYUqre2hzywwFgkRwCKTxAgV8ZIoVPANgNDJyw+rPaxxXyCrAFZYgfm7SB24zs1rJOgeZZJfqJFakZLItTkwI/wBLtAw1SWKbu97LPphAIMh0pHzKV8Pt1HFhksGbLYrzqLd9k6D2lXkupNMdzoOoIXYvM4B8K0U5nnhpwBhz1E3Xbt16li2+yp/y309Guz7ZFECVuHh/qOFA8WqTw5caDEphEVW+DR9mhnstksYbtT9SIVeUSKA6vJnRgOarQYqsx6Jt5JcLByUZQ4ORU5g+7GS1jfWpItLVNuZ0tjpgmOrym+EMezuOJ2C6lH692Kxkma6jUJMcyVyr3V/di2rKbqShna45Q4RhHKoPAeEkZj+42Lq2hlCWT2H0TfJv/RmyXUp1i8sEt5j2kIYWJ78a2y7z+JgG37fHtd/cWk+q2lgmkhEiDPwOQNSHJsuYxgvzgd1+Yh9UQNCUmBCCtTdW9TE3YXXitO0cMUJyx2hrbJXMTWW6sUtbihtr8UrBJWqOWGRQt83bxxG0xIh4LmnqlLsPk7Nv+3zPOqiN722PgheoVWcH4o5BmKcMWar2SwzNt0K2fJeUvZLm2jvLGdLq2mAZZoHDpnxUsOY543a9nZHL3a3RiTc3q50YdmWLJZTkh3O8XlsKlDQYV2aBMA//AJ2KPpkVwSaYT7xJJsHVIl4FgezFqumLLJLdQSomsvlhuwZZAueu4rZSWYjTnUjFVtyRJZW771ajRiIyzU7v44p/5JFWzBjesL6wArVPKowP+QxvtW9Sxbd6qWckAeWQKTxVuNcWr3C8i59AX1P6gQ3Vo30twtSDQjiKYS+6eBlWWZhLuM273b3NzKXYDSrHLL+3FR0NVUkL8lO3n93biDg0Xs88KgLUDiSeXZgGaCDc7gUNdQKkHQBU0J/fghg5HdRMKGmqntpiQLBcPT6UW+5A0yyAP78XanDM2w9J7GI7qwVHoQy/f2Y3rJWnwAt2il2S6aZK6CCVHLvGBwxHi0mJert9B1DPZfTCtyrsGC55UzrjL7i6TNulQ5Kzs3S1zVWbUo51xz7by53L3tFlFt9vVqdgI4nGZ+4cmfZeSc25oGYwjU4XQtM6YL2tlIxFfX1SWJHt4YT7jCPW28yLIRI2XbyxHewIOXm9XCh5IBqCCrVyAHOvZTnhqu9hlRsgP1ne26B47czrkS+rRHo/GrGob2Y109vfyy1aCPL15uqtqKQRx1BDandih7RQD20xoWv4jL2y9SRt/X4uX8m8aO2m4K6sWiappxIqp9uM23VfmrFv7drgMRbhelgajSc1YHIg8CMZ67bLDM7q0Gre+k0jUR9udcaae6jkEEO7lEu4wtUV1e3Bvs7llOTQrViNjBH4D+zFWtwzXf6SvNcvagSIwJXPjjfs2pKTnFK9Vutb692e06dhkKxXcvn3Y1U1xw/00NPl8zxU7sTTuexmjRWXJkc7hmahy+AdpPbi02pEBj2+ymFYzG01Eaq1BGFIWT0qtTP1xDduKR7XBc38h+XwRlQCeVScCwQDcvJdXEt8TndSSSup4+NieOEWB2Rvp1uYyjjMZA8wMNIo/bXMqFbe+FJaBIZiaKwHyt34MkDm3+RI6282p1BAjEZzLngrdo7sLapbS+Ry4uGS1lkSoit/6p06QCDRlrx08guFqh72AEV19Lctu91SS9eptomAouWTsOQUcBhyiS+dJeb0T6f7l1lM2nqDqjXtezSNlJFbPXz7gc1GkNQ+zCvmAFf221njaws9v1rdXsemfywA8FpMdCxIT8Mkq1Z249mDJYpXBsbbptVvP9JLOqFQIo0LVaigAVrmeGKGx6poJ2VoKCZSHSuTA144y3N9eCVc2Ms6jy/aCozBGK0x2VjfLCSWN1oGRhpkjcVzp9wxdWxVapn13tk1jceZDVRUAqx1qQeQPGmNHYzNHob0P3A3XQcULZPY3c0RANRRiHXLGyrlIaCk9Xzy7d1fvVhIsVxbC4aSOCUAaVlAfwsMxxxi2LJa/BQt+vFJafbXktiB445T50B7tQ8S+8YpVQyM9I7uY52sruFDFKGLWjkGGRqZtExqFY81ORxNlfQWYYc6O29966t3GyjLNt1nDHokk+SOoIiavMFsuwDFeyyrX4kScyW7py8s9gu92exie0s5SJGtJVKDUH0xzIhyCzAk1HHGnRtiyXwMXvKfJLDp6stNGsOpHPPHRV0cVsG3/WO2aSJGQU4GtcK91QSzOupOprSe4pasWkbiwyA9mMWx9uC2tWyHB1Pf22nypan+bPLFS7LgLoSJvUG/WLy2CgjKvHF/3LAWsBX/AFPLPExkmLFuIr+7FUNltaQV87i0rEk5ftw8FiQOe6YzaSTSpOkYZDRgsu2XUckIVmANMyezvxXZFdkOXs8axtHqBryrgVRKkSwjoh0k0NMuzni0114CVf5R9p4YgYK/ZAtGqjVpNfDXjiGWRjcbNx4gmmpqADWuVa4KD2Itnat5vDNiB7K4aAPg1DpCyRY4rlMmUge3lni2tTLseDculL6MWvlsw1Dj3DGyvBUlgm79Ha7hZslRqIOdRiW4GSMK3jpi2tt3lvCKq5NDxAPaOzHB9zZpltbxgHbjua7YNCMNXCpyGM1ayFSyInUcVzWppp8PHI9uLPtQHoS7PdLeEh5WrU5L2nC2q3wCCS3UlvMSkVGANNPtNMJXU0BVGbiC6ufzPNWCMn43On3dpxp163YtrQB3+6xx3PlSPI8MAE0JQkF2XIulKaZFPy8xjo0oqo0VrALfep3kZ1do/Oasci5g8wrrw48RxGI7DwMvuLlWJXXR6SRHKjkUPdXswkjQRpITGFJctC4qjcW0tyI504HvxEwtE6w3zftmg+kt7l1t1rPEy0lGilWAD5Np+KnMd+FtrrbkqtrT5Ll0/wBTybtG8d0FjvoArypGSY5Yn+GeKuZjbn2c8Yt/t4yjNfTGUH9vuBPeI1a0NMTXhFVVDNIuZzD02zg0pG2fuxVscGm30GPbx1s8K+WzeEcwTmMOq2aMtdclL3ndpdzlN09TRQEHMBePHHV00VKGvXWARM1TE2VNY4d+HLRiUEPlwr78QjPv6agEZZHLCshbujtW09E9U9QLUTXpj2q1YDgTm/8ArDCMPkrghARYxlooAe4YAyGvJo4ePNSCGPIUwwCYIhco0UieYrAGhoRnl7sAMjbw3G1RVkcmzc/ky/PG4+FX/lPbhlkHBM3i626bbdrktLlrhZYzNdWRj8tIbhW0iPV/tBUayeFKYZoCckXpHpi7626ng2eFykEhM1/cnIQ2kecsjE8OxcI2EsXqN1RZ9Wbp9P0+nl9PbRa/puzqAV1xRr4pSDw8w8O7CoLGI5be1uJrkyqBNZWt1E+dBHp8tlAFWqrihpzwlmXp5/AP7s0k1la9Q2EGq4uY45KNQMK+Fia5ZUxV5gtT+UOdE9Y67iWxkikV4ZDby60IpIOWpfC1RnlhNtYyW6r9lwaVYustG00rihDsjdR7alzDqRSJNObLxP8AHEWAp+plm72l6tyQ9q4krlJGDQ05kcsWq6YLaWaF6N71FslvuW27kyo9/JHcWqKfErICjF17G5HGmnuFEB+xaJIPqlE79TbhcRozakheoUGtIwMsLeybFvVmNbpd3kE7S27kA1BJJU+w92Jhmd4Gtr3+C0vY7y8ja28s1MkVFVqZ0PFeOA6TgDvCNE2O9ml2KGW9dLa9vfOnWMMEeT6g1BYLxbTQDsGMN6rtBtq3GCxbIL666o2ja94X6hZraWyu0ckKUdQUCVzHlacq8MNSyiUZ9tPlyUjrGXcOlt0n2tmEluKtBcLmGjrkMuztxqq20cW+pSVWbeWkSp4n7q4KQqoDPNd5Nb9vGuZzwxZBNF8sSAHMAceH7cESAde7ujVCih4YdIZVIdvcCW4GqpHbywGoGYZkhtzACtNVM+WK1IJAFxAFmJX4e3DyOiRaXBiJANDlngQLB26md5NQNcQiQb2sN9OrAkt38a0zriGlE/8AxHYOz3YYBVrXcPK/LArUULAUp2YkGSCZ5hvPE2YXKvHKvdiCsYRgkoCCmlsEY1zoe1eWw8YyNGU0z4Y261Jjs8k3cOpLrZbz6eJWOuldI7DTPDdoYFRscbq6/IIeNqft+/EdidGirb51A7OXYEEVOiv8OWObup2ZdShSt1uLm9JJII45cBitU6mitYAazvby6nJy4Dsw8SNA/NvkxWlTkKKKZ4ioRVJ/Rwlv9yea4crZWy+bcN2k5KgPacN0GVC63lrd7tayXcEJltIRpEYNBQcdIJFaduLEoHS8FO3KKaeYJICAKAKSTmBQGuVDidizo0RlgJ1RVJ1VV1bw/CPi7iPvwpCeY45StxIuoiMJclaAtH8Ov+YAgYUcnxbatxAbdSDNAC6NSnmLTPP8QHHtwJClIi32uRrPU35dxbP5iih8SOaEDvryw85B1Prfbrzb7aS/tCfO2SVbiCPiWsJ/FNER8wWpNPbiTIvUunTwMe5yxg1iqHibiNDgMufZQ5YztQjFtrDNL32Rk6OlcGlIXOXsOMlyz+08t3F7PelIiKnLUxzGWOhSvBKokNIDIsZ4FaLT2Y2MdEOF2YKrEaInYs3YF7cAJ1xrkFDlXI4BGfXFagUpWlB3HhiuwUi5yuth6VbJZk/nblfy3ugcdCE+I/YMBkryVd6VFB4a1yGBA0nyNGUaJvDUgnPlXDkgUscYZpF1KWGoBSRx517CcAkHYFu9znj2rWZkkkWJakAs8rBESuQGtjSpw64FO9SbLvewbtcbL1DbmzvLCsEsCkMECZEIVqpXvXjhWxkXYrJ6d+lqwonkdQ9aaS7f/UQ7Wq1ORzWqnT7WOF5ZCl2vlwtojjKW9aKh4Cv7Th4IgjsVt9beQ7E0bPPKzJtNxGCxgd82R1GYj4tq+XCND1fg1mfZoFjttuUfk2kYiIbPUEUhi1PxGpxSs2LbYqTti2azgVQCWUHUqsa6ScjTCbGXa5LhaQKAoAAA4U4Yzlo7fBlMcrLWOmlqcuWFZbWowNngmtmm8sGaX4W7jlQd+FawMrwyg20dvddT76tk6SLYWsfkTxnwhoD40qOxsK00kdDXbNU/Joe5JHuWxwXbik8sMZYnixKZ/bjQsqTn7sXaPOvWttHablLE4KZ0Vj2dhxoo8GHaoKjJa/UhY9OlA6pKASQNZpUYduEU1XZwGDcyWW5Qus5MtupMGpqnUp0hc+eM0YydBYhSat6XX01zuarvcoe6jjaSBiTqCL4nAPP2nGa9Yajgbbb5XPJS/UqZk3y524nULd1NlKhyMZWtKHtrjbr4ONeuSjm9jcVUBTwYfL2VBPD2YtgqgSLhSTSlK8TgwgHWm1LTiOzAFGTAsrUPPjgyEJ2ltZW6hnHD78Vttiti72eEJSMZUqB3YKREgHJIZJKAV5YYsGwJQ1FHsAw8BgI29nP4TMNJ40PZgOgIDVm/lqq0yGFL/AV86Hu+GnPDCyUazsSXWtfEampplgsytlwt7WCOxby6IoFQcizEdnbitsrbIEWzSvfo+ZVyMuHPtwy5Ja2DbelbCO320kADw0pTLvx06cGSxWd+283+8VV9CrQZc6HFFs2Ho8Ea52ifzvIRvEcyx7sJaeCNg7fujLqKxa6EhLgV0kZVpXEetxJdrt6lMtaFXWX4q515HGaxpBd8iajQcOzCJhTBzRkv4efLDyNIYiluLLp+4jiqrzSoGYZcRQcOYwZLa5Np2e0ig2qCwUUby0E1eEg0gmvYR24rtbBopSWR5+mbWdna5jUxGq6qcieOXMYzuzN6omCNw9P5LaHXAHeCJi1UH5sQpUMn4l7R2Yauz1E2aF4Kghgt52aVgsOa+YDUKz51oPlPHF5jiOQhFOtlc+bbJqQUJiX41pmSoOTp7P2YEjR6Bi2msbjyZwSBdB4/ECEJAORY/CQPl7sJOBmPB1a3mmVCsrQSxzDvoSpHarE5+3B7Agm7I8T3cLx8WhSq/hoNNPca4FuDne55NB6jkK9EXDDlBJ/qnGS3IF9B5WsGMj5gkAD7z/DHWpXI0YHrmYmQFeINVPfi1sZEOaVo5JI1zim/Mp3n4h9uEbCPWEmuMhjmmRPb2YiZB6bU7mtS1MjxGeQ+zCPkJc/URUsbrYem4sv0vbIw9Pxyni38xC4D9QVRUXl0kaiciASO7hgoLZ1vmI4U4+05YIw9BmQ1TQqooRkKYAPAnbH1RXy/L5gV17VFSM+0HPBAi1+n/Tl1191dawbtNLPY21Ljdrq5kaTRawmoVpGJNGIpn8oOFmB8QMdddR23UvUl/wBSxao7CMi32uEeE/SQnQpPGjSmrn24lMAawCLWzkgWK6uozHFIvmwxzAr5kRy1KMqivPDyBIufprv+z7HLuU15EG3OcIIJTQuYFHjii4DWzce3FG1uIRfpqm8l4bd7C+3Afpzs8ZtxJKHXQUctTQwPPFNJSNWyqbwEdqLeZmMjxxVbLNNaQi2WYKqADXLLuwgkE8RCeIxkZMKHEInBE6iuZNq2Bp7TSt0zxw24YVXzHOkEjsUVY4luB9de1in9NdIRbS93a2ep7a6dRPdSH82UjPQKcFqc6YjTZq7wu3ksvUcjw2y28Y0RxLWgyA5DDN+DFMnn3re4n3fdPJg/NVSVIRQXDc8xjRr4Mu1yQ36eutv2+C681YjI70Rhq8SrlXtOI7S4KlZUyABs292cyXiWkxmdy3mqhcKxzOWdPbh5UQMs5RdOibu56dnueod+lKyvFIIIHzfSwo7so4dijGfYu2Kofv1Tb8ld6z3yPcVtnjfXM0EQLlaNSNjpfLhli/XVwYW/IJtLOO5lMkh1eZ49RyqWzP34azKmyd9BZp8TCp4dmFkq7HxsISajJR7MQknJYbeFNQNe2mIGRmLTMxLMdPKmWCQ5LHqkC507OzAkKGoNsLyjy8wTTvqcMlIXYPWnR93I4mEdafKBxHdi6uti9xrdrZrGVLaIFFGZLZsa8sHZKLKOWfLUlQg4CgHuxnRoZK1L/wBymHEK+k5dhHCaKPiYcT/ZiNmRotG2wiRNZzVRnXFNlkrZMaaNZUC5EEUHE5YsUhdGXKHqiGx2/wAtn4UHvAxsWzBR9tsrKdUf4qW4cAo7fl6vbXGV3cl//HaQ4/VLiY3LDUKZkCmEWxyVfZGd16+k3K1NpBHoqCoJGNb2tqC2uprkoV7cPAz0NCxqTTt44zWWTQDzchySSc8CCHY9AcUFSTSnbiBTLZtm2R3dkGugfIDxOaciJBT78sNA9MODWhZXQfzNJRSaA05cPsxRfg36mgzbWaGFVkz+U88j7OWKDZITgtCIwy+IkFCD2UoM8CAplK3D0dj3K+t7x5ltoHjC7ja0qGKMSCnIYsVrIVqjchKT0m6WtmaSzlmjtgngtWPmKjfiVj4lB+YVwrsyYRT91S329XsoYxIuoRmM1DxujVVweYOHoynYgPYbjGs7Wrr4gfACSAFkBQ09uLWiomdF3Iu7u5kU1RGESE8aR5ftwLcHJ3uWah1K1Og7on/7eSv+icY3yMvpPLdiwFsr8Khmr7PCK+847NUOzjaZUKEjUvwnvxByHcEvGpIo6EgjnnhSHbJ9Mr0PhAzpxI5YDIF9jVbverC1erCe5hjyFctYJ4+zA8hfAb9RLlbrr7c/JfUIfKtkOZB0RDtzyJ54iAiuoDO7A1IGROQHZiPAyROthHFF5JdizMVFdI1UFa6uR92AmEiiWIPVVKZgFQeA/sw6QsiNnkjV70yE0U6qjvqMKwo1C9UdC+msOxqGTqLq1jcbl5fhkhsIqERjuYHTl34RkryUeQDTAQ1QXVTrFQABlxwpc0fXE9zdOr3MxZRXQCdQSudBX4RgqwHWRzb0tY7q2mudbRRypJKtBqojVI9+C7BWvPJqu37rtW4+Y+3SIzudTpWkgpyI45YothF9awyy7ZpABJyH+WWM0m9NwWG0mqQAcuzAEgMWzKyKa5HDC2Qzum2rvz21gSwht5fqJpENGLDJUBPb82LqUkv0fKm/UfhFs0gljULbQFooAooGIyZh29mDdrwU7LOYAPWDeZCViI1uCpTmezGdvJXVGdR9K3FvJ5/lIrSmulRzrzOLfuFbr5A3Vi2JEW3iYNNaguIBnpZ+JP8ADDVT5MG+xTL6drGFmiu5SXzKJIy9+HSkz1swJbHc9yuSqs35hBBzKrp7jxxoVB+z8lnHQd3fk3MzNqYAMaDPuy7MXV1FVtgN3npy42WGhcgLWg5UOFtqInJWPrJ9VdRoDUYq6ofqTrW9lcUrVjkDhIEgI/TM0au1T2g4ABEii3hd0UlxwWmVMQnJGllMqDy8zlnzriKrGRI2u+likDOhZkPCnE4urgDRom19RxCyYvkx7RRhjVXZgrgo+87wd53ovEKxQ8zzOM2y0mjXWCRHcxrIABlw8WKoLZJ/1Nv+EfDp92DBJB9ntCIy+WgzGZbtwjZi7ByO3MUci5JQcF514YKrIKrJESCcX4ZFqaZauQrQ5YsSNdrJ4GNyW9uW8iLSQCCTwHfghpBFTaLgMVWQ6VAoprSpzOeEsC23wHbXaWktazNpkYUAHfhaUMvZt4B7WKQkxgCqEgse7nTFsjK7ZAn2+B4yCQQgJkc/uwC6pWrnb5F/MgB0knjywYCkhzbLG6mu1Rhlx9uB4LlVGj7WKC225FUG4kjjYcPiYEU+zFMsNo8Cpt6hXf5LFUvmuzOLdLkSMyGaQ0VAoOQJ554Xq2aVatDQ+j9yvNwvrjZ7xWS7tKrOkuTgjIgjtHPFNqtGhXlELqzqy86amVRe3ELNq0rBCsw0KKlmDD4R7cCibeCy7rWssOdO9YXN4sUG43NJZY0ljNzB5WtJM0ehpQN8pGHtK5BRVuvlLlbQxuF0kZippmpPE07sVxLBkzH1E2eKLq6L6QaGmipMiiodjmPfgrAOShbx0/1FbXc3UFltV5ebdZwyS3VzbQO8MIUGhdlHAcWPAYvo5KN1XUV6Z62tmlfN5GLsRmCWzy+3BucTYa11T/8A8/vCP/tpPt0nGJ8ltfpPLcTaLWNBx0gD2HM/tx2SwZdn9nYRxzwBhliSCpzqKVrU5YUgi0ek5rwYFTgkL56V7SNy6xtrqYD6PaY33O5PKkQIUV7Sc/dgBtjBW9x3OXd93vt5fwtf3EtyAeQdjQe4ZYgBy3ai0YBgPl7fswrGE3LlIJI61BAzoK92DUjZEU/mCnzUw4pb/SLpaLqHqO7mv2EW0bYRd7jM9AojQsVXPtIqe4YRkH+qep5+q92v98zhgmZLexhY+KG0jJEKduY8T95xWWIDyyRslvGpyLcO8V4YUtnB8q1C0IalCBwOfbiETHUKo1MtVakcgMEJa+mEjuCk6xUlsFGmYZUSUkA5cTUZ1wl3gspbwaBt12TCFYUI4+zGKx0acB6xusiGPEVoeZxExmgvazNNILe3ZSwprqcgDwxfq192PTT2ywjeSPZKm2wtSecEyMMzHF8zN3twXGjY1VQC+FI6dCQpDGKIo0oo40AxikxfxIc21SXrKUyCmuWeeFdRu0AfqUDZmt0ZPNjlpmR4vip7qHBSKLcGJ+pUtp+p/Vba6yMreXeOAQySUqMhxDduNlODn7YZVoLG83QEFdWdQTX9uLa1KFgn7Za3G0XKVTUc6Cnfi+rFs5LjBvNzDbK5U6cyajni7uylopnWe+y30bQKcj8RpyxXe8ltKwUmOIyNoT4m4YpNDcBq02DckAm0eE5ZVxHUqbD9jbSooWdMzkSwI9lcUxkrYzudq0gMaRkuvGnDhh1kiYK254La5EF1H+Y3DuxbUvgtllBYmQsYgAwBZqYsUFL5Ob3vNhYWkpjUDSumEDiScR2XgetWVDZgdbzTAHVVj7ScZ2XoJxRRtMSTlXj2k4CCS/o4vxH4dXH5cAMFwn6VntIlZm8zgT/AYdUZz0yFuPT26xWxnhX8w+Ij4qr2MMM9bQ0wA4Ly/t3dby3ZpwQNPb7O4YVWLK2REl3a6SdpHtnjHEBRwrywew6uJG83YR2eFwCNS6RWh5VwsCxiRCdWbigOhGBpRarmAOzBmCJehEj3K7ILvqLZ1Lg+InsxCympshG+laSlw3iViWUZAk4hopoCdncWiQ6rgBmoSxP2+4YdrBoft1B9s9xDLKZtOVcq5ADt9uFZRXTaA7aTS/rG3gGqfUwHLkNY5nFQr0tM1DcNpsHvF3BVPmRMXjZMqMrGh9uEk11piWEOg7CWDc77drti81wGUMxq1OZJ4liTngWqGjlEzqzpdNziiEq64E1KUAqaSDxU7iMLVxwPh4eSbte0xXcdpFff4xbKFbWyVwAsEC/IhqW0nvOI7duRq1VOEWaO2gs0XyhpVRQLXP2VwkIkgm52IncbrqCUJdFQZUiIIWNFAWpJ4kDCNDpp4BG+3yWjNeT+dt82yyJdSFnCx/SmNhMihKIUnUgaWHPCJNvBvo60o24dev5+DIPT+HyLcLp0VOoJ+EMxbT7gcbbnjdnJqXVLpH6e3ssuSR20jueVApxhayv4llV8p5UeeRUjIFV0jxd5GYx2Wy5CPMDZ/s78LIRCmrHARBqDOUU5n9+CwGj9PSPsfph1HvkRpPu00e0QNUjSlQHIP90twwAcspUaqMlPhUAD2Uwo5IWSmmnHsxGSRi4OqukkmlSOQPMYcAmHW8qKqlnJCoiipZiQAo7yTiIBr2+W0XQHSFv6fWxA3jc1TdOqZhWoWXOK3FKaa0zH4R34rbkeqKKUUDM0LAkLTI93ZhB4IcwzjdRRFcVPGhNR+zBQ1nkciZWy1AhcyBkcRIjtBJh1SSK1cqcewfwxCKZLJ0rvEG0yz29+xWG6VPLkJqqmMnwnsU1wl1KLKR2yXVN82oRKIpo2ZsxpYZ0xkdLHUpanqdj3e9vWkh2cB2jFZJznHGeXdq7sWa9PlmmkML9PmzELWd3csl5cUMMrtVxMv9QkD5WB48Mb9bSNNdlqPC+U0rqLp7bds2ay6gtrmraYba9l/wB+1DpanIjh7MU+6rNZOT9+1rOrBO3XT3kusHwcF7MYVRlVsFosLcLRvvOHVSh2IHXmyvfdNPc2yVntUcAjMhWFQ3uOLFrllPbk8x3XSO8mV72ZEeMszyLUksGGNq0tHOtZtwKsLuHbwUQVSmWrjl+3B4HeppCJd6t5J1oB2nLIYVWkH2bMlXnUUCW4iCCtKgD24ukj0WRXNzntZ4WdwFdswTz/ALcCQqjAez2JfcRcOCI1PAD7Dii9oyNerg1Tb7mwe3SJgtSMu4d+HW9QZW2M7nLt8KPoAOqueEd0xZB9rcbc4bzgAlOOHpA65KbfSWku/q8RrCGoSMHyXpF68zZ02kZitK59vHFuIEzJl+63CT30nlf0wTpzPHtxQXrgKbXAGtqjj38fdhWMic1syAMDmM6f3eeFTCyVpb/0q8+PbgENkQPeNGKUrTOmf2416avrLOXksFhsccyeNKLThhtmxGnXQEdQdH2akypHT2Dh345+y0ZHvTGCqy7DYHwuvDOpHHGf7xj+40NHYrELp05cxTDfeCtjYhentrUEuBq4gUriyt5NunW2Adzj2yGV4ovLdVyC95xb2Ntdio4BFv05Yy1eQCjfFw4nliO5t1baWGbnpqwhU0yWtAeWAtkj3dUiVa7BCYWltnoOCDkTSmf7sR2CkrLBPljNgqysV1W7JLUCtQpDGneaYXsJsriDQJZZHsWktz8emRVBz0uKin24VuGU1+arDPS3VFtFbNE9hMb63QxpZIVWR6Go0M1ELN3nC2u5Lter5cMsIumnZZI4pVtpfGUuF0SRuRVkYDI6TzGK22M6pEu3TylEyrQt2ZcPZxxMkWScjmQDI5/wwRCPeXlsHTbjOkUzJ5wD00sK6Qp1EDxdlcGVIa1Zmnq31Dtd1GOn9luPqpp3S73h1YSLWFdMUJkGTGvioMkApxxbSE5KvcO3Xqio9NmRStEKk0JHPBuzh7VBcPVO8+g9ILsaqSXbW9hH2Vlk1N/6aNijVWdhZRfKjzdMtYSO807MuOOkuC4gElff+zAIL4KSTgAG4jpJPYK/YcFkNH6wVtn6I6Z6ZZaSOZNzuKHizLQffJgMC5KQH4ZcT2d+BAR6MgCp7c/3YVhQ1VSxANa1r3YsIaF6Q7Jt0Mt76i9TjTsfTY1x1/21+R+Wi5gkrUUH4iMBgYCO+32+Xu5b9uZLXe43Uk8o7K0CrX8KDwjAgdI7ORJArIPADmDUHPIn3nhhILEQCgDALkgdWKg9/ZiAbOo6qW8xATSiOPb82GQPIQswJF0Dj2141wg6wTGOpgNOivCgp4e0VwBmyf05stpuu829jLdJa2jkyNO5FQlcgB+N+FMPVDa6zaGbtabHs1vZwbJtEIS1TLSo8TzPmzZccP1OqrPWiF1H6f72tnI3TxhkeeMRXETtonc6tR0ucqBflGJfXgmr3uckraod63FLfYt3eQw2WbQSDSENMiQeJpkDgVq3yZN22G2i+7Zt1vAgREUKAAMR1Rid2wzBZoaCPwHkDwxW6ITsS4oNOpJRUEUZDmCDyOEgkyUnrb0yjvNvur/pJdN/pZjtrH8uYcSsbfK/4a5HGrXucQyqFOTy7LYXQEtxIheQOwkQ5FWU0Ksp4MpyIwt7QPtvGCuOlzqJoTUnSPfhVYtr7hR/AlWdhcuWaanhy09vvOLFc1U92nzB2az1vpiUsMjmagVypgWumB7qW8BKytxbxt5hAdcwaUI9ndjDsbObu2psfjlRZqxMSxGZ4gYC1sz9ZZG3Gdin5blnB8K9pxaqjfbgDXsW4JG2io1cT7RnTDoMIENDdq2pQe5qUHvxYmOmcku9yKGKUuIxyIIOGDCI0cbvJpA92AOlJc9p24iCMn5qE9/dipsaArcbekUWoiozrXhnngDRgT5MX4v9j9+ILJs2323lIhIq1BX2U4Y2XvCwYqUD+07iZpvptI0iv3YyttmlBO5gWZCpFT9xwICUHqDbJbaYtGDQ1IP7sY9tIMe3X5K/IlwCaKSeGKEyvW4YD3aDe5yVtaxrpKjtpjRVo0/fcwuCpXGw77FMrhC5BqSa1ri+t0TZZEe5suoQyxRRtSuqQgkewYd3TFreBW5Rbj9KsGhmd+Az8KjmcLNTTbcmviP7NuW47bAPPhbLw8M/bQ4kov1e561gRPvt1cho5YWRASFHEkHiTgqAf8ieTQOmt5e86ctryHxzwxtDNFwOu3NNOfMrQjC3LtXzeTu0eoN60tG2WVWhbVEWVQHDdhZhqB7TiOhvprivD/AvG2df7fuvlwyWd1aXJp5izRF4RlWqzJVKDhiu+AfYazLj4lrtpVlPg+Dl3/ZhExR151hjZnai/wAcFisyH1/3oWFpsWwvTzLwybrdA5MVj/JgU8xnqPuxdSnkx7dkGYWG/JGwWaixKPCUH24doppuc5L101e298RLbDwCgr254rsjL7nYrMe9ddxp0p0z0+oJa7uZ9xkPYtrH5KfaZW+zB9tXLZNfBjl9AsdummuVQT/eGN8YLEwJIc8/YcVoJ8GBSmJBCXsVj+p7xZbdTULqeKFqcdLuAfuwSMt/qruP1/Wl5CoAh29IrCOg5RJqfL++xwrBXgp4DEAjnwHfgDD0kmlKV5j7KYiRB2wsbvcr6222xQveXkiQQLyMkjaa+74q4YBo3qRfWG1DbPTHY2/4bsKrLubLSk24SLXxEfF5YYk/zMezAQUU3aSr7cAeBeQqeZqxwAonX0sjSyyE8HEYKgaBVfFSnLLCFkEJ2UDQfi1DM8dNRkMEEs5Kq6tGSnUQRTKh7+ZwApZJlopjpJpITghNaEjM5/twpZBKTzXKyKdbRDzCGOWhcyP7MRMjRIklExMxGosoEaIp+JsgqDjWvDDVy8CQei/SzpndenenbSfqybzNzkUtFbt4mt4WHgR2PxPTj2Y2JJGi2x2UF6imjlYr5YDIVYGnLtGIR1HbmzS9KvbqBdUyrkCp+UnlTFdkK6kS3vTGxV1OR0lWFaEYz9hHUObbcW1wwRW0yckbnT8JwyaKWmgs9vqTV8449pHPAtUVMjElakGnAinIjgR7MVyO1JkvrR6VyblbXXXXSUVb5FM297TGKfUog8c8IHCcDNh84/m438oH1fL59f8A8POLFAwu1AAYB0HKhzrn24SCh0gg7hu5jdEioSRUsB91cBKBUx623K1OUh1Fs3AOYI7+/EdchSF7leRPGpU6fMyoOOkftwnXJVajY3ButrbWjCYgA8BSpahxbgvq0lkchubW5V5z48vy0rTSK8+zEhQI7Swh5tk8Xw0KL8Va0wIRYoIS3VhI7aV1BeAoACcArsx67Syu4iyqNZAIUilB21wXYbtgGjZrcMssNCSc+B4cq4iYtW5LNtNlI0WoLlQcufLFTZrXBL3CEpatUUpxWv24IXhAfyk7/wCnX3dmJImDcIKBEyoKDvw7KkTbef6cmQAcOI44gQpt25rdhy9AEFSe/swrIA+oLqK5lEMQqa1NOAA4nGXdecFGy/gDSQxg1I+zGSIMpxbWJ89IrlmRg5JJw7fbsasg9uCMmIba7Nj/AExkOX7sGRZkbfp2xcajGM+Pblguw0wMnpywYf0wfaBiKzF7Eduk9ukP9MVPdg92DsJ/5dSyt5RYrpqfMMS/MQKH30xZW+TVo39bR6ids6a+qrJb3RjRyHCsA6qe6oNPZh3dyek0b3VF127bp7KARs/mBhRm/Fl2Yrc+Q32O7lkhbxLJtOrh4SB+zAQsE60DXDLPKKaRWKJhWh5M3fhkUszD1P6STq3rO43K4YlLa2t7KBfwrGpZvtdzh/uxg4/udnztFXl9NbcRNGgNeGB95lD3YCfTmxnYyLcE0PCueHVpK3aSu+sG4/VdXw2bMfJ2nbbaEDkHnrO/vOsY0+2UVn4mnXwUF5nuI3d/xUA7BjSMB7hQsp76HCjjQORpgELl6Sbcb/rmwr8NsJbpzx0iNDRvcxGIwWBe+36bvvO47ohJS7uZp0LZEqzHTX3DCBRBRRXSfdiBOS/FSnDI+7BRDRfS6wh2Sx3T1P3aNWtNojeDbo5MvMunGmq5Z+JljFO09mCwMpYuZ7m7nvr2XzLq5kaa4etaySnUx+04gSRtxEe3waTnQk1FeLHChJbt5aEUOuok4jiMsVssGm1PryBf49R7jU0wUQWhSQMXIAYhkJGdRlT3YjGCFla3F20cMJqteAp4a8SK5VOFgLtCCz7BcNdQbTtEb3l1OdAiWnmlia0anhGnmeGG6EraeTZOgPS/a+lmh3PenF9viKCq0rbWjnhoB+N1/Efdi+sVDLfHBoUS+dL4pNYPiqcueWEdh0iX5VABr0lcwwOYPKmArjonWMqmYZZqKnPgTxr2jnixWkaJO7lahmF5GPDJk+Xzcj7xjPdQVNEZYVBz48csjXlhJEZZdlv5Jl+luDqkUeB/xDsPfi2rkz3UD11F5b1+VhVe7CNBqxqGdoQHHFTUfsOHqRo86ervpgNl6ludw2uyeLYb+lzFMg1QQyyk+dESBSMa8wDlnira2nKKdrs8ozu66IhmQCnw/bin7xmWwhR+ngShFRnU54n3iPYSW6FGROdKaa8hhPvsH3Rq76DEkWiNT2Uwy3DfdIK9CXUBK6mCV5HPD/eD9wdHSF8AVDMFIpWuf2Yn3kT7iGD0tfIwRCSgypSnDng/dTA9hyfYN206YxQfjOZ9+J91DfcHU2e/tYwJR4FIKafxHtwy21HpsLVtpdIUZhnXxd1ME2LgY3VPMiYjgchyxCWB/kr/AOl2c8EWDYIMkTlkDixFUj7zJEtX49mFcJBI0+5mK3MdvRdXZzJ54xbd0cFOzZHBBWUius1JNTjP3Rlk5r1N2Z4HZCsVrKEHKhw0gOq1RX7sDsgyzhcAimXPA7AFJNUUbE7BOapGUkCir8RJAVR3saAe/AltwgSwdd9Q7fZwLcjzby3LMrz2EZuIY9PEySLRFAOXHGuntdjUxCLdeq2y3VYAcXWlzuO8xW1rW1tBHKfLyaWaQCo1NTwgLUgLzxatNa8nat+2rXWXlkywe4kDpayaFkbVpI1BW41XMe/Fd2bNSwgpJedWKFjR0MXAuinXThwriqTRgO9P24LCW5V5pRnqkGlQffgor2P0LLApD6291MOjO2VTqRDZXUd7L/QvpDEZPwzAFlBHY4GR7cJ9rtwY9nsXts3TNvQH22m+zs3WauolUIL/AJZo/h+Lwk55Yi9tf0wca1HVw5nyD72ArfxIfnYAU7zi2tHUiUMxjrq8O4dU73csTpa7dAR+CCkS/Zpx0Na+VI20wgGhMCvRQwYUAPAE5VxYNALulJIY9wP2YUaCPTAIaJ6UFdt2/qrqQpqfb9tZbc8KSS1pmO8DAYrKTbsoiVWFAKHVStMAcXLrj8QAI4grzxCErZdput/3iy2eyNJb6RY1enwKT43OfBFqcRAbhF19V95sI7u36D2BguxdN/kDyzUTXenxsx+bysxq/EWwV8QIoqSMqVNKAE5dwqMTkYIbY/8Ag4EPypx7KmuAyE26GpQ1ACakdmeEGEx6WAJ5AgEdmIMhS2zqzFQAzAUXLSf5sQZhfp7Yt13/AHOPbNnStzQO8lCEiUcXkIOSj78GtJGXxN46S6Q2noyyK2x8++uBW8vmFZZCfwV+BK8BixxVBallgt7lpywU00Gnbx4YpmS3rAetgI0Vsi3zFs+fDEZJH2kBY6syeBI7PZhRkxuQSxzxSq1FY0eh4jsOGq4LKtFgsJY5QVnSqyjSVzOXy+wjF/KEvUjXdubSUJXUCKqx4kVpn34yXUMpF2VwUkqvGn7MKrC2qWF3F3ZiVMzTWAO3mMXvgzrDB6vVARmNRX7RXEqWeTt2I5tvJmh+pQxyRvamh81aaimk5EmmWC+BteZR59utuiS4mSG3ltIg7eXa3P8AWijr4UkP4lBxxr8s5OysWaECxWgNDwwOxVBwbejZU4duISDv0Cg0OZ+7Ekg7+moV4ce3DBg+/S0pUDl/lywQQMPtKA8K07MK2GBp9sWvDIcK4SQDFztaeS50gZVJphlZjVTkDQREBkA+agx0q8HWpwQ92DxxmoqDlq7hhg+CDWTt/wBlq4DhiANRlvo7aJQDVgBXuODe6qiluFkFSXc1y9SaJxHacc3bvky32yOCUKAe7gcZm2ylnVmRuzvwBTvmxilKVw0hkUrVz5ceGDkiFLIPhAOeVcFVsFI5NqjjeZ6JFGC0kkh0oijmxOWLKar24ROpBst5N0JJbXbNxvLZE1pLb2zKJG5DXN5Ucac6s4J5DHW0ftb5u4+CGVH5K9vqb51ADc/8sFrCMVeXqq7Sy2qEDJUtkgmhRpXObPJK7HgKDHSpprRRSppVKzhqpU/+Tuoryb6i96Xtdj25KOt5b35sY5KsAPp7i6nmtpC3IUIOFabURBdVOnzSTJbTddtuFlurKewu45C0cdyBqbQctLr4JFI+ZMjXLGG9OuGj1mm63a5L5sT215Gu42ucMlPMTnFLzUj9mOfZQzBfW6OGXGC1EsQdaVAyJywCttpwzkLXFu2h2IFQKcs8GBpDFgWkcBeeZ7TTKuGSKrFd9SLy2t7ex2lTW5Mv10qjiiIpSPVTgXdsh2YvpU3/ALZrbu7+Ev8ACM1t7SObehOp2GC7klRYr7c92m27dImhUUEJjfTEp4BnjIaprUY6mmYyjmfu9l995jGcFjsbrqS+ubi96r2htsgt386xu4Lq1u4biNcyqv5iGavFXjrXswl9HfPBxbUUTJiW97ZvdhNLuG72NxbQ3c0k0d1NDIkEhkcsArsAvDC9HVFy4B7LRNTNUEcFzHdwwQSDphUEdlaYUZMiUq1OGdMKE0bp9HsfR7qa/UlZL27t7IUGZXUpK17xXCvkHkpqRpDC0smYNKZZtyAAw3gI1GktwdKitfi7AD20wICaF0akfQvS1317cqpvbutnssUgB1HOj0qKqzqWP8qd+Jb0E5ZnoaSSWrsXLEsztnVmNSfecFjnLhWEb5Uy4d2FRApt5CW0equkqoyyoRnkfZiMhNdwUTIlWrpJNKgfNQ4RjeBwp5TEAZUzy4HsPfiB8Dtvb3W47ha2FiP8TeSpBCjGi63OkVPZ24ZKQ15PRnTfTO2dG7Wm0WgEkoXzdyveDXEo7/8Adjgq4vfBal4GVu5XkmmZifOY8MjUZAe7ljJeZNVahzb1W0jXzDSUCunvwrwR5YVW550AzHcMJ2GVSZbXAm1Fz3ZHnhqkagmwxMXDyCuVVQdvLFyQkwEYLiJJdJYGU01KDwrliyQ9Wx+/iZgrmpGdQflJ/jjNsyymSJEh81KHKuKQNh3apisbwVzjag9nHGijwZrryMTjyTNGMgJS3uYVGGgKHWDfpoeNdTxsJIxWmYHbgtwPra7Gfeouxu9wnUMOaTKkN6OayDJH9jDw+3HP95rf1rjyZ/d6/KKYLZxyyxzexzurHY7VytdNfZhuwVVifpSjcKUxEydR36VnFVr7cM7DdRS2swrz9mIrh6M4bZ2IJBpzwruHqdNmGUCmYzxHYKqR7uz0WshYUoMMnkNalHhYksoz8Z4ceOOtXg3VWBrdraSS2K8cv7cMN4IHkS/hH9Lt5fZiALCkt3OQ7jV+FeQGMVtVrGFy+R3ybt/EMSvtGxeg4lleSqA7H3ZYdezF6kmHaJq1ZvtOLa+0qTqTo9rgCgsw7cW/Y1okIkCG2RaVFeYwH9uoZQxLc28DhVFTXIduKr+41oXtBROsvUXbLXdm2XeNkuLrp+KSPzL+2lltZ3alJGhYjym0E0WtMxxx2dMKqcZZfWtomCDvbdA2Vpt7/Qbv1zaXTObO/fdJY18xTU201p5cjwzxqRqBNGHiWoxbxyX1mz+SoPaMbvdWljtvpMEgEhKRmTcxK5PyvMzJHpPeuFbXoyx0vMuAf1DbdBbVuIh3/b942e/sple/6Llp9MvmU1rbXUjtJErKQ4Z4zlzORwjj/sV8OWskq1i22whSWw6T6ntxMrCylaT6mO4Q5hXjNui0j+UxkGnHC3omjZ7bffRfskofIb2ncNw2idbu0VozKo862uI3iDjjR0cBge/GC9PXk9S9dN1F6Pg0Xp3rnpq5jEG5Tfps+XhuAfKOWdJACP8ASxT9to5m72WyvGUWC4uNnuZYmttwtXjqGLrPERSntxLUMfS6/tZC3HrXZNj1ixljv75R+XFFnErNwaSThQHkuGVTRq9lfbynVfEz6R9y3q9aSOOXcdyumMjJCuuSVwvwqDQBQooBwAxfSrbhHebp7fX6VqRIemetUvobW49JLS4a+Fbq63B5nknjbwswuTMsUErE+FlpTsx0KpJRB4rde172u2s/wK9e7T0cl3PtEvpr1DFcWsrRlUvpZJEI+JCDbMhFeBHHB+X4lKVvRE2Hc4rOBLG26D6mt7KOgjRNyu2Uj+aGW3kgPs0YaV6MV0tPCAHUW1bK22z7htOw75td5C6tI1/bILRlc0MbSRJFpY/JVczlitpMHW3oUKeRnkdnGg1oVpTSRlSndzxn5GiMBvpzoa66jtbi9tr63jMFvPdLAWJmLWwJMZXLSSPFXswjfgetUy1dSQDp30o6b2RzS43mc7xKKZ+WE1D2U1qM8DyVJyzP53kuHFTSOMAewYYJY+g+lZuuOoINity0NilZtxuF+S3UgN/nyHwL7a8K4kheB71K6qtuo95jsNnRYti2cNZ7WsQAV1FEaQUy0toog/D34C9SJYKiO3/IYIRTt5lux+ZAa4AAtt8TywC1QD4VahNAcs8BoJNKmS5ihiTVUaVWtdZ93DCMYkTqI4QysXLnNjxBGRA7gcQYZtLl7K8t75CddrKk8f8AejOo+6mGTgieT0za7jDc7SZlHmCWPzEbkEcax9lcWmmqzI3aQpbuhyMiRrorwWubM3sJxSzQk2SI7qKtFJkrnroSTihpsv6wgvaWtzcUkmpBEKGshzJ5U9uCqFf8A5YW9slZSwamY1DSARzOLMIrsmOTXukkW/gzzfv56cK7hVCMSLa5inU6Vr42zNeyuDV5Lq+haYXW5tVDEUkUauZz4HDWUmK2GQ9DwzeVIPzEIr7OWM7QjJcMwh3GNT8NypA/vLh6MralEi+C6Hk5kCvuGLxEdWaOGKCBzQtU/YP7cV3Il5ItwiyW1xYXqCaGVjEajIQuPBnyYHhhmlZQ+DRZKyRmLQiGWS3kHjhdo2PaUYr+7Hm74bRzbKGdoqk5AZ4WYJBxoFYVA+zDqyI6n3llchz5YMgFqygeIDhgNhO0Rs6ZU4DCSE+CxDn7uzDoBF3Xyxt0x7vdg1eUFGaWbkqXfgWYj7cdyvCNC4PnnW4EgHwqCK8q4JCLrHbypw5YAwT2jdUe1RpwFYihB5GmM1rtGd6mGobkGISr8LDLFP8AyrIpvVo612+mq0H7sI/cXKoGv1F38FfdgffuAS8krVOrjit3swwfLcMg8Tdx41pitywMau5LlraaW28n6lYnNv8AUyJDD5uk6NbvQDxfbi/2+h7NiQI9cFPvbb15TZ5Xhv498sJIybqCCazvlUAVZWiK1X2Lj1l3g1UrV8W/NjPTEO33V1Lc+kW8z9NdZNAI7jpjdNKi5lVPElnNIGjMjNXy0kowrQYVPGCxuvD+X8cf9ju62HqTuOyrc736jWqI0YubzarvdpEu4VB+GWCiP5ik0MeRBHDFj7QR011tz+Q+LTrW92RbXpGfbfUjbIIzG93PZiS+22ViWCarrRcaPmQ1ZOIywmY9Rp8Us0M7evU06eVvnq5Fs25T0ebb3vL6XynUUCPJbgwxsvYpy4YevaBF9v8A/iGZksLW6+q6k9Ura/mQeX5UFvd7mWjQ1AWRkoK9tcV21duTZ7b3f2H8naPQYv8AqLoxQTtu8SXSmg8uWylhcA8c80NDx4YzW0Rwzs6v3rW389XX8SJ+pdNSeMXduo5h/AfsIGKft2N9f3DS89x6XrPp2xEcRu/NzAJtl8zSvM+IqDllQHDV1N8ibv3bTRYmz/x5HpL30w6l8d11dvO0NH4I4pNvWSGhHiNbWQtnTmMbaa1XKZ5n3XvXva7rHpOF+RHv9l6Fkrb3HqjLcbeeEIsdyZjTtjk8GLIt6mRfb9H+QUlkudxt7cdJerbx7fZwx2rQbzcXe2TRMtQFhUalki08CDUcCMH5gRRvM/1IZteoFQiX1btfMrQIu5bg4II46h4cCb+qJ11fH/1HYN06g6Xjk6ql64tOq4LF4gdga/uZvqpXP5Gu3l/qpFKFkYD8PHAdmuSRTiv1fwKN11tu72t9bb9vrwjcOo4n3me2jok0LzyuG86JQBF5pHmIv4SMZNnI8RgidC2d7uHV+2WVhM1tNNLoeZOIi0nzftj1DPCPAGWD1Y3hd56yu7a18Fns6LtdrGpqq+QayUAyH5hIy7MIiVUFJkEhJ1EUFWNcjhhkairv6b+lfkxUh6l6wJWZgfzINvVasKZFG0sB/nnswORFlmYhGpp4DIBedBgjo+AegB4Z4MEPnDLC45EYAQ1tkksJieE1bSFGVciKHjgNkRJDyGZZBTXCtQdJ4BuNBxocIMOrFc3KS6EBVfzXA1Ci8yK8MQLEokjzJpFXOSIuo1LdgAzr2YHIeqNp9Otu6wh6X8rfbCa2tIqR7bPNRZJYmPweXXV4ScqjhjTWuMm3UlwW11ntmmS6jZGoJJA9D4Bkop34qtXBrVMSgttpSKLzEA800IY0OnVmcLwLar8heBVRVnceY7ZqJMxnkDTCWYCSoaWnnsG08FFAB9mEyK21wKVVYksR3dmJAJPpA7xAkVoQ1B3HEREwtZ3QE8QAKKw4jMV40pjQiqyJ9/KkhhP+0qQW5leI+zGfYUQD98uDaNYTr/s31V7sJMMOtSmg3LpmQhTUOA6kdhxr8FGEAt1vwm4aNQWOEBNRNBXi2eMuxy4NFKfLIVhuGns45mWiNIihmFDJxzXnRe3F9EV1WWjKd3vkbfdyWPNRcyqrdulqVHvx5vf/ALlv4mHdaLsiNfGuZ+3FDKuwtNwOnPCpsbuPJcCQajwPDFuSKw29w6/2YkgdhIumNT7sVy5CmJ+ql76DDpsVsh73duNtfvr7aUw+pt3RZVlGCyLaB+Aoadte7HoVwavA3tcb/TytJmGqR2ZYjIkI8qP8XfiBwMLcKkSQgaQoGfsxXEjuwZst1hWLyzx5jl7sZb6pYlkmS4r6KTwca8xhXSCl0gkpHA1WrTFVhftimeJOOZ4ZfdgpYB1QpY45hqBp3YEZF6IqnqJc9KDb7bY+p728tEuX+qiFhEkxYRVT80ORRKtlTjjq/t9E5bAsMpsHTfpxcxLJsvW0m2bkKhE3Gymt43A7Z4K6T7cddqfJZXo+U1+Z9uVnbW+zybFvtjbbzNapJeWPVnT8oublUYhj9YFakkC55yBXXk2KYxnktmcV+ZfwJ19svT9lt8fU3qcu5bqu9eWNp3/ZZYHtp0hWjGZ5fzBdIF0ukg1HjxGLJTWQYphfMC9ouPS3c9sFpcXF/wBLXtq03/FUMl6NwgkfwRSxRFPKkjWniXwtnXliVhrDgja81x8P+5K2bdfRrbLe52+66f3Pe4hWm9fViymrUU0QLqjRf7xJwVHqRWt4qvxkQvUPphEKbb6f3N4OEc17uFyxY94hQKR7MT5R19z9K/kwk3UdmbeK6uvSmyKU8pZo4tyijYDhUDIsOZ54Hy+gf9X0/wAp236miUhtr9KNuaQ5qZLbcrnh3OaYCdfQCW70/wAqCB6u9QJQYz6ZbY0CAViGyTUHPjWuHmoyr7j1/wDk+tuo+qpllhuvSbbLi1cUljXarqJuNcnjIce7ElMLW/1/+SDNuO3qzFfSGJJRyP6sVBH8hxG6wVxs9F/IRLu2y3AWy3/0uFpZ3OkNcbWt/b3isvAwtMGTUTxBFCMDHxB/qeV+X/QBTbn6OoGi/QN5jkVyG8y/hDLTLSV0DPCt1+Ivb/xX5kqx3bpi1VJvTTZL1+oXimVp91eG6gsosv8AEwgAKktAV1SZL7TgYjAybfiPiBup4dlh2S1tmuZt36q/LvNx3RLgT2kdtKngtl+JndNSl2rRT4cV34+JWo8cBX0gtxtdxu/XN4oNlsdpIVU0/MuGWqotfZQ/3sUWYXyUl57i6kmu7h9c87tNM/Al5DqY/biELZ6adJHqbe2udw0x7HtQF5utxLlEEjBdY2P82ks38o7cRvBLehD686tfrLqa53iMMlmoFrt0bAApaRE6C387mrt3nE4IkV3WxJPCuCgndTnPBkhyWvksa50wAhS1MiImliCNJGFZES0uLlZ2kEhSbR5ZaPiAaqQTgDEmz878yEElWidWUhs1oDy5imBIYHbea5triK5gYxTwOrxSLmVcGoYew4VOB0jZ+nfVSO/kglvFlbdYYi8y5tGGTIOpOXi7MXPbg10aLRB1Pte4SxbldvHGHQVicVPnStQ6gOOkYVbVBqonGAm4js7+SzmWOG2nPmxPHUhWp4dVPxDPAbTNL+eqa5Ddm6qpL0kNB4q1qvKmAkZ3rY+ZLWQAxMgWtCQaEHEYvVrApFEKBmOtSa6lzyxXAjqLEysw0ngc69/ZgCurgIwwvEfBkz0A7Qtc/txcuBCe1vFMQWJUqAquvKnLC2UmZvIP6h2q+vraOOweOVkUgBmEZBr/ADZYqtq9CzTsVeSbtM9xabfBDuhiS7jQRkI3mgleR040LBVsSbwsERNt25bl9xmU3V0zFxNc0KpXlHGvgHcTngJIaXwReoOpBte3SOKy3Usix24PJwpqx7k44z+43/bq35fAl7dFJmoCrm1WZiWZjmWYmpJ9+PNv1Oe8uWcaHUa8sAEHV0AcPFzwZJB8r50U0HA4PIeo8aFK9mGWCdRCKxFSMsDrOQCWdjmg9mDBAJ1Xem220igqa09+WL/bUm49OSszORZKoOkEDPL2Ux3DUz6ykWKyZXoQAK88QiIfnx9nPVxHw9vDBIRRdCVAWHYQTxyxnq5YEyF+oN59EqaHPjkT7MXNIDsF7Tdo2bQy+McV5jGZoiY+2/xI5UNTk1a1wLa0R2HDvcD0OqpPvxK0EJFtus7U8vNB/kcR0SJE+AX1PuO+GRzH0RF1DtccaBtyubO4lZXarMscsR8KL7OOOv7SnXXwB1v4cfyKlF1B0IpePqfoaS3jc/1dvurm1eMHmqzAox7jjUur5DV2XKVhMN10Xskv6/6d9S7htO6hXiFrulsjK8co0PE80OuJ0IPiDoRTFTUOURurxDr+P+GFZIpui+qIvLstu2t5NvO6R7XvU4v9knnMfhnspImKq8mk6A58J8GqmDMDp5w0vihWw33X/wCl7ubjoW23rYfrhd3O3Sbe6rZ3dzEsiNF5TC4jUxspC5pQ4ZPkjV/X+n9CybK3/UGNsuZemOl4ds2eZartsW32oiFW+PRdBpie9jh0yOt5zbP8RyI/9TphXVcW9kg+BJf0i3IHcrJXDS/CA163/MRt9n68GK5MPXNgt0x1Sba+72WrnXTGwMS/5uB8wjVP1/8A0NPZevFyALrrixthSo/41ZxUH/8AVTE+YPTW+b//AERpNi9WjIHu/UqyjYCgJ6gBy79LUwV3B01fq/JiP0P1RjlEjeqFgjg5Eb+x/Y2D84emr9X5MmSbd6vMqlPVHbnSlKjfUqPtNcT5gdNf6vyY9Bt3rdNamGw9Qttv3B1Jb/rNq7lh2eeDn78BySKeL/1BG/f/ADiLKS+3nYrPcFYt9XfJZWNw7uOLu8FKkjnTCWdvQeqafy2/P/qVjqfcesb/AGxV6gtIumtiBghntrW1Wza8daEsI6652CnVm2gdxxVZtrOCWT5s5DNhF1VvGy33TnQOwJtvTJgaG+3a9hjhuLqBQZdd1d3HhUsVBCxAAZDDPgjT84IG+wP056SbZtC6lk3mZLu7qQp8XjVSvxaPCK94xjmWBLyUGFHkokSGSSRgkSDNmdyAFAHacMA03rJouhfT/behLY6N03gm/wB7kVvF5C0CqSPlnlXL+RB24C+Z/wAAxCMzKg00k9nAYIDjBa6QT/eND+7BQRNRwPEDEGE0DJIDxCVFO3jgoUJQkaA2fAcCezFbChwFxdLqYuZACdRPHhWuANIUtVTzG8UiOUdQyE1LMKUJ7O3ADJ2E0IzORHA8KdmFLE4LT0OjNc38zGumNVBNKeJq4S/BZTkvVjbxPQMOPPnjJbB0NbLbY3F9KAshE1IxFCz5cOAPuwy32RfKQft5ZVsoliYR3B8M9MhH7K8gMaa7ZyOmpOWm7WEsZ8I8qImKZXGbUOkyZcjiyVYfbR/zJFxZS2VwDaE+W4qFLGgrnhHVmbsmE7WAqyzTEFjQIDypixIrtYJfUqpdgT4zz5AClBiNmWzJ1tfx6aECg/ZiIzuo5cXSSkBVBAHMYIqRGI1MGIFa5EcsQYRISBQCtcqYgUZ91huCy7u1pGdUdkPJJ7ZTnIfdkMcb3lu148Ixb7y4A0ciFRXj78Y3Uzdhz6mNBpJoMV9Rkxrz0J8Jrg9SMba6oaYKqK2dS700BzHZiNE7DgvV0kZU7eB9mCTsNLdrmQfb3YKBJWusrkSQxxV01K6u/PG32q+Yu18lf3G60okEXDLh9meOmaWxaOI7NxJyWvfiB8EXUO7hX/8Ab7MQIIa4KCOOvHtwFVCNkhbdY9N1ESRTxLiuWSCbaSQzNrPhHAVHiwlkyNjv01oXJlQFjnQd+BOAyMSbSr+KAkVOQ5Yuq0K8kuyS7tEoTUrXSPmy7MVbFIsES4tN8l3WW42/1GsNnlc/lWB3C5g8kACkbBB5at2jhjuaU1RFSVJFyRet+0zx31nvllvYHwSQXVhfA9lY5RqJ92GaaHwnixE6juL+ztYbr1M9NY9U/wD/ALFgsu2tKe1vID2+uncMC0PlF83Xpb8wb0pbdCbom6WG3ywyTXQKbd05vylHkl+JTa7nbkLDN8qhwFc+FsJWGo5K+6SI/TNnuc1zeXd91+nTu5qlvU3NzeedIoTyhE7Q1YPbhPLZWGXLLBo36ixWM/0Cw6U6XuFnm3T1XtWvJRR5BHfzl+ebkg/dizPqRLUv1fyQLTpD0nVa3/XzyvzFvtk8n2Fzgc+Q9ta4VvyQ7abL6ErI9vddQ71IxyS6h22ERDvMbnXiJJcMnei/tf4tHw6f9D4yQ3U+7SrXIptKio/zjgOq9Sd6fpf/ALIQds9Cox4t231yMzSxtlB9lTidV6k+5X9P+YQ1t6DhNS3XURbsNvZ0PvridV6h+5X9P+YWbb0EaMFb3qJTwobazPtzriR8Qfcr+n8z65sfQ1rSGSy3TfYLgNVjcWVrIlPYhBxIgnev6Y/H/qM7h010JApl6b69CxzLrENzaXVq4J4BvL1L78Rz6k+R+v5Efatv3OTrK2gsFj68vraJqRubiexj0rVSzyFNSR/EdVExSuc5Cq/pDrbH1J1dvca9a9Sw3l3JIJF2S2m+oJ0Gujy4aW0EY+7gBg7G6oX5eZllX9R97/X+r717ehtrHRttrpIKmO1BTUtMqM+pvZjLGApBr0j6etLvcrvqveGMGz9PwvdvORRfMjXUaHgXQZIvN2XAs4Q0Syp9Q79d9S75e7/eDTNeyeYqAkiOIALFEpPKOMKvuwywoAwfTSoFczggG6nUew88RjI4CcEB1P6cx/lI92IQnQjXMsK8Rz9gwhBTMy3BJpUUqT24gQxZnVG78aAkfZhBxcWVK5DgKZccBoeS69EQ6LK7np/VnCCvEiNR+84q2F1MlzslqQQc8ZLM6GtFs2zTRRSuVPfhUOw1GVQMz/CoLE07BXDgXgr2zX8l1HJt88ZicytMrKaAgnLVXuxu18G7Y/P4F3sUaS3Ragsi+IsaEFeFCeNcWnPs0iUhypWvDVT9xwCh2PtRY6+/7hhGVC4iXIROBGfswUBk+MUAUZ8BhytjtKZfdiCwRdyu023b7jcZT4bdGfP8Q4D7cJdwpI3H8jHJJmkLSTPqkkJklPa7nUT9uOO6zk5NpPjKirXVmeOE6hgaYrOcmoew5YioRJHY4HUhg9R7eOCqIg4W0514ZduGhIVjTS1rxy7cV2qiQczYVzpTjhepIG1nWLI19hxIRIKv1fOJLi3CnLVWnbTG72qRp1KQLdzGGZKnVU5HG0uY9eXaxWoVuLkeHED2wMfUL2j4cQTsz6PbUuqIxzpzGA7QFKTosHgHliQ05CtaVwScMQ1nfIawk059+JBGJknuUIVk1HtrX24HQDYSt7qSKPUVbICq/wAMVtEOjdGZxoFGrWpHCmeFtWUKysvvHoxNJIbvZN4LOxMlwl9DqdifE2hqAVPLHfiFAqs14X5jX6R6K7mp+i33d9mkHBb+xhu0r3SWj1+7CuqGdl+kNdKJuO3O8nS3qfY27ZolpuUlxDDN2K8NyskPvIwKt8SRdIw2vwFb/ZdeGSO5696Ag3S0jbXLe7XB9M8sdKVFzYFo9JGYJQ9uFsn5RbF38f8AH8yldO3HQ227heL1dtm43SuFaCKG4W1liYsTRy9NdUK50GeK6wmJPX+3+pZouo/Q+PUB0pu05oQA+7Kv+rXFygndviq/Mix9U+m6yEWPp684rVfqdyuZTl3JFiPqWdtkfT+QV27rHb1Ypaele3zwtWiyRXkrf6emuAmvQi+76fkfT9YdPo5L+lVlGx4rW+Ar3Aplgvr6E/1vT/KIj6zsmytfS/bSOIrBeOcuddIwvy+g3+t6f5Tn/N12/wDR9MdtBbMUsrs4Er0/MP8Ar/4QuLq/cQGQ+mW2PUZBrC6qO/LBTr/hk/1v8JEu56g3252jWPSvbvpVB8yWPbrsaQOequWC4EjbP/YrU/UPQM9jDDf9DzWd3DKPPns7+4j1RsakeXKhAPZnhZUC27eUv5QMy2klnZ34O9p0507ukrSxbNHcNd3UkJyRZkg+Ki0r5jCp5YXj8RYXn8iwdDxdOdO7Fu/WO0RXN79LH9IXugsIuJZHQCKFI9ThSWXU3HFNomASvCAXUmydUb51JYSXuyJsdxv0UR26zt7f6eBbeD8nzAhJfwhasWzbB2cjQ+LOWFvUq+sumNtg9KtkcNFYSLNv8y8ZLtR4LcnKvlEs8vLzDT5BiiucsMwjN+dRz5niThxTtc9VTlhkRDdaYjRD6goTwwGMLjFbeYjhQfecHwKSYj42r2HCEFnTr0jMUXjka4AwXtAUQ6gQrrlTn34VjJEiOMFwcwK1YDsr+/BQyeTQOmYvK2WAcGdnlNTnUtTP7MZ9jNdOS2bbGHIPPGSxvooLTt0ekKBmeeIiNhG6Vjaui/E40A9nbiyqyGvJAs7WKWdVQVSM5t3jsxrqhb3ZZ7RFABC5DFqMlmychQLTnTEFGyxyGFgMEy0h0ivuwyEsTo0ous+zBK2OUoKnId+AAonqlvkVvbW/Tsb0luCLm7A4rEvwKf75z92KN1sQVbbJVgz3zYipANDxAxkaMEDcU8bMQTlwwIFgePlJmrfbxwrQUhSuKeE/ZgQAeRtVBX24EBJJsAYfMGfdhYksdRhg0akBag8zidCuBhY0dgGHE1Ff3UwnQKSKD1nuCWm7xRjPSrOKfYAcdD29cF9MFfutyDyibmMgM+PdjVARo3ct5cKGOS/sGAwpErVJ/N2f2Yrksgui2GiJWjyqBUcTgg4GXsmcgnIj4suzBFY95JRQSKn7MEFhhoF1eMAjspz9uIAkxW0EsdO0cCcJ2CjkO1TrqXboFub0qfpLdyArzcURixA0141PtxbrU2SA+OYIfnev6qUuOnrS/jBKvbnbttnUd1IvF9hx1m88ArW3i3+YDbnv97ajR1l6WWKmv9aK0vNvbL+aMsuEfXyWqu3+P4SBn3j0avJFF703uu0nhLHZ3yXA9wuBGcu/CwpxIis0/mqv6BKxj6anlj/+OOvNw6euVzWz355bOIkUoI7m1aSL/NcDD5fDF+RuYj8xdpcerdv1hujx2tr1bvAt7Zby68i33WPyKfkMGApXlX4u3FSntlFlZ/tt/j8SzW+5f9QxX/CdH2tuT8y7LZpT3uMWT8B3Xb5t/mRyab/qccEtHHYLTP8AK2q1/cDgy14E6Pzdf+xGtn9fZJfzOr47M1z/AOKW0Sj3RgjFf3BFrp+tfmEmh/6iRGfK6ztbgcQP1Szc07fzFw0vwidKfq/qRV2/19uCTN1rbQ5Gh/WLdB9iDEm3oHpX9X9SFLtfrMgpL1/arnQj9bWv/dGB8xOtP1L8xKWHrEG0x+oNqxbiBvYr94xE7A6a/wBS/MkX2y+pUe1CTdvU6xgYsEjRt6laqnkRGKD34bIOuqfq/JkG0n9X9pkkudv6v2zcYIVeWW4+rs7miRglmpcrqYgcOeKofkscLCt/VGb/AFvSMMjvFY3W6zuxcvdSC3Uk5k6IdZ48tWKsSRfBGp3CdTbX0D0+emIYtmvd2llupXQpDBbW8YoavcElXYspr8WWFpm2CdXy8Cdo+q9O9lu/UXeNxTfN9mUWex3MjvdRG6nBKlGmP5qRjVK7AadQUZg4XbZ2cASS4ZkLtLLI0sztLM5aSSWQlmd3JLOzHMsTgAk4IljChjgkGZWAeicAOOJJD4MCK88GQnGrTAAOxqRbORzK5/52IyDoU5nh7cIGBQr5qciQBkcsAgZt5dEGqRdYCnSK0Ipw4csQcUszH8iEeNyFQ9pY0GQwSV5NWs7cW0UVqtKQIqVFc9Iz+/GPY8m7VUse1JRlpzGMzZ0FwWuzVYkBArXifbgoQVemWSSO0iNC41O3Ypxp1VGrxI9ZRrVY4hSKPifxNjSkZ7uQzAQAGB8PD24YpHDJlQ88QKRIs4i8hYZ9mIR4C0EIJCj3nuwShsfPHwjwjhiCkXctxtdm2y73i9P+GsozK4/ERkqD+8xC4VsjMBvb263W9m3PcHMl3dMZJmOdC3yj+VRkMYrfMzn2t2ZGGtWoqkj2YnUEill8wlUFGGFgiyfF5FA1Z1ypg9SNChuIjAH2YDqCCXbbl4dWmoHLLCjpBC43VLS2WdzRAauDlQHjii08ItiMjab7YzosxI8tRx5ceIxZSjgDgBbj170/Dcukcqkx5MV5054u+02KzON33qLeN2e9jUmOmhaUzp2V7caaLqgpAy5eWVzUaacgMh78O2GB+BZChlX4lHDtrxGFHrU59U34/wCX3dmIOaf5p0jQRwFcASByMq3iPu7MEjQidxTP21wZEaBlyZ5WojHw8hgsWByCKVdNTnlkTyxUq+R1gRvr7UNouI9/vZLDbrgCCW5gi86UM5qFRAVrXT241aKzYS7KtabV6bIw/S+vtw21iaAzWN1Gq9hJgZ8dJpMROvmv9CwbbbeocDBejfU6y3OJslhl3Exv7DDdg4XJI1+rX8yXey+vgj/4xsG39RW61HmPY2F6rc6h4dMmB/FF1W/7b/mV7ceo7CJRF1n6XW0DjwtNaC82xz3g0kj+7Bx5Q7e30n8ALtO37FuW8bjc9H9RjpGwHkrDb7tdSx3DHRWQCS3GllR+GrOhxnWHgr+V/Vj8JDx6Z1KRuHqvt4QcFW8vp/uU4u/EXrr+P/qDL/pLoKhkvPUSK8krwjtLyU+4uDgPtGB19v8A8vyBsey+m6yES9QXMiDg0O3k1I/vKMU/MCafEJJsfpFKhA3/AHGM5VJ2xGA7/CK4ZOwZp6MQmy+jsb/ndRblKo5w7Wg/16YKJNPR/wAxE23+isZOnc97kB5iytlr7AWyxIIrU/S/5jLWnouW0ruG+AdptLQ0+x8GETtX9L/mFtvPoTabZMZv1/dJagmILbWaAcm1KxJ9mHXHIOy8V/mys7g/pxKkj9PWW7fXqAba1uvImgZw2fmFKSadPZim0Bn4D+1L1pcSwWdrBHtdvPIkTSRxQ27aXNDRj+YfdhW3HBLS+TTes+ktv6+9QbDpu3vHNtse3WduduXWCpdjNMZZCPKiqZKnPVpFeWKJ61bfLJhxAJ6o6ltuvLu86J6C6c/VIbKB7Hb9z0lxHDCfMmnt4xoig83yqB3YnywBlWmLqV+XPJLT4hJGRLLUBxwOfv4YpWCPIksxOo8+OCQQRU1PHEgB3hQ1ywUFnH5dmIQkoD5CDmzgV5044AR0sKlT78KyISq65qUppIpTlgBCgZ/JOk8gD3g4KIWT0+2b9Q3prycf4ba4XvZjlky+GEH+9IcNEJtjVRoNpqYktxPH2nHOuzqakWfaoGolBWuZpik1PgtFrCRQsczTDoQZhY3JllBKo0jAt/InhH2nGyigNyfZorKSvhiGWrtxcZbSwiiu4yFAvAch7cEGB6OFpHEaCpPZzxBuArbwrENIzbmRwr3YhS3OQiF8qKnzuPuxCkQnxPz0oWwSeDL/AFm3p5WsulrZ6JERfbgAaHzGFIIz7FJensxTstBXscIzu3tXeRQkvuJxmexGda5ZyWS6jufJWjoQeeY78FWwF64Yq3Esmp+AHFsgTTAbDXXJ95Ml8dGrhmeX34aYFdMnXsLbbysl5ICBl8WWK3eeBuqXJC3nq3a7CEGyAeSmnwjtxK0beSOy8FT3Xqrct4ga1iHlo2RpxoOCiuL66VyI7YggS3O6tZG2LmJR8ZXjwxZ1AgB+nyFqseJz769uLJCkFYrP6eINTPtI7sVkIsrMSAuQFBXEgaSQLlEhKKKZc+PdiQMrQRfNTsb+3DwCTSDcHSpWhyoBTniphYR1wfRiSIjVl3HVzGEyBJjKXYY6SCOynHFgykkosDvQmlTU9owGwkmO3tSACR9ueeASCLu9vKIFG22G27nMrg/S70HaAihqU0FaSZj4jTF+rb0cldqvwyv3RuyCm6elG23Sjg+13E0ZpzK+TLKfuxpXuasi7/B/gdToToHe4BN+gbxtkpAqthd29+inmNFwInqOFK4H/J1+WXLXZ/2r+cDMfpZaWGq52Lqq92qWvC8sLu09lXtSy4eu6j4t/wDgttK8p/1Cdlt3rhYof0Tq223hFIpBJexz6lplWO8QfYTi3vIn2kuH1/IpN9uHTkfUG8j1S2e+i6hNwGmXaXgs4k/LUUMIBQE/FVTnXFeJYJjlKwuLevRGPP8ARN9lFKFWv4YwfsU4ZNepHf8A8F+Ymbqb0lVT9F0bdyP8rXW7M2XeEjxGk/JFZ/pr/JkVOpukoz+V0TAwJ8PmXV09K50yAxTC9Qzf0/IK2vVfT58TdA2UkVNJQSXlK9tRiQvUM39PyEf80bEj6YfTyx1jMamvXr7qYb8Qzs9PyCB6jnnRWtfTSwzGSizvnr78Mo9Q/wCr/hEO56h3YVEnpvt0Y79vvBw7ycHnhAdti8/kgj0/1Z1UvnQ9OdEbZt99JGQu4/QuWipzDXTeSteFWwXZLkV/ct5/oDLjYfUrqisW5/R2aFwxvEjhhkNK+ENAuvTnw54y33Ib7dnyHekPSddp3m033ctwa/u7SVZooFQrGZUNV1yOSxoc8hii25wWU0eppXUPRe/7B0NvXUPQ9oOqty36Zrjd4ZDW5t4nDCYCONg9wiqPJRY86MTQ54GuyfPglqdeOTz5uHqH1dutidvW9FjtLroaw2uNLKAoPkIiAZl7mONNrtmf8ZK3pUeEcsVhkS1a0+zBAJzrSnPDBPjmOztwEE41a0OWAAlgACEd+r7AcGAnUNZMjlWpOFINwMRdSD+avvxABNpfyBXL2nID3YkBk2DpfaT0/wCnVpLOgXcupp/rpKijrZQeGFG9reLDbXFYNGpZJ+3rqYDnxxy7s6ehFw2uEgCoy7cIi+wakk+mtJJeLIKIO88PvxbVSxK5Y3ZQM9vHFmsaKPNPNmbNqY3VF2PIbt4kEYrRUHwr24JmbngmwwyXJCIvhHLl7ScEDsqk6NY4axQeJ/8AaSD9gwQJN5YQs4AayP8A004957BiFV7eB5yzsXbieX+XZiCcAvd94g6f2+83eZPNFvGBFFw8yVmpGhPZq44XZZVrJY1g867s2/Xm43l7eSfUXF07TSS/ztmadw4DuxjrdPkwWcs7tG2bhcAsKiuefKmK7tDVkZvHnsL0wznUWGZFOGGqlZYEdsjk19arblVkAZgAc/FlywaoHf4gqXenibTajURlqJyyw/WQKxAvtznkYy3U+puAAyGGSS4EbbK/dX9u8tQar3dpxYFVGo74gs8QA0nLFiCkR5biZySannghH9vgkmfXIMhnnXhgMISuNKqUIOXAVxTZjVQOMKu3DIYaqDKGTbByc8h9+G4Byc+k/wAu/EkJoUdtFFHQkilPi5AjjXFZZIm3W5mJjUFQtVWv7+81wRU23BOW0Cr5uo1FCO3w5GtcAdYGEufLmPmVVqEio49xOATshaX0ayAGtGHE1yxIFlDjX0Ycso1DI1P7cQMonRyx+UrqpBGa1qCaYUmCT0/+Wzrl8Ry7M6/vxXc2a+C0Wkx1KUYgCvM5duK3kuiCTuUtu9tqu4kmj4OJVVx3jxDPDSBQYfDfepdjc30Oxbba3O2m7uGtJbq2tLhxE8pKAPMdekDIA8MdXU/lRhv3VnFoX8SSd79ZLc6pNo25i2f/ALLbmNR7Di1srbv+r8ySOpfXadPyLK2iUEf07Pb0p38cNIGtnm7/AJgzc5/Wi9Gu/uViz1UX6VBVf7itiq8Cw1/d+Z3Z7/1ilX/C7gyLx8TQqKjtBjzxWrUQeln5CHkeu+5yaDujRxtwkeaFUH+jHXEeygy03D229J+obxBd963vwp4xWDstB/8AyPp/Zip+6jgde0T5DEHR8ETC4uNx3K9l4tJe300vs8AKriu3ubstXtqLwS22+3EmnNwOIfMAdudcVO7fJataXCHPpkXjQA9oFcvZhZD1GZbhLZGZ3XUtSwY+Ej24MjVpLL8L7f8AcLPbOveg7iCa1s7QRbl0+EKTMYGOuW3an5hKGhQjl4STlgROVyWpVVvt7MJvk8qeqFxDeeonU11b20NpHNuUzLFayCWGnhLSIygD84/mHsrTGxOao5W2vW7XoVFh3+zDIqGSant7cEh9XPLBIdaoGIQRnXIe3AQZJTsA0YHxAGg5UpggEwZsT9pxCDdqSZ5D2t7uNMKyFw6P6Wuesuo9u6ctwQt04e6k4eXax+KV+6gFBh9dcyMjX+qtwh3LepDZilhZqtpZDl5UI0g/51MZN95Zu01wc2mIM47K9nDGGx1NawXfbIlVQTgoFiVeJ5nk24y1sCw50rjRqQswT4ITI4VRSJTko/bXGsz2YTt7Rqhp/BH2/wAMRFUt8E8MSnlRDyo+fa3tw6JWq/iybaWRca38EQ+Y8T7MGBb39CcG1ACMUjX4B+84UpR0oW5ccu3ACZd657vLt2yWO0WrAXe4XgciuYgtUJY+zWyjCbVNYG22SoZL+ttZRH6rxNT7/bjGtZgdoI0HWN28hS0VVHAccH7CYisyBebxcGWSa7HmSGufZ7MWVrHAOWDJ7m7uJB5S6dRpzphkiJQIbz7ZtQzLdvH2YUZoH7izMwZmrU8Cc6HD1QUhtrS3KK1ammeLUE+hi1sY4uHCoGGASYLErINYFOdeeA2RIdeZYaqF0leIHbhOQkQzSzS5gjkOzA8hOBZGkpmPZ7MNMASFheIT4VOZwExoFeYvZzphiSXq5+m0pr/q6VrX4dFR2c8VOSzAUs/p9KeX+I/F8XDKvfhGWqPAt9NDWlPDTX7c8AgkfpOfnV82vy101/hiC4G3/TteVK5fDxpTByR9TjfRax5NPi59mD4JiAq303lReXSnPjWvOmECoObXp+rn8rjrNNPb78Lc0auAzFq0Hy69/Zis0IavuI+rrSnh1U005ccFyDB2D6PR/s/fSnDng/OK+g1J+kav8R5OrlXy8N8/xEf2/gKP6NQV8v30pg/P8RP9McT9MoPK8vVlSmnE+byGvTwSl+k1eKndX/KuA58j/wAB4+TU8NPKnbgYDmBbaKitOfxUriYANy6ajRxqK07cEiIl35un8utainD34DGIzeZqGv3cK0p34iI4I8n6fWL6vT8WVaU48q93HEY9S8b9+tfqEf8A8O0r+nSfT/UU/TvP0tTydP5vn8fi8FaYCiUD5vt/PEz5PGFpX6XOtdR1V7f446JxnM55OHif3YhBluPdX78Egn5jT/I88Eh1vgNa1xCHB8QrwrngIg9NXzo68dJpXsywQnLatDT7sBEYiz1am/FXlxxGA2z0P/8AZdU/TU/X/pYvpK0r9DX8/wAr/wAyvHFn9uC2viQiPhy4/L7Mcm8zk6lIgN7Pp1ivv+zPFLN1OC62X9NKYdFdiSmj9TTzeGk6f9E416ip8MNWHl1P46eCvw4vMtghb+V5v+Ir5/y6vg91MsMhXPgn2n0/mfnV1/JX4cMJeYwS5dWr834ctFPhwHItYgejpQ/dgMLHl0/N/bgIR8M89+sX6n/8h3v6t/T8uP8ASNH9P6OnyfzeZq19+Bco2zC9IKPf+R5P5tNXf2+/FSM4Ij+m84fTfFTPBfAUKm0eY3m01cuzCDDyf0D5Wn3ca0xCIC3n1dfHSndgjAy606B51dWVKV4/swyFEJ5dBr1UwahCdn5dD5NK/NqrXDMgk/VfXLWuihro4UwGAnN9L5jeb8VBXjT+OFCwfeeX5n+H41FdOIgk6H6T6Y/UU1aeXGuIw0B9vWs1Phz0148MRDMR4Pv+/DCn/9k=" + } + ] + } +} \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-length.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-length.xml new file mode 100644 index 0000000..ebaefe5 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-length.xml @@ -0,0 +1,13 @@ + + + + + Apache1 + + + +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 + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-path.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-path.json new file mode 100644 index 0000000..d840586 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-path.json @@ -0,0 +1,16 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality" : [ + { + "path" : "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", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-path.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-path.xml new file mode 100644 index 0000000..9dec56b --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-file-path.xml @@ -0,0 +1,18 @@ + + + + + Apache1 + + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-files.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-files.json new file mode 100644 index 0000000..70c13c1 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-files.json @@ -0,0 +1,36 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality" : [ + { + "path" : "/etc/banner.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + }, + { + "path" : "/etc/banner2.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + }, + { + "path" : "/etc/banner3.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + }, + { + "path" : "/etc/banner4.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + }, + { + "path" : "/etc/banner5.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + }, + { + "path" : "/etc/banner6.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-files.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-files.xml new file mode 100644 index 0000000..9726e20 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-files.xml @@ -0,0 +1,58 @@ + + + + + Apache1 + + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-key.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-key.json new file mode 100644 index 0000000..4bffdee --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-key.json @@ -0,0 +1,16 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "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" : "Apache1" + }, + "personality" : [ + { + "path" : "/etc/banner.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-key.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-key.xml new file mode 100644 index 0000000..1f2fd0d --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-key.xml @@ -0,0 +1,18 @@ + + + + + Apache1 + + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-value.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-value.json new file mode 100644 index 0000000..8e5aab8 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-value.json @@ -0,0 +1,16 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "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" + }, + "personality" : [ + { + "path" : "/etc/banner.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-value.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-value.xml new file mode 100644 index 0000000..18710da --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta-value.xml @@ -0,0 +1,18 @@ + + + + + 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Ru2WC/Io+83sB3NVdH8rWpTYxrcWdy6nYk4xv+lCiynJHMNBc7jmGDOfU/40VelsTHK6M/KsQc0U7SJui2enTinKN3GKaxOKdGTXceaNb71GAeaUjJx6Uzfg4HNAA56KKbt3H0pWGTkUKTxQMTZ1prCpT1pre1IEMXpiremof7ShHvmqoBzWjpC51CP2BqZv3WXBe8jt9Idn8+OI/vNtT6doN9f32yaUA9c+lcZp/iaHSvGU1vcPtjdRjPSvXtJ1DT96XKTx9M9a8pxPUkmVtV8P3NlpEuGDgLXmXidSmiwoRglxXreu+KLCW2a1jnVnbggEV5P41I8iBR0L1pS5fapRIqxapNyOOHGaikXIz2qxtyKryE5xXps80rv6VXbg9KtMO9Q7N0irgnJ7VI0W9PuVRpTHbTyKg2vIAAFPf6mtazu0maOSPOVYqeMU3TbPdbhZo0VckgEHP4VYstOFvcORyhOQB2NYNnVFNGsk2yPc78U0XQdiQSVI69uKY0AlUR8g561ft7eLYU2gL0xjpWTNkFjLLcoCwI46k5q5DZLbxtNM+9wcg+9Jb7LfgDgHiqmu6g1raRTGMvCJVEgXsppoTZgeJLJ7tmukkkS4gZZo + + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta.json b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta.json new file mode 100644 index 0000000..bec05a8 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta.json @@ -0,0 +1,21 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "Apache1" + "My Server Name2" : "Apache2" + "My Server Name3" : "Apache3" + "My Server Name4" : "Apache4" + "My Server Name5" : "Apache5" + "My Server Name6" : "Apache6" + }, + "personality" : [ + { + "path" : "/etc/banner.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta.xml b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta.xml new file mode 100644 index 0000000..e000c77 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req-bad-meta.xml @@ -0,0 +1,23 @@ + + + + + Apache1 + Apache2 + Apache3 + Apache4 + Apache5 + Apache6 + + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-req.json b/openstack-compute-api-1.0/src/samples/server-post-req.json new file mode 100644 index 0000000..81197d6 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req.json @@ -0,0 +1,16 @@ +{ + "server" : { + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality" : [ + { + "path" : "/etc/banner.txt", + "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6 b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ] + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-req.xml b/openstack-compute-api-1.0/src/samples/server-post-req.xml new file mode 100644 index 0000000..0b40d25 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-req.xml @@ -0,0 +1,21 @@ + + + + + Apache1 + + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp + dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k + IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs + c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g + QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo + ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv + dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy + c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6 + b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + + diff --git a/openstack-compute-api-1.0/src/samples/server-post-resp.json b/openstack-compute-api-1.0/src/samples/server-post-resp.json new file mode 100644 index 0000000..f69acaa --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-resp.json @@ -0,0 +1,23 @@ +{ + "server" : { + "id" : 1235, + "name" : "new-server-test", + "imageId" : 1, + "flavorId" : 1, + "hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0", + "progress" : 0, + "status" : "BUILD", + "adminPass" : "GFf1j9aP", + "metadata" : { + "My Server Name" : "Apache1" + }, + "addresses" : { + "public" : [ + "67.23.10.138" + ], + "private" : [ + "10.176.42.19" + ] + } + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-post-resp.xml b/openstack-compute-api-1.0/src/samples/server-post-resp.xml new file mode 100644 index 0000000..d35a9af --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-post-resp.xml @@ -0,0 +1,20 @@ + + + + + Apache1 + + + + + + + + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/server-put-req.json b/openstack-compute-api-1.0/src/samples/server-put-req.json new file mode 100644 index 0000000..9c373b4 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-put-req.json @@ -0,0 +1,7 @@ +{ + "server" : + { + "name" : "new-server-test", + "adminPass" : "newPassword" + } +} diff --git a/openstack-compute-api-1.0/src/samples/server-put-req.xml b/openstack-compute-api-1.0/src/samples/server-put-req.xml new file mode 100644 index 0000000..178cff1 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server-put-req.xml @@ -0,0 +1,4 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/server.json b/openstack-compute-api-1.0/src/samples/server.json new file mode 100644 index 0000000..c034a18 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server.json @@ -0,0 +1,24 @@ +{ + "server" : { + "id" : 1234, + "name" : "sample-server", + "imageId" : 1, + "flavorId" : 1, + "hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0", + "status" : "BUILD", + "progress" : 60, + "addresses" : { + "public" : [ + "67.23.10.132", + "67.23.10.131" + ], + "private" : [ + "10.176.42.16" + ] + }, + "metadata" : { + "Server Label" : "Web Head 1", + "Image Version" : "2.1" + } + } +} diff --git a/openstack-compute-api-1.0/src/samples/server.xml b/openstack-compute-api-1.0/src/samples/server.xml new file mode 100644 index 0000000..3d2ef00 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/server.xml @@ -0,0 +1,22 @@ + + + + + Web Head 1 + 2.1 + + + + + + + + + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/serverCap.json b/openstack-compute-api-1.0/src/samples/serverCap.json new file mode 100644 index 0000000..a894812 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/serverCap.json @@ -0,0 +1,7 @@ +{ + "serverCapacityUnavailable" : { + "code" : 503, + "message" : "Server Capacity Unavailable", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/serverCap.xml b/openstack-compute-api-1.0/src/samples/serverCap.xml new file mode 100644 index 0000000..030a166 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/serverCap.xml @@ -0,0 +1,4 @@ + + Server Capacity Unavailable +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/servers.json b/openstack-compute-api-1.0/src/samples/servers.json new file mode 100644 index 0000000..5b20709 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/servers.json @@ -0,0 +1,45 @@ +{ + "servers" : [ + { + "id" : 1234, + "name" : "sample-server", + "imageId" : 1, + "flavorId" : 1, + "hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0", + "status" : "BUILD", + "progress" : 60, + "addresses" : { + "public" : [ + "67.23.10.132", + "67.23.10.131" + ], + "private" : [ + "10.176.42.16" + ] + }, + "metadata" : { + "Server Label" : "Web Head 1", + "Image Version" : "2.1" + } + }, + { + "id" : 5678, + "name" : "sample-server2", + "imageId" : 1, + "flavorId" : 1, + "hostId" : "9e107d9d372bb6826bd81d3542a419d6", + "status" : "ACTIVE", + "addresses" : { + "public" : [ + "67.23.10.133" + ], + "private" : [ + "10.176.42.17" + ] + }, + "metadata" : { + "Server Label" : "DB 1" + } + } + ] +} diff --git a/openstack-compute-api-1.0/src/samples/servers.xml b/openstack-compute-api-1.0/src/samples/servers.xml new file mode 100644 index 0000000..ff2f9aa --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/servers.xml @@ -0,0 +1,42 @@ + + + + + + + Web Head 1 + 2.1 + + + + + + + + + + + + + + + DB 1 + + + + + + + + + + + + diff --git a/openstack-compute-api-1.0/src/samples/serviceNotAvailable.json b/openstack-compute-api-1.0/src/samples/serviceNotAvailable.json new file mode 100644 index 0000000..748093c --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/serviceNotAvailable.json @@ -0,0 +1,7 @@ +{ + "serviceUnavailable" : { + "code" : 503, + "message" : "Unavailable", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/serviceNotAvailable.xml b/openstack-compute-api-1.0/src/samples/serviceNotAvailable.xml new file mode 100644 index 0000000..f778bd9 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/serviceNotAvailable.xml @@ -0,0 +1,4 @@ + + Unavailable +
        Error Details...
        +
        diff --git a/openstack-compute-api-1.0/src/samples/shareip.json b/openstack-compute-api-1.0/src/samples/shareip.json new file mode 100644 index 0000000..99affc1 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/shareip.json @@ -0,0 +1,6 @@ +{ + "shareIp" : { + "sharedIpGroupId" : 1234, + "configureServer" : true + } +} diff --git a/openstack-compute-api-1.0/src/samples/shareip.xml b/openstack-compute-api-1.0/src/samples/shareip.xml new file mode 100644 index 0000000..ccbed21 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/shareip.xml @@ -0,0 +1,4 @@ + + + diff --git a/openstack-compute-api-1.0/src/samples/snapshot.json b/openstack-compute-api-1.0/src/samples/snapshot.json new file mode 100644 index 0000000..9866849 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/snapshot.json @@ -0,0 +1,5 @@ +{ + "snapshot" : { + "imageName" : "Just in case" + } +} diff --git a/openstack-compute-api-1.0/src/samples/snapshot.xml b/openstack-compute-api-1.0/src/samples/snapshot.xml new file mode 100644 index 0000000..06f2289 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/snapshot.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/unauth.json b/openstack-compute-api-1.0/src/samples/unauth.json new file mode 100644 index 0000000..0ec41b2 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/unauth.json @@ -0,0 +1,7 @@ +{ + "unauthorized" : { + "code" : 401, + "message" : "Not authorized!", + "details" : "Error Details..." + } +} diff --git a/openstack-compute-api-1.0/src/samples/unauth.xml b/openstack-compute-api-1.0/src/samples/unauth.xml new file mode 100644 index 0000000..3f3bd81 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/unauth.xml @@ -0,0 +1,6 @@ + + + + Not authorized! +
        Error Details...
        +
        \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/samples/version.json b/openstack-compute-api-1.0/src/samples/version.json new file mode 100644 index 0000000..a466be6 --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/version.json @@ -0,0 +1,8 @@ +{ + "version": { + "status": "BETA", + "id": "v1.0", + "docURL" : "http://docs.rackspacecloud.com/cs/cs-devguid-v1.0.pdf", + "wadl" : "https://servers.api.rackspacecloud.com/v1.0/application.wadl" + } +} diff --git a/openstack-compute-api-1.0/src/samples/version.xml b/openstack-compute-api-1.0/src/samples/version.xml new file mode 100644 index 0000000..478aafc --- /dev/null +++ b/openstack-compute-api-1.0/src/samples/version.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/openstack-compute-api-1.0/src/style/schema.css b/openstack-compute-api-1.0/src/style/schema.css new file mode 100644 index 0000000..f174ca5 --- /dev/null +++ b/openstack-compute-api-1.0/src/style/schema.css @@ -0,0 +1,82 @@ +/* + * (C) 2009 Rackspace Hosting, All Rights Reserved. + */ +body, div, dl, dt, dd, ul, ol, li, h2, h3, +h4, h5, h6, pre, code, form, fieldset, legend, +input, button, textarea, p, blockquote, th, td { + text-align: left; +} + +h1 { + font-size: 350%; + margin-bottom: 10px; +} + +#Content { + border: 1px solid; + padding: 0px 40px 40px; + margin-left: 155px; +} + +#SrcContent { + padding: 0px 40px 40px; + display: none; + margin-left: 155px; +} + +#Controller { + position: fixed; + width: 145px; + left: 10px; + top: 10px; +} + +.Sample { + display: none; +} + +.EnumValue{ + padding: 10px 0px; +} + +.EnumDoc{ + padding: 10px 10px 10px 0px; +} + +.ExternHref{ + padding-top: 5px; +} + +.ExternDoc{ + padding-right: 10px; +} + +pre { + overflow: auto; +} + +td { + padding: 0px 0px 0px 10px; + width: 50%; + font-size: 90%; +} + +table { + width: 100%; +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:link { + color: #000090; +} + +a:visited { + color: #000090; +} diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_acid.css b/openstack-compute-api-1.0/src/style/shjs/sh_acid.css new file mode 100644 index 0000000..a34b786 --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_acid.css @@ -0,0 +1,151 @@ +pre.sh_sourceCode { + background-color: #eeeeee; + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #bb7977; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #8080c0; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #a68500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #a68500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #ff00ff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #ff8000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_number { + color: #800080; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #0080c0; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_symbol { + color: #ff0080; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_function { + color: #004466; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_cbracket { + color: #ff0080; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #a68500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #bb7977; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #bb7977; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #bb7977; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #a68500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #a68500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #0080c0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #ff00ff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #a68500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #bb7977; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #0080c0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #bb7977; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #a68500; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_darkblue.css b/openstack-compute-api-1.0/src/style/shjs/sh_darkblue.css new file mode 100644 index 0000000..23fd6da --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_darkblue.css @@ -0,0 +1,151 @@ +pre.sh_sourceCode { + background-color: #000040; + color: #C7C7C7; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #ffff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #60ff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #ffa500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #80a0ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_number { + color: #42cad9; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #ff80ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_symbol { + color: #d8e91b; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_function { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_cbracket { + color: #d8e91b; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #ffff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #ffff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #ffff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #26e0e7; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #ffa500; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #ffff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #26e0e7; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #ffff60; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #ffa0a0; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_emacs.css b/openstack-compute-api-1.0/src/style/shjs/sh_emacs.css new file mode 100644 index 0000000..6e019cb --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_emacs.css @@ -0,0 +1,139 @@ +pre.sh_sourceCode { + background-color: #ffffff; + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #9c20ee; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #208920; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #ac2020; + font-weight: normal; + font-style: italic; +} + +pre.sh_sourceCode .sh_number { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_function { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #9c20ee; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #9c20ee; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #9c20ee; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #0000ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #9c20ee; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #0000ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #9c20ee; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #bd8d8b; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_night.css b/openstack-compute-api-1.0/src/style/shjs/sh_night.css new file mode 100644 index 0000000..d8d371b --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_night.css @@ -0,0 +1,151 @@ +pre.sh_sourceCode { + background-color: #000044; + color: #dd00ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #f1157c; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #82d66d; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #bfbfbf; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_number { + color: #8ee119; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #00bb00; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_symbol { + color: #e7ee5c; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_function { + color: #ff06cd; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_cbracket { + color: #e7ee5c; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #7aec27; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #82d66d; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #7aec27; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #ffffff; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #ffffff; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_pablo.css b/openstack-compute-api-1.0/src/style/shjs/sh_pablo.css new file mode 100644 index 0000000..173cd7b --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_pablo.css @@ -0,0 +1,151 @@ +pre.sh_sourceCode { + background-color: #000000; + color: #ffffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #c0c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #00c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #0000ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #808080; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_number { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #00ff00; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_symbol { + color: #ff0000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_function { + color: #ff22b9; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_cbracket { + color: #ff0000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #c0c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #c0c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #c0c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #0000c0; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #0000ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #c0c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #0000c0; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #c0c000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #00ffff; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_print.css b/openstack-compute-api-1.0/src/style/shjs/sh_print.css new file mode 100644 index 0000000..1e8c116 --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_print.css @@ -0,0 +1,145 @@ +pre.sh_sourceCode { + background-color: #ffffff; + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #666666; + font-weight: normal; + font-style: italic; +} + +pre.sh_sourceCode .sh_number { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_symbol { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_cbracket { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #000000; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #000000; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_style.css b/openstack-compute-api-1.0/src/style/shjs/sh_style.css new file mode 100644 index 0000000..6cd20b4 --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_style.css @@ -0,0 +1,66 @@ +pre.sh_sourceCode { + background-color: white; + color: black; + font-style: normal; + font-weight: normal; +} + +pre.sh_sourceCode .sh_keyword { color: blue; font-weight: bold; } /* language keywords */ +pre.sh_sourceCode .sh_type { color: darkgreen; } /* basic types */ +pre.sh_sourceCode .sh_usertype { color: teal; } /* user defined types */ +pre.sh_sourceCode .sh_string { color: red; font-family: monospace; } /* strings and chars */ +pre.sh_sourceCode .sh_regexp { color: orange; font-family: monospace; } /* regular expressions */ +pre.sh_sourceCode .sh_specialchar { color: pink; font-family: monospace; } /* e.g., \n, \t, \\ */ +pre.sh_sourceCode .sh_comment { color: brown; font-style: italic; } /* comments */ +pre.sh_sourceCode .sh_number { color: purple; } /* literal numbers */ +pre.sh_sourceCode .sh_preproc { color: darkblue; font-weight: bold; } /* e.g., #include, import */ +pre.sh_sourceCode .sh_symbol { color: darkred; } /* e.g., <, >, + */ +pre.sh_sourceCode .sh_function { color: black; font-weight: bold; } /* function calls and declarations */ +pre.sh_sourceCode .sh_cbracket { color: red; } /* block brackets (e.g., {, }) */ +pre.sh_sourceCode .sh_todo { font-weight: bold; background-color: cyan; } /* TODO and FIXME */ + +/* Predefined variables and functions (for instance glsl) */ +pre.sh_sourceCode .sh_predef_var { color: darkblue; } +pre.sh_sourceCode .sh_predef_func { color: darkblue; font-weight: bold; } + +/* for OOP */ +pre.sh_sourceCode .sh_classname { color: teal; } + +/* line numbers (not yet implemented) */ +pre.sh_sourceCode .sh_linenum { color: black; font-family: monospace; } + +/* Internet related */ +pre.sh_sourceCode .sh_url { color: blue; text-decoration: underline; font-family: monospace; } + +/* for ChangeLog and Log files */ +pre.sh_sourceCode .sh_date { color: blue; font-weight: bold; } +pre.sh_sourceCode .sh_time, pre.sh_sourceCode .sh_file { color: darkblue; font-weight: bold; } +pre.sh_sourceCode .sh_ip, pre.sh_sourceCode .sh_name { color: darkgreen; } + +/* for Prolog, Perl... */ +pre.sh_sourceCode .sh_variable { color: darkgreen; } + +/* for LaTeX */ +pre.sh_sourceCode .sh_italics { color: darkgreen; font-style: italic; } +pre.sh_sourceCode .sh_bold { color: darkgreen; font-weight: bold; } +pre.sh_sourceCode .sh_underline { color: darkgreen; text-decoration: underline; } +pre.sh_sourceCode .sh_fixed { color: green; font-family: monospace; } +pre.sh_sourceCode .sh_argument { color: darkgreen; } +pre.sh_sourceCode .sh_optionalargument { color: purple; } +pre.sh_sourceCode .sh_math { color: orange; } +pre.sh_sourceCode .sh_bibtex { color: blue; } + +/* for diffs */ +pre.sh_sourceCode .sh_oldfile { color: orange; } +pre.sh_sourceCode .sh_newfile { color: darkgreen; } +pre.sh_sourceCode .sh_difflines { color: blue; } + +/* for css */ +pre.sh_sourceCode .sh_selector { color: purple; } +pre.sh_sourceCode .sh_property { color: blue; } +pre.sh_sourceCode .sh_value { color: darkgreen; font-style: italic; } + +/* other */ +pre.sh_sourceCode .sh_section { color: black; font-weight: bold; } +pre.sh_sourceCode .sh_paren { color: red; } +pre.sh_sourceCode .sh_attribute { color: darkgreen; } diff --git a/openstack-compute-api-1.0/src/style/shjs/sh_whitengrey.css b/openstack-compute-api-1.0/src/style/shjs/sh_whitengrey.css new file mode 100644 index 0000000..41df0e2 --- /dev/null +++ b/openstack-compute-api-1.0/src/style/shjs/sh_whitengrey.css @@ -0,0 +1,139 @@ +pre.sh_sourceCode { + background-color: #ffffff; + color: #696969; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_keyword { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_type { + color: #696969; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_string { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_regexp { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_specialchar { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_comment { + color: #1326a2; + font-weight: normal; + font-style: italic; +} + +pre.sh_sourceCode .sh_number { + color: #bb00ff; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_preproc { + color: #470000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_function { + color: #000000; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_url { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_date { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_time { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_file { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_ip { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_name { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_variable { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_oldfile { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_newfile { + color: #008800; + font-weight: normal; + font-style: normal; +} + +pre.sh_sourceCode .sh_difflines { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_selector { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_property { + color: #696969; + font-weight: bold; + font-style: normal; +} + +pre.sh_sourceCode .sh_value { + color: #008800; + font-weight: normal; + font-style: normal; +} + diff --git a/openstack-compute-api-1.0/src/xsd/actions.xsd b/openstack-compute-api-1.0/src/xsd/actions.xsd new file mode 100644 index 0000000..c67e929 --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/actions.xsd @@ -0,0 +1,256 @@ + + + + + + + + + + Server Actions + + + +

        + This schema file defines actions that can be performed on a + cloud server. All cloud server actions are derived from the Action type. +

        +
        +
        + + + + +

        + Performs a HARD or SOFT reboot. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + Rebuilds a server. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + Resizes a server. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + Confirms a resize action. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + Reverts a resize action. +

        +
        + + + + + + + + + + +
        +
        + + + + + + +

        + This is the base type for all server actions. It is simply + a marker abstract type used to differentiate an Action + element from other elements. +

        +
        +
        +
        + + + + + + + +

        + The type of reboot to perform. +

        +
        +
        +
        +
        +
        +
        + + + + + + + +

        + The id of an image to use for the rebuild. +

        +
        +
        +
        +
        +
        +
        + + + + + + + +

        + The id of the flavor to convert to. +

        +
        +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + + + +

        + A HARD reboot is equivalent to power cycling the server. + The operating system is not allowed to gracefully + shutdown. +

        +
        +
        +
        + + + +

        + With a SOFT reboot, the operating system is signaled to + restart. This allows for a graceful shutdown of all + processes. +

        +
        +
        +
        +
        +
        +
        + diff --git a/openstack-compute-api-1.0/src/xsd/annot.xsd b/openstack-compute-api-1.0/src/xsd/annot.xsd new file mode 100644 index 0000000..1eef3b6 --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/annot.xsd @@ -0,0 +1,625 @@ + + + + + + + + + + TRC Annotations + + +

        + The following is a list of custom annotations that are used in + XML Schema descriptions for version 1.0 of the Cloud Servers + API. Each annotation is defined as a single XML element in + the + http://docs.rackspacecloud.com/xsd-ext/v1.0 namespace. + These elements can be added as annotations via the appinfo + schema tag. +

        +

        + Annotations allow useful meta-data to be associated with the + schema types. For example, a root element of a particular type + can be associated with a sample document that illustrates its + usage. Annotations also provide hints when converting schema + into presentation markups such as XHTML, Docbook, and Open + Document Format. +

        +

        + Aside from custom elements, schema types in the Cloud Servers + API are also annotated with documentation tags. These tags + always contain text in XHTML 1.1 block elements. +

        +
        +
        + + + + + +

        + Get access to the xml: attribute groups for xml:lang needed + by the Documentation type. +

        +
        +
        +
        + + + + + + + + +

        + This is a meta-annotation, it is only used only when + defining another annotation and provides information about + the annotation. +

        +
        +
        +
        + + + + + + + + +

        + Used to embed a fragment of code in the documentation text. +

        +
        +
        +
        + + + + + + + + +

        + Defines a text based title for the current schema document. + The title is used when converting the schema to presentation + markup. +

        +
        +
        +
        + + + + + + + +

        + This tag is a template tag. It places content as is in a + document when converting the schema to some presentation + type. The presentation type is specified with the type + attribute. The contents of head should be well-formed + XML. This places content in the document header (think + html:head) when converting the schema to presentation + markup. See the header tag to place content at the top of + the body content. +

        +
        +
        +
        + + + + + + + +

        + This tag is a template tag. It places content as is in a + document when converting the schema to some presentation + type. The presentation type is specified with the type + attribute. The contents of header should be well-formed + XML. This places content on the top of the presentation + markup -- for XHTML this places content right after the + html:body tag. See the head tag to place content in the + document header. +

        +
        +
        +
        + + + + + + + +

        + This tag is a template tag. It places content as is in a + document when converting the schema to some presentation + type. The presentation type is specified with the type + attribute. The contents of footer should be well-formed + XML. This places content on the bottom of the presentation + markup -- for XHTML this places content before closing the + html:body tag. See the header tag to place content in the + beginning of the document. +

        +
        +
        +
        + + + + + + + +

        + Samples provides a means of displaying several versions of + the same code sample. We can do this to display the same + sample in various formats: XML, JSON. Each sample can + contain an optional description and a code element. +

        +
        +
        +
        + + + + +

        + The link annotation establishes one or more relationships + from a particular Schema document to another file. This is + useful for establishing links between pages when converting + to a presentation markup. +

        +
        + + + + + +

        + In this example, we note that the schema file is indexed + by file index.xsd. Also, there is an alternative version + of this file (schema.rnc) in RelaxNG Compact Syntax. +

        +
        + + + + + + + + + ... +
        + ]]> + + + + +

        + Here we denote a reverse link. We are saying this file + serves as an index to file schema.xsd. +

        +
        + + + + + + + + ... + + ]]> + +
        + + + + + + + + + +

        + This type provides information about a custom annotation. +

        +
        +
        + +
        + + + + +

        + Used to capture documentation usually as XHTML. +

        +
        +
        + + + + +
        + + + + +

        + A template places content as is in a document when + converting the schema to some presentation type. The + presentation type is specified with the type attribute. +

        +
        +
        + + + + + + +

        + Language defines the type of content in the template. It + should be a mime-type. XHTML is assumed if type is not + specified. +

        +
        +
        +
        +
        + + + + +

        + Used to provide example instances of schema elements. +

        +
        +
        + + + + +

        + An optional description or summary of the example. +

        +
        +
        +
        + + + +

        + The example code. +

        +
        +
        +
        +
        + + + +

        + A descriptive title for the sample, the type attribute may + be used as a title if this attribute is not specified. +

        +
        +
        +
        +
        + + + + +

        + A collection of samples. +

        +
        +
        + + + + +

        + An optional description or summary of the example. +

        +
        +
        +
        + + + +

        + A list of samples to display. +

        +
        +
        +
        +
        +
        + + + + +

        + Source code that may be provided inline or that may be + referenced via an href attribute. +

        +
        +
        + + + + + +

        + This provides a link to the source code. If both the + in-line text and the href parameter are specified, + in-line text will be ignored. +

        +
        +
        +
        + + + +

        + A mime type describing the source code. +

        +
        +
        +
        +
        +
        +
        + + + + +

        + Used to establish relationships between documents. +

        +
        +
        + + + + +

        + When linking to an XML document, denotes the QName of the + element to link to. This is usually used when linking + with foreign schema elements. +

        +
        +
        +
        + + + +

        + A mime type describing the type of link. +

        +
        +
        +
        + + + +

        + The relationships from the current document to the + document pointed to by the href attribute. +

        +
        +
        +
        + + + +

        + The relationships from the document pointed to by the href + attribute to the current document. +

        +
        +
        +
        +
        + + + + + +

        + A list of document relationships separated by whitespace. +

        +
        +
        + +
        + + + + +

        + A document relationship used in link elements. In order to + remain flexible, this is not a finite + enumeration. In practice, however, only three relationships + are currently supported: alternate, index, + and schema. The alternate forward + relationship denotes that the linked document can be used as + an alternative to the current document. The index + forward relationship that the link document is an index to + the current document. Finally, the schema + relationship denotes that a schema element from the link + document is used in the current document. +

        +
        +
        + +
        + + + + +

        + A list of annotation types separated by whitespace. +

        +
        +
        + +
        + + + + +

        + This enumeration describes where a custom annotation can be + applied. +

        +
        +
        + + + + +

        + The annotation can be applied to the schema tag. +

        +
        +
        +
        + + + +

        + The annotation can be applied to the element tag. +

        +
        +
        +
        + + + +

        + The annotation can be embedded in the documentation tag + of any schema element. +

        +
        +
        +
        + + + +

        + The annotation can be applied to any element in the XML + Schema namespace. +

        +
        +
        +
        +
        +
        + diff --git a/openstack-compute-api-1.0/src/xsd/api.xjb b/openstack-compute-api-1.0/src/xsd/api.xjb new file mode 100644 index 0000000..fbeff5c --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/api.xjb @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/openstack-compute-api-1.0/src/xsd/api.xsd b/openstack-compute-api-1.0/src/xsd/api.xsd new file mode 100644 index 0000000..0436682 --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/api.xsd @@ -0,0 +1,141 @@ + + + + + + + + + + Cloud Servers™ API Schema Types + + + + + + + + + + + + +

        + This is the main index XML Schema document + for the Cloud Servers API. +

        +
        +
        + + + +

        + Servers and all internal Entities including: Addresses, + Files, and MetaData. +

        +
        +
        +
        + + + +

        + Types related to images. +

        +
        +
        +
        + + + +

        + Types related to flavors. +

        +
        +
        +
        + + + +

        + Types related to shared IP groups. +

        +
        +
        +
        + + + +

        + Types related to backup schedules. +

        +
        +
        +
        + + + +

        + Defines server actions: reboot, rebuild, resize... +

        +
        +
        +
        + + + +

        + All fault types. +

        +
        +
        +
        + + + +

        + Types related to rate and absolute limits. +

        +
        +
        +
        + + + +

        + Types related to API version details. +

        +
        +
        +
        +
        diff --git a/openstack-compute-api-1.0/src/xsd/backup.xsd b/openstack-compute-api-1.0/src/xsd/backup.xsd new file mode 100644 index 0000000..2a2d60c --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/backup.xsd @@ -0,0 +1,374 @@ + + + + + + + + + + Backup Schedule + + + +

        + This schema file defines all entities related to Backup Schedules. +

        +
        +
        + + + + +

        + This element is used to create periodic daily and weekly + images automatically. +

        +
        + + + + + + + + + + +
        +
        + + + + + + +

        + If true, both daily and weekly backup schedules are + disabled. +

        +
        +
        +
        + + + +

        + A WeeklyBackup type that describes the day + of the week in which to perform a weekly backup or + DISABLED if weekly backups are disabled. +

        +
        +
        +
        + + + +

        + A DailyBackup type that describes an hour + range in which to perform a daily backup or DISABLED if + daily backups are disabled. +

        +
        +
        +
        +
        + + + + + +

        + A target GMT hour range in which to perform a daily backup + or DISABLED if daily backups are disabled. +

        +
        +
        + + + + +

        + Daily backups are disabled. +

        +
        +
        +
        + + + +

        + Daily backup target of 00:00–02:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 02:00–04:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 04:00–06:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 06:00–08:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 08:00–10:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 10:00–12:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 12:00–14:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 14:00–16:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 16:00–18:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 18:00–20:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 20:00–22:00 GMT. +

        +
        +
        +
        + + + +

        + Daily backup target of 22:00–00:00 GMT. +

        +
        +
        +
        +
        +
        + + + + +

        + A target day of the week in which to perform a weekly backup + or DISABLED if daily backups are disabled. +

        +
        +
        + + + + +

        + Weekly backups are disabled. +

        +
        +
        +
        + + + +

        + A weekly backup target of Sunday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Monday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Tuesday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Wednesday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Thursday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Friday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Saturday. +

        +
        +
        +
        + + + +

        + A weekly backup target of Sunday. +

        +
        +
        +
        +
        +
        +
        + diff --git a/openstack-compute-api-1.0/src/xsd/common.xsd b/openstack-compute-api-1.0/src/xsd/common.xsd new file mode 100644 index 0000000..c80395a --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/common.xsd @@ -0,0 +1,51 @@ + + + + + + + + + + Common Types + + + +

        + This schema file defines common types used by multiple + entities and possibly spanning several types of requests. +

        +
        +
        + + + + + +

        + An integer between 0 and 100 that denotes the progress of an + operation. +

        +
        +
        + + + + +
        +
        + diff --git a/openstack-compute-api-1.0/src/xsd/faults.xsd b/openstack-compute-api-1.0/src/xsd/faults.xsd new file mode 100644 index 0000000..721b908 --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/faults.xsd @@ -0,0 +1,480 @@ + + + + + + + + + + + Faults + + + +

        + This schema file defines faults that may be raised by the + Cloud Servers API. These faults are derived from the CloudServersAPIFault. Most faults + extend this type without adding any additional attributes or + elements. The only exception is the OverLimitAPIFault which adds a + retryAfter attribute. Because all faults + extend a standard base type, it should be possible to capture + all API faults with a single catch statement. +

        +

        + Faults are associated with a default HTTP status code that + corresponds to the particular fault type. For example an <itemNotFound> element is associated + with the HTTP status code 404. Some elements, the <cloudServersFault> element for + example, may be associated with multiple status codes. It is + also possible for multiple fault elements to be associated + with the same default code. The examples below showcase the + default status codes for each element type. Note that these + default codes are not part of the formal schema. In practice, + however, an element type will likely be associated with its + corresponding default status code. +

        +
        +
        + + + + + +

        + A generic Cloud Servers API fault. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The item or resource could not be found. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The operation is not allowed because the corresponding + server is in a build state. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + There is not enough capacity to honor the request. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The operation is not allowed because the corresponding + server is being re-sized or backed up. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The re-size operation is not permitted. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The API service is currently unavailable. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + Insufficient privileges to honor the request, perhaps an + authentication token needs to be obtained or renewed. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + An absolute or rate limit has been exceeded. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The request is malformed. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The Content Type of the request is not supported. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The HTTP method (or verb) is not + supported by the corresponding resource. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + The operation is currently not implemented. +

        +
        + + + + + + + + + + +
        +
        + + + + + + + +

        + A human readable message that is appropriate for display + to the end user. +

        +
        +
        +
        + + + +

        + The optional <details> element may contain useful + information for tracking down errors (e.g a stack + trace). This information may or may not be appropriate + for display to an end user. +

        +
        +
        +
        +
        + + + +

        + The HTTP status code associated with the current fault. +

        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        + An optional dateTime denoting when an operation should + be retried. +

        +
        +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        diff --git a/openstack-compute-api-1.0/src/xsd/flavor.xsd b/openstack-compute-api-1.0/src/xsd/flavor.xsd new file mode 100644 index 0000000..2b24a07 --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/flavor.xsd @@ -0,0 +1,144 @@ + + + + + + + + + + Flavors + + + +

        + This schema file defines all entities related to Flavors. +

        +
        +
        + + + + +

        + The element defines an available hardware configuration for + a server. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + A collection of flavors. +

        +
        + + + + + + + + + + +
        +
        + + + + + + +

        + The ID of the flavor. +

        +
        +
        +
        + + + +

        + The name of the flavor. +

        +
        +
        +
        + + + +

        + The amount of RAM in the flavor in megabytes. +

        +
        +
        +
        + + + +

        + The amount of disk space in the flavor in gigabytes. +

        +
        +
        +
        +
        + + + + + + +

        + A collection of flavors. +

        +
        +
        +
        +
        +
        + +
        + diff --git a/openstack-compute-api-1.0/src/xsd/image.xsd b/openstack-compute-api-1.0/src/xsd/image.xsd new file mode 100644 index 0000000..9f5837b --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/image.xsd @@ -0,0 +1,263 @@ + + + + + + + + + Images + + + +

        + This schema file defines all entity related to Images. +

        +
        +
        + + + + +

        + Common types used by multiple entities and possibly spanning + several types of requests. +

        +
        +
        +
        + + + + +

        + The element defines a collection of files used to create or + rebuild a server. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + A collection of images. +

        +
        + + + + + + + + + + +
        +
        + + + + + + +

        + The ID of the image. +

        +
        +
        +
        + + + +

        + The name of the image. +

        +
        +
        +
        + + + +

        + An optional ID of the server associated with the image. +

        +
        +
        +
        + + + +

        + A time-stamp identifying the modification time of the + image. +

        +
        +
        +
        + + + +

        + A creation time-stamp for the image. +

        +
        +
        +
        + + + +

        + The progress of the current image operation. +

        +
        +
        +
        + + + +

        + The current state (or status) of the + image. +

        +
        +
        +
        +
        + + + + + + +

        + A collection of images. +

        +
        +
        +
        +
        +
        + + + + + + + +

        + The image is in an unknown state. +

        +
        +
        +
        + + + +

        + All operations have completed successfully, the image is + available for install. +

        +
        +
        +
        + + + +

        + The image is being created (or saved). +

        +
        +
        +
        + + + +

        + The image is being prepared to perform an operation. +

        +
        +
        +
        + + + +

        + A request to perform an operation on the specified image + has been received. The operation is pending. +

        +
        +
        +
        + + + +

        + The requested operation has failed. +

        +
        +
        +
        +
        +
        +
        + diff --git a/openstack-compute-api-1.0/src/xsd/ipgroup.xsd b/openstack-compute-api-1.0/src/xsd/ipgroup.xsd new file mode 100644 index 0000000..3e099f8 --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/ipgroup.xsd @@ -0,0 +1,215 @@ + + + + + + + + + Shared IP Groups + + + +

        + This schema file defines all entities related to Shared IP Groups. +

        +
        +
        + + + + +

        + The element defines a group of servers that can share one or + more public IPs with each other. +

        +
        + + + + + + + + + + +
        +
        + + + +

        + A collection of shared IP groups. +

        +
        + + + + + + + + + + +
        +
        + + + + + + + +

        + An IP group type can take two basic forms. On a request + a single, optional, server ID may be specified… +

        + + + + + + + + +

        + …on a response a server ID list is always returned. This + server list may be empty… +

        + + + + + + + + +

        + …note that is a mutually exclusive choice: either + a <server> or <servers> element must be + specified, but not both. +

        +
        +
        + + + +

        + A single, optional, server ID. This form is used when + creating an IP group. +

        +
        +
        +
        + + + +

        + A collection of server IDs. This form is used when + querying an IP group. +

        +
        +
        +
        +
        +
        + + + +

        + The ID of the shared IP group. The attribute should not + be specified when creating a new shared IP group. +

        +
        +
        +
        + + + +

        + The name of the shared IP group. +

        +
        +
        +
        +
        + + + + + + +

        + A collection of shared IP groups. +

        +
        +
        +
        +
        +
        + + + + + + +

        + A collection of servers within a shared IP group. +

        +
        +
        +
        +
        +
        + + + + + +

        + The ID of a server within a shared IP group. +

        +
        +
        +
        +
        +
        + + + diff --git a/openstack-compute-api-1.0/src/xsd/limits.xsd b/openstack-compute-api-1.0/src/xsd/limits.xsd new file mode 100644 index 0000000..98a839e --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/limits.xsd @@ -0,0 +1,354 @@ + + + + + + + + + Limits + + + +

        + This schema file defines types related to preconfigured + limits. Limits are used to manage the capacity of the API and + to prevent abuse. The API defines two kinds of limits RateLimits and AbsoluteLimits. RateLimits are thresholds + that are reset after a certain amount of time passes. + Absolute limits are fixed. +

        +
        +
        + + + + +

        + The limits element contains information on both rate and + absolute limits. +

        +
        + + + + + + + + + + +
        +
        + + + + + +

        + A container that holds a list of rate limits, followed by a + list of absolute limits. +

        +
        +
        + + + + +

        + The element hold a list of RateLimits. +

        +
        +
        +
        + + + +

        + The element hold a list of AbsoluteLimits. +

        +
        +
        +
        +
        +
        + + + + + + +

        + A sequence of RateLimit elements. +

        +
        +
        +
        +
        +
        + + + + + + +

        + A sequence of AbsoluteLimit elements. +

        +
        +
        +
        +
        +
        + + + + +

        + A rate limit is a threshold that is reset after a certain + amount of time. Rate limits are imposed on the HTTP protocol + and they are based on an HTTPVerb and a regular expression + applied to a URI. For example, the rate limit below… +

        + + + ]]> + +

        + …indicates that only 25 posts per day are allowed on + any API URI ending in /servers. The 26 post will raise an OverLimitFault until the resetTime arrives. +

        +

        + It is important to note that rate limits should be applied in + order relative to the verb, going from least to most specific. + Thus, although the threshold for POST to */servers, below, is + 25 per day, one cannot POST to */servers more than 10 times + withing a single minute because the rate limits for any POST + is 10/min. +

        + +
        +
        + + + +

        + The HTTPVerb the limit applies to. +

        +
        +
        +
        + + + +

        + A human readable wild-card URI. Here "*" matches any + character. +

        +
        +
        +
        + + + +

        + A machine processable regular expression URI. The regular + expression boundary matcher "^" takes affect after the root + URI path. For example, the regular expression ^/servers would + match the bold portion of the following URI:
        + https://servers.api.rackspacecloud.com/v1.0/3542812/servers +

        +
        +
        +
        + + + +

        + The unit of time (RateLimitUnit) associated + with the rate value. +

        +
        +
        +
        + + + +

        + The rate limit in RateLimitUnits. +

        +
        +
        +
        + + + +

        + The number of units remaining before an OverLimitFault is raised. +

        +
        +
        +
        + + + +

        + The time in Unix time (the number of seconds since January + 1, 1970 00:00:00 UTC) when the rate limit will reset. +

        +
        +
        +
        +
        + + + + +

        + Absolute limits are predefined fixed limits. We define each + of these limits as a key/value pair. Please consult the API Specification for a list of + absolute limits used by the system. +

        +
        +
        + + + +

        + The name (or key) of the absolute limit. Currently, + the following names are available: +

        +
          +
        • maxTotalRAMSize
        • +
        • maxIPGroups
        • +
        • maxIPGroupMemebers
        • +
        +

        + This may not be an exhaustive list. Please consult the API + Specification. We do not define absolute limit names as an + enumeration in this schema because we may need to impose new + limits quickly without the need to modifying the schema + document. +

        +
        +
        +
        + + + +

        + A value specifying the absolute limit.The name of the + absolute limit determines the unit type. For example, the + key maxIPGroups implies that the value is in terms of + IPGroups. +

        +
        +
        +
        +
        + + + + + +

        + The HTTP verbs (or methods) on which rate-limits may be + enforced. +

        +
        +
        + + + + + + + +
        + + + + +

        + Units of time supported by rate limits. +

        +
        +
        + + + + + +
        + +
        + diff --git a/openstack-compute-api-1.0/src/xsd/server.xsd b/openstack-compute-api-1.0/src/xsd/server.xsd new file mode 100644 index 0000000..66f94ae --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/server.xsd @@ -0,0 +1,1008 @@ + + + + + + + + + Servers and Related Types + + + +

        + This schema file defines a + Server and all internal entities + related to servers including: + Addresses, + ShareIPs, + Files, and + MetaData. +

        +
        +
        + + + + +

        + Common types used by multiple entities and possibly spanning + several types of requests. +

        +
        +
        +
        + + + + +

        + The element defines a server. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + A collection of servers. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + The element defines list of addresses (public and private). +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + The element defines a list of public addresses. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + The element defines list of private addresses. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + The element defines request to share a public IP address. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + The element defines request to add an IP address. +

        +
        + + + + + + + + + + +
        +
        + + + + +

        + The element defines response that returns an added IP address. +

        +
        + + + + + + + + + + +
        +
        + + + + + + +

        + A server is a virtual machine instance in the Cloud Servers + system. Note that this complex type defines all elements + and attributes as optional because a server instance may + take many different forms depending on the operation. When + creating a server, for example, the name, imageId, and + flavorId attributes are required. In addition, optional + metadata and personality file elements may be specified: +

        + + + + + + + + +

        + The response to such a crate operation will include the + administration password, host ID, and addresses associated + with the server: +

        + + + + + + + + +

        + When modifying a server only the name and administration + password should be specified as these are the only + attributes that are modifiable. +

        + + + + + + + + +
        +
        + + + + +

        + A collection of meta data items associated with the server. +

        +
        +
        +
        + + + +

        + A server's public and private address. +

        +
        +
        +
        + + + +

        + A collection of small files used to personalize a new + server instance. +

        +
        +
        +
        +
        + + + +

        + The name of the server. +

        +
        +
        +
        + + + +

        + The ID of the server. +

        +
        +
        +
        + + + +

        + The server's administration password. +

        +
        +
        +
        + + + +

        + The ID of the image used to create the server. +

        +
        +
        +
        + + + +

        + The current server flavor ID. +

        +
        +
        +
        + + + +

        + A unique ID that identifies the physical host that the VM + is running on. This ID is unique per + account and not globally unique. +

        +
        +
        +
        + + + +

        + The progress of the current server operation. +

        +
        +
        +
        + + + +

        + The current state (or status) of the + server. +

        +
        +
        +
        + + + +

        + An ID of the shared IP + group that the server belongs to. +

        +
        +
        +
        +
        + + + + + + +

        + A collection of servers. +

        +
        +
        +
        +
        +
        + + + + + + +

        + A collection of metadata items. +

        +
        +
        +
        +
        +
        + + + + +

        + A MetadataItem is simply a name-value pair. The name is + specified in the key attribute and the value is included inline. +

        + + Web Head 1 + ]]> + +
        +
        + + + + + +

        + A meta data name-value pair. +

        +
        +
        +
        +
        +
        +
        + + + + + A collection of small files used to personalize a server + instance. + + + + + + +

        + A collection of files. +

        +
        +
        +
        +
        +
        + + + + +

        + A file is simply a full path along with base64 file + content. The name of the file is specified in the path + attribute and the file content is included + inline. +

        + + + ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg + YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u + LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv + bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs + IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv + cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA== + + ]]> + +
        +
        + + + + + +

        + Full file path. +

        +
        +
        +
        +
        +
        +
        + + + + + + +

        + Public server addresses. +

        +
        +
        +
        + + + +

        + Private server addresses. +

        +
        +
        +
        +
        +
        + + + + + + +

        + A collection of addresses. +

        +
        +
        +
        +
        +
        + + + + + +

        + An IP address. +

        +
        +
        +
        +
        + + + + +

        + This type is used to represent a request to share an IP + address. +

        +
        +
        + + + +

        + The shared IP group use to + share the address. +

        +
        +
        +
        + + + +

        + If true, the server is configured with the new address + though the address may not be enabled. +

        +
        +
        +
        +
        + + + + +

        + This type is used to represent a request to add an IP + address. +

        +
        +
        + + + +

        + If true, the server is added and configured with the new address + though the address may not be enabled. +

        +
        +
        +
        +
        + + + + + + + + +

        + The server is ready to use. +

        +
        +
        +
        + + + +

        + The server is in an inactive (suspended) state. +

        +
        +
        +
        + + + +

        + The server has been deleted. +

        +
        +
        +
        + + + +

        + A request to perform a resize action has been received. The + operation is pending. +

        +
        +
        +
        + + + +

        + The server is being prepared to perform the resize + operation. +

        +
        +
        +
        + + + +

        + The server is being resized. +

        +
        +
        +
        + + + +

        + The server is waiting for the resize operation to be + confirmed so that the original server may be removed. +

        +
        +
        +
        + + + +

        + The server is in rescue mode. +

        +
        +
        +
        + + + +

        + The requested operation failed, the server is in an + error state. +

        +
        +
        +
        + + + +

        + The server is being built. +

        +
        +
        +
        + + + +

        + The server is being restored. +

        +
        +
        +
        + + + +

        + The server password is being changed. +

        +
        +
        +
        + + + +

        + The server is being rebuilt. +

        +
        +
        +
        + + + +

        + A shared IP address is being removed. +

        +
        +
        +
        + + + +

        + An IP address is being shared, but not configured. +

        +
        +
        +
        + + + +

        + An IP address is being shared, and the server is being + configured with the new address. +

        +
        +
        +
        + + + +

        + An IP address is being added, but not configured. +

        +
        +
        +
        + + + +

        + An IP address is being added, and the server is being + configured with the new address. +

        +
        +
        +
        + + + + +

        + The server is going through a SOFT reboot. +

        +
        +
        +
        + + + +

        + The server is going through a HARD reboot. +

        +
        +
        +
        + + + +

        + The server is in an unknown state. +

        +
        +
        +
        + + + +

        + Reserved for future use. +

        +
        +
        +
        + + + +

        + Reserved for future use. +

        +
        +
        +
        + + + +

        + Reserved for future use. +

        +
        +
        +
        + + + +

        + Reserved for future use. +

        +
        +
        +
        + + + +

        + Reserved for future use. +

        +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        diff --git a/openstack-compute-api-1.0/src/xsd/version.xsd b/openstack-compute-api-1.0/src/xsd/version.xsd new file mode 100644 index 0000000..ecf8d2f --- /dev/null +++ b/openstack-compute-api-1.0/src/xsd/version.xsd @@ -0,0 +1,172 @@ + + + + + + + + + API Version Details + + + +

        + This schema file defines a version element which provides + meta information about the current version of the API Service. +

        +
        +
        + + + + +

        + This element provides detailed meta information regarding the + status of the API version. Included is a pointer to both a + human readable and a machine processable description of the + API service. The machine processable description is written + in the Web Application Description Language (WADL). If a + discrepancy exists between the two specifications, the WADL is + authoritative as it contains the most accurate and up-to-date + description of the API service. +

        +
        + + + + + + + + + + +
        +
        + + + + + + +

        + A unique ID which identifies the API version. Currently + this is fixed as v1.0. The first element + of the path to the API endpoints always contains the + target version ID. +

        +
        +
        +
        + + + +

        + The status of the API version. A stable version will + always have the value CURRENT. See VersionStatus. +

        +
        +
        +
        + + + +

        + A URL to a human readable API specification in PDF + format. This URL will always point to the latest version + of the specification applicable to the requested + implementation. +

        +
        +
        +
        + + + +

        + A URL to a machine readable API specification in WADL + format. This URL will always point to the latest version + of the specification applicable to the requested + implementation. +

        +
        +
        +
        +
        + + + + + + + +

        + A status of BETA indicates that this version is a + candidate for the next major release and may feature + functionality not available in the current version. + Developers are encouraged to test and begin the migration + processes to a BETA version. Note that a BETA version is + undergoing testing, it has not been officially released, + and my not be stable. +

        +
        +
        +
        + + + +

        + The API version is stable and has been tested. Developers + are encouraged to develop against this API version. The + current released version of the API will always be marked + as CURRENT. +

        +
        +
        +
        + + + +

        + A status of DEPRECATED indicates that a newer version of + the API is available. Application developers are + discouraged from using this version and should instead + develop against the latest current version of the API. +

        +
        +
        +
        +
        +
        +
        + diff --git a/openstack-compute-api-1.0/src/xslt/schema.xslt b/openstack-compute-api-1.0/src/xslt/schema.xslt new file mode 100644 index 0000000..e8ef717 --- /dev/null +++ b/openstack-compute-api-1.0/src/xslt/schema.xslt @@ -0,0 +1,1330 @@ + + + + + + + + + + + XML Schema Documentation + application/xhtml+xml + http://www.w3.org/2001/XMLSchema + http://web4.w3.org/TR/2001/REC-xmlschema-2-20010502/# + + " + ' + + + + + + + + + + + + + + + + + + + + element_ + attrib_ + attgrp_ + grp_ + type_ + + + + http://yui.yahooapis.com/2.7.0/build/ + + + + + + + + + + + + + + + + + stylesheet + text/css + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <xslt:value-of select="xsd:annotation/xsd:appinfo/xsdxt:title"/> + + + <xslt:value-of select="$defaultTitle"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        +
        +
        +
        +
        Loading...
        +
        +
        +
        + + + +

        +
        + +

        +
        +
        + + + + + + + + + + + +
        + + + + + + + + + +

        Namespaces

        + + + +
        +

        + Your browser does not seem to have support for + namespace nodes in XPath. If you're a Firefox + user, please consider voting to get this issue + resolved: + + https://bugzilla.mozilla.org/show_bug.cgi?id=94270 + +

        +
        +
        + + + + + + + + + + + +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + +
        + + + + + trc.schema.controller.links[' + + ']=[ + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + ]; + + + + + + trc.schema.controller.index = + + + + + + index + + + Index Schema Document + + + ; + + + + + + + trc.schema.controller.links[' + + ']=[ + + + + # + + + + + + + + See definition of + + + + + , + + + ]; + + + + + + + + { href : + + + + + + , name : + + + + + + , title : + + + + + + } + + + + + + + + +

        Imports

        + + + + + + + + + +
        + + +
        +
        + + + Visit + + +
        +
        + +
        +
        +
        +
        + + +

        Includes

        + + + + + + + + +
        +
        +
        + + + Visit + + +
        +
        + +
        +
        +
        +
        + + +

        Elements

        + + + + + + + + +
        + + + + + + +
        +
        + + + trc.schema.sampleManager.showSample( + + + + ); + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + Sample +
        + +
        + +
        +
        +
        + + + +
        + + + + + + + Loading... + + + + + + +
        +
        + + + + + + +

        Complex Types

        + + + + + + +
        + + +

        Simple Types

        + + + + + + +
        + + + + + + # + + + + + + + + + + + + + + + + + + +

        + +

        + + + + + +
        + extends: + + + + , + + +
        +
        + +
        + restricts: + + + + , + + +
        +
        +
        +
        + + + +
        + + + + + + + + + + SubAttributes + + + Attributes + + + + + + + + + + + + + + + +
        +
        +
        +
        + + + + + + + + + + SubDocumentation + + + Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Sequence + + +
        +
        + + + +
        +
        +
        + +
        + + + +
        + + + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + <?> (Any Element) + + + + + + + + @? (Any Attribute) + + + + + +
        + restriction +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        enum values
        + + + + + + + + +
        + + + + + +
        +
        + + + (id = + + ) + +
        + +
        + +
        +
        +
        + +
        + + + + + + + + (id = + + ) + + + (fixed) + + + + + + + + + + + + +
        + +
        + +
        + +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + < + + > + + + + + + @ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        diff --git a/openstack-compute-api-1.1/pom.xml b/openstack-compute-api-1.1/pom.xml new file mode 100644 index 0000000..8c3442e --- /dev/null +++ b/openstack-compute-api-1.1/pom.xml @@ -0,0 +1,194 @@ + + + + 4.0.0 + + org.openstack.docs + openstack-guide + 1.0.0-SNAPSHOT + jar + OpenStack Guides + + + + + + Rackspace Research Repositories + + true + + + + rackspace-research + Rackspace Research Repository + http://maven.research.rackspacecloud.com/content/groups/public/ + + + + + rackspace-research + Rackspace Research Repository + http://maven.research.rackspacecloud.com/content/groups/public/ + + + + + + + + + target/docbkx/pdf + + **/*.fo + + + + + + + com.rackspace.cloud.api + clouddocs-maven-plugin + 1.0.5-SNAPSHOT + + + goal1 + + generate-pdf + + generate-sources + + false + + + + goal2 + + generate-webhelp + + generate-sources + + + 0 + openstackdocs + 1 + UA-17511903-6 + + appendix toc,title + article/appendix nop + article toc,title + book title,figure,table,example,equation + chapter toc,title + part toc,title + preface toc,title + qandadiv toc + qandaset toc + reference toc,title + set toc,title + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + src + + os-compute-devguide.xml + + reviewer + openstack + + + + + + diff --git a/openstack-compute-api-1.1/src/common.ent b/openstack-compute-api-1.1/src/common.ent new file mode 100644 index 0000000..19acc7e --- /dev/null +++ b/openstack-compute-api-1.1/src/common.ent @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '> + + + + + + '> + + + + + + '> + + + + + + '> + + + + + + '> + + + + + + + + +