Patent Publication Number: US-2023134627-A1

Title: Two-dimensional barcodes for greater storage capacity

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is a continuation-in-part of U.S. Non-Provisional patent application Ser. No. 17/517,837 filed on Nov. 3, 2021, which is incorporated by reference herein. 
    
    
     BACKGROUND 
     The present disclosure relates to the use of two-dimensional barcodes to transfer information. 
     BACKGROUND OF THE RELATED ART 
     A barcode is a machine-readable optical label that contains information. For example, the information may be related to an item to which the barcode is attached. A first generation of barcodes, referred to as linear barcodes or one-dimensional barcodes, represented data by varying the widths and spacing of parallel lines. Such linear barcodes may be read quickly using a special optical scanner referred to as a barcode reader. A second generation of barcodes includes a Quick Response (QR) code, which is a type of matrix barcode or two-dimensional barcode. Each QR code includes black dots or squares arranged in a square grid on a white background. 
     Data is encoded into the QR code by the patterns of black and white areas in both the horizontal and vertical components of the image. Furthermore, a two-dimensional barcode, such as a QR code, can storage more data than a one-dimensional barcode. A QR code may use any of four standard encoding modes, including numeric, alphanumeric, byte/binary and kanji. The amount of data that can be stored in a QR code symbol varies among the encoding modes, as well as the version and level of error correction that are used. For example, a version 1 QR code has a 21×21 matrix and a version 2 QR code has a 25×25 matrix, whereas a version 40 QR code has a 177×177 matrix. 
     A QR Code is quickly readable using an imaging device such as a smartphone camera. A programmed processor analyzes the digital image obtain by the image sensor or camera. The processor may locate three distinctive squares at the corners of the QR code image and may use a smaller square (or multiple squares) near the fourth corner to normalize the image for size, orientation, and angle of viewing. The small dots throughout the QR code are then converted to binary numbers and validated with an error-correcting algorithm. 
     Both linear and matrix barcodes have found a wide variety of uses, including product tracking, item identification, document management, marketing, and quick entry of a uniform resource locator (URL) data. In fact, some matrix barcodes now include a frame and call-to-action designation or icon to convey to a person what action will be taken upon scanning of the barcode. 
     BRIEF SUMMARY 
     Some embodiments provide a method comprising a first computing device encoding input data into a sequence of two-dimensional barcodes, the first computing device displaying an image of each of the two-dimensional barcodes on a display screen in sequential order, a second computing device using an imaging device directed at the display screen of the first computing device to capture each of the displayed images to obtain the sequence of two-dimensional barcodes, and the second computing device decoding each of the two-dimensional barcodes to obtain the input data. 
     Some embodiments provide a computer program product comprising a non-volatile computer readable medium and non-transitory program instructions embodied therein, the program instructions being configured to be executable by a processor to cause the processor to perform various operations. The operations may include obtaining first data encoded to form a first array of two-dimensional barcodes, wherein each two-dimensional barcode in the first array includes a grid of dots representing binary values, wherein each dot has a location identified by a unique combination of a column and a row within the grid, and wherein each two-dimensional barcode is identified by a unique ordinal position in the first array. The operations may further include obtaining second data encoded to form a second array of two-dimensional barcodes, wherein each two-dimensional barcode in the second array includes a grid of dots representing binary values, wherein each dot has a location identified by a unique combination of a column and a row within the grid, and wherein each two-dimensional barcode is identified by a unique ordinal position in the second array. Still further, the operations may include performing a forward mashup algorithm on the first array and second array to form a third array of two-dimensional barcodes, wherein, for each combination of column, row and ordinal position, the binary value in the first array and the binary value in the second array are input to a first Boolean algorithm to produce a binary value for the same combination of column, row and ordinal position in the third array. The operations may also include publishing the third array of two-dimensional barcodes, wherein the second array of two-dimensional barcodes are necessary to be regenerate the first array of two-dimensional barcodes so that the first data can be decoded. 
     Some embodiments provide an apparatus comprising at least one non-volatile storage device storing program instructions and at least one processor configured to process the program instructions, wherein the program instructions are configured to, when processed by the at least one processor, cause the apparatus to perform various operations. The operations may include accessing input data, dividing the input data into a sequence of data segments, where the sequence includes a specific number of data segments and an initial data segment, receiving a personal value from a second device, and using an iterated mathematical function that uses the personal value and the sequence of data segments to generate a sequence of parameter values. The operations may further include transmitting the iterated mathematical function and the initial data segment to the second device through a first communication channel and transmitting the sequence of parameter values to the second device through a second communication channel that is independent of the first communication channel. 
    
    
     
       BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS 
         FIGS.  1 A-B  are diagrams of a prior art QR code (two-dimensional barcode) and a smartphone scanning and decoding the QR code to display a menu. 
         FIG.  2    is a conceptual diagram illustrating how data can be transformed between an information layer, an encoded data layer and an optical layer, and how encoded data in the encoded data layer may be processed using a forward mashup algorithm. 
         FIGS.  3 A-B  are conceptual diagrams illustrating how data can be transformed between an information layer, an encoded data layer and an optical layer, and how encoded data in the encoded data layer may be processed using a reverse mashup algorithm. 
         FIGS.  4 A-B  are diagrams showing a specific example of data being transformed between an information layer, an encoded data layer and an optical layer supporting use of a forward mashup algorithm in  FIG.  4 A  and supporting use of a reverse mashup algorithm in  FIG.  4 B . 
         FIG.  5    is a diagram of a system in which a first party computing device, a second party computing device and a service provider web server or cloud are in communication to perform a process according to some embodiments. 
         FIG.  6    is a schematic diagram of a computing device, such as a smartphone that may be used as the first party computing device and/or the second party computing device. 
         FIG.  7    is a diagram of a computing device that may be representative of the web application server as well as the first party and/or second party computing device. 
         FIG.  8    is a process diagram illustrating interaction between a first party (P1), second party (P2) and service provider (SP) according to a generic example. 
         FIG.  9    is a process diagram illustrating interaction between an employee (P1), employer (P2) and service provider (SP) according to a process for generating and using an employee security badge. 
         FIG.  10    is a process diagram illustrating interaction between a ticketed passenger (P1), airline (P2) and service provider (SP) according to a process for providing the ticketed passenger with directions and/or map to the terminal and/or gate associated with their flight. 
         FIG.  11    is a process diagram illustrating the use of a company logo to secure a discount. 
         FIG.  12    is a process diagram illustrating a credit card transaction. 
         FIG.  13 A  is a diagram of a first device transferring data to a second device using a dynamic two-dimensional barcode may be used to store and transfer a greater amount of data than a static two-dimensional barcode. 
         FIG.  13 B  is a diagram of a first device using an iterated function to generate an array of two-dimensional barcodes that are then communicated as a dynamic two-dimensional barcode to a second device. 
         FIG.  14 A  is a diagram illustrating a mashup of a first array of two-dimensional barcodes and a second array of two-dimensional barcodes to produce a third array of two-dimensional barcodes. 
         FIG.  14 B  is a diagram illustrating a mashup of a first array of two-dimensional barcodes and a single two-dimensional barcode to produce a third array of two-dimensional barcodes. 
         FIG.  15 A  is a flowchart of operations involved in an iterated bit-wise algorithm for generating an array of two-dimensional barcodes from a first (seed) two-dimensional barcode and a second constant two-dimensional barcode to produce an array of two-dimensional barcodes. 
         FIG.  15 B  is an illustration of the calculations and output generated by the operations of  FIG.  15 A through  6    iterations of the bit-wise algorithm. 
         FIG.  16 A  is a diagram of a first device transferring data to a second device using an array of two-dimensional barcodes to facilitate a program download. 
         FIG.  16 B  is a diagram of a first device transferring data to a second device using an array of two-dimensional barcodes generated with an iterated function to facilitate a program download. 
         FIG.  17 A  is a diagram of a first device transferring data to a second device using an array of two-dimensional barcodes to convey a video file. 
         FIG.  17 B  is a diagram of a first device transferring data to a second using an array of two-dimensional barcodes generated with an iterated function to convey a video file. 
         FIG.  18    is a diagram of a system for generating and conveying an array of paired two-dimensional barcodes generated with an iterated function to convey information. 
     
    
    
     DETAILED DESCRIPTION 
     Some embodiments provide a computer program product comprising a non-volatile computer readable medium and non-transitory program instructions embodied therein, the program instructions being configured to be executable by a processor to cause the processor to perform various operations. The operations may include obtaining first encoded data that encodes information of a first party, obtaining second encoded data that encodes information of a second party, performing a forward mashup algorithm on the first encoded data and second encoded data to form a third data set, and providing the third data set to the first party as a mashup two-dimensional barcode. 
     The first and second encoded data may be encoded in various manners and do not need to be encoded in the same manner. For example, the first encoded data may be encoded in a first manner or using a first encoding algorithm, and the second encoded data may be encoded in a second manner or using a second encoding algorithm. However, encoded data requires some extent of repeatable or rules-based formatting or organization to the data. Furthermore, encoded data must be capable of being decoded to gain access to the data that was encoded. For example, raw information, such as a person&#39;s name or a website&#39;s uniform resource locator (URL), may be encoded according to a two-dimensional barcode standard or specification. In fact, there are several different encoding modes for two-dimensional barcodes. In one non-limiting example, encoded data may include encoding information in addition to the raw information or data. The encoding information may specify, without requirement or limitation, an encoding mode, an error correction level, mask pattern, message length, bit order and/or message (raw information) placement. Furthermore, the data or message (raw information) portion of the encoded data may itself be encoded, such as using the American Standard Code for information Interchange (ASCII) character encoding standard to encode text. As used herein, the terms “data”, “message” and/or “raw information” refer to useful information that is to be transferred and received. The term “encoding information” refers to how to the “data” is to be encoded and formatted into the two-dimensional barcode. After the “data” has been encoded into a two-dimensional barcode according to the “encoding information”, the two-dimensional barcode will include both the “encoding information” and the “encoded data.” 
     The first encoded data encodes information of a first party and the second encoded data encodes information of a second party. The type and content of the information that each party provides for encoding may vary widely and does not affect the utility of the embodiments. For example, the raw information may include fixed content, such as alphanumeric text, an image, audio and/or video, or may include dynamic content, such as a bank account information, real time data, global position system (GPS) data, and/or stock numbers. Optionally, the raw information may be truncated or compressed so that the encoded data obtained by encoding the raw information does not exceed the data storage capacity of the two-dimensional barcode datatype, version and error correction that is being used. On the other hand, the raw information may be expanded or repeated so that the two-dimensional barcode does not require filler or long strings of repeating digits or repeating patterns of digits. However, embodiments may be used to secure access to the information of one or more party, so such information may often be private information. Any such private information may be personal information that is not generally available to the public or may be secret information. For example, information of the first party may include a person&#39;s name, identification number, address, description and/or an image of the person&#39;s face. Such information may not be generally publicly available but is not considered to be secret since many other individuals may know and recognize the person. By contrast, a person&#39;s password to an online account or application program may in fact be secret. Private and/or secret information may be encoded according to various embodiments. 
     In some embodiments, the raw information may be encoded using one or more encoding standards or protocols, such a character encoding standard, an image file format, a video coding format, and/or an audio coding format. Some of these standards and formats may be used with or without compression. One suitable character encoding standard is the American Standard Code for Information Interchange (ASCII) that represents text in computers and telecommunications equipment. Similarly, a suitable image coding format may be selected from Joint Photographic Experts Group (JPEG) format, Tagged Image File Format (TIFF), Graphics Interchange Format (GIF) and other formats. Suitable audio coding formats may be selected from Waveform Audio File Format (WAV) and Moving Picture Experts Group (MPEG). Furthermore, the encoded raw information may be included in a data portion of a QR code that further includes format information as would be used in the generation of a QR code. For example, the format information may include encoding mode indication, message length, error correction level, mask pattern, and the like. 
     In some embodiments, the first and second parties may each be independently selected from an individual person, a group or association of people, an entity such as a corporation or governmental body, a facility, and the like. In some options, one party may be an individual and the other party may be an entity. In any case, the raw information or source information of each party that is encoded may vary in type and/or content. The raw information may be a name, address, logo, description, and the like. 
     In some embodiments, the forward mashup algorithm is an additive encryption process that uses both the first encoded data and the second encoded data to produce the third data set. Any one or all of the first encoded data, second encoded data and third data set may be represented by a two-dimensional barcode, such as a QR code. A two-dimensional barcode produced by the forward mashup algorithm may be referred to as a “mashup two-dimensional barcode” or simply “mashup barcode”, such as a “mashup QR code.” In one non-limiting example, the mashup algorithm may involve one or more Boolean operation applied to the first and second encoded data. The mashup two-dimensional barcode is itself inoperative in the sense that the mashup two-dimensional barcode does not independently represent useful information. Rather, the value and importance of the mashup two-dimensional barcode is that it serves as a key which, when combined with one of the operand two-dimensional barcodes that was used by the forward mashup algorithm to form the mashup barcode, may be used by a reverse mashup algorithm to yield the other operand barcode. Once the other operand barcode, or its underlying encoded data, is obtained by the reverse mashup algorithm, the underlying information may be decoded. In some embodiments, the other operand barcode may be decoded to yield private information. While entire two-dimensional barcodes may be input to a mashup algorithm, it is preferable to limit the mashup algorithm to the encoded data (i.e., excluding the encoding information). Alternatively, a mashup algorithm could be performed on the encoded data plus some limited portion of the encoding information, such as error correction bits, while excluding some other portion of the encoding information, such as the timing zones, displacement or alignment squares, dark module, and version information. 
     In some embodiments, one of the barcodes that is input as an operand to the forward mashup algorithm may be publicly available. A public barcode may or may not include data encoded from information about one of the parties to a relationship. Accordingly, scanning a public barcode may or may not yield useful data such as a party&#39;s identity, contact information, location, website, etc. Optionally, a public barcode may be associated with a company or other entity. A barcode may be made “public” by posting the barcode on a public network such as the Internet or by posting a printed copy of the barcode in any number of public locations. In one specific and non-limiting example, an airport or airline may publicly post their barcode (optical images) as printed signs or images displayed on a display screen. In one option, a printed sign may be secured to a wall or counter. 
     In some embodiments, a mashup barcode may be securely used in public without risking disclosure of the underlying information. For example, a mashup QR code may form an optical image, such as being physically displayed on an object (i.e., printed) or electronically output on a display screen. For example, the mashup barcode may be printed or otherwise appear on an employee identification badge, a ticket for transportation or special event, a credit or debit card, advertisements, a communication network access token or display screen, and the like. 
     In some embodiments, an image of a two-dimensional barcode may be read, captured or otherwise input to a computing device using an imaging device, such as a digital camera or digital scanner. The resulting digital data file obtained in this manner may be stored in various formats, such as a mere digital photograph or as a data structure consistent with a particular QR encoding mode and/or version. Similarly, an image of a two-dimensional barcode, including a first party barcode, second party barcode or mashup barcode, may be printed, displayed, or otherwise output using various output devices, such as a printer, display screen, or image projector. 
     In some embodiments, the forward and reverse mashup algorithms may be performed on the encoded data that represents the optical image of the two-dimensional barcode, rather than attempting to mashup the actual optical images of the barcode. Accordingly, where one of the two-dimensional barcodes is provided in the form of an optical image that is visible to a human eye and scanned by a camera or other imaging device, the optical image of the barcode may be scanned to obtain the associated encoded data prior to performing the forward or reverse mashup algorithm. Furthermore, encoded data that is output by the forward or reverse mashup algorithms may be output as an optical image for some applications, whereas encoded data that is output by the forward or reverse mashup algorithms may be directly used in a decoding process to obtain the underlying raw information in some other applications. 
     Some embodiments may be described as involving various individuals and/or entities, such as a first party, a second party and a service provider. However, embodiments may also be described as including a system that includes various computing devices, such as a first party computing device, a second party computing device and a service provider computing device. Furthermore, embodiments may be described as including various application programs, such as a mobile application, desktop application and/or web application. It should be recognized that the application programs may be executed on the various computing devices, and that the various computing device may be operated and/or owned by the various individuals and/or entities. Accordingly, discussions herein should be considered in context and understood that any reference to an application and/or computing device as belong to a particular individual and/or entity is merely an example of who might use the application and/or computing device, and that any reference to an individual and/or entity may involve the use of a computing device and/or an application unless the context of the discussion clear refers to the individual person and/or entity. In one example, the processor that executes the program instructions is included in a computing device, such as a web application server or cloud environment. Alternatively, the processor that executes the program instructions may be included in a computing device, such as a smartphone, laptop computer, or desktop computer. Furthermore, some embodiments will include multiple computing devices that each execute certain program instructions to perform operations on behalf of one party or another, such as the first party, the second party, the service provider, or others. Some embodiments may involve additional parties, and their associated computing devices and applications, even if the first and second parties are the only parties associated with a two-dimensional barcode. 
     In some embodiments, the operations may further include receiving, subsequent to providing the third data set to the first party as the mashup two-dimensional barcode, the third data set from a computing device operated by the second party. While the third data set and/or the mashup two-dimensional barcode is initially provided to the first party, the first party may provide the third data set and/or the mashup two-dimensional barcode to the second party as a step in an interactive process, such as the first party attempting to gain access to an employer&#39;s (second party) facility. As a result, the service provider computing system may be receiving the third data set from the second party. The operations may then further include performing a reverse mashup algorithm on the third data set and the second encoded data to determine the first encoded data, decoding the first encoded data to produce private information of the first party, and outputting the private information of the first party to the computing device of the second party. Continuing the previous example, the employer computing system may determine the first encoded data, produce the private information of the first party such as a name, image or other identifier, and then output that private information on a display such that security personnel can verify the identity of the first party. 
     In some embodiments, the forward mashup algorithm is a first Boolean operation and the reverse mashup algorithm is a second Boolean operation. Optionally, the forward and reverse mashup algorithms may each involve one or more Boolean algebraic function or one or more truth table. For example, the forward mashup algorithm may be a Boolean addition algorithm. Such a Boolean addition algorithm may use Boolean operators on first and second strings of binary digits using basic functions, such as string indexing and slicing, to compare two inputs and give a Boolean output. For example, the Boolean addition algorithm may operate in a step-wise, bit-by-bit sequence, that applies the Boolean operator to bits read from the same position (i.e., row and column) in the operand two-dimensional barcodes. The digital output of the Boolean operation may be represented as white and black squares or dots (i.e., perhaps white=0 and black=1, or vice versa as predetermined) that will form the mashup two-dimensional barcode. The order or type of Boolean operation used in the forward mashup algorithm may include any single or combination of Boolean operators or logic so long as a reverse Boolean operation can be provided for use in the reverse mashup algorithm to definitively obtain the information underlying one or both of the operand two-dimensional barcodes. The type of operators may be AND, XOR, OR, and NOT, without limitation, but one or more selections and combinations of these operators can create different Boolean operations for use as the forward and/or reverse mashup algorithms. 
     In one specific embodiment, the operations may further include providing an image of the mashup two-dimensional barcode by printing the mashup two-dimensional barcode on an identification card or badge to be given to the first party. Accordingly, the first party may wear or carry the identification card with them, where the encoded data within or underlying the mashup barcode can be decoded to obtain the first party&#39;s private information if processed in combination with the required second party encoded data by the reverse mashup algorithm (i.e., the reverse of the forward mashup algorithm that was used to generate the mashup barcode). Still, it should be appreciated that the first party&#39;s private information is not actually displayed on the identification card and, therefore, the private information cannot be obtained by simply viewing the identification card. Rather, the operations may further include receiving an image of the mashup two-dimensional barcode that is printed on the identification card or badge from the computing device of the second party and decoding the third data set from the mashup two-dimensional barcode. In one option, the image of the mashup two-dimensional barcode that is printed on the identification card or badge is received from the computing device of the second party. For example, the processor that is performing the operations may be included in a computing device of the second party, wherein the computing device of the second party receives the image of the mashup two-dimensional barcode from a digital camera directly attached to the computing device of the second party, and wherein the private information of the first party is then output to a display screen directly attached to the computing device of the second party. 
     In some embodiments, the security of the first party&#39;s private information is increased because the private information does not need to be stored on any party&#39;s computing device after the mashup barcode has been generated. Specifically, the operations may further include confirming that the computing device of the first party has received the mashup two-dimensional barcode and deleting any record of the private information of the first party and the first encoded data from memory or data storage attached to the processor. In other words, embodiments allow the service provider computing device to provide a forward mashup algorithm service and a reverse mashup algorithm service without the responsibility and/or liability of storing private information belonging to other parties. Of course, nothing about the embodiments prohibits the storage of the private information on any of the computing devices. For example, if the forward and/or reverse mashup algorithms are performed on the first party&#39;s computing device, then perhaps the first party computing device will still store the private information. However, in the later situation, at the least the first party maintains control over their own private information and can protect it in any manner they determine is appropriate. However, a third party, such as the service provider, that stores the first party&#39;s private information after generating the mashup barcode or after decoding the private information may be subject to liability for breaching a duty of care to protect that information if it is stolen. 
     In some embodiments, the forward mashup algorithm performs a bit-wise sequential Boolean operation on the first encoded data and the second encoded data. Optionally, the first encoded data may include a first plurality of bits, wherein each bit of the first plurality of bits is associated with a defined position within a first two-dimensional barcode to be formed from the first encoded data. Similarly, the second encoded data may include a second plurality of data bits, wherein each bit of the second plurality is associated with a defined position within a second two-dimensional barcode to be formed from the second encoded data. The bit-wise sequential Boolean operation may then include, for 14 each of the defined positions within the first and second two-dimensional barcodes, a Boolean operation performed on the bit of the first encoded data that is associated with the defined position and the bit of the second encoded data that is associated with the defined position. One non-limiting example of the Boolean operation performed by the forward mashup algorithm may be a logical AND operation. Furthermore, for each of the plurality of bits in the first encoded data, the value of the bit may determine whether a black or white area is provided at the defined position associated with the bit. Black and white areas are the most practical and yield a good contrast, but other colors may be used as well. In one option, the first and second two-dimensional barcodes may include defined positions that are arranged in columns and rows. Still further, the operations may further include identifying one or more orientation feature within the image of the first two-dimensional barcode that indicates an orientation of the first two-dimensional barcode and identifying one or more orientation feature within the image of the second two-dimensional barcode that indicates an orientation of the second two-dimensional barcode. The defined positions within the first and second two-dimensional barcodes may then be identified relative to the one or more orientation features. 
     Some embodiments provide an apparatus comprising at least one non-volatile storage device storing program instructions and at least one processor configured to process the program instructions, wherein the program instructions are configured to, when processed by the at least one processor, cause the apparatus to perform various operations. The operations may include obtaining first encoded data that encodes information of a first party, obtaining second encoded data that encodes information of a second party, performing a forward mashup algorithm on the first encoded data and second encoded data to form a third data set, and providing the third data set to the first party as a mashup two-dimensional barcode. 
     In some embodiments, the application programs, or simply “applications,” that are run on any one of the computing devices may include one or more unique functionalities or may be entirely the same full-featured application, perhaps subject to customization using various settings to cause the application to perform as necessary for a given party and embodiment. Similarly, the computing devices may each include one or more unique hardware components or may have entirely the same architecture and/or component configurations. Furthermore, each party may form an account with the service provider, such that use of the software application to obtain the services of the service provider may require the party to authentication themselves to the application or service provider, such as by entering an account login and password. 
     In some embodiments, the forward mashup algorithm may be a private algorithm, such as a forward mashup algorithm that is secured and performed by only one entity, such as a remote service provider or one of the first or second parties. Furthermore, a service provider may offer multiple paired forward and reverse algorithms, such that one or the parties may select one of the available forward and reverse algorithm pairs. Accordingly, the variability of the selected algorithm pair may further complicate any third-party attempt to obtain the private information from the mashup barcode. 
     In some embodiments, the functions and communications attributed to the service provider may be performed by one of the first and second parties. In one specific example, the functions and communications of the service provider and the functions and communications of the second party may be combined and performed by a single entity using a computing device or system under that entity&#39;s control. Accordingly, rather than using a service provider, the second party may perform the encoding/decoding functions for themselves, and the second party may control and perform the forward and reverse mashup algorithms for themselves. In embodiments that combine the functionality of the service provide with the second party, the mashup QR codes are still not meaningful to a third-party observer without access to the reverse mashup algorithm and the second party QR code. 
     In some embodiments, the mashup two-dimensional barcode may be provided along with an image, such as an artistic embellishment or a brand logo. For example, such image may be placed in an unused area of the barcode or may be implemented in a manner that error correction code will still correctly read the barcode despite the presence of the image. In other words, the image may be formed by intentionally introducing errors into the two-dimensional barcode with knowledge that the error correction can remove the errors. 
     In some embodiments, a plurality of first parties may provide their individual raw information to be encoded and processed by a forward mashup algorithm along with encoded data representing a particular second party to form a mashup barcode that is unique to the particular first party. Accordingly, each individual first party may subsequently present their unique mashup barcode to the second party, or otherwise in association with the second party barcode, to enable access to the individual first party&#39;s raw information. 
     In some embodiments, the system or computer program product may be enabled to perform both the “reverse” mashup algorithm and the “forward” mashup algorithm and may determine which algorithm is necessary for given situation. In one example, either the first party or the second party may provide an indication/instruction to the service provider. Such indication or instructions may be input through a user interface on a computing device operated by the first party or second party, respectively. The same user interface may be used to collect and/or submit one or more of the two-dimensional barcodes and/or encoded data for processing with the indicated forward or reverse mashup algorithm. For example, the distinction will be made through either party&#39;s ‘request’ to start the process, such as by pressing a consent button displayed after the party creates their account or attempts to read the mashup barcode which will direct the process in the right direction. Alternatively, the first party and/or the second party may provide input via their user interface to indicate whether to (a) generate a new mashup barcode or (b) decode an existing mashup barcode. In a further option, a two-dimensional barcode or encoded data may include a dedicated “mashup bit” that identifies whether a particular barcode or encoded data is a previously generated mashup barcode (i.e., mashup bit=1) or a barcode/data formed by encoding raw information (i.e., mashup bit=0). If a two-dimensional barcode is scanned that includes a mashup bit=1, then the reverse mashup algorithm should be used. If neither of the two-dimensional barcodes include a mashup bit=1, then the forward mashup algorithm should be used. 
     In some embodiments, the forward and/or reverse mashup algorithms may use a subset of the entire two-dimensional barcode, such as only that portion of the two-dimension barcode that represents the encoded data. For example, the orientation squares of a two-dimensional barcode may be used for their primary purpose of defining an orientation of the barcode, but then the mashup algorithms may ignore the orientation squares and/or other selected portions of the barcode. In an embodiment in which the mashup encoded data will not be physically generated in an optical layer, the mashup encoded data may completely exclude any encoding of the orientation squares. In a separate option, the forward and/or reverse mashup algorithms may ignore one or more areas of the two-dimensional barcode, or the associated fields of the encoded data, and simply process the remaining data. The technical benefit of using only a subset of the entire two-dimensional barcode in the forward and/or reverse mashup algorithms is that unproductive or wasteful processing may be reduced or avoided. 
     The foregoing computer program products may further include program instructions for implementing or initiating any one or more aspects of the methods described herein. Furthermore, the computer program product may be distributed among multiple computing devices of the same or different parties in order to carry out the methods and/or to implement the operations within a system including the computing devices of multiple parties. Similarly, the computing devices individually or collectively may include hardware and/or software components suitable to perform the program instructions of any of the computer program products or any one or more aspect of the methods described herein. Embodiments may also include methods of performing any one or more operations of the computer program products or the computing devices. 
       FIG.  1 A  is a diagram of a prior art two-dimensional barcode  10  in the form of a Quick Response (QR) code. The barcode  10  includes a two-dimensional matrix of square black dots  12  arranged in rows and columns on a white background. Areas where multiple consecutive black dots are displayed may appear as a thick line or area, but such areas are read as individual black dots. The barcode  10  further includes orientation squares, including large square features  14  in three corners, to enable a reader to identify a proper orientation of the barcode. The barcode  10  also include a normalization square  16  that may assist in determining an image size or angle of view. 
       FIG.  1 B  is a diagram of a smartphone  20  scanning and decoding the barcode  10  to display a menu. The smartphone  20  includes a forward-facing camera (not shown) that is directed at the optical image of the two-dimensional barcode  10  and facilitates capturing of the barcode  10 . The two-dimensional barcode  10  may then be analyzed, either by the smartphone  20  or a remote barcode reader service, to identify information that has been encoded and displayed as the two-dimensional barcode  10 . In the illustrated example, the barcode  10  may contain a URL that directs a web browser application running on the smartphone  20  to a particular webpage for a restaurant menu  18  that is then displayed on a screen  22  of the smartphone  20 . 
       FIG.  2    is a conceptual diagram illustrating how data can be transformed between an information layer  30 , an encoded data layer  40  and an optical layer  50 , and how encoded data in the encoded data layer  40  may be processed using a forward mashup algorithm  41 . The information layer  30  refers to raw information or source information that is directly understandable on its own. For example, first party information (“Info. 1”)  32  may be a first individual person&#39;s name, address, identifier, image or other desired or useful information, such as a selected password. Similarly, second party information (“Info. 2”)  34  may be a business&#39; name, address, identifier, image or other desired or useful information, such as a selected password. An encoding function of an encoder/decoder  36 ,  38  is used to convert the raw information  32 ,  34  into encoded data  42 ,  44 , respectively. Still further, a printer or display device  46 ,  48  may be used to form an optical image of the two-dimensional barcodes (“QR Code 1” and “QR Code 2”)  52 ,  54 , respectively. During some processes or embodiments, the optical images  52 ,  54  in the optical layer may be imaged by a camera or scanner  47 ,  49  to obtain or capture the associated or underlying encoded data. Note that vertical upward arrows illustrate that raw information in the information layer  30  may be encoded to form encoded data in the encoded layer  40 , and encoded data in the encoded layer  40  may be printed or displayed to produce the QR code in the optical layer  50 . Conversely, the vertical downward arrows illustrate that the QR code in the optical layer  50  may be imaged to obtain encoded data in the encoded layer  40 , and encoded data in the encoded layer  40  may be decoded to obtain the raw information in the information layer  30 . 
     A mashup algorithm, such as a Boolean logical operation, is represented by the arrow  41 . The mashup algorithm  41  is able to process the two sets of encoded data  42 ,  44  and form a third data set of encoded data  45 . In some embodiments, each encoded data set  42 ,  44  includes a string or sequence of binary digits (i.e., each digit has a value of either 0 or 1) and the mashup algorithm processes the binary digits in a bit-wise (bit-by-bit) manner, perhaps from the most significant bit (MSB) to least significant bit (LSB) or vice versa, using one bit from the first encoded data set  42  and one bit from the second encoded data set  44  into the Boolean operation to output one bit in the third encoded data set  45 . Once the third encoded data set  45  is formed, it may optionally be output via the printer or display  51  to form the image of the QR code  55 . In a later process, the same QR code  55  may be imaged via the camera or scanner  53  to obtain the third encoded data set  45 . Because the third encoded data set  45  is a mashup of the first and second encoded data sets  42 ,  44 , there is no raw information underlying the third encoded data set  45  and a hacker or third party is unable to extract raw information from the third encoded data set  45 . Rather, the value in the third encoded data set  45  is that it can be used in a further process to yield either the first party information  32  using the second party encoded data  44  or to yield the second party information  34  using the first party encoded data  42 . These later processes are described below in reference to  FIGS.  3 A-B . 
       FIGS.  3 A-B  are conceptual diagrams illustrating how data can be transformed between the information layer  30 , the encoded data layer  40  and the optical layer  50 , and how encoded data in the encoded data layer  40  may be processed using a reverse mashup algorithm  43 . In a simple example, the forward mashup algorithm  41  and the reverse mashup algorithm  43  are both a Boolean logical AND operation. However, other algorithms and operations may also be used. The same reference numbers are used in  FIGS.  3 A-B  as in  FIG.  2   . 
     In  FIG.  3 A , the third encoded data  45  and the second encoded data  44  are processed by the reverse mashup algorithm  43  to yield the first encoded data  42 . Depending upon the embodiment or implementation, the first encoded data  42  may be subsequently decoded to obtain the first information  32 . Furthermore, either or both of the third encoded data  45  and the second encoded data  44  may be obtained by imaging the QR code 3 ( 55 ) or QR code 2 ( 54 ), respectively. Alternatively, either or both of the third encoded data  45  and the second encoded data  44  may be stored in a computer memory and merely submitted to the reverse mashup algorithm  43  without an imaging operation. 
     In  FIG.  3 B , the third encoded data  45  and the first encoded data  42  are processed by the reverse mashup algorithm  43  to yield the second encoded data  44 . Depending upon the embodiment or implementation, the second encoded data  44  may be subsequently decoded to obtain the second information  34 . Furthermore, either or both of the third encoded data  45  and the first encoded data  42  may be obtained by imaging the QR code 3 ( 55 ) or QR code 1 ( 52 ), respectively. Alternatively, either or both of the third encoded data  45  and the first encoded data  42  may be stored in a computer memory and merely submitted to the reverse mashup algorithm  43  without an imaging operation. 
       FIGS.  4 A-B  are diagrams showing a specific example of data being transformed between an information layer  30 , an encoded data layer  40  and an optical layer  50  supporting use of a forward mashup algorithm  41  in  FIG.  4 A  (similar to  FIG.  2   ) and supporting use of a reverse mashup algorithm  43  in  FIG.  4 B  (similar to  FIG.  3 A ). However, these diagrams provide a simple example of actual information, one example of encoded data for the information, and one example of an image of a two-dimensional barcode that includes the encoded data. 
     The first party information  32  includes the text “hello.” The first party information  32  may be encoded using ASCII encoding to encode each of the letters in the word “hello.” Accordingly, the encoding is 01101000 01100101 01101100 01101100 0101000 in the encoded layer  40 . However, the information may be further encoded consistent with a format or specification for a two-dimensional barcode. As illustrated, the ASCII binary code for “hello” is further transposed into encoded data  42  with a serpentine (left-to right; down-one-row; right-to-left; down-one row; repeat) path consistent with a hypothetic two-dimensional barcode standard. The encoded data  42  may be output in the optical layer  50  as an image of a two-dimensional barcode  52  in which each “0” from the encoded data  42  corresponds with a white dot and each “1” from the encoded data  42  corresponds with a black dot (or vice versa, according to a standard). 
     The second party information  34  includes the text “Store” and forms encoded data  44  using ASCII character encoding and the hypothetical two-dimensional barcode formatting standard described above. Such encoded data  44  may be output as the two-dimensional barcode  54 . The forward mashup algorithm  41  performs a bit-by-bit, Boolean AND operation on the binary data in the encoded layer  40 , where two individual bits having the same position in the first and second encoded data sets  42 ,  44  are the operands or inputs to the Boolean AND operation of the mashup algorithm  41  to determine a single bit for the same position in the third encoded data set  45 . If desired, the mashup barcode  55  may be optically output. Note that barcode  55  does not bare any particular resemblance to the first and second barcodes  52 ,  54  and that the underlying “information” obtained by decoding the encoded data  45  is unintelligible, with only one part of the bit string actually encoding an “#” symbol according to the ASCII character coding standard. 
       FIG.  4 B  is a diagram using the same example as in  FIG.  4 A , but performing a reverse mashup algorithm  43  similar to that described in reference to  FIG.  3 A . Note that the two (third and second) barcodes  55 ,  54  may be imaged to obtain the encoded data  45 ,  44 , respectively. Then, the reverse mashup algorithm  43  performs a bit-by-bit, Boolean AND operation on the binary data in the third and second encoded data  45 ,  44  to determine a single bit for the same position in the first encoded data set  42 . Then, the first encoded data set  42  may be decoded to obtain the information  32  or message “hello”. Note that the information  32  was obtainable from two barcodes  55 ,  54  using the reverse mashup algorithm  43 , where neither of the two barcodes  55 ,  54  contained the information. Accordingly, it should be appreciated that the foregoing process was able to encode and protect the information  32  until such time and place that the two barcodes  55 ,  54  are presented for processing via the reverse mashup algorithm  43 . 
       FIG.  5    is a diagram of a system  60  in which a first party computing device  70 , a second party computing device  80  and a service provider web server or cloud  90  are in communication to perform a process according to some embodiments. The first party computing device  70  performs an application  72  that causes the computing device to provide a user interface  74 , such as a graphical user interface; management logic  76  for handling raw information, encoded data and optical two-dimensional barcodes; and a web application interface  78  for interfacing with the web application server or cloud  90  and the second party computing device  80 . The second party computing device  70  may similarly perform an application  82  that causes the computing device to provide a user interface  84 , such as a graphical user interface; management logic  86  for handling raw information, encoded data and optical two-dimensional barcodes; and a web application interface  88  for interfacing with the web application server or cloud  90  and the first party computing device  70 . 
     The service provider web server or cloud  90  performs a web application  92  that causes the server or cloud device to provide a web interface  94 ; encoder/decoder logic  96 ; forward mashup algorithm logic  97 , and reverse mashup algorithm logic  98 . Other application modules may be included as desired to support the various embodiments, such as a user account module and the like. 
       FIG.  5    further illustrates some basic processes of some embodiments. Operations  61  show the first party device  70  submitting raw information to the web server  90  and the web server  90  returning first party encoded data to the first party computing device  70 . Similarly, the operations  62  show the second party device  80  submitting raw information to the web server  90  and the web server  90  returning second party encoded data to the second party computing device  80 . In one alternative, the operations  61  may be supplemented or supplanted by the first party device  70  providing raw information to the second party device  80  at operation  63 , the second party device  80  providing the first party&#39;s raw information to the web server  90  at operation  64 , the web server  90  returning first party encoded data to the second party device  80  at operation  65 , and the second party device  80  transferring the first party encoded data to the first party computing device  70  at operation  66 . While some of these operations are optional depending upon the embodiment, the web server  90  may obtain the first party encoded data and the second party encoded data and perform the forward mashup algorithm  97  before returning the first party mashup encoded data  67  to the second party device  80  for forwarding to the first party device at operation  68 . Various embodiments involve the first party, second party and service provide interacting in various patterns at various times. 
       FIG.  6    is a schematic diagram of a computing device  100 , such as a smartphone that may be used as the first party computing device and/or the second party computing device. The computing device  100  may include a processor  170 , memory  171 , a battery (or other power source)  172 , a universal serial bus (USB) port  173 , a camera  174 , and an audio codec  175  coupled to a built-in speaker  176 , a microphone  177 , and an earphone jack  178 . The computing device  100  may further include a touchscreen controller  180  which provides a graphical output to the display device  181  and an input from a touch input device  182 . Collectively, the display device  181  and touch input device  182  may be referred to as a touchscreen. The computing device  100  may also include a short-range wireless transceiver  184 , a wireless local area network transceiver (“Wi-Fi transceiver”)  183 , a mobile communication transceiver  185  for communication with a cellular communication network, and a global positioning system (GPS) transceiver  187 . The memory  171  may store the application  72  as shown in  FIG.  5    and perhaps other programs, including program instructions that are executable by the processor  170 . 
       FIG.  7    is a diagram of a computing device  200  that may be representative of the web application server  90  as well as the first party and/or second party computing devices  70 ,  80  of  FIG.  5   . The computer  200  includes a processor unit  204  that is coupled to a system bus  206 . The processor unit  204  may utilize one or more processors, each of which has one or more processor cores. A graphics adapter  208 , which drives/supports the display  211 , is also coupled to system bus  206 . The graphics adapter  208  may, for example, include a graphics processing unit (GPU). The system bus  206  is coupled via a bus bridge  212  to an input/output (I/O) bus  214 . An I/O interface  216  is coupled to the I/O bus  214 . The I/O interface  216  may facilitate communication with various I/O devices, such as a keyboard  218  (such as a touch screen virtual keyboard), a camera  213 , a USB mouse  224  via USB port(s)  226  (or other type of pointing device, such as a trackpad), and a USB printer  225  via USB port(s)  226 . As depicted, the computer  200  is able to communicate with other network devices over the network  62  using a network adapter or network interface controller  230 . For example, the computer  200  may communicate with various computing devices over a network, including a wide area network such as the Internet. Specifically, wherein the computer  200  is the web application server or a cloud computer  90 , then the network interface  230  may enable communication with the first party computing device  70  and/or the second party computing device  80  as shown in  FIG.  5   . 
     A hard drive interface  232  is also coupled to the system bus  206 . The hard drive interface  232  interfaces with a hard drive  234 . In some embodiments, the hard drive  234  communicates with system memory  236 , which is also coupled to the system bus  206 . System memory is defined as a lowest level of volatile memory in the computer  200 . This volatile memory includes additional higher levels of volatile memory (not shown), including, but not limited to, cache memory, registers and buffers. Data that populates the system memory  236  includes the operating system (OS)  238  and web application program  92  as shown in  FIG.  5   . The hardware elements depicted in the computer  200  are not intended to be exhaustive, but rather are representative. For instance, the computer  200  may include non-volatile memory and the like. 
     The operating system  238  includes a shell  240  for providing transparent user access to resources such as application programs  244 . Generally, the shell  240  is a program that provides an interpreter and an interface between the user and the operating system. More specifically, the shell  240  executes commands that are entered into a command line user interface or from a file. Thus, the shell  240 , also called a command processor, is generally the highest level of the operating system software hierarchy and serves as a command interpreter. The shell provides a system prompt, interprets commands entered by keyboard, mouse, or other user input media, and sends the interpreted command(s) to the appropriate lower levels of the operating system (e.g., a kernel  242 ) for processing. Note that while the shell  240  may be a text-based, line-oriented user interface, embodiments may support other user interface modes, such as graphical, voice, gestural, etc. 
     As depicted, the operating system  238  also includes the kernel  242 , which includes lower levels of functionality for the operating system  238 , including providing essential services required by other parts of the operating system  238  and application programs  244 . Such essential services may include memory management, process and task management, disk management, and mouse and keyboard management. As shown, the computer  200  includes application programs  244  in the system memory of the computer  200 , including, without limitation, the web application  92 . 
       FIG.  8    is a process diagram illustrating interaction between a first party (P1), second party (P2) and service provider (SP) according to a generic example. Each entity is given a column in the diagram to identify the operations taken by that entity. Furthermore, the operations are divided up into timeframes t 1 , t 2 , t 3  and t 4 . During timeframe t 1  the first party submits (see arrow) P1 raw information to the service provider. The service provider encodes the P1 raw data to form P1 encoded data, which is then transferred back to the first party to store the P1 encoded data. During timeframe t 2  the second party submits (see arrow) P2 raw information to the service provider. The service provider encodes the P2 raw data to form P2 encoded data, which is then transferred back to the second party to store the P2 encoded data. The operations during timeframes t 1  and t 2  may be considered initial setup operations, such as each party forming an account with the service provider. During timeframe t 3  the first party submits its P1 encoded data to the service provider and the second party submits its P2 encoded data to the service provider. The service provider calculates a forward mashup of P1 and P2 encoded data to form mashup encoded data, which is then transferred to the first party to store the mashup encoded data. During timeframe t 4  the first party generates or displays a two-dimensional barcode (QR code) and allows the second party to scan an image of the mashup barcode. The second party may then submit the mashup encoded data and the P2 encoded data to the service provider, and the service provider may calculate P1 encoded data using the reverse mashup algorithm on the mashup encoded data and the P2 encoded data. The service provider may then provide the second party with the P1 encoded data and may optionally also provide the P1 raw information. Note that this process enabled the second party to receive the raw information (possibly, private information) of the first party without the first party displaying their raw information to the second party and without the service provider having to store the raw information. In fact, not even the first party needs to store the raw information for it to be provided to the second party in the manner of  FIG.  8   . 
     In addition to the steps or operations shown, it is a technical benefit of some embodiments that the service provider is not required to store the raw information of either the first party or the second party. Rather, the service provider uses the raw information of both the first party and the second party to form the mashup encoded data. Accordingly, at a subsequent time or event, the mashup encoded data and the second party encoded data may be used to decode the first party raw information. In such embodiments, the raw information of the first party, which may be the private information of the first party, is not stored by the service provider or the second party, and optionally may not even be stored by the first party. Therefore, the private information is secured against hacking attempts directed at any of the computing systems of the service provider, first party and second party. The only way to obtain the raw information of the first party is to obtain the mashup encoded data, obtain the second party encoded data, apply the reverse mashup algorithm to mashup encoded data and the second party encoded data to decode the first party encoded data, and then decode the first party encoded data yield the raw information of the first party. In some embodiments, the mashup encoded data and the second party encoded data may be obtained by imaging a mashup two-dimensional barcode (i.e., the optical equivalent of the mashup encoded data) and imaging a second party two-dimensional barcode (i.e., the optical equivalent of the second party encoded data). Importantly, applying the reverse mashup algorithm to a mashup two-dimensional barcode or encoded data and a second party two-dimensional barcode or encoded data will only yield the first party two-dimensional barcode or encoded data if the mashup two-dimensional barcode or encoded data is the same mashup two-dimensional barcode or encoded data that was generated using the forward mashup algorithm on the first party two-dimensional barcode or encoded data and the second party two-dimensional barcode or encoded data. 
       FIG.  9    is a process diagram illustrating interaction between an employee (P1), employer (P2) and service provider (SP) according to a process for generating and using an employee security badge. During timeframe t 1  the employer (P2) sets up their P2 encoded data as in  FIG.  8   . 
     During timeframe t 2  the employee (P1) arrives at the employer&#39;s facility and allows the employer to take their photo with a camera and input their name via a keyboard into the employer&#39;s computer. The employer uses their computer to submit the employees name and photo to the service provider to encode the employee&#39;s raw information into P1 encoded data. The employer also submits their own P2 encoded data, such that the service provider may perform the forward mashup algorithm on the P1 and P2 encoded data. The resulting mashup encoded data is provided to the employer (P2), which may print the associated two-dimensional barcode (QR code) onto an employee identification or security badge that is given to the employee (P1) to wear at the employer&#39;s facility. 
     During timeframe t 3  the employee wears the security badge while attempting to gain physical entry into the employer&#39;s facility. The employer scans the mashup barcode on the employee&#39;s security badge, provides the mashup barcode (or underlying encoded data) and the employer&#39;s encoded data to the service provider. The service provider then calculates the employee&#39;s P1 encoded data using the reverse mashup algorithm, decodes the P1 encoded data to obtain the employee&#39;s raw information (name and photo), then transfers the employee&#39;s raw information to the employer to verify the identity of the employee. For example, the name and photograph of the employee may be displayed on a security guard&#39;s computer display screen. If the displayed name and photograph match the person standing in front of them requesting entry, then the employee&#39;s identity is confirmed, and the entry is granted. This process occurred without the employee security badge displaying the employee&#39;s name or photo, and neither the service provider nor the employer stored the employee&#39;s name or photo. 
       FIG.  10    is a process diagram illustrating interaction between a ticketed passenger (P1), airline (P2) and service provider (SP) according to a process for providing the ticketed passenger with directions and/or map to the terminal and/or gate associated with their flight. During timeframe t 1  the airline sets up their P2 encoded data and/or QR code as did the employer in timeframe t 1  in  FIG.  9   . 
     During timeframe t 2  the passenger (P1) buys a ticket from the airline P2 for a flight departing from gate XYZ and provides the airline with P1 raw information, such as a name and driver&#39;s license number. The airline provides gate XYZ map data and the airline P2 encoded data to the service provider. The service provider encodes the gate XYZ map data and then uses a forward mashup algorithm on the gate XYZ map encoded data and the P2 encoded data to form mashup encoded data. The mashup encoded data is provide to the airline P2, which prints the associated mashup QR code on the ticket that is provided to the ticketed passenger. 
     During timeframe t 3 , such as about two hours before the flight, the ticketed passenger (P1) arrives at the airport and scans the airline&#39;s P2 QR code which is posted publicly at the airport as well as the mashup QR code on their ticket. The ticketed passenger uses their mobile device to capture an image of these two QR codes and the application on the mobile device is activated to provide the QR code of the airline and the mashup QR code on the passenger&#39;s ticket to the service provider. Upon receipt of these two QR codes, the service provider identifies the underlying mashup encoded data and the airline P2 encoded data, then uses the reverse mashup algorithm to calculate the ticketed passenger P1 gate XYZ encoded data. After decoding the gate XYZ information, the service provider provides the gate XYZ map to the ticketed passenger&#39;s mobile computing device for display to the ticketed passenger. Although an airport map is generally public information, the gate map for this particular ticketed passenger is provided without being printed on the ticket and perhaps without any other personal information or ticket data (destination, time or gate number) printed on the ticket. 
       FIG.  11    is a process diagram illustrating use of a company logo to secure a discount. The operations during timeframe t 1  are similar to those of  FIGS.  8 - 10    during the same timeframe except that the customer P1 raw information may differ, such as including the customer&#39;s age that qualifies them for a discount. The operations during timeframe t 2  are also similar to those of  FIGS.  8 - 10    during the same timeframe, except that the company provides, chooses or creates a company logo. During timeframe t 3 , the customer and the company submit their own encoded information, directly or indirectly, to the service provider to form a mashup two-dimensional barcode for the customer using the forward mashup algorithm. In this example, the mashup two-dimensional barcode represents a customer coupon for a discount. During timeframe t 4 , the customer wants to use the discount to make a purchase from the company. So, during checkout at the company (such as a retail store), the customer presents their discount in the form of the mashup two-dimensional barcode to the company, and the company submits the customer&#39;s mashup two-dimensional barcode (or underlying encoded data) and the company&#39;s P2 encoded data to the service provider. The service provider processes the P1 and P2 encoded data using the reverse mashup algorithm and passes the resulting customer information (i.e., discount code or coupon) to the company. The company may then complete the checkout process with the customer by applying the customer discount, such that the customer receives the desired goods or services at a discount. Note that the customer&#39;s qualifications for the discount (i.e., age), the amount of the discount, or other details of the discount may be encoded into the mashup barcode and are kept private. 
       FIG.  12    is a process diagram illustrating a credit card transaction. The operations during timeframe t 1  are similar to those of  FIGS.  8 - 10    during the same timeframe except that the customer P1 raw information may differ, such as including the customer&#39;s bank account number. The operations during timeframe t 2  are also similar to those of  FIGS.  8 - 10    during the same timeframe, except that the bank shares their resulting bank encoded data with the retailer P4. During timeframe t 3 , the customer and the bank submit their own P1 and P2 encoded data, directly or indirectly, to the service provider to form a mashup two-dimensional barcode for the customer using the forward mashup algorithm. The mashup two-dimensional barcode is then provided to the customer for use as a credit/debit card or code. During timeframe t 4 , the customer wants to use the credit/debit card to make a purchase from the retailer P4. So, during checkout at the retailer, whether online or a physical location, the customer presents their credit/debit card or code in the form of the mashup two-dimensional barcode to the retailer P4, and the retailer P4 submits both the customer&#39;s mashup two-dimensional barcode (or underlying customer P1 encoded data) and the bank&#39;s P2 encoded data to the service provider P3. The service provider processes the customer&#39;s mashup two-dimensional barcode and the bank&#39;s P2 encoded data using the reverse mashup algorithm and passes the resulting customer&#39;s bank account information to the bank. The bank may then authorize the transaction and notify the retailer that the transaction has been authorized and/or completed, such that the customer may then receive the desired goods or services. Note that the customer&#39;s bank account information may be encoded into the mashup barcode and are kept private from the retailer. 
     Dynamic Two-Dimensional Barcodes for Greater Data Storage Capacity or Security 
     Some embodiments may use a two-dimensional barcode that is dynamic. In one example, a dynamic two-dimensional barcode may be output to a display screen as a series or sequence of consecutively displayed images. A dynamic two-dimensional barcode may also be referred to herein as a three-dimensional barcode, where time is the third dimension. Each of the displayed images in a series may be an individual two-dimensional barcode, a “layer” of a three-dimensional barcode (where the third dimension is a physical or virtual depth or “Z” dimension), other machine-readable optical matrix, or a section of a larger two-dimensional barcode or other machine-readable optical matrix. 
     In some embodiments, a first computing device may have access to source data that is to be transferred or made available to a second computing device. The source data may be a two-dimensional barcode or three-dimensional barcode or may be data that can be encoded or included in a two-dimensional barcode or three-dimensional barcode. The first computing device may access the source data, serialize the source data into a series of two-dimensional barcode images, then serially display the two-dimensional barcode images on a display screen. The second computing device may direct an imaging component, such as a camera, toward the display screen of the first computing device to capture the two-dimensional barcode images are they are displayed by the first computing device. 
     In some embodiments, a dynamic two-dimensional barcode may include a series of two-dimensional images that are displayed at a predetermined frequency, predetermined time interval, or responsive to some event. A higher frequency of displaying the images in the series may increase an effective data transfer rate, but a lower frequency of displaying the images in the series may reduce an error rate by the receiving device. For example, some mobile communication devices, such as a smartphone, may have a default frame rate of 30 frames per second (fps). While faster frame rates may be available, it would be ineffective for the first computing device to use a display frequency that exceeds the capabilities and/or current settings of the camera of the second computing device. While the first and second computing devices may share and/or negotiate a display frequency, the first computing device may simply use a display frequency that is compatible with most cameras currently in use. Presently, 30 frames per second (fps) is a camera capability that is available on many smartphones in service. Other USB cameras or external cameras with various form factors and interfaces may also be compatible with 30 frames per second. 
     In some embodiments, the source data may be a stored data set or file. For example, the source data may include or describe a document, an application program, a data set, an/or an image. The source data may be stored on a data storage device of the first computing device, or may at least be accessible to the first computing device, and the formation and display of the dynamic two-dimensional barcode may be performed for the purpose of transferring a copy of the source data to the second computing device. In some options, the data transfer may occur without establishing a communication session between the first and second computing devices and/or without performing any authentication or authorization. In other words, the first (source) computing device may display the dynamic two-dimensional barcode as a series of images without any feedback indicating whether a second computing device is present or capturing the images. 
     In some embodiments, the source data may be generated using an iterated function. The term “iterated function” refers to a mathematical function or equation that uses a certain input value and produces an output value that is subsequently used as the next input value to the mathematical function. Each use of the mathematical function to operate on an input value to produce an output value may be referred to as an “iteration.” Such an iterated function may be repeated (i.e., iterated) any number of times in a given process (i.e., a process may include any number of iterations). Accordingly, the specific output of the iterated function is affected by the mathematical function itself, the initial input values to the mathematical function, and which iterate is being performed (i.e., the number of times that the iterated function has been performed to obtain the current output value). As a simple example, if the mathematical function was X output =X input +2, the initial value of X input  was 1, then the iterated function would produce a series of output values: X 1 =3 (1 st  iterate), X 2 =5 (2 nd  iterate), X 3 =7 (3 rd  iterate), X 4 =9 (4 th  iterate), and so forth. As another example, if the mathematical function was X output =X input *3, the initial value of X input  was 2, then the iterated function would produce a series of output values: X 1 =6 (1 st  iterate), X 2 =18 (2 nd  iterate), X 3 =54 (3 rd  iterate), X 4 =162 (4 th  iterate), and so forth. In a still further example wherein Z n+1 =Z n   c , Z 0 =0 and c=0.25, the iterated function would produce a series of output values: Z 1 =(0) 2 +0.25=0.25, Z 2 =(0.25) 2 +0.25=0.3125, Z 3 =(0.3125) 2 +0.25=0.3476, Z 4 =(0.3476) 2 +0.25=0.37086, and eventually Z 100 =0.4906. 
     Furthermore, the iterated function may include one or more Boolean function. In one option, one or more Boolean logic operations may be performed on a Boolean matrix. A non-limiting example includes the iterated Boolean function: 
         A   n+1   =NOT (( A   n  OR  c ) AND ( A   n  AND  c )) 
     
       
         
           
             
               A 
               0 
             
             = 
             
               
                 
                   
                     
                       1 
                     
                     
                       0 
                     
                   
                   
                     
                       1 
                     
                     
                       0 
                     
                   
                 
                 ⁢ 
                     
                 and 
                 ⁢ 
                 
                      
                      
                 
                 ⁢ 
                 c 
               
               = 
               
                 
                   
                     0 
                   
                   
                     0 
                   
                 
                 
                   
                     1 
                   
                   
                     0 
                   
                 
               
             
           
         
       
       
         
           
             
               A 
               1 
             
             = 
                 
             
               ( 
               
                 
                   ( 
                   
                     
                       
                         
                           1 
                         
                         
                           0 
                         
                       
                       
                         
                           1 
                         
                         
                           0 
                         
                       
                     
                     ⁢ 
                         
                     OR 
                     ⁢ 
                         
                     
                       
                         
                           0 
                         
                         
                           0 
                         
                       
                       
                         
                           1 
                         
                         
                           0 
                         
                       
                     
                   
                   ) 
                 
                 ⁢ 
                     
                 AND 
                 ⁢ 
                     
                 
                   ( 
                   
                     
                       
                         
                           1 
                         
                         
                           0 
                         
                       
                       
                         
                           1 
                         
                         
                           0 
                         
                       
                     
                     ⁢ 
                         
                     AND 
                     ⁢ 
                         
                     
                       
                         
                           0 
                         
                         
                           0 
                         
                       
                       
                         
                           1 
                         
                         
                           0 
                         
                       
                     
                   
                   ) 
                 
               
               ) 
             
           
         
       
       
         
           
             
               A 
               1 
             
             = 
             
               
                 
                   1 
                 
                 
                   1 
                 
               
               
                 
                   0 
                 
                 
                   1 
                 
               
             
           
         
       
       
         
           
             
               A 
               2 
             
             = 
             
               NOT 
               ⁢ 
                   
               
                 ( 
                 
                   
                     ( 
                     
                       
                         
                           
                             1 
                           
                           
                             1 
                           
                         
                         
                           
                             0 
                           
                           
                             1 
                           
                         
                       
                       ⁢ 
                           
                       OR 
                       ⁢ 
                           
                       
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                         
                           
                             1 
                           
                           
                             0 
                           
                         
                       
                     
                     ) 
                   
                   ⁢ 
                       
                   AND 
                   ⁢ 
                       
                   
                     ( 
                     
                       
                         
                           
                             1 
                           
                           
                             1 
                           
                         
                         
                           
                             0 
                           
                           
                             1 
                           
                         
                       
                       ⁢ 
                           
                       AND 
                       ⁢ 
                           
                       
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                         
                           
                             1 
                           
                           
                             0 
                           
                         
                       
                     
                     ) 
                   
                 
                 ) 
               
             
           
         
       
       
         
           
             
               A 
               2 
             
             = 
             
               
                 
                   0 
                 
                 
                   0 
                 
               
               
                 
                   0 
                 
                 
                   0 
                 
               
             
           
         
       
       
         
           
             
               A 
               3 
             
             = 
             
               NOT 
               ⁢ 
                  
               
                 ( 
                 
                   
                     ( 
                     
                       
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                       
                       ⁢ 
                           
                       OR 
                       ⁢ 
                       
                           
                            
                       
                       ⁢ 
                       
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                         
                           
                             1 
                           
                           
                             0 
                           
                         
                       
                     
                     ) 
                   
                   ⁢ 
                       
                   AND 
                   ⁢ 
                       
                   
                     ( 
                     
                       
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                       
                       ⁢ 
                           
                       AND 
                       ⁢ 
                           
                       
                         
                           
                             0 
                           
                           
                             0 
                           
                         
                         
                           
                             1 
                           
                           
                             0 
                           
                         
                       
                     
                     ) 
                   
                 
                 ) 
               
             
           
         
       
       
         
           
             
               A 
               3 
             
             = 
             
               
                 
                   1 
                 
                 
                   1 
                 
               
               
                 
                   0 
                 
                 
                   1 
                 
               
             
           
         
       
     
     where the starting values for An and c are: 
     A second non-limiting example of an iterated function that includes multiple Boolean logic operations that may be performed on a Boolean matrix is as follows: 
     Complex Forward Example 
     
       
         
           
             
               
                 B 
                 _ 
               
               ⊗ 
               A 
             
             = 
             C 
           
         
       
       
         
           
             
               
                 Knowns 
                 : 
                     
                 A 
               
               = 
               
                 
                   
                     1 
                   
                   
                     1 
                   
                 
                 
                   
                     0 
                   
                   
                     1 
                   
                 
               
             
             , 
             
               B 
               = 
               
                 
                   
                     0 
                   
                   
                     1 
                   
                 
                 
                   
                     1 
                   
                   
                     1 
                   
                 
               
             
           
         
       
       
         
           
             
               B 
               _ 
             
             = 
             
               
                 
                   1 
                 
                 
                   0 
                 
               
               
                 
                   0 
                 
                 
                   0 
                 
               
             
           
         
       
       
         
           
             
               
                 
                   
                     1 
                   
                   
                     0 
                   
                 
                 
                   
                     0 
                   
                   
                     0 
                   
                 
               
               ⊗ 
               
                 
                   
                     1 
                   
                   
                     1 
                   
                 
                 
                   
                     0 
                   
                   
                     1 
                   
                 
               
             
             = 
             C 
           
         
       
       
         
           
             
               Resultant 
               : 
                   
               C 
             
             = 
             
               
                 
                   0 
                 
                 
                   1 
                 
               
               
                 
                   0 
                 
                 
                   1 
                 
               
             
           
         
       
     
     Complex Backward Example 
     
       
         
           
             
               
                 C 
                 _ 
               
               ⊗ 
               A 
             
             = 
             B 
           
         
       
       
         
           
             
               
                 Knowns 
                 : 
                     
                 C 
               
               = 
               
                 
                   
                     0 
                   
                   
                     1 
                   
                 
                 
                   
                     0 
                   
                   
                     1 
                   
                 
               
             
             , 
             
               A 
               = 
               
                 
                   
                     1 
                   
                   
                     1 
                   
                 
                 
                   
                     0 
                   
                   
                     1 
                   
                 
               
             
           
         
       
       
         
           
             
               C 
               _ 
             
             = 
             
               
                 
                   1 
                 
                 
                   0 
                 
               
               
                 
                   1 
                 
                 
                   0 
                 
               
             
           
         
       
     
     In some embodiments, the mashup algorithm itself may be the iterated function. Optionally, first encoded data and second encoded data may be the input values to the iterated function. Accordingly, the output from the first iteration of the mashup algorithm may form input to the mashup algorithm for a second iteration. This process may be iterated any number of times. In one option, the mashup encoded data and/or the mashup two-dimensional barcode that is output to a user is the output of a user-specified or system-specified (“n th ”) iteration of the mashup algorithm. For example, the output of the specified iteration may be the mashup barcode that is stored in some form, such as a printed label, employee security badge, airline ticket, or credit card transaction. The intermediate output values that are produced by the 1 st  iteration through the (n−1) iteration may optionally be discarded. 
     The data underlying mashup encoded data produced by an iterated function may be more secure that data underlying mashup encoded data produced by an un-iterated function. One reason that an iterated function can provide greater security is because the number of iterations is an additional variable that is unknown to an unauthorized user or computing system. In a sense, the number of iterations may serve as a personal identification number (PIN) that protects the underlying data, since the correct number of iterations must be used when performing a reverse mashup algorithm to order to obtain the desire raw data underlying a two-dimensional barcode of one of the parties. Another reason that an iterated function can result in greater security is because more computational resources are required to reverse the mashup algorithm to obtain the original two-dimensional barcode and/or the underlying data. 
     Some embodiments may use a dynamic two-dimensional barcode (i.e., three-dimensional barcode) as a source of encoded data for one or more of the parties in a bit-wise mashup of two sets of encoded data. Accordingly, the mashup two-dimensional barcode that results from mashup of a first dynamic two-dimensional barcode with either a static two-dimensional barcode or a second dynamic two-dimensional barcode may be a dynamic two-dimensional barcode. For example, each two-dimensional barcode that is within a first dynamic two-dimensional barcode may be mashed up with a second two-dimensional barcode to form the dynamic mashup two-dimensional barcode. 
     Where the second two-dimensional barcode is a static (single) two-dimensional barcode, each individual two-dimensional barcode within the first dynamic two-dimensional barcode may be separately mashed up with the static two-dimensional barcode to form a two-dimensional barcode that becomes one of the two-dimensional barcodes in the resulting dynamic mashup two-dimensional barcode. Furthermore, the sequential position of each two-dimensional barcode within the resulting dynamic mashup two-dimensional barcode preferably corresponds to the sequential position of each two-dimensional barcode of the first dynamic two-dimensional barcode that was used to form the two-dimensional barcode. Accordingly, the resulting dynamic mashup two-dimensional barcode may have the same length (number of two-dimensional barcodes) as the first dynamic two-dimensional barcode. 
     Where the second two-dimensional barcode is also a dynamic two-dimensional barcode, each individual two-dimensional barcode within the first dynamic two-dimensional barcode may be separately mashed up with a separate individual two-dimensional barcode of the second dynamic two-dimensional barcode to form one of the two-dimensional barcodes in the resulting dynamic mashup two-dimensional barcode. Furthermore, the sequential position of each two-dimensional barcode within the resulting dynamic mashup two-dimensional barcode preferably corresponds to the sequential position of the two-dimensional barcode of the first dynamic two-dimensional barcode and the sequential position of the two-dimensional barcode of the second dynamic two-dimensional barcode. Accordingly, the resulting dynamic mashup two-dimensional barcode may have the same length (number of two-dimensional barcodes) as the first and second dynamic two-dimensional barcodes, where the n th  barcode of the first dynamic two-dimensional barcode and the n th  barcode of the second dynamic two-dimensional barcode are mashed up to form the n th  barcode of the resulting dynamic mashup two-dimensional barcode. 
     In some embodiments, a first party&#39;s raw (input) information may be used by the service provider to encode the information and form a two-dimensional barcode that is subsequently used as the input to the first iteration of an iterated function. The service provider may perform the iterated function a specified number of iterations to yield output that is provided to the first party as the first party&#39;s encoded data. Either the service provider may store the identity of the iterated function and/or the number of iterations, or such information may be provided to the first party in the form of a personal identification number (PIN). Accordingly, the forward and reverse mashup algorithms may be performed on the first party&#39;s encoded data as in reference to  FIGS.  2 - 4 B , except that, after obtaining the encoded data output of the reverse mashup algorithm, to decode the raw information underlying the encoded data it is necessary for the service provider to perform the reverse of the iterated function the specified number of iterations using the encoded data (output of the reverse mashup algorithm) as the input. 
     In some embodiments, each two-dimensional barcode will preferably include an alignment pattern, such as orientation squares and/or a normalization square, whether the barcodes is a single two-dimensional barcode image or a dynamic series of two-dimensional barcodes. Including such features in each image may improve the ability of the second (destination) computing device to read each two-dimensional barcode despite minor movements of the display of the first computing device and/or the camera of the second computing device during the display and capture of the series of images. 
     In some embodiments, the dynamic two-dimensional barcode may include the previously discussed encoding information (such as an encoding mode, an error correction level, mask pattern, message length, bit order and/or message (raw information) placement) in the first image and/or any/all subsequent images in the series of images. In addition, each image may include a sequence number to identify the position of the image in the series of images. Optionally, the “message length” data may include the number of images included in the dynamic barcode and/or the arrangement of the individual images (i.e., row 1 left-to-right, row 2 right-to-left, etc.) within the dynamic barcode. Furthermore, the first image in the series may include a special character or easily recognizable starting feature to signal that this image is the first image. This could be particularly important if the dynamic two-dimensional barcode is being repeatedly displayed or broadcast, such that the series of images are being cycled through over and over. Still further, the encoding scheme that is to be used to indicate the sequential position of an image in the series may be identified in the encoding information, such as the encoding mode. 
     In some embodiments, the dynamic two-dimensional barcode may be used as a substitute for a two-dimensional barcode based on multi-colored squares or dots. In a multi-colored two-dimensional barcode, color is used as a third dimension, such that a two-dimensional barcode that uses four colors may encode twice as much data as a black/white two-dimensional barcode having the same number of dots. Essentially, a black/white dot can encode either a “0” or a “1” (i.e., the two possible values of a single bit), a dot that may be any of four colors (such as cyan, magenta, yellow or black) may encode either “00”, “01”, “10” or “11” (i.e., the two possible values of two bits). So, a four-color barcode can encode twice as much data as a comparable two-color barcode. Embodiments of the dynamic two-dimensional barcode using only black/white dots (or corresponding bits) may provide the equivalent of a four-color two-dimensional barcode by encoding, for a given matrix position within the two-dimensional barcode, the color at that matrix position using the same matrix position in a first image and a second image. For example, if cyan=00, magenta=01, yellow=10, and black=11 in a four-color two-dimensional barcode, then for a given matrix position (say, the matrix position at a column 7 and row 8 of a given barcode) the color magenta and its bit equivalent of “01” may be represented as a white dot (“0”) at the same matrix position (column 7, row 8) in a first image of a dynamic two-dimensional barcode and a black dot (“1”) at the same matrix position (column 7, row 8) in a second image of a dynamic two-dimensional barcode. The encoding information provided in the dynamic two-dimensional barcode may indicate that the first and second images should be read and decoded together, where the ordinal number of the image in the sequence of images indicates a place-value for the bit stored in a given matrix position of the sequence of images. In other words, for a given matrix position, the bit stored in the first image may be the “ones place” and the bit stored in the second image may be the “two&#39;s place”. By extension, an 8-color two-dimensional barcode may be encoded as a dynamic two-dimensional barcode having three images. While it may be progressively more challenging to decode a two-dimensional barcode having an ever greater number of colors (and correspondingly less distinction between colors), it is a technological benefit that the present embodiments of a dynamic two-dimensional barcode may encode an ever-greater number of images as a substitute for color without any additional challenge to distinguishing colors and decoding the images since each image may use standard black and white dots or squares (or at least fewer colors). 
     Some embodiments may be implemented so that the information encoded in a dynamic two-dimensional barcode enables downloading of a particular file, set of files, or application program. 
     The foregoing computer program products may further include program instructions for implementing or initiating any one or more aspects of the methods described herein. Furthermore, the computer program product may be distributed among multiple computing devices of the same or different parties in order to carry out the methods and/or to implement the operations within a system including the computing devices of multiple parties. Similarly, the computing devices individually or collectively may include hardware and/or software components suitable to perform the program instructions of any of the computer program products or any one or more aspect of the methods described herein. Embodiments may also include methods of performing any one or more operations of the computer program products or the computing devices. 
       FIG.  13 A  is a diagram of a system  250  illustrating a first computing device  252  transferring data to a second computing device  254  using a dynamic two-dimensional barcode may be used to store and transfer a greater amount of data than a static two-dimensional barcode. The first computing device  252  may encode data into a plurality (an “array”) of two-dimensional barcodes  256  and then serialize the plurality of two-dimensional barcodes for display one-at-a-time. The array  256  may have a much greater capacity for data than any one of the individual two-dimensional barcodes. Due to the greater capacity, the data stored in the array may include one or more data file, a plurality of records, or an application program. 
     In some embodiments, the array of two-dimensional barcodes may be transmitted one-by-one in series according to the ordinal position of the two-dimensional barcode within the array. Specifically, the first computing device may serially display an image of each of the plurality of two-dimensional barcodes (illustrated at  258 ). For example, the images may be displayed on an electronic visual display screen  253 . Accordingly, the second computing device  254  may capture each of the displayed images using an imaging device, such as a digital camera  255 . The second computing device may then deserialize the displayed images and store the corresponding data  259  either as two-dimensional barcodes or just decoded data take from the two-dimensional barcodes. In one option, the data that is serialized by the first computing device may be obtained from a single two-dimensional barcode and each of the plurality of two-dimensional barcodes in the array may include a subset of the data from the single two-dimensional barcode. Accordingly, an image of a high-density two-dimensional barcode that the first computing device may not be able to display and/or that the second computing device may not be able to read may be separate into multiple images of lower-density two-dimensional barcodes such that the first and second computing devices are able to display and read each of the multiple images and effectively transfer all of the data from the high-density two-dimensional barcode. In another option, the data that is serialized by the first computing device may be, without limitation, one or more data file, one or more record, or an application program. 
     There is a technological benefit to a process that enables communication of a high-density two-dimensional barcode having a greater pixel density than may be supported by the electronic display device (screen)  253  of the first computing device  252  and/or the imaging device (camera)  255  of the second computing device  254 . For example, a first two-dimensional barcode may be separated into any number of smaller parts and serially displayed by a first computing device, then serially received and effectively reconstituted by the second computing device. 
       FIG.  13 B  is a diagram of a system  260  illustrating a first device  262  using an iterated function  270  to generate a parameter array  271  in the form of two-dimensional barcodes that are then communicated as a dynamic two-dimensional barcode  268  to a second device  264 . The illustrated example uses the iterated function described below. Accordingly, the first device  262  may transmitted a set of variables to the second device  264  via a wired or wireless communication channel other than the communication channel formed by the interaction of the display screen  263  and the camera  265 . This set of variables may include min(n), max(n), the iterated function (equation), and the initial input data two-dimensional barcode (Z 1 ). The variable (C) may be a personal value, personal information, or personal code of the party that uses the second device  264  and the value of (C) may be transmitted from the second device  264  to the first device  262 . 
     The first device  262  may include an encoding logic module (software) that encodes the input information  272  to form the data two-dimensional barcode array  273 . A data generator logic module (software)  274  may use the iterated function  270  in the form of the parameter generator  275  to generate the parameter array  271 . Specifically, the parameter array  271  is formed by the parameter generator  275  using the iterated function to solve for each of a sequence of parameter. Starting at the initial sequence value (i.e., min(n), such as n=1), the sequence of parameters is calculated until reaching the final sequence value (i.e., max(n), such as n=9). For a data array having nine two-dimensional barcodes, there will be only eight parameter two-dimensional barcodes generated. 
     The first device  262  displays each of the parameter two-dimensional barcodes on a display screen  263  in a sequence as described in reference to  FIG.  13 A . After the second device  264  receives and deserializes the parameter two-dimensional barcodes (P n ), the second device  264  may use its own data generator logic module (software)  276  to derive the data two-dimensional barcodes (Z n ). In order to derive the data two-dimensional barcodes (Z n ), the data generator  276  of the second device  264  uses the iterated function, sequence numbers and initial data barcode (Z 1 ) received from the first device  262  via an out-of-band communication channel, such as a wired or wireless connection, the parameter array (P n ) received from the first device  262  via the camera  265  focused on the display screen  263 , and the personal value (C) that originated with the second device  264 . The iterated function is performed for each parameter two-dimensional barcode in the parameter array to regenerate the data two-dimensional barcode array (A). Optionally, the two-dimensional barcode array (A) may be decoded to yield the output information  277 . 
     Generating Iterated Functions 
     Embodiments provide for a data generator that uses an iterated function. As previously stated, the term “iterated function” refers to a mathematical function that uses a certain input value and produces an output value that is subsequently used as the next input value to the mathematical function. Each use of the mathematical function to operate on an input value to produce an output value may be referred to as an “iteration.” Such an iterated function may be repeated (i.e., iterated) any number of times in a given process (i.e., a process may include any number of iterations). Accordingly, the specific output of the iterated function is affected by the mathematical function itself, the initial input value to the mathematical function, and which iterate is being performed (i.e., the number of times that the iterated function has been performed to obtain the output value). The iterated function may include mathematical operators and/or Boolean operators and the iterated function may operate on input values that are either decimal values or binary values. 
     The specific iterated function may vary from one implementation to another implementation without limitations as to the complexity of the function. However, for a given implementation, the iterated function is determined and fixed so that a first party or device may use the iterated function to generate a sequence of parameters using a sequence of input values, such as one parameter (P n ) for each input value (Z n ) where n is a sequence number from an initial sequence number to a maximum sequence number. Subsequently, the first party may make a one-time transfer of the same iterated function to another party or device (i.e., requesting party or device) so that the requesting party or device may use the same iterated function to regenerate the sequence of input values using the sequence of parameters. 
     In some embodiments, the party requesting the input values (i.e., useful information) from the first party may provide personal information or a personal value (c) to the first party and the first party may use an iterated function that uses the personal information or value as further input. Since the iterated function uses a personal value that is provided by the requesting party, other parties without this personal value may be unable to generate the input values (Z n ) even if there were somehow able to obtain the iterated function and/or the parameter sequence or array. 
     In some embodiments, the first party (source device) may select an iterated function to use in association with the requesting party. Alternatively, embodiments may use a default iterated function. However, the first party may convey the iterated function and the resulting parameter array to the requesting party to enable the requesting party to regenerate the array of input values (Z n ). 
     It is a technical benefit of some embodiments, that the input values (Z n ) are not simply transmitted between the first party and the requesting party in a manner that can be intercepted. Rather, an intercepting party might only obtain the parameter array and/or the equation, which does not enable the intercepting party to regenerate the input array (Z n ) since they don&#39;t have the personal value (c). Accordingly, embodiments may be considered to include a security feature that relies upon a security feature, where the personal value (c) functions as a key. 
     It is a further technical benefit of some embodiments that the initial input value (Z 1 ) is also required in order for the iterated function to regenerate any of the subsequent input values (Z n , where n&gt;1). Since the initial input value (Z 1 ) is transmitted by a display screen and captured by a camera of the requesting party/device, embodiments may inherently require physical presence of the requesting party/device near the display screen. Physical presence of a party/device is a further limitation on an intercepting party that may prevent an intercepting party from regenerating the input values since the intercepting party may either be denied access to the location of the display screen or may not actually be present near the display screen at the same time that the requesting party is requesting the input values. 
     Example of an Iterated Function 
     In this non-limiting example, an iterated function is used to generate a parameter array (P n ) for a given input array (Z n ) and a personal code (c). 
     First, assume an array of four alphabetic characters that form the input array (Z n ). Since there are four characters, the initial value of n is 0 and the maximum value of n (i.e., max(n)) is 3. 
         Z   n =(‘ A’,‘b’,‘C’,‘Z ’)
 
     In other words, Z0 through Z3 are as follows:
         Z 0 =‘A’   Z 1 =‘b’   Z 2 =‘C’   Z 3 =‘Z’       

     Each alphabetic character may be converted to its equivalent American Standard Code for Information Exchange (ASCII) value, as follows:
         Z 0 =‘A’=65   Z 1 =‘b’=98   Z 2 =‘C’=67   Z 3 =‘Z’=90   such that the input array (Zn) may be represented as follows:       

         Z   n =(65,98,67,90) 
     For the example, the iterated function takes the form of a linear equation: 
     
       
      
       y=mx+b  
      
     
     that may be restated as an iterated function where a subsequent input value (Z n+1 ) is a function of the previous input value (Z n ) as follows: 
         Z   n+1   =p   n ( Z   n )+ c    
     In order to determine the parameter array or parameterization sequence, it is necessary to have the initial input value (Z 0 ) and the personal value (c). If Z 0 =65 and Z 1 =98 as set out above and the personal value (QR code) c=64, then the integrated function may be solved for the value of p 0  in a first iteration as follows: 
     
       
         
           
             98 
             = 
             
               
                 
                   p 
                   
                     n 
                       
                   
                 
                 ( 
                 65 
                 ) 
               
               + 
               64 
             
           
         
       
       
         
           
             
               p 
               0 
             
             = 
             
               34 
               65 
             
           
         
       
     
     The second iteration may be solved for pi using the values of Z 1 , Z 2  and c as follows: 
     
       
         
           
             
               Z 
               2 
             
             = 
             67 
           
         
       
       
         
           
             67 
             = 
             
               
                 
                   p 
                   n 
                 
                 ( 
                 98 
                 ) 
               
               + 
               64 
             
           
         
       
       
         
           
             
               p 
               1 
             
             = 
             
               3 
               98 
             
           
         
       
     
     The third iteration may be solved form using the values of Z2, Z3 and c as follows: 
     
       
         
           
             
               Z 
               3 
             
             = 
             90 
           
         
       
       
         
           
             90 
             = 
             
               
                 
                   p 
                   n 
                 
                 ( 
                 67 
                 ) 
               
               + 
               64 
             
           
         
       
       
         
           
             
               p 
               2 
             
             = 
             
               26 
               67 
             
           
         
       
     
     Accordingly, a parameter sequence of three values has been generated: 
     
       
         
           
             
               
                 p 
                 n 
               
               = 
               
                 34 
                 65 
               
             
             , 
             
               3 
               98 
             
             , 
             
               26 
               67 
             
           
         
       
     
     In a restated form, the values p n  may be generalized as follows: 
     
       
         
           
             
               p 
               
                 n 
                   
               
             
             = 
             
               
                 
                   Z 
                   
                     n 
                     + 
                     1 
                   
                 
                 - 
                 c 
               
               
                 Z 
                 n 
               
             
           
         
       
     
     In order for a requesting party to regenerate the input array (Z n ), the requesting party needs the iterated function, the initial input value (Z 0 ), the value of c, and the range of sequence values (n):
         Initial Input Value: Z 0 =65   Personal Value: c=64   Iterated Function: Z n+1 =p n (Z n )+c   Range of Sequence Values: n from 0 to max(n) (i.e., n=length of input array−1)       

     Some embodiments may use other iterated functions. Without limitation, the iterated function could be formed using any continuous real root quadratic, cubic, and quartic equivalents. These other types of equations may add complexity to the embodiments. Chaotic effects may also be present in the parameter values given a large enough degree polynomial. It should be recognized that the foregoing examples may use numerical values, but these numerical values have binary equivalents. In other words, any number may be written in either base 10 or in base 2. Accordingly, any number written in base 10 may be converted to its binary equivalent written in base 2 (i.e., using only 0s and 1s) and vice versa. The foregoing example of an iterated function is described using numbers written in base 10, but the iterated functions could be performed equally well in base 2 or there could be a conversion step (base 2 to base 10) prior to the iterated function and a conversion step (base 10 to base 2) subsequently to the iterated function. It should also be recognized that binary numbers may be either to the left of an implied or express decimal point or to the right of a decimal point. So, in the example of a binary number ABC.DEF, the dot is the decimal place, so the letter A is in the 2 2  (4s) place, the letter B is in the 2 1  (2s) place, the letter C is in the 2° (1s) place, the letter D is in the 2 −1  (½ s) place, the letter E is in the 2 −2  (¼ ths) place, the letter F is in the 2 −3  (⅛ ths) place. Still further, many glyphs, such as upper and lower case alphabetic characters, special characters, punctuation marks and/or numerical digits, may be converted to a numerical value using a character encoding standard, such as the American Standard Code for Information Interchange (ASCII) standard for electronic communication. In addition, such numerical values that are used to represent the glyphs may be written in decimal form (i.e., the letter A is encoded as “65”) or in binary form (i.e., the letter A is encoded as “100 0001”). Embodiments may use these equivalents (i.e., A=65=100 0001) for some of all purposed herein. In one example, the data or raw information may be input as glyphs, encoded as binary for storage and display of two-dimensional barcodes and/or the performance of mashup algorithms, and converted to decimal for performing an iterated function. 
     Embodiments may provide an additional technical benefit that errors that may occur during the optical image capture, such as a loss of one of the two-dimensional barcodes within the sequence, may be corrected by deriving the missing two-dimensional barcode. 
       FIG.  14 A  is a diagram illustrating a mashup of a first array of two-dimensional barcodes  280  and a second array of two-dimensional barcodes  282  to produce a third array of two-dimensional barcodes  284 . The first array of two-dimensional barcodes may encode first data and the second array of two-dimensional barcodes may encode second data. Each two-dimensional barcode includes binary values identified by a unique combination of a column and a row within the two-dimensional barcode. Furthermore, each two-dimensional barcode within an array is identified by a unique ordinal position in that array. A forward mashup algorithm may be performed on the first array  280  and the second array  282  to form the third array  284 . In this example, for each combination of column, row and ordinal position, the binary value in the first array  280  and the binary value in the second array  282  are input to a Boolean algorithm to produce a binary value for the same combination of column, row and ordinal position in the third array  284 . In other words, for each ordinal position within the first and second arrays, the corresponding two-dimensional barcodes may be input to a mashup algorithm as described in reference to  FIG.  2    in order to produce a corresponding two-dimensional mashup barcode having the same ordinal position within a third array. In the Boolean algorithm stated in the diagram is an Exclusive OR (XOR) function, but the invention is not limited to any specification Boolean algorithm. 
     In some embodiments, the third array may be used as input into a reverse mashup algorithm in order to obtain one of the original first or second arrays. In other words, for each ordinal position within the third array, the corresponding two-dimensional barcode may be input to a reverse mashup algorithm as described in reference to  FIGS.  3 A-B  in order to produce a two-dimensional barcode having the same ordinal position within the first or second array. 
       FIG.  14 B  is a diagram illustrating a mashup of a first array of two-dimensional barcodes  280  and a single two-dimensional barcode  286  to produce a third array of two-dimensional barcodes  288 . This diagram illustrates a special case of the process in  FIG.  14 A , where the second array of two-dimensional barcodes  282  (of  FIG.  14 A ) is replaced by a single two-dimensional barcode (B)  286 . In this example, the single two-dimensional barcode (B) is input into the mashup algorithm along with each of the two-dimensional barcodes of the first array (A 1 -A n ) to form the third array (C 1 -C n ). Accordingly, the single two-dimensional barcode (B) has been illustrated as an array of the same two-dimensional barcode in order to emphasis that the single two-dimensional barcode (B) is used in each mashup. 
       FIG.  15 A  is a flowchart of operations involved in an iterated bit-wise algorithm for generating an array of two-dimensional barcodes from a first (seed) two-dimensional barcode (A 1 ) and a second constant two-dimensional barcode (B) to produce an array of two-dimensional barcodes. In this illustration, a first operation  290  includes obtaining a first input (seed) two-dimensional barcode (A 1 ), a second constant two-dimensional barcode (B) and a selected number of iterations (X). The value of “n” is a current number of iterations of the iterated bit-wise algorithm, where the value of “n” is initially set to 1 in operation  291 . 
     During each iteration of operations  292 - 296 , the Boolean function A n +B&lt;=XOR=&gt;C n  (i.e., A n  XOR B=Cn) is performed in operation  292 , and the value of C n  is stored in operation  293  (at least until the next iteration). Operation  294  determines whether n=X. If n=X, then the process ends. However, if n is not equal to X during the current iteration of the Boolean function, then the value of n is incremented by setting n=n+1 in operation  295 . Furthermore, before the next iteration, A n  is set equal to C (n−1)  in operation  296  such that the output from the previous (most recent) iteration (i.e., C (n−1) ) is the input (A n ) to the next iteration. 
       FIG.  15 B  is an illustration of the calculations and output generated by the operations of  FIG.  15 A  through six (6) iterations of the bit-wise algorithm. After performing the first iteration of the algorithm, the value of A 2  is set equal to C 1  before performing the second algorithm. This process is repeated until n=X, where X is the value of six (6) is this illustration. Because A n  and B are both arrays of two-dimensional barcodes, each of the values of C 1  to C 6  are also an array of two-dimensional barcodes as represented by the two-dimensional barcodes illustrated at the bottom of  FIG.  15 B . 
       FIG.  16 A  is a diagram of a system  300  including a first device  302  transferring data to a second device  304  using an array of two-dimensional barcodes to facilitate a program download. In this specific example, the input information is a program installer (software)  306 . The first device  302  may separate the program instructions of the program installer include a plurality of data segments  307  that are subsequently serialized and encoded into a two-dimensional barcode to form a stack  308  of two-dimensional barcodes. The first device  302  may then sequentially display each of the two-dimensional barcodes in the stack  308  on the display screen and the second device  304  may sequentially capture the image of each displayed barcode to collect the stack  309 . The second device  304  may then deserialize the two-dimensional barcodes and decode the program instructions from each of the two-dimensional barcodes to be stored at  310 . Finally, the second device  304  may execute the program installer (software) to cause a program (illustrated at  311 ) to be downloaded and installed on the second device. 
     In  FIG.  16 A , the barcode stock is shown only partially displayed by the first device and only partially received by the second device. While only one two-dimensional barcode would be displayed at a time, a sequence of five barcodes (numbered 24-28) are illustrated being in transit. Out of the 49 program segments  307 , segments 36-49 are yet to be serialized, segments 29-35 are still in the stack  308 , segments 24-28 are illustrated as being in transit (although only one would be displayed at a given time), segments 18-23 are now in the stack  309  of the second device  304 , and segments 1-17 have already been deserialized and decoded. 
       FIG.  16 B  is a diagram of the system  260  of  FIG.  13 B  where the input information is the program installer (software)  312  of  FIG.  16 A  and the executable program instructions of the program installer are subsequently executed by the second device  304  to facilitate a program download (illustrated at  311 ). 
       FIGS.  17 A and  17 B  are diagrams of the systems  300 ,  260  of  FIGS.  16 A and  16 B , respectively, where the input information is a video advertisement (digital video file)  312  of  FIG.  16 A  and the executable program instructions of the program installer are subsequently executed by the second device  304  to facilitate a program download (illustrated at  311 ). 
       FIG.  18    is a diagram of a system for transmitting input information in an array of two-dimensional barcodes in a controlled sequence using an iterated function. The system is illustrated as a three-party (three device) system, but the functionality of the first device (source) and the second device (display/screen) may be combined into a single party or device. Each device may be a computing device, such as a server, computer (i.e., desktop, laptop, tablet, etc.), smartphone, or a specialized computer for a particular system (i.e., an automobile, appliance, industrial equipment, etc.). 
     The first device has access to input information that may be encoded into a sequence of two-dimensional barcodes. The content of the input information may vary widely according to the type of input information that another party or device be desire. Furthermore, the input information may be accessed or received by the first device in response to some request for the information or may be stored by the first device in anticipation of receiving a request. Optionally, the input information may be selected from a database or other collection of information that may be accessed by the first device. For example, the first device may provide data files or application programs as a service. The size or length of the input array (i.e., length of input array A) may be dependent upon and/or proportional to the amount of input information that is accessed by the first device to provide to a requesting device and may be quantified by the number (n) of individual two-dimensional barcodes that are included in the input array. The input array is formed by encoding the input information into a sequence of two-dimensional barcodes. Any known or proprietary encoding scheme may be used so long as the other devices in the system are able to decode the two-dimensional barcodes to obtain the input information. Accordingly, the first device may include an encoding module (software) to perform the encoding operations. Typically, the encoding information that is provided in a portion of each two-dimensional code will specify how the data is encoded. 
     The requesting device may provide a personal value (C), optionally representing personal information of a requesting party that owns or operates the requesting device, to the first device. An iterated function that uses the personal value (C) will be more difficult for an intercepting party to decode. 
     The first device may also access an iterated function that is to be used to generate a parameter array. The iterated function may be stored by the first device or received by the first device at the time of use. The level of complexity of the iterated function may vary according to user preferences for a particular implementation. However, the first device may include a parameter generator module (software) for generating each of the parameters by applying the iterated function to sequentially operate on each input value (Z n ) and the personal value of C. 
     The first device may provide the iterated function (i.e., the equation) and the parameter array (i.e., sequence of parameter values) to the requesting device via a first channel of communication, such as a wired or wireless network connection, such as WiFi, Bluetooth, or Ethernet. The first device may also provide the initial sequence number (i.e., min(n)), the last sequence number (i.e., max(n)), and the initial input value (Z 1 ) to the second device. In one option, the iterated function and the parameter array are provided to the second device for subsequent forwarding to the requesting device. However, it is preferable that the requesting device receive only the iterated function and the parameter array via the first channel of communication. Accordingly, the requesting device may receive the initial sequence number (i.e., min(n)) and the initial input value (Z 1 ) from the second device using its camera or other image capture device directed at the display screen of the second device. 
     The second device may form a sequence two-dimensional barcode that encodes the sequence number, beginning with the initial sequence number. Optionally, the second device may generate an entire array of sequence two-dimensional barcodes, but the sequence two-dimensional barcodes may alternatively be generated as needed in subsequent operations yet to be described. For these purposes, the second device may include a sequence barcode generator module (software). 
     The second device may then output an initial image on its display screen. While formats and arrangements may vary, the second device may display an initial two-dimensional barcode (Q 1 ) that encodes the initial input value (Z 1 ). In subsequent operations, the second device may further display information, such as the initial input value (Z 1 ), that is encoded in the initial two-dimensional barcode (Q 1 ). For example, if the input array is an e-book and each input value two-dimensional barcode encodes one page of text (Z n ), then the text may be displayed on the display screen along with the next sequence barcode (Q n ). However, the second device may then enter into a wait state and take no further action pending some responsive input from the requesting device or party. 
     The requesting device (Party  3 ) may use a camera or other imaging device to capture the images of the initial two-dimensional barcode (Q1) that is displayed on the display screen of the second device. A barcode reading module (software) may decode the initial input two-dimensional barcode (Q 1 ) to obtain the initial input information (Z 1 ) that is encoded therein and the initial sequence number (i.e., min(n)). The requesting device may now has: (1) received the initial input value (Z 1 ) and the initial sequence number (i.e., min(n)) from the second device via its camera capturing an image of the display screen on the second device, (2) received the iterated function (equation) and parameter array (Pa) from the first device through a separate channel (perhaps via the second device), and (3) stored a copy of its own personal value (C). Accordingly, the requesting device is now able to perform its first iteration of the iterated function to solve for the next input two-dimensional barcode (Z (n+1) ) using the sequence number to select the appropriate parameter from the parameter array. For example, when Sn is decoded to yield a sequence number of n=1, then the iterated function will operate on the initial input value Z 1  and the constant personal value C using the initial parameter P 1  to yield the value of the next input value Z 2  (i.e., Z (n+1)  where n=1). Notice that the requesting device has just derived the value of Z 2  without Z 2  having ever been transmitted from the first device (source). 
     In embodiments of the illustrated system where the second device is separate from the first device, even the second device does not currently have access to the value of Z 2  and also does not have sufficient information to derive the value of Z 2 . Specifically, the second device only has access to the range of sequence numbers (i.e., min(n) and max(n)) and the initial input information value (Z 1 ), and does not have any other portion of the input array (A) (i.e., none of Z 2 -Z max(n) ), does not have the iterated function (equation), does not have the parameter array (P n ) and does not have the personal value (C). The output of the display screen of the second device initially provides the initial sequence number (min(n)) and the initial input value (Z 1 ), which may be considered to be a “seed” value from which the requesting device may derive the entire input array (A). If access to the entire input array (A) is the objective of the requesting party, then there is no need for further interaction among the devices of the system. 
     In some embodiments, the requesting device may communicate the derived input value of Z 2  (i.e., Z (n+1) ) back to the second device via a wired or wireless communication channel or pathway other than the optical communication channel by which the requesting device received the initial input value Z 1 . Subsequently, the second device may pair the derived input value Z 2  and a two-dimensional barcode containing the next sequence value S 2 , and then display Z 2  and the two-dimensional barcode with the next sequence value S 2  on the display screen. Optionally, the second device may display this information in response to some additional action taken by the requesting device or party, such as entry of a touch-input to the display screen indicating that the requesting party is ready to advance to the next screen of input information. In the example where the input information is an e-book with one page of text encoded into each two-dimensional barcode of the input array (A), the touch input may indicate that the requesting party has read the page of text and wants to advance to the next page of text. Responsive to the touch input, the second device may then display the second page of text that is provided by the derived input value (Z 2 ). In a further option, the second device may display a previous page of text in response to touch input directed to indicate a desire to navigate backward to the previous page of text. The display screen could display icons or buttons labeled with “next page” or “previous page” to facilitate the requesting party navigating through the e-book. In one option, the second device may display the derived input value (information) received from the requesting device along with the next sequence two-dimensional barcode. In this option, the second device may be displaying the actual input information Z n  rather than a two-dimensional barcode encoding the input information Z n . 
     It should be appreciated that a feedback loop may be in operation, where the action of the second device displaying the input information Z n  paired with the sequence two-dimensional barcode S n  enables the requesting device to derive the next input two-dimension barcode (Z (n+1) ) in the input array (A). Subsequently, the derived input information (Z (n+1) ) is communicated back to the second device for display along with the next sequence two-dimensional barcode (Sn +1 ). In the former example of an e-book, each subsequent input segment of input information (Z (n+1) )) may be displayed in sequence responsive to the requesting party&#39;s touch input. It is a technical benefit that the entirety of the input information (i.e., the e-book) is not communicated among the three devices in any one transmission making interception of the information (e-book) impractical at best. 
     In some embodiments, the foregoing operations may be repeated so that the input information is sequentially displayed on the display screen until reaching the final input two-dimensional barcode (Z max ). Optionally, the final input two-dimensional barcode (Z max ) may be displayed without a sequence two-dimensional barcode since the requesting party has already completed the final derivation. Alternatively, the final input information (Z max ) could be paired and displayed with a special “stop sequence” two-dimensional barcode that simply indicates that the end of the sequence has been reached. 
     As will be appreciated by one skilled in the art, embodiments may take the form of a system, method or computer program product. Accordingly, embodiments may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, embodiments may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon. 
     Any combination of one or more computer readable storage medium(s) may be utilized. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: a portable computer diskette, a hard disk, a random-access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain or store a program for use by or in connection with an instruction execution system, apparatus, or device. Furthermore, any program instruction or code that is embodied on such computer readable storage media (including forms referred to as volatile memory) that is not a transitory signal are, for the avoidance of doubt, considered “non-transitory”. 
     Program code embodied on a computer readable storage medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing. Computer program code for carrying out various operations may be written in any combination of one or more programming languages, including an object-oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). 
     Embodiments may be described with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general-purpose computer, special purpose computer, and/or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     These computer program instructions may also be stored on computer readable storage media is not a transitory signal, such that the program instructions can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, and such that the program instructions stored in the computer readable storage medium produce an article of manufacture. 
     The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions. 
     The terminology used herein is for the purpose of describing particular embodiments only and is not intended to limit the scope of the claims. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, components and/or groups, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. The terms “preferably,” “preferred,” “prefer,” “optionally,” “may,” and similar terms are used to indicate that an item, condition or step being referred to is an optional (not required) feature of the embodiment. 
     The corresponding structures, materials, acts, and equivalents of all means or steps plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. Embodiments have been presented for purposes of illustration and description, but it is not intended to be exhaustive or limited to the embodiments in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art after reading this disclosure. The disclosed embodiments were chosen and described as non-limiting examples to enable others of ordinary skill in the art to understand these embodiments and other embodiments involving modifications suited to a particular implementation.