Blockchain Oracle_ Types, Uses and How it Works

Smart contracts are self-executing agreements on blockchains that hold immense potential for businesses, but they lack access to real world data. This is where blockchain oracles come in. Oracles has the ability to fetch external data like weather updates, flight statuses, or market prices and feed them securely into smart contracts. This data triggers automated actions within the contract, enabling a new level of efficiency and automation.

Oracle serves as an advantage for businesses utilizing blockchain technology. They streamline workflows, eliminate manual intervention prone to errors, and open doors to innovative applications. This blog explores the blockchain oracles and their different oracle types, along with their workings and benefits across industries.

What Are Blockchain Oracles?

Blockchain Oracle acts as middleware software that transforms off-chain data into blockchain-compatible formats that smart contracts can understand and utilize and vice versa. In simple terms, it facilitates communication between blockchain smart contracts and external data sources. 

It is important because it can help blockchain contribute efficiently to processes that need real-time data integration for accurate results, like cross-border payments, decentralized exchanges, and more.

However, the implementation of Blockchain Oracles presents its own set of challenges, which is referred to as the Oracle Problem.

  • This issue arises due to the conflict between blockchain’s decentralized nature and the dependency on centralized oracles for off-chain data retrieval.
  • This dependency undermines the trustless nature of blockchain and introduces a single point of failure and potential manipulation.

To overcome this challenge, blockchain ecosystems necessitate decentralized networks of oracles.

  • Decentralized Oracle Networks can address the Oracle Problem by ensuring data integrity, reliability, and resistance to tampering.
  • These networks collect, validate, and transmit data from external sources to blockchain-based smart contracts in a decentralized manner.
  • Decentralized Oracle Networks also offers functionalities such as smart contract execution, support for Layer-2 solutions, and complex computations.

Everything together enhances the capabilities of blockchain ecosystems and reinforces the trustworthiness of decentralized applications.

How Does Blockchain Oracle Work?

Here is the entire process that highlights how a blockchain oracle works:

A. Oracle Implementation Process

When a blockchain application requires off-chain data, it initiates a request to the Oracle network through a Requesting smart contract. Within the Oracle network, a Service Level Agreement (SLA) contract is established, comprising three subcontracts:

  1. Reputation Contract: This contract authenticates oracle nodes’ track records and filters out untrustworthy nodes based on their performance history.
  2. Order-Matching Contract: It sends the data request to verified oracle nodes, collects their bids, and selects the appropriate nodes to fulfill the request.
  3. Aggregating Contract: This contract sends data requests to oracle nodes in the Decentralized Oracle Network (DON) using an on-chain programming language. The nodes then translate the request into an off-chain language, retrieve data from external sources via APIs, and translate it back to the on-chain language before sending it to the Aggregating contract.

B. Six Critical Steps Of Blockchain Oracle Operation

Here are the six basic and critical steps involved in the proper functioning of blockchain oracle operations:

Step 1. Smart Contract Requests Data: A smart contract on the blockchain starts the process by specifying the type of external data it needs. This data could be anything from weather updates to stock prices or sensor readings.

Step 2. Oracle Network Comes into Action: The request is sent out to a network of oracle nodes. These nodes can be independent computers or servers operated by individuals or organizations.

Step 3. Data Retrieval: Nodes within the network compete to fetch the requested data from external sources like APIs, web servers, or physical sensors.

Step 4. Data Validation: After retrieval, the data undergoes validation. Multiple nodes check their accuracy and consistency to ensure thy are reliable. For this process, different methods may be used depending on the chosen oracle system.

Step 5. Data Transformation: The validated data is then converted into a format that the blockchain can understand. This is important because blockchains have specific data structures.

Step 6. Data Delivered to Smart Contract: Finally, the formatted data is securely delivered back to the smart contract that requested it. The smart contract can then use this data to perform its tasks or fulfill its agreements.

Types Of Oracles

There are different types of oracles, each with its unique functionality and purpose. Here are the details of these various oracle types:

1. Software Oracles:

These oracles serve as intermediaries between smart contracts and online data sources. It gathers real-time information, such as currency exchange rates and digital asset prices from servers and web pages. For example, using YouTube’s API, an oracle feeds the Ethereum blockchain with data from YouTube. 

2. Hardware Oracles:

