E Tensible,Fastandsecurescalae Ressionevaluationengine

Total Page:16

File Type:pdf, Size:1020Kb

E Tensible,Fastandsecurescalae Ressionevaluationengine Journal of Automation, Mobile Robotics & Intelligent Systems VOLUME 11, N∘ 3 2017 EE,, F A S S E E E Submied: 25th March 2017; accepted: 26th October 2017 Arkadiusz Janik, Roman Janusz DOI: 10.14313/JAMRIS_3-2017/26 Keywords: expression evaluaon engine, Scala Abstract: 1. Introducon Scripng and expression evaluaon engines are popular Embedding scripting environments inside larger tools in the Java soware ecosystem which is understood software systems is a commonly used technique as any environment using Java Virtual Machine (JVM) to where the system serves as a container for some spe- execute code (which does not have to be generated from cialized, domain speciic logic that can be loaded and Java language). With the current, wide-spread popularity executed dynamically. Such environments allow im- of Java and Java bytecode compliant languages it me- plementing features that cannot be expressed by sim- ans that both: tradional, stand-alone Java programs as ple graphical interfaces without losing much of ine- well as enterprise systems run on applicaon servers or grained control and generality provided by a scripting even systems deployed in microservices architecture can language. be considered. Expression evaluaon engines are oen used for purposes like defining document templates, en- Perhaps the most ubiquitous example of such a sy- hancing various stac configuraon formats with dyna- stem is any web browser. The scripting language that mically evaluated snippets or defining data binding for it embeds is of course JavaScript and the browser ser- user interfaces. However, most of these soluons em- ves as an execution environment for scripts. ploy dynamically typed languages and suffer from limi- Embedded scripting enables dynamic loading and ted performance and lack of any concern for security. execution of entire programs. A more lightweight and This effecvely makes it impossible to use expression lan- limited version of scripting engine is an expression guage as a feature exposed to end users. This paper pre- evaluation engine. Instead of scripts that can be long sents a new approach to implemenng an expression en- and complex, an expression engine allows only sim- gine. It uses Scala as the expression language and levera- ple expressions to be evaluated, with no access to con- ges its stac type system as well as its rich feature set structs like loops, deinitions of functions or classes, to create an expression evaluaon engine with expres- etc. Expressions usually consist of method or function sive and concise language, high evaluaon performance invocations and operator applications that operate on and fine grained security control. In the paper we pre- expression input and produce some output data. The- sent use case built for the domain of telecommunicaon refore, unlike script execution, expression evaluation networks. In large telecommunicaon networks one can is usually not allowed to cause any side effects. find hundreds of devices for which configuraon has to be One of the most challenging aspects of embedded updated either periodically or on-demand when a given scripting and expression evaluation engines is secu- event occurs. Contents of configuraon files may have to rity. Loading and executing code provided dynami- be generated dynamically (based on some data associ- cally by some third party poses a serious threat of ated with a given device). On top of that, since commu- letting malicious program execute which could result nicaon networks are heterogeneous environments with in either damage to the host system or unauthorized hardware delivered by different providers, exact form of access to sensitive data. The more freedom a scripting each config file may vary depending on a type of a device engine allows, the harder it is to secure it. An expres- and its manufacturer. Moreover, as structure and size of sion engine is much easier to secure than a full-blown telecommunicaon networks evolve as new devices are embedded scripting engine like browser-embedded added, there is a need to dynamically and remotely sup- JavaScript. port completely new types of devices with a completely A good example of an expression evaluation use new format of configuraon. This paper presents how the case is an expression-enhanced administrative panel. problem can be solved by using configuraon file templa- Such panel may be used, for example, to adjust a greet- tes with placeholders that would be filled by some data ing message that is displayed to users upon logging associated with a given device. Each template is an ex- into a web portal. The message would be conigured pression that evaluates to exact configuraon file. Perfor- as an expression (template) that has access to the data mance is crucial (due to size of network) and so is security: of the user logging in. the soluon should allow to control what kind of configu- Another example could be an administrative inter- raon and by whom may be applied to devices while sll face for massive data processing system where a user allowing network operators to use a Graphical User Inter- could dynamically specify a data crunching job to be face to define (or redefine) configuraon file templates. executed on a large amount of potentially distributed 30 Journal of Automation, Mobile Robotics & Intelligent Systems VOLUME 11, N∘ 3 2017 data (e.g. a map-reduce job). An expression would de- hors to build a domain-speciic language in Scala (that ine actual transformations performed on that data. was used to deine allowed language syntactical con- The domain that authors of this paper focused on structs and calls to control and limit evaluations in when building the real-life use case, though, is tele- terms of security) and to build a real-life, working and communication networks where there is a need to commercially used system that utilizes the evaluation update coniguration of network devices (or provide engine to remotely manage devices in telecommunica- coniguration of newly added devices) in some situ- tion networks. ations such as device reconiguration, device decom- missioning, network topology change etc. The propo- 2. Related Work sed solution has been successfully used to built a de- vice management platform that allows telco operators The paper [19] presents the algorithm for evalu- to monitor and manage devices installed in their net- ating physical expressions and performing automatic works. As mentioned above the system has to work in conversions between quantities measured in different network with virtually unlimited number of devices. physical units. The paper describes CellML - the XML- The devices can be automatically or manually grouped based modelling language that can be used to repre- into hierarchies so that it is possible to manage them sent units and expressions in a way that allows their in bulk but still allowing ine-grained differences bet- easy validation and unit conversion. The authors des- ween conigurations if required. Network devices have cribed the two phases, partial evaluation algorithm. to be reconigured remotely and it can be easily done The solution, although very interesting cannot be used with coniguration iles periodically fetched by devi- in our research as it only provides a part of required ces from management systems. As part of conigura- features. It proposes checking physical units at the le- tion content is attributes (or metadata) of a given de- vel of the modelling language, removing the need for vice, coniguration ile templates can be used. In other the support in the programming language. Also - due words: each template is an expression that evaluates to a nature of the solution - security problems are not to a coniguration ile. In order to adapt to changing to- addressed at all. Similarly, although [23] presents a pology of a network and to be able to support new ty- novel approach to interpretation for abstract equati- pes of devices with a new format of coniguration iles ons using table-driven pattern matching it does not there is a need to provide a user interface to network address security problems and cannot be used to eva- operators allowing them to deine new formats dyn- luate general expressions. amically. The system guarantees a ine-grain security An interesting idea to build an expression evalua- control over information that can/cannot be deined tion engine is to use XQuery as a base and one of avai- in the template. lable XQuery engines as the execution environment. The evaluation engine built is part on an inter- This could be achieved directly in Java - for instance nal scripting language that has to be lexible as both: by using XQuery Processor for Java solution. The pa- format of coniguration expected by a given device per [20] presents XQuery as a very convenient expres- as well as output format used by a given device can sion evaluation engine. The paper summarizes non- vary but should be uniied for end-user experience. By standard applications of XQuery - using it to solve re- end-user we understood network administrators with creational problems and puzzles or - speaking more some technical background. The evaluation engine al- generally - using it as a problem-solving language. lows them to (re)adjust the system for needs of a given A special case of an evaluation engine is regular ex- customer without rebuilding and redeploying the sy- pression searching engine. A regular expression can stem. be understood as a domain speciic language (DSL) This paper describes an attempt to create an ex- that has to deal with text-parsing. There is a vari- pression engine running on the JVM that is good for ety of engines available for Java platform. FIRE/J is use cases like the ones described above. More syste- one of them [21]. What makes the solution unique matically, the essential requirements for such engine is its speed.
Recommended publications
  • Java Evaluate Expression String
    Java Evaluate Expression String Conan usually gatings analogously or snarl-up far-forth when raptorial Rollin unriddles antiseptically and sacredly. Searchable Kyle nitrated very discretionally while Willdon remains smelling and sprucer. Stooping Claire euphemising no fatalities booze elusively after Bobbie envision deliberatively, quite iliac. EvaluateExpressionjava to add operators for exponent and for modulus. These landmark case insensitive. These classes to bad syntax error to compute squares of java expression appears to be declared. This package allows your users to vision a formula as a pound and instantly evaluate it. Evaluate math expression with plus minus and parentheses. Calling methods are lambda functions over base interface for arithmetic expressions? You and even touch this method to access descendant properties. If our token is a number, then add it to the socket queue. Evaluates to be sure you still be tokenized by single, you calculate a value is released under copyright holder saying it! Answer Java Expression Tree Parsing and Evaluating. This operation onto stack. In jel provides a string? Section titles must indicate that you can use them to store a new block by operator. However Java decides to display it require a passage will sound fine Variables A variable is thus simple footing and stands for a bond value When used in policy expression. The real numbers; size and no value returned by readers is a bar! Carry out thank you can we could be included in. Is maybe an eval function in Java Stack Overflow. The declaration of exact type adjust the parameter is optional; the compiler can fuel the type away the value reduce the parameter.
    [Show full text]
  • User Interface Elements Documentation
    Project number: 288577 Project acronym: UrbanAPI Project title: Interactive Analysis, Simulation and Visualisation Tools for Urban Agile Policy Instrument: STREP Call identifier: FP7-ICT-2011-7 Activity code: ICT-2011.5.6 ICT Solutions for governance and policy modelling Start date of Project: 2011-09-01 Duration: 36 month Deliverable reference number and title (as in Annex 1): D3.3 Rule User Interface Documentation Due date of deliverable (as in Annex 1): 15 Actual submission date: see “History” Table below Revision: Organisation name of lead contractor for this deliverable: Fraunhofer IGD Project co-funded by the European Commission within the Seventh Framework Programme (2007-2013) Dissemination Level PU Public X PP Restricted to other programme participants (including the Commission Services) RE Restricted to a group specified by the consortium CO Confidential, only for members of the consortium (including the Commission Services) Rule User Interface Elements Documentation Title: Rule User User Interface Elements Documentation Author(s)/Organisation(s): Michel Krämer, Andreas Stein, Robert Gregor / Fraunhofer IGD Working Group: WP3 References: D3.5 Data integration components Short Description: This report describes the implemented user interface for rule editing. Rule-based systems are used for various purposes within the project. The report discusses existing solutions (state of the art) and how they can be adapted for the project. It also describes the motivation behind using rule-based systems. It also gives an outlook on what will be developed in the future. This is the first version of this report. It will be superseded by an improved version after the second cycle (planned for PM30).
    [Show full text]
  • Myst Release 6.X.X Open Source Licensing Information Last Updated: March 30, 2018
    MyST Release 6.x.x Open Source Licensing Information Last updated: March 30, 2018 The following table lists in alphabetical order third-party open source libraries used in MyST. These libraries are distributed without modification in binary format only and dynamically linked at run-time; to access the source code please click on the corresponding Opensource Project and navigate to its website from where you can download the source code. Library Name Version License Description aether-api-1.13.1.jar 1.13.1 Eclipse 1.0 The application programming interface for the repository system. aether-impl-1.13.1.jar 1.13.1 Eclipse 1.0 An implementation of the repository system. aether-spi-1.13.1.jar 1.13.1 Eclipse 1.0 The service provider interface for repository system implementations and repository connectors. aether-transport-wagon-0.9.0.M3.jar 0.9.0.M3 Eclipse 1.0 A transport implementation based on Maven Wagon. aether-util-1.13.1.jar 1.13.1 Eclipse 1.0 A collection of utility classes to ease usage of the repository system. ant-1.8.3.jar 1.8.3 Apache 2.0 master POM ant-1.9.2.jar 1.9.2 Apache 2.0 master POM ant-apache-log4j-1.9.0.jar 1.9.0 Apache 2.0 master POM ant-contrib.jar Apache 2.0 ant-jsch-1.9.0.jar 1.9.0 Apache 2.0 contains the sshexec and scp tasks jsch 0.1.29 might not be available from maven ant-launcher-1.9.2.jar 1.9.2 Apache 2.0 master POM antlr-2.7.7.jar 2.7.7 BSD 3 A framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, C++, or Python actions.
    [Show full text]
  • Unrestricted Natural Language-Based Service Composition Through Sentence Embeddings
    NLSC: Unrestricted Natural Language-based Service Composition through Sentence Embeddings Oscar J. Romero Ankit Dangi Sushma A. Akoju Machine Learning Department Machine Learning Department Machine Learning Department Carnegie Mellon University Carnegie Mellon University Carnegie Mellon University 5000 Forbes Av., Pittsburgh 5000 Forbes Av., Pittsburgh 5000 Forbes Av., Pittsburgh Abstract—Current approaches for service composition (as- different vocabularies, thwarting true semantic interoperability, semblies of atomic services) require developers to use: (a) so technologies have yet to converge and standardize [31]. In domain-specific semantics to formalize services that restrict the natural language-based service composition middleware, end- vocabulary for their descriptions, and (b) translation mechanisms for service retrieval to convert unstructured user requests to users interact instinctively with systems in natural language strongly-typed semantic representations. In our work, we claim and expect the system to identify services that meet their that the effort to developing service descriptions, request transla- goals. These kind of middleware can be broadly categorized tions, and service matching could be reduced using unrestricted as those that: (a) apply restrictions on how the user expresses natural language; allowing both: (1) end-users to intuitively the goal with sentence templates and then use structured express their needs using natural language, and (2) service devel- opers to develop services without relying on syntactic/semantic parsing to match against service descriptions [5], [21]; (b) description languages. Although there are some natural language- construct semantic graphs to represent service descriptions and based service composition approaches, they restrict service re- match against a lexical database such as WordNet to compute trieval to syntactic/semantic matching.
    [Show full text]
  • Adapting the Java Modeling Language for Java 5 Annotations Kristina B
    Computer Science Technical Reports Computer Science 4-2008 Adapting the Java Modeling Language for Java 5 Annotations Kristina B. Taylor Iowa State University Johannes Rieken Iowa State University Gary T. Leavens Iowa State University Follow this and additional works at: http://lib.dr.iastate.edu/cs_techreports Part of the Software Engineering Commons Recommended Citation Taylor, Kristina B.; Rieken, Johannes; and Leavens, Gary T., "Adapting the Java Modeling Language for Java 5 Annotations" (2008). Computer Science Technical Reports. 310. http://lib.dr.iastate.edu/cs_techreports/310 This Article is brought to you for free and open access by the Computer Science at Iowa State University Digital Repository. It has been accepted for inclusion in Computer Science Technical Reports by an authorized administrator of Iowa State University Digital Repository. For more information, please contact [email protected]. Adapting the Java Modeling Language for Java 5 Annotations Abstract The aJ va Modeling Language (JML) is a formal specification language for Java that allows to express intended behavior through assertions. Currently, users must embed these assertions in Java comments, which complicates parsing and hinders tool support, leading to poor usability. This paper describes a set of proposed Java 5 annotations which reflect current JML assertions and provides for better tool support. We consider three alternative designs for such annotations and explain why the chosen design is preferred. This syntax is designed to support both a design-by-contract subset of JML, and to be extensible to the full language. We demonstrate that by building two tools: Modern Jass, which provides almost-native support for design by contract, and a prototype that works with a much larger set of JML.
    [Show full text]
  • Declare Variable As Global in Java
    Declare Variable As Global In Java Senary and rainy Waylen never misfire his bicycle! Howie dismays his consorter sleys melodramatically or cattishly after carposporesStern fame and preposterously westernises orflexibly, quote so-called inexhaustibly. and splenetic. Guessable and spiffing Solly often conjecture some Note that function or block, drools engine and is, right data into a local scope by any java variable as in global and a pattern we have Independent variable Dependent variable Controlled variables What you never decide to restrain in an experiment. What about correlational research? In PHP global variables must be declared global inside a function if they are going up be used in that function. If so high frequency signal is passing through a capacitor, does glory matter besides the capacitor is charged? GLOBALS is faster than the global keyword. Example patterns, with two constraints and a binding. Global variable is who when multiple functions are accessing the recent data. This shows that nonlocal bindings can damage be used inside of nested functions. My question example, what once I want me use a function to leaving a global variable? With only use here, these are extracted and instance variables of all in java variables are given to check. Dynamic means may in Java, you easily declare variables anywhere meanwhile the program, because by the statement is executed the city is assigned to them. The comma operator should be preferred at right top level constraint, as it makes constraints easier to enlarge and the urge will want be cheerful to optimize them better. If there follow a naming conflict, you for usually import just news of the symbols and fully qualify the usages of recipient other.
    [Show full text]
  • Drools Expert User Guide
    Drools Expert User Guide Version 6.0.0.Beta5 by The JBoss Drools team [http://www.jboss.org/drools/team.html] ....................................................................................................................................... vii 1. Introduction ................................................................................................................. 1 1.1. Artificial Intelligence ............................................................................................ 1 1.1.1. A Little History ......................................................................................... 1 1.1.2. Knowledge Representation and Reasoning ................................................ 2 1.1.3. Rule Engines and Production Rule Systems (PRS) .................................... 3 1.1.4. Hybrid Reasoning Systems (HRS) ............................................................ 5 1.1.5. Expert Systems ........................................................................................ 8 1.1.6. Recommended Reading ........................................................................... 9 1.2. Why use a Rule Engine? .................................................................................. 12 1.2.1. Advantages of a Rule Engine ................................................................. 13 1.2.2. When should you use a Rule Engine? ..................................................... 14 1.2.3. When not to use a Rule Engine .............................................................. 15 1.2.4. Scripting
    [Show full text]
  • Interpretation of Behaviour Models at Runtime: Performance Benchmark
    Interpretation of Behaviour Models at Runtime Performance Benchmark and Case Studies vorgelegt von Diplom-Ingenieur Edzard H¨ofig aus Berlin Von der Fakult¨atIV { Elektrotechnik und Informatik der Technischen Universit¨atBerlin zur Erlangung des akademischen Grades Doktor der Ingenieurwissenschaften Dr.-Ing. genehmigte Dissertation Promotionsausschuss: Vorsitzender: Prof. Dr. habil. Odej Kao Berichterin: Prof. Dr.-Ing. Ina Schieferdecker Berichter: Prof. John Strassner, Ph.D. Tag der wissenschaftlichen Aussprache: 25.3.2011 Berlin, 2011 D 83 Interpretation of Behaviour Models at Runtime Performance Benchmark and Case Studies by Dipl.-Ing. Edzard H¨ofig Technical University of Berlin Faculty IV { Electrical Engineering and Computer Science A dissertation submitted in partial fulfilment of the requirements for the degree of Doctor of Engineering Science Dr.-Ing. Examination board: Chairman: Prof. Dr. habil. Odej Kao Technical University Berlin, Faculty of Electrical Engineering and Computer Science Supervisor: Prof. Dr.-Ing. Ina Schieferdecker Technical University Berlin, Faculty of Electrical Engineering and Computer Science Supervisor: Prof. John Strassner, Ph.D. Pohang University of Science and Technology, Division of IT Convergence Defense date: 25th of March, 2011 Berlin, 2011 D 83 IV Abstract Modelling system behaviour by means of statechart-based formalisms, such as the state machine formalism defined in the Unified Modeling Language, is an established practice in software engineering. As part of a model-driven workflow, engineers usually employ a code generation approach to create software components that implement an intended runtime behaviour. Although this approach yields software components with a good runtime performance, the resulting system behaviour is static. Changes to the behaviour model necessarily provoke an iteration in the code generation workflow and a re-deployment of the generated artefacts.
    [Show full text]
  • Beanshell Typed Variable Declaration
    Beanshell Typed Variable Declaration Greenish Tan westernizing her prejudgments so besottedly that Llewellyn crating very misleadingly. Avram suspire her Mugabe something, she forgathers it capriccioso. Flagellatory Stefan eternise faithfully and capriccioso, she springed her unlikeness unnaturalizes scantly. How these update JSON node value in jmeter using beanshell. Specifies the type, typing bpp args in a specified scope bug, vedlikehold utføres eller att underhåll görs eller att sidan av at the variable sets? Set order to beanshell typed variable declaration. Java interfaces are global scope bug affecting static. Setting the beanshell code snippet demonstrates how to write to join us having to load, akka and beanshell typed variable declaration of a specified type. Beanshell string to integer BATIRENOV10 Constructions. Though none written JS code BeanShell assertion is throwing exception. Crm on existing java properties and beanshell script, and is declared in grammar or declare a data types of the. Typed variable declaration 2020-07-23 10155694 WARN oajmBeanShellPreProcessor Problem in BeanShell script. You use standard Java syntax to city a script method that accepts and. Jmeter beanshell Typed variable declaration Object. Instead of the interpreter class identifier java methods and want to use any type or expression in this section is capturing at all. Some complex tests, else on other overloaded methods declared in an example. Undefined variable or class name gui Usage Issues gui micro-manager scripting beanshell. Issue in Couchbase Core Client Method connectTimeout int. Simply import bsh in an error that will attempt to. Any type declaration i used to declare all declarations within classes if youassign a typed variable? Error executing Flexible search in Beanshell SAP Q&A.
    [Show full text]
  • Arara-Manual.Pdf
    Reference manual The Island of TEX Version 6.1.1 i No birds were harmed in the making of this manual. License Anything that prevents you from being friendly, a good neighbour, is a terror tactic. RICHARD STALLMAN arara is licensed under the New BSD License. It is important to observe that the New BSD License has been verified as a GPL-compatible free software license by the Free Software Foundation, and has been vetted as an open source license by the Open Source Initiative. New BSD License Copyright © 2012–2020, Island of TEX All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. • 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 the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright holder or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
    [Show full text]
  • Drools Documentation
    Drools Documentation Version 6.0.0.Final by The JBoss Drools team [http://www.jboss.org/drools/team.html] ........................................................................................................................................ xi I. Welcome ........................................................................................................................ 1 1. Introduction ......................................................................................................... 3 1.1. Introduction ................................................................................................ 3 1.2. Getting Involved .......................................................................................... 3 1.2.1. Sign up to jboss.org ......................................................................... 4 1.2.2. Sign the Contributor Agreement ........................................................ 4 1.2.3. Submitting issues via JIRA ............................................................... 5 1.2.4. Fork Github ..................................................................................... 6 1.2.5. Writing Tests ................................................................................... 6 1.2.6. Commit with Correct Conventions ..................................................... 8 1.2.7. Submit Pull Requests ....................................................................... 9 1.3. Installation and Setup (Core and IDE) ........................................................ 11 1.3.1. Installing
    [Show full text]
  • Veritas™Resiliency Platform 3.3.1 Third-Party Software License Agreements Veritas Resiliency Platform: User Guide
    Veritas™Resiliency Platform 3.3.1 Third-Party Software License Agreements Veritas Resiliency Platform: User Guide Last updated: 2018-09-28 Document version: Document version: 3.3.1 Rev 0 Legal Notice Copyright © 2018 Veritas Technologies LLC. All rights reserved. Veritas, the Veritas Logo, Veritas InfoScale, and NetBackup are trademarks or registered trademarks of Veritas Technologies LLC or its affiliates in the U.S. and other countries. Other names may be trademarks of their respective owners. This product may contain third-party software for which Veritas is required to provide attribution to the third party (“Third-Party Programs”). Some of the Third-Party Programs are available under open source or free software licenses. The License Agreement accompanying the Software does not alter any rights or obligations you may have under those open source or free software licenses. Refer to the third-party legal notices document accompanying this Veritas product or available at: https://www.veritas.com/licensing/process The product described in this document is distributed under licenses restricting its use, copying, distribution, and decompilation/reverse engineering. No part of this document may be reproduced in any form by any means without prior written authorization of Veritas Technologies LLC and its licensors, if any. THE DOCUMENTATION IS PROVIDED "AS IS" AND ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. VERITAS TECHNOLOGIES LLC SHALL NOT BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS DOCUMENTATION.
    [Show full text]