It is designed to interface with physical devices. Hardware oracles translate real world events that are captured by sensors and reading devices into machine-readable data accessible to smart contracts. For example, they can range from complex systems to simple temperature sensors for tracking environmental conditions or supply chain movements.

3. Inbound And Outbound Oracles:

Inbound oracles import external data into smart contracts, while outbound oracles export data generated by smart contracts to the external world. It basically facilitates bidirectional communication. For example, inbound oracles enable the retrieval of the price information of cryptocurrencies or assets from exchanges. 

On the other hand, outbound oracles transmit information from the blockchain to an outside source. You can consider smart locks as an example of an outbound oracle. In the case of smart locks, when funds are sent to a specific address, a smart contract initiates a process where this event is communicated to an external mechanism using an outbound oracle. This mechanism is responsible for unlocking a smart lock associated with the smart contract.

4. Human Oracles:

Human experts verify and provide data to smart contracts after rigorous research and verification. It is done by utilizing cryptographic methods to authenticate their identities and reduce the risk of fraudulent information. For example, a researcher uses a human oracle to confirm the authenticity of newly discovered data and adds it to a smart contract database.

5. Contract-specific Oracles:

These oracles are customized for individual smart contracts. It caters to specific contract requirements but may demand increased maintenance efforts and costs when deployed across multiple contracts. For example, a specific oracle is developed for a decentralized insurance application that fetches disaster reports or real-time weather data.

6. Cross-chain Oracles:

Cross-chain oracles facilitate the seamless transfer of data and assets across different blockchain networks while eliminating the gaps between different blockchains and enhancing interoperability. For example, Chainlink can be used to transfer data from Ethereum to Cardano.

7. Compute-enabled Oracles:

These oracles enable decentralized services by employing off-chain computation that is infeasible to execute on-chain. It offers solutions to technical, financial, and legal constraints, especially in Layer2 solutions like ZK Rollups. For example, API3 QRNG and Chainlink VRF offer tamper-proof random number generation (RNG) and ensure unpredictability and fairness.

8. Consensus-based Oracles:

Consensus-based oracles utilize multiple oracles and consensus algorithms. They ensure the accuracy and reliability of data transmitted to smart contracts while enhancing trust and reliability in blockchain ecosystems. For example, in decentralized finance (DeFi), oracles can provide real-time cryptocurrency prices that are crucial for executing smart contracts.

How Can Oracle Benefit Blockchain Applications And Networks?

Oracle’s offerings bring significant benefits to the table that empower businesses to utilize the full potential of blockchain technology. 

1. Ease Of Adoption: 

From cloud services to on-premises solutions and more, Oracle provides diverse adoption paths and caters to the varying needs of businesses. This flexibility makes it easier for organizations to integrate blockchain technology into their operations.

2. Interconnectivity: 

Oracle’s blockchain solution builds a collaborative environment by facilitating real-time data sharing among multiple parties. This interconnectivity is invaluable for industries where secure collaboration and data exchange are important.

For example, gaming applications and on-chain smart contract applications can connect with other off-chain computation and on-chain data marketplaces or APIs.

3. Easy Integration: 

With enterprise adapters and a rich REST API, Oracle enables seamless integration with existing on-premises and cloud systems. This ensures smooth transaction processing and event consumption, enhancing operational efficiency.

4. Deployment Options: 

Oracle offers a range of deployment options, including cloud, on-premises, or hybrid models, that provide businesses with the flexibility to choose the deployment strategy that best suits their needs. Moreover, the fact that it supports DAML and Solidity smart contracts adds a bonus to the platform’s versatility.

5. Robust Managed Service: 

Oracle’s blockchain solution boasts a robust managed service featuring built-in identity management, governance capabilities, and on-chain access control. With enterprise-grade performance, dynamic scalability, and integrated analytics, businesses can rely on Oracle for a secure and scalable blockchain infrastructure.

6. Tokenization Support: 

Oracle extends support for tokenization, including non-fungible tokens (NFTs) and NFT templates, while empowering businesses to explore new avenues in digital asset management and tokenized ecosystems.

7. Developer-Friendly Tools: 

Oracle equips developers with a suite of tools for smart contract generation, encompassing project scaffolding, local testing, debugging, and automated deployment. This empowers developers to streamline the development lifecycle and accelerate time-to-market for blockchain applications.

What Kind Of Data Is Accessible Through Oracles?

Here’s an in-depth exploration of the types of data accessible through oracles:

1. Financial Data:

Oracles can have access to financial data to provide insights into market prices, such as stock prices, cryptocurrency values, foreign exchange rates, and commodity prices. Additionally, they can furnish financial information like interest rates, credit scores, and even bank account balances (with user consent), facilitating a broad spectrum of financial transactions and services.

2. Sensor Data:

Hardware oracles translate real world events captured by sensors and reading devices into machine-readable data. They can relay environmental data such as temperature, humidity, and air quality, as well as logistics data like GPS coordinates of goods, shipment statuses, and sensor readings from physical devices. Moreover, IoT data from various internet-connected devices, spanning wearables, industrial machinery, and smart home gadgets, can be accessed through these oracles, enabling innovative applications across industries.

3. Public Data:

Oracles offer access to publicly available data, including weather updates encompassing temperature, precipitation, and wind speed. They can also retrieve government data such as public records, legal documents, and even election results. Furthermore, oracles have the capability to analyze sentiment from news and social media platforms, providing valuable insights into social trends and public sentiment, depending on their capabilities and integrations.

4. API Data:

With the ability to interface with Application Programming Interfaces (APIs), oracles can access interfaces. This encompasses a wide range of information made available by various online services and platforms, extending from financial services to social media analytics, e-commerce metrics, and beyond. The scope of data accessible via APIs is virtually limitless and dictated only by the APIs the oracle can connect to.

5. Custom Data Feeds:

In addition to standardized data sources, oracles can be customized to access and process data from custom sources or specialized data providers. This capability enables organizations to utilize proprietary data streams and niche datasets customized to their specific needs, encouraging innovation and differentiation in blockchain-based applications.

6. Enhanced Computation: 

Enhanced computation involves using external resources to perform complex calculations beyond what the blockchain can handle due to its limitations in processing power and speed. These calculations are then securely reintegrated into the blockchain.

7. Verified Randomness: 

Verified randomness is a feature provided by certain blockchain oracles. They generate random numbers that can be cryptographically verified as truly random. This is crucial for applications like gaming and lotteries, where fairness and unpredictability are essential.

Important Note:

  • The types of data accessible depend on the capabilities of the specific oracle network.
  • Security considerations are important when dealing with sensitive information. So, oracles should implement measures to protect data privacy and prevent unauthorized access.
  • It’s worth noting that not all oracles have the capacity to retrieve all types of data. Some may specialize in particular areas like financial data or sensor readings.

How Does Oracle Implementation Help Improve Defi Systems And Solutions?

Incorporating oracle into decentralized finance (DeFi) systems offers numerous benefits. It improves the functionality and reliability of decentralized financial solutions. Here’s how oracle integration significantly enhances DeFi systems and solutions:

1. Precise Asset Valuation:

Oracles play an important role in providing real-time price updates, which are essential for accurately valuing assets in DeFi applications such as lending platforms and decentralized exchanges. This ensures that asset pricing remains precise and current.

2. Risk Assessment:

DeFi systems can access credit scoring and risk assessment data with the help of oracles. With this, the DeFi system can enhance the security and fairness of financial transactions. Utilizing oracle-derived data enables DeFi platforms to effectively assess the risk associated with various transactions and promote overall stability in the DeFi space.

3. Improved Efficiency and Security:

Advanced oracle solutions like FTSOv2 offer enhanced efficiency and security by delivering more frequent and accurate data updates across a decentralized network. This increased speed and reliability empower DeFi applications to operate seamlessly, ensuring optimal performance and user experience.

4. Enhanced Interoperability:

Cross-chain oracles facilitate the seamless transfer of data and assets across different blockchain networks. By removing the gap between different blockchain ecosystems, cross-chain oracles enhance interoperability within the DeFi space and enable greater flexibility and scalability for decentralized financial solutions.

5. Customized Financial Products:

Oracles provide detailed and individualized credit data and enable the development of customized financial products for users’ unique needs. Utilizing oracle-derived insights, DeFi platforms can offer personalized financial solutions and expand accessibility and inclusivity within decentralized finance.

Examples Of How Oracle Solutions Supports DeFi

Traditional finance relies on centralized organizations to verify information and execute transactions. DeFi eliminates this need, but smart contracts require external data to function effectively. Thus, Oracles removes this gap by securely feeding reliable data into smart contracts, enabling automated execution of DeFi applications like: 

  1. Decentralized Lending and Borrowing: Oracles can provide real-time price feeds for crypto assets while allowing DeFi protocols to determine loan collateralization ratios and automate interest rate adjustments. Example: Chainlink provides price oracles for Aave (a leading DeFi lending platform)
  2. Decentralized Exchanges (DEXs): Oracles can deliver accurate price data for various cryptocurrencies while facilitating fair and transparent trading on DEXs. Example: Band Protocol integrates with Uniswap (a popular DEX) to ensure reliable price feeds for trading pairs.
  3. Derivatives and Margin Trading: Oracles can supply market data like index prices and settlement information while enabling the creation of DeFi derivatives and margin trading platforms. Example: The Synthetix protocol uses oracles to track the value of real world assets like stocks and gold, allowing users to trade synthetic assets on the blockchain.

Top 5 DeFi Applications Benefiting From Oracles:

  1. MakerDAO is a leading DeFi lending platform that uses oracles to determine collateralization ratios and automate loan liquidations based on real-time asset prices.
  2. Compound is a DeFi protocol for earning interest on crypto deposits and borrowing assets. For them, oracles ensure accurate interest rate calculations based on market conditions.
  3. Augur is a decentralized prediction market platform where oracles provide data to resolve wagers on real world events.
  4. Aave is a platform in the DeFi space that utilizes Chainlink oracles to supply price data for its lending and borrowing operations.
  5. Gnosis is a platform built on Ethereum that facilitates the establishment of prediction markets. It employs oracles to settle these markets in accordance with actual world results.

How To Implement A Custom Oracle For Smart Contract?

Integration of a custom oracle into your smart contract involves a series of steps. Here’s a comprehensive guide to help you navigate through the process seamlessly:

Step 1: Define Data Requirements:

Begin by clearly defining the type of external data your smart contract requires. Whether it’s real-time market prices, weather updates, or any other specific information, precise identification is key to initiating the process effectively.

Step 2: Trigger Data Request:

Your smart contract serves as the initiator by triggering a data request. This action specifies the exact data needed and sets the process in motion.

Step 3: Engage The Oracle Network:

Broadcasting the data request to a network of oracle nodes is the next crucial step. These nodes act as intermediaries between the blockchain and external data sources and facilitate the retrieval process.

Step 4: Retrieve Data:

Within the oracle network, individual nodes compete to fetch the requested data from external sources. This ensures a dynamic and robust approach to data acquisition.

Step 5: Validate Data:

Upon retrieval, the obtained data undergoes a meticulous validation process. Multiple nodes collaborate to verify the accuracy and consistency of the data, and everything here ensures its reliability.

Step 6: Transform Data:

The validated data is then transformed into a format compatible with the blockchain. This step ensures seamless integration and accessibility within the smart contract environment.

Step 7: Deliver Data To Smart Contract:

Finally, the formatted data is securely delivered back to the smart contract that initiated the request. This completes the cycle and enables the smart contract to utilize the retrieved information for its intended purpose.

Here are some additional details to consider:

  1. Ensuring Determinism: Consistency is important in smart contract execution. All nodes must access the same inputs to generate consistent outcomes, safeguarding the integrity of the process.
  2. Managing External Data Sources: Smart contracts rely on diverse external sources for data. However, variations in data availability and timing may lead to discrepancies. Eliminating these challenges requires careful synchronization and management of external inputs.
  3. Understanding Oracles: Oracles eliminates the gap between the blockchain and real world data. Functioning as specialized smart contracts, they facilitate the seamless integration of external information into blockchain environments.

It’s essential to prioritize the reliability of your smart contract’s execution by ensuring the accuracy and trustworthiness of the oracle providing the data. Consider opting for established oracle solutions that have undergone rigorous testing and are widely trusted within the industry.

– Blockchain Expert, Idea Usher

How To Choose The Right Oracle For Blockchain Project?

When selecting the perfect oracle for your blockchain project, several factors come into play. Here are some suggestions to help you make the right choice:

1. Data Reliability: 

Your dApp relies on accurate and up-to-date information to function properly. Choose an oracle with a proven track record of delivering high-quality, trustworthy data to avoid costly errors or malfunctions within your application.

2. Oracle Type: 

Different oracles specialize in different data sources and functionalities. Identify the kind of data your dApp needs (e.g., market prices, sensor readings) and choose an oracle designed to handle that specific type of information efficiently.

3. Security: 

Since oracles bridge the gap between the blockchain and the external world, security is paramount. Evaluate oracle’s infrastructure for vulnerabilities and choose one with robust security measures in place to protect your dApp from potential attacks.

4. Decentralization: 

A decentralized oracle network distributes data retrieval and validation across multiple nodes, reducing reliance on a single source. This enhances security and overall reliability compared to centralized oracles.

5. Speed: 

Consider the timeliness of data delivery. If your dApp requires real-time information for critical operations, prioritize oracles known for fast and efficient data transmission speeds.

6. Cost: 

Explore the pricing structure of potential oracles. Factor in any fees associated with data retrieval, validations, or token requirements to ensure the cost aligns with your project’s budget.

7. Reputation: 

Research the reputation of oracle providers. Look for established players with a history of successful deployments and positive feedback from the developer community. This helps ensure a reliable and trustworthy partner meets your dApp’s needs.

10 Real-World Use Cases Of Blockchain Oracles With Examples

Here are some real world use cases and examples of blockchain oracles:

1. Decentralized Finance (Defi):

DeFi oracles enable real-time price feeds for secure lending/borrowing in blockchain finance.

  • Challenge: Traditional finance relies on centralized institutions to verify asset values for loans. DeFi removes this need, but smart contracts require real-time price feeds to function.
  • Solution: Oracles like Chainlink securely provide up-to-date market prices for crypto assets to DeFi platforms like Aave. This allows Aave to automatically determine loan collateralization ratios and adjust interest rates while ensuring smooth operation without centralized control.

2. Supply Chain Management:

Supply chain oracles track shipments and sensor data for transparency and automated payments.

  • Challenge: Traditional supply chains lack transparency, and it is difficult to track goods and automate payments. Thus, disputes can arise regarding delivery times or product conditions.
  • Solution: Oracles like Oracle Blockchain Cloud can track the location and sensor readings from shipments. This allows companies like Flexport to monitor the movement of goods in real time, automate payments upon delivery based on predefined conditions, and resolve disputes with verifiable data.

3. Insurance:

Insurance oracles verify real world events to trigger automated claim payouts.

  • Challenge: Traditional insurance claim processing can be slow and require manual verification of events like flight delays or weather damage.
  • Solution: Oracles like Flightchain can access and verify real world data feeds (e.g., flight status from airlines or weather data from meteorological services). This allows for automated claim payouts based on predetermined criteria while streamlining the process and reducing costs.

4. Predictive Maintenance:

Predictive maintenance oracles analyze sensor data to predict equipment failures and schedule repairs.

  • Challenge: Businesses often rely on reactive maintenance to fix equipment failures when they occur. Sometimes, it leads to downtime and potential safety hazards.
  • Solution: Oracles like those used by GE Aviation can analyze sensor data from machines (e.g., vibration, temperature) and predict potential equipment failures. This enables proactive maintenance, preventing downtime and improving overall equipment lifespan.

5. Identity Management:

Identity management oracles verify user credentials from trusted institutions for secure dApp access.

  • Challenge: Centralized identity management systems raise privacy concerns and can be vulnerable to data breaches.
  • Solution: Oracles like Civic can verify user credentials issued by trusted institutions (e.g., universities or governments) without compromising user data. This allows secure access to dApps without the need for centralized logins and passwords.

6. Internet Of Things (IoT) Integration:

IoT oracles connect smart devices to blockchains for secure data exchange and automated actions.

  • Challenge: Integrating vast amounts of data from IoT devices into blockchains can be complex and insecure.
  • Solution: Oracles like the Helium Network can connect devices and blockchains together. They securely translate sensor data into a format usable by smart contracts while enabling automated actions based on real world conditions (e.g., adjusting energy consumption based on temperature readings).

7. Escrow Services:

Escrow oracles ensure contract fulfillment before releasing escrowed funds in trustless transactions.

  • Challenge: Traditional escrow services involve trusted third parties who can be expensive and introduce a single point of failure.
  • Solution: Oracles like those used by Augur can be integrated into escrow smart contracts. These oracles verify if both parties fulfill their contractual obligations before releasing escrowed funds while ensuring a secure and trustless transaction process.

8. Gaming And Gambling:

Gaming oracles provide provably fair random numbers for transparent and secure outcomes.

  • Challenge: Traditional online games and gambling platforms rely on centralized servers. It raises concerns about fairness and manipulation.
  • Solution: Oracles like Chainlink can provide provably fair random numbers for games like Chainmonsters, a play-to-earn blockchain game. This makes sure that game outcomes are truly random and verifiable, fostering trust and transparency among players.

9. Voting Systems:

Voting oracles verify voter identities and record tamper-proof votes for secure and transparent elections.

  • Challenge: Traditional voting systems can be vulnerable to fraud and errors, hindering trust in the electoral process.
  • Solution: Oracles like those explored by Voatz (blockchain voting platform) can be used to verify voter identities and record votes on the blockchain. This can improve the transparency of elections while reducing the risk of fraud and increasing public confidence.

10. Data Monetization:

Data monetization oracles enable secure and controlled data sharing between businesses.

  • Challenge: Businesses often struggle to securely share valuable data sets due to privacy concerns and lack of trust.
  • Solution: Oracles like those used by Ocean Protocol can create secure and controlled data marketplaces. Businesses can utilize oracles to verify data quality and ownership before purchasing specific data sets. It will allow them to monetize valuable information while protecting privacy.

Conclusion

Blockchain oracles act as the missing link and securely connect the on-chain and off-chain data. They enable automated workflows and innovative applications within the blockchain ecosystem. Thus, choosing the right oracle is crucial, and it requires a focus on data reliability, security, and cost. Oracles’ impact extends beyond finance, driving efficiency in supply chains, automating insurance payouts, and even securing voting systems. This versatility positions them as a cornerstone of trust and efficiency in the digital age. As blockchain matures, oracles will be developed, and together, they will shape a future where smart contracts seamlessly interact with the real world, paving the way for groundbreaking advancements.

How Can Idea Usher Help?

At Idea Usher, we specialize in developing blockchain-related projects to propel businesses forward. With our expertise, we can assist you in utilizing the power of blockchain technology to drive growth and innovation within your organization. So, if you’re looking to streamline processes, enhance security, or explore new revenue streams, our team of experts can deliver customized solutions for your specific needs. From conceptualization to implementation, Idea Usher offers comprehensive support at every stage of your blockchain journey. Contact us today and explore the full potential of blockchain to drive your business to new heights.

Hire ex-FANG developers, with combined 50000+ coding hours experience

Hire Ex - developers, with combined 50000+ coding hours experience

100% Developer Skill Guarantee; Or Your Money Back.

FAQ

How does blockchain work in Oracle?

Oracle itself doesn’t have its own blockchain, but it offers various services related to blockchain technology. Oracles act as a bridge between blockchains (on-chain) and the real world (off-chain) by securely retrieving external data and feeding it into smart contracts. This unlocks functionalities like automated workflows and DeFi applications.

What is the best blockchain oracle?

There’s no single “best” oracle, as the ideal choice depends on your project’s needs. Consider factors like data type required, level of decentralization, and cost structure. Popular options include Chainlink, Band Protocol, and The Graph.

What are blockchain tables in Oracle?

Oracle Blockchain Platform (not directly related to blockchain oracles) offers features like Distributed Table Digest, which uses cryptography to ensure data integrity in blockchain tables. This allows secure data sharing and recordkeeping across participants.

How to create a blockchain oracle?

Creating a custom oracle requires in-depth blockchain development expertise. It involves building a system that can securely connect to external data sources, retrieve information, and validate it before feeding it into a blockchain network. It’s generally recommended to use existing and well-established oracle solutions for most projects.

Share this article
Contact Us
HR contact details
Follow us on
Idea Usher: Ushering the Innovation post

Idea Usher is a pioneering IT company with a definite set of services and solutions. We aim at providing impeccable services to our clients and establishing a reliable relationship.

Our Partners
Contact Us
Follow us on
Idea Usher: Ushering the Innovation post

Idea Usher is a pioneering IT company with a definite set of services and solutions. We aim at providing impeccable services to our clients and establishing a reliable relationship.

Our Partners
Newsletter
© Idea Usher. 2024 All rights reserved.