Patent Publication Number: US-11381384-B2

Title: Blockchain system for optimizing processes

Description:
FIELD 
     Embodiments of the present invention relate to blockchain technology. 
     BACKGROUND 
     A blockchain may be used to operate a distributed or decentralized digital ledger in which the records, called blocks, are linked using cryptography. Each block contains a cryptographic hash of the previous block, a timestamp, and transaction data. 
     A blockchain is “secure” because each block is encrypted and because once recorded in the ledger, transactions cannot be edited or deleted. A blockchain is “decentralized” because the data is spread across hundreds or thousands of nodes that are part of the network. 
     SUMMARY 
     In one embodiment of the invention, there is provided a blockchain-based system representing an idealized process in a finite generic blockchain wherein each block represents a step in said idealized process. The finite generic blockchain may be used to spawn finite blockchain instances. Each instance of the finite generic blockchain may be used to track completion of an actual process corresponding to a real-world process correlated with the idealized process in the finite generic blockchain. 
     Advantageously, completion of steps in the real-world process may be written into a finite blockchain instance, as a change evidence record. 
     Thus, at every stage in the execution of a real-world process, unalterable data is added to the blockchain indicating whether said stage has been completed 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  illustrates a representative real-world process which can be advantageously managed, in accordance with the embodiments of the present invention. 
         FIG. 2A  illustrates a generic finite blockchain as well as finite block blockchain instances based on said generic finite blockchain, in accordance with one embodiment of the invention. 
         FIG. 2B  illustrates how a family of blockchains may be created based on a single blockchain, in accordance with one embodiment of the invention. 
         FIG. 3  illustrates how a counter may be used to issue ticks to create a finite blockchain, in accordance with one embodiment of the invention. 
         FIG. 4  illustrates a state transition blockchain generated in accordance with one embodiment of the invention. 
         FIGS. 5-6  illustrate examples of finite blockchains in accordance with one embodiment of the invention. 
         FIG. 7  illustrates a process to add a new state transition block to a finite blockchain, in accordance with one embodiment of the invention. 
         FIG. 8  illustrates the creation of an instance blockchain from a generic finite blockchain, in accordance with one embodiment of the invention. 
         FIG. 9  illustrates how alignment blocks may be used to align equivalent blocks occurring in one or more finite blockchain instances, in accordance with one embodiment of the invention. 
         FIG. 10  illustrates a network environment, for practicing embodiments of the present invention. 
         FIG. 11  illustrates the creation of blocks including state changes (change evidence data), in accordance with one embodiment of the invention. 
         FIGS. 12-13  shows a flow diagram to record the change evidence data in an instance of a finite blockchain, in accordance with one embodiment of the invention. 
         FIG. 14  shows a high-level block diagram of the hardware that may be used to practice aspects of the present invention. 
     
    
    
     DETAILED DESCRIPTION OF SOME EMBODIMENTS 
     In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the invention. It will be apparent, however, to one skilled in the art that the invention may be practiced without these specific details. In other instances, structures and devices are shown in block diagram form only in order to avoid obscuring the invention. 
     Reference in this specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the invention. The appearance of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment, nor are separate or alternative embodiments mutually exclusive of other embodiments. Moreover, various features are described which may be exhibited by some embodiments and not by others. Similarly, various requirements are described which may be requirements for some embodiments but not other embodiments. 
     Moreover, although the following description contains many specifics for the purposes of illustration, anyone skilled in the art will appreciate that many variations and/or alterations to said details are within the scope of the present invention. Similarly, although many of the features of the present invention are described in terms of each other, or in conjunction with each other, one skilled in the art will appreciate that many of these features can be provided independently of other features. Accordingly, this description of the invention is set forth without any loss of generality to, and without imposing limitations upon, the invention. 
     Broadly, embodiments of the present invention disclose a blockchain system for recording, in an unalterable manner, change evidence relating to particular steps in a real-world process. For example, in one embodiment, such change evidence may comprise information indicating that a particular step in the real-world process has been completed. 
     Advantageously, a real-world process may be modeled as an idealized process and stored in a blockchain as a generic finite blockchain. For purposes of tracking actual instances of processes corresponding to said idealized process, instances of said generic finite blockchain may be created to record change evidence information pertaining to said actual instances, as will be described. 
     The invention is to be construed broadly to include all manner of processes including, but not limited to chemical processes, approval processes, management processes, manufacturing processes, etc. 
     For purposes of illustrating aspects of the invention, a business process will be described. Said business process may comprise a plurality of discrete steps which are to be performed in a serial manner. For example, consider the representative business process  100  shown in  FIG. 1  which outlines a sequence of steps required to manufacture a new product. As will be seen, the sequence  100  includes a design step  102 , a sample manufacture step  104 , a volume run step  106 , and a factory build/outsource step  108 . In step  102 , a design is conceived for the product such as a new mobile phone, a new car, etc. In step  104 , a sample manufacture or prototype is constructed based on the design. In step  106  a test volume of the product is manufactured in order to measure yield. For example, the step  106  may be applicable in the case of the manufacture of semiconductor chips, where it is important to optimize a design to improve chip yields. Lastly, in step  108 , a decision is made as to whether to build a factory to manufacture the product, or to outsource its manufacture to a third party. 
       FIG. 2  of the drawings shows a family of finite blockchains  200  used to track a business process through to completion, in accordance with one embodiment of the invention. Referring to  FIG. 2 , reference numeral  202  indicates a generic finite blockchain (FBCg) comprising a sequence of blocks  204  to  212 . The blocks  204 - 212  may each represent either a “Means” block or an “Ends” block. For example, blocks  204  and  208  represent Means blocks, whereas the blocks  206 ,  210 , and  212  represents Ends blocks. An Ends block in a FBCg is a required block whereas, a Means block is an intermediate block that is optional in the FBCg and does not belong to a set of Ends blocks associated with the FBCg. The Means and Ends blocks within a FBCg may be indicated as FBCg (FBCg.{Means}, FBCg.{Ends}). Thus, a generic blockchain may be represented as set comprising Means blocks and Ends blocks. 
     In one embodiment, the family of finite blockchains may be used to track the evolution of a system (business process) through a series of changes that are measured as a function of time such that at time T 0 , the genesis or the initial state of the system is recorded. This initial state may itself be considered a change. Every subsequent change transitions the system from its previous state to a following state. In one embodiment, every change is recorded as a block, which will be referred to herein as a “state transition block (STB)”. In one embodiment, each block that is added to capture changes subsequent to the creation of the initial block, is linked to a previous block. Thus, the blocks representing state transitions are linked, hence the name “State Transition Blockchain”. Referring to  FIG. 2 , each of the blocks  204  to  212  represents a State Transition Block. In general terms, a system S may be described as a sequence of state transitions as follows: S={STB 0 +STB 1 +STB 2 + . . . +STBn}. This is illustrated in  FIG. 4 , where a system  400  is shown to comprises a sequence of state transitions: STB 1  to STBn. 
     In one embodiment, a STB may be authorized prior to its creation. Authorization may comprise requesting and receiving a tick from a Counter. In one embodiment, a Counter (C) generates a tick ‘t’ using the function gettick( ). In one embodiment, the Counter ‘C’, generates tick ti+1&gt;tick ti, where ti+1 was requested at a Time T(ti+1)&gt;Time T(ti), when, tick ti was requested. A tick is a unit such that there exists a function to compare ti+1 and ti. 
     In many instances, a step in a process may require a certain effort for its completion. Said effort may be measured in terms of money, raw material, and/or other resources. Thus, in one embodiment an effort E indicates the resources required for the realization or completion of a particular step in a process. This effort E may be assigned as a requirement for the creation of a particular STB that is required to represent the particular step, in accordance with one embodiment of the invention. 
     In one embodiment, each STB representing a step in a process has associated with it, a set of minimum requirements for its creation. In some cases, an effort, and a tick define the minimum requirements. 
     Each blockchain may be bounded by two ticks, hence the term “finite blockchain”. A finite blockchain may be represented as FBC (t 1 , tn) where t 1  represents the first tick and tn represents the last tick in the chain. Alternatively, finite blockchain FBC (t 1 ) indicates a tick t 1  of a finite blockchain that contains a single STB. 
     In one embodiment, the generic finite blockchain  202  may be used to spawn multiple instances of blockchains. Referring to  FIG. 2A  of the reference numerals  214 ,  230 , and  240  indicate instances within a family of finite blockchains  200 . Each instance blockchain may be instantiated in order to track an instance of the process defined in the generic blockchain  202  through to completion. 
     Within each blockchain, the ticks associated with each of the STBs are referenced to a primary or base counter that is unique to the blockchain.  FIG. 3  of the drawings illustrates the relationship between ticks and a base counter. Referring to  FIG. 3 , reference numeral  300  generally indicates a counter C which is used to assign ticks to blocks being created within a blockchain. As will be seen, the ticks t 1 , t 2 , . . . tn are issued in order of increasing time. 
     Referring now to  FIG. 4  of the drawings, reference numeral  400  generally indicates a blockchain with STBs based on ticks t 1 , t 2 , . . . tn are issued issued by the counter C of  FIG. 3 . 
       FIG. 5  is a schematic drawing showing an FBC  500  created based on ticks t 3  to t 9  issued by the counter C. It is possible that an FBC may comprise a single block as in the case of the block  60  issued based on a tick t 5  by the counter C as can be seen in in  FIG. 6 . 
     Thus far, a generic block chain and various instances of said generic block chain that together define a family have been described as being created as separate block chains. However, in accordance with the other embodiments, this need not be the case as it is possible to create a family of block chains from a single block chain as is illustrated in  FIG. 2B  of the drawings. Referring to  FIG. 2B , a generic finite block chain  250  and its instances (here only a single instance  252  shown) are implemented on the block chain  260 . Thus, an entire block chain family may be created on a single block chain. 
       FIG. 7  illustrates a process for the creation of a new STB, in accordance with one embodiment of the invention. Referring to  FIG. 7 , reference numeral  700  indicates a counter C associated with a particular blockchain. Reference numeral  702  indicates STB 5  which was created based on a tick t 5  requested from the counter  700 . The drawing illustrates that in order to create a new block STB 21  indicated by reference numeral  704 , at a time given by tick t 20 , a certain effort E is required. 
     Referring now to  FIG. 8  of the drawings, there is shown a schematic representation of an instance  802 , of a finite blockchain created based on a generic finite blockchain  800 , in accordance with the techniques disclosed herein. 
     Blocks from different block chains corresponding to or representing the same step in a process are referred to as being equivalent blocks. For purposes of determining equivalence between blocks across multiple chains, the actual time of a tick associated with a particular block is not important. Instead, to determine equivalence it is necessary to identify the blocks with the same relative tick position within the set of ticks associated with each blockchain instance. The ticks associated with a particular blockchain may define an ordered set, in one embodiment. In one embodiment, a base counter shifting operation is provided in order to provide a basis to determine equivalence between state transition blocks (a concept that will be described more fully below) occurring across multiple blockchain instances. In other words, for a given counter C 1  associated with a particular finite blockchain FBC the state transitions referencing said counter C 1  may be expressed as FBC (Counter=C 1 )=(STB 0 (C 1 .t 0 )+STB 1 (C 1 .t 1 )+ . . . +STBn (C 1 .tn)) where FBC.C represents the counter and FBC.C.t represents a tick. Thus, base counter shifting facilitates a transformation FBC (counter=C 1 )→FBC (counter=C 2 ). 
     It will be appreciated that through base counter shifting, equivalent state transition blocks across multiple blockchain instances may be identified. For example, the statement FBC 1 .C.t 1 =FBC 2 .C.t 2 =FBCn.C.tn . . . may be used to map equivalent blocks across blockchain instances. In one embodiment, such a statement may define a tick alignment record, which specifies the blocks across multiple blockchains that are equivalent and are thus considered to be “aligned”. 
     In one embodiment, an “Alignment block” may be used to record the alignment of one or more blocks STB 1 , STB 2  etc. where STB 1 , STB 2  are respective members of the chains FBC 1 , FBC 2  . . . . The Alignment blocks may be created with authorization from the state transition counter with a tick t and an associated time T. In one embodiment Alignment blocks may be associated with each the participating instance blockchains FBC 1 , FBC 2  . . . . In one embodiment, each Alignment block (STBalg) may include a tick alignment record. An alignment record may be represented as: STBalg=(FBC 1 (counter=C 1 ).STB 1 , FBC 2 (counter=C 2 ).STB 2  . . . . ) 
     In one embodiment, an alignment function may be used to uncover a functional equivalence between blocks across multiple instances of blockchains which may be represented by a function F (FBC 1 .STB 1 , FBC 2 .STB 2  . . . ), that aligns FBC 1 .STBi and FBC 2 .STBj . . . given validating parameters. i.e. in other words F (FBC 1 .STBi, FBC 2 .STBj, . . . , STBi.{parameters}, STBj.{parameters})={FBC 1 .STBalg 1 , FBC 2 .STBalg 2 }. 
     In one embodiment, a state transition aspirational block may be defined as an aspired to or expected transition in a process. Thus, a generic FBC may be defined as a blockchain with chain of aspirational blocks {STBa}. 
     An instance FBCi may be regarded as a base counter shifted FBCg. 
     Referring again to  FIG. 2 , it will be seen that the blockchain instance  214  includes blocks  216  to  228 . The blocks  216  to  228  have been fully executed and are thus labeled as STBe 1 , STBe 2 , etc. The blocks  216  and  218  are aligned with the block  204  in the generic blockchain  202 , the block  220  is aligned with the block  206 , the blocks  224  and  226  are aligned with the block  208 , the block  222  is aligned with the block  210 , and the block  228  is aligned with the block  212 . Thus, it will be seen that each block in the generic FBC  202  is aligned with equivalent blocks in the instance  214 . Since all blocks in the generic FBC  202  have been completed in the instance  214 , and the blocks between the chains  202  and  214  are aligned, the blockchain  214  may be described as a completely aligned executed instance of the generic FBC  202 . It should be noted that the block  204  in the generic blockchain  202  is a means block and is aligned with two blocks (blocks  216  and  218 ) in the instance blockchain  214 . Likewise, the block  208  in the generic blockchain  202  is a means block and is aligned with two blocks (the blocks  224 ,  226 ) in the instance blockchain  214 . 
     By way of further example, reference numeral  230  indicates another example of a completely aligned executed instance comprising executed blocks to  232  to  240 . For purposes of alignment (equivalence), the block  232  is aligned with or equivalent to the block  204 , the block  234  is aligned with the block  206 , the block  236  is aligned with the block  208 , the block  238  is aligned with the block  210 , and the block  240  is aligned with the block  212 . 
       FIG. 2  also shows a blockchain  240  which represents an active instance of the generic blockchain  202  which is similar to aligned instances  214  and  230  except that the blockchain  240  also includes a block  244  which represents a state transition promised block (STBp). A promised block is an Ends block that exists in a generic blockchain, but not in an active instance. An active instance may be represented in terms of a promised blocks as FBCia={STBe}+{STBp}. 
     A completely aligned instance (FBCiae) is an instance where {STBp} is a null set, as there exists {STBe} blocks for all STBg.{Ends}, and there exists Alignment blocks {STBalg} for all blocks in {STBe}. 
     In one embodiment, alignment records may be used to align equivalent blocks from two finite instance blockchains that were created based on the same generic finite blockchain. This is illustrated in  FIG. 9  of the drawings which shows an instance FBC  900  comprising an alignment block  902  that indicates that the block  904  is equivalent to the block  912  occurring in instance  910 . As will be seen, the instance  910  also includes an alignment block  914  to indicate that the block  912  in instance  910  is equivalent to the block  904  in the instance  900 . It will be appreciated that an alignment block may be constructed for each of the blocks in the instances  900  and  910  to indicate the equivalence between each of the blocks in said instances. 
       FIG. 10  shows a block diagram illustrating one example of an operating environment blockchain system  1000  according to one example of the present invention. 
     The operating environment of  FIG. 10  may be a cloud computing environment or a non-cloud computing environment, in accordance with various embodiments. In a cloud computing environment, various embodiments of the present invention discussed below are provided as a service.  FIG. 10  illustrates one or more networks  1002  that, in one example, can include wide area networks, local area networks, wireless networks, and/or the like. The environment  1000  includes a plurality of information processing systems  1004 ,  1006 ,  1008 ,  1010  that are communicatively coupled to the network(s)  1002 . The information processing systems  1004 ,  1006 ,  1008 ,  1010  include one or more servers  1004  and one or more user systems  1006 ,  1008 ,  1010 . The user systems  1006 ,  1008 ,  1010  can include, for example, information processing systems such as desktop computers, laptop computers, tablet-based computers, wireless devices such as mobile phones, personal digital assistants, and the like. 
       FIG. 10  further illustrates as part of the server system  1004 , a blockchain system  1018  communicating with one or more databases  1012 ,  1014 ,  1016  using a blockchain protocol and communicatively coupled to the network  1002 . 
     In accordance with one embodiment, the finite blockchains described may be stored in the databases  1012 - 1016 . The information processing systems  1006 ,  1008 ,  1010  may represent computing devices within an organization that produce change evidence data that evidences that a particular process step mapped to a finite generic blockchain in the blockchain system  1018  has been completed. In one embodiment, the information processing systems  1006 ,  1008 ,  1010  may be configured to the report the change evidence data to the blockchain system  1018 . 
     In accordance with the various embodiments, the change evidence data may include verifiable data that a particular process step has been successfully completed or executed. Examples of change evidence data may include completion of a particular step in a drug approval process, approval of an order for raw materials needed in a manufacturing process, confirmation of shipment of units manufactured, etc. 
     In one embodiment, to create state transition blocks based on the change evidence data, the blockchain system  1018  may create two kinds of records: transactions and blocks. Transactions are the actual data stored in the blockchain. In one example, the data in each block represents a single transaction. In another example, data in each block represents more than one transaction that is dividable into sections within each block. In one embodiment, the transactions may be created by users or participants using the information processing systems  1006 ,  1008 ,  1010 . 
     The blocks are recorded that confirm when and in what sequence certain transaction become journaled at back of the blockchain database. 
       FIG. 11  is a functional diagram for a blockchain  1100  illustrating details of each block, in accordance with one embodiment of the invention. Shown are record blocks  1102  and  1172  and transactions  1110 . The transactions  1110  are actual data stored in the blockchain  1100 . The blocks  1110  are records of transactions. In this example transactions  1110  are all associated with block  1172 . For e.g. transaction  1112  is stored inside block  1172  as  1176 . 
     Record blocks  1110  represent a series of transactions  1112  through  1122  as shown for transactions 1 through transaction N, respectively. Each transaction  1110  typically includes a transaction ID  1114 , sending address  1116 , and state change information  1118 . 
     A hash function  1190  and  1192  is shown as part of the record blocks  1150 . In one implementation of a blockchain the previous hash function is input to a subsequent hash function  1192 , along with the transaction block  1172  as shown. This ensures that there has been no tampering or alteration of the data in the record blockchain. 
     In accordance with one embodiment of the invention, the techniques and systems disclosed herein may be used to practice the method illustrated in the flowchart of  FIG. 12 . Referring to  FIG. 12 , at block  1200 , the blockchain system  1018  stores at least one finite generic blockchain comprising the percentage of blocks, each corresponding to a step in a multi-step process. At block  1202 , the system dynamically generates at least one finite blockchain instance based on said at least one generic finite blockchain. At block  1204 , the system receives change evidence data pertaining to at least one step in the multistep process. This change evidence data may be received from other nodes configured in the network. Finally, at block  1206 , the system performs and update operation to update the finite blockchain instance based on the change evidence data. 
     Referring now to  FIG. 13  of the drawings, there is shown a flowchart of operations performed in accordance with another embodiment of the invention. Referring to the drawing, at block  1300 , a generic blockchain generated to represent an idealized process which is generally based on a real-world process. At block  1302 , an instance of a finite blockchain is created based on the generic blockchain. At block  1304 , change evidence information is received from one or more nodes in a network. At block  1306 , changes based on the change evidence information is recorded into the instance of the blockchain. 
       FIG. 14  is a block diagram illustrating exemplary hardware for executing some of the techniques disclosed herein, in accordance with one embodiment of the invention. In certain aspects, the computer system  1400  may be implemented using hardware or a combination of software and hardware, either in a dedicated server or integrated into another entity or distributed across multiple entities. 
     Computer system  1400  (e.g., client or server) includes a bus  1408  or other communication mechanism for communicating information, and a processor  1402  coupled with bus  1416  for processing information. According to one aspect, the computer system  1400  is implemented as one or more special-purpose computing devices. The special-purpose computing device may be hard-wired to perform the disclosed techniques, or may include digital electronic devices such as one or more application-specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs) that are persistently programmed to perform the techniques, or may include one or more general purpose hardware processors programmed to perform the techniques pursuant to program instructions in firmware, memory, other storage, or a combination. Such special-purpose computing devices may also combine custom hard-wired logic, ASICs, or FPGAs with custom programming to accomplish the techniques. The special-purpose computing devices may be desktop computer systems, portable computer systems, handheld devices, networking devices or any other device that incorporates hard-wired and/or program logic to implement the techniques. By way of example, the computer system  1400  may be implemented with one or more processors  1402 . Processor  1402  may be a general-purpose microprocessor, a microcontroller, a Digital Signal Processor (DSP), an ASIC, a FPGA, a Programmable Logic Device (PLD), a controller, a state machine, gated logic, discrete hardware components, or any other suitable entity that can perform calculations or other manipulations of information. 
     Computer system  1400  can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them stored in an included memory  1404  (e.g., memory  220  and  230 ), such as a Random Access Memory (RAM), a flash memory, a Read Only Memory (ROM), a Programmable Read-Only Memory (PROM), an Erasable PROM (EPROM), registers, a hard disk, a removable disk, a CD-ROM, a DVD, or any other suitable storage device, coupled to bus  1416  for storing information and instructions to be executed by processor  1402 . The processor  1402  and the memory  1404  can be supplemented by, or incorporated in, special purpose logic circuitry. Expansion memory may also be provided and connected to computer system  1400  through input/output module  1408 , which may include, for example, a SIMM (Single in Line Memory Module) card interface. Such expansion memory may provide extra storage space for computer system  1400  or may also store applications or other information for computer system  1400 . Specifically, expansion memory may include instructions to carry out or supplement the processes described above and may include secure information also. Thus, for example, expansion memory may be provided as a security module for computer system  1400  and may be programmed with instructions that permit secure use of computer system  1400 . In addition, secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a nor-hackable manner. 
     The instructions may be stored in the memory  1404  and implemented in one or more computer program products, i.e., one or more modules of computer program instructions encoded on a computer readable medium for execution by, or to control the operation of, the computer system  1400 , and according to any method well known to those of skill in the art, including, but not limited to, computer languages such as data-oriented languages (e.g., SQL, dBase), system languages (e.g., C, Objective-C, C++, Assembly), architectural languages (e.g., Java, .NET), and application languages (e.g., PHP, Ruby, Perl, Python). Instructions may also be implemented in computer languages such as array languages, aspect-oriented languages, assembly languages, authoring languages, command line interface languages, compiled languages, concurrent languages, curly-bracket languages, dataflow languages, data-structured languages, declarative languages, esoteric languages, extension languages, fourth-generation languages, functional languages, interactive mode languages, interpreted languages, iterative languages, list-based languages, little languages, logic-based languages, machine languages, macro languages, metaprogramming languages, multiparadigm languages, numerical analysis, non-English-based languages, object-oriented class-based languages, object-oriented prototype-based languages, off-side rule languages, procedural languages, reflective languages, rule-based languages, scripting languages, stack-based languages, synchronous languages, syntax handling languages, visual languages, embeddable languages, and xml-based languages. Memory  1404  may also be used for storing temporary variable or other intermediate information during execution of instructions to be executed by processor  1402 . 
     A computer program as discussed herein does not necessarily correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, subprograms, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network. The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. 
     Computer system  1400  further includes a data storage device  1406  such as a magnetic disk or optical disk, coupled to bus  1416  for storing information and instructions. Computer system  1400  may be coupled via input/output module  1408  to various devices. The input/output module  1408  can be any input/output module. Example input/output modules  1408  include data ports such as USB ports. In addition, input/output module  1408  may be provided in communication with processor  1402 , so as to enable near area communication of computer system  1400  with other devices. The input/output module  1408  may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used. The input/output module  1408  is configured to connect to a communications module  1410 . Example communications modules  1410  include networking interface cards, such as Ethernet cards and modems. 
     The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. The communication network (e.g., network  1002 ) can include, for example, any one or more of a PAN, a LAN, a CAN, a MAN, a WAN, a BBN, the Internet, and the like. Further, the communication network can include, but is not limited to, for example, any one or more of the following network topologies, including a bus network, a star network, a ring network, a mesh network, a star-bus network, tree or hierarchical network, or the like. 
     For example, in certain aspects, communications module  1410  can provide a two-way data communication coupling to a network link that is connected to a local network. Wireless links and wireless communication may also be implemented. Wireless communication may be provided under various modes or protocols, such as GSM (Global System for Mobile Communications), Short Message Service (SMS), Enhanced Messaging Service (EMS), or Multimedia Messaging Service (MMS) messaging, CDMA (Code Division Multiple Access), Time division multiple access (TDMA), Personal Digital Cellular (PDC), Wideband CDMA, General Packet Radio Service (GPRS), or LTE (Long-Term Evolution), among others. Such communication may occur, for example, through a radio-frequency transceiver. In addition, short-range communication may occur, such as using a BLUETOOTH, WI-FI, or other such transceiver. 
     In any such implementation, communications module  1410  sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information. The network link typically provides data communication through one or more networks to other data devices. For example, the network link of the communications module  1410  may provide a connection through local network to a host computer or to data equipment operated by an Internet Service Provider (ISP). The ISP in turn provides data communication services through the world-wide packet data communication network now commonly referred to as the Internet. The local network and Internet both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on the network link and through communications module  1410 , which carry the digital data to and from computer system  1400 , are example forms of transmission media. 
     Computer system  1400  can send messages and receive data, including program code, through the network(s), the network link and communications module  1410 . In the Internet example, a server might transmit a requested code for an application program through Internet, the ISP, the local network and communications module  1410 . The received code may be executed by processor  1402  as it is received, and/or stored in data storage  1406  for later execution. 
     In certain aspects, the input/output module  1408  is configured to connect to a plurality of devices, such as an input device  1412  and/or an output device  1414 . Example input devices  1412  include a stylus, a finger, a keyboard and a pointing device, e.g., a mouse or a trackball, by which a user can provide input to the computer system  1400 . Other kinds of input devices  1412  can be used to provide for interaction with a user as well, such as a tactile input device, visual input device, audio input device, or brain-computer interface device. For example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, tactile, or brain wave input. Example output devices  1414  include display devices, such as a LED (light emitting diode), CRT (cathode ray tube), LCD (liquid crystal display) screen, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, for displaying information to the user. The output device  1414  may comprise appropriate circuitry for driving the output device  1414  to present graphical and other information to a user. 
     According to one aspect of the present disclosure, the user systems and the server shown in  FIG. 10  can be implemented using a computer system  1400  in response to processor  1402  executing one or more sequences of one or more instructions contained in memory  1404 . Such instructions may be read into memory  1404  from another machine-readable medium, such as data storage device  1406 . Execution of the sequences of instructions contained in main memory  1404  causes processor  1402  to perform the process steps described herein. One or more processors in a multi-processing arrangement may also be employed to execute the sequences of instructions contained in memory  1404 . In alternative aspects, hard-wired circuitry may be used in place of or in combination with software instructions to implement various aspects of the present disclosure. Thus, aspects of the present disclosure are not limited to any specific combination of hardware circuitry and software. 
     Various aspects of the subject matter described in this specification can be implemented in a computing system that includes a back end component, e.g., a data server, or that includes a middleware component, e.g., an application server, or that includes a front end component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back end, middleware, or front end components. 
     Computing system  1400  can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. Computer system  1400  can be, for example, and without limitation, a desktop computer, laptop computer, or tablet computer. Computer system  1400  can also be embedded in another device, for example, and without limitation, a mobile telephone, a personal digital assistant (PDA), a mobile audio player, a Global Positioning System (GPS) receiver, a video game console, and/or a television set top box. 
     The term “machine-readable storage medium” or “computer-readable medium” as used herein refers to any medium or media that participates in providing instructions or data to processor  1402  for execution. The term “storage medium” as used herein refers to any non-transitory media that store data and/or instructions that cause a machine to operate in a specific fashion. Such a medium may take many forms, including, but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media include, for example, optical disks, magnetic disks, or flash memory, such as data storage device  1406 . Volatile media include dynamic memory, such as memory  1404 . Transmission media include coaxial cables, copper wire, and fiber optics, including the wires that comprise bus  1416 . Common forms of machine-readable media include, for example, floppy disk, a flexible disk, hard disk, magnetic tape, any other magnetic medium, a CD-ROM, DVD, any other optical medium, punch cards, paper tape, any other physical medium with patterns of holes, a RAM, a PROM, an EPROM, a FLASH EPROM, any other memory chip or cartridge, or any other medium from which a computer can read. The machine-readable storage medium can be a machine-readable storage device, a machine-readable storage substrate, a memory device, a composition of matter affecting a machine-readable propagated signal, or a combination of one or more of them. 
     As used in this specification of this application, the terms “computer-readable storage medium” and “computer-readable media” are entirely restricted to tangible, physical objects that store information in a form that is readable by a computer. These terms exclude any wireless signals, wired download signals, and any other ephemeral signals. Storage media is distinct from but may be used in conjunction with transmission media. Transmission media participates in transferring information between storage media. For example, transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus  1416 . Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications. Furthermore, as used in this specification of this application, the terms “computer”, “server”, “processor”, and “memory” all refer to electronic or other technological devices. These terms exclude people or groups of people. For the purposes of the specification, the terms display or displaying means displaying on an electronic device. 
     To illustrate the interchangeability of hardware and software, items such as the various illustrative blocks, modules, components, methods, operations, instructions, and algorithms have been described generally in terms of their functionality. Whether such functionality is implemented as hardware, software or a combination of hardware and software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application. 
     As used herein, the phrase “at least one of” preceding a series of items, with the terms “and” or “or” to separate any of the items, modifies the list as a whole, rather than each member of the list (i.e., each item). The phrase “at least one of” does not require selection of at least one item; rather, the phrase allows a meaning that includes at least one of any one of the items, and/or at least one of any combination of the items, and/or at least one of each of the items. By way of example, the phrases “at least one of A, B, and C” or “at least one of A, B, or C” each refer to only A, only B, or only C; any combination of A, B, and C; and/or at least one of each of A, B, and C. 
     To the extent that the term “include,” “have,” or the like is used in the description or the claims, such term is intended to be inclusive in a manner similar to the term “comprise” as “comprise” is interpreted when employed as a transitional word in a claim. Phrases such as an aspect, the aspect, another aspect, some aspects, one or more aspects, an implementation, the implementation, another implementation, some implementations, one or more implementations, an embodiment, the embodiment, another embodiment, some embodiments, one or more embodiments, a configuration, the configuration, another configuration, some configurations, one or more configurations, the subject technology, the disclosure, the present disclosure, other variations thereof and alike are for convenience and do not imply that a disclosure relating to such phrase(s) is essential to the subject technology or that such disclosure applies to all configurations of the subject technology. A disclosure relating to such phrase(s) may apply to all configurations, or one or more configurations. A disclosure relating to such phrase(s) may provide one or more examples. A phrase such as an aspect or some aspects may refer to one or more aspects and vice versa, and this applies similarly to other foregoing phrases. 
     A reference to an element in the singular is not intended to mean “one and only one” unless specifically stated, but rather “one or more.” The term “some” refers to one or more. Underlined and/or italicized headings and subheadings are used for convenience only, do not limit the subject technology, and are not referred to in connection with the interpretation of the description of the subject technology. Relational terms such as first and second and the like may be used to distinguish one entity or action from another without necessarily requiring or implying any actual such relationship or order between such entities or actions. All structural and functional equivalents to the elements of the various configurations described throughout this disclosure that are known or later come to be known to those of ordinary skill in the art are expressly incorporated herein by reference and intended to be encompassed by the subject technology. Moreover, nothing disclosed herein is intended to be dedicated to the public regardless of whether such disclosure is explicitly recited in the above description. No claim element is to be construed under the provisions of 35 U.S.C. § 112, sixth paragraph, unless the element is expressly recited using the phrase “means for” or, in the case of a method claim, the element is recited using the phrase “step for.” 
     While this specification contains many specifics, these should not be construed as limitations on the scope of what may be claimed, but rather as descriptions of particular implementations of the subject matter. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable sub-combination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a sub-combination or variation of a sub-combination. 
     The subject matter of this specification has been described in terms of particular aspects, but other aspects can be implemented and are within the scope of the following claims. For example, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. The actions recited in the claims can be performed in a different order and still achieve desirable results. As one example, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation of various system components in the aspects described above should not be understood as requiring such separation in all aspects, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products. 
     The title, background, brief description of the drawings, abstract, and drawings are hereby incorporated into the disclosure and are provided as illustrative examples of the disclosure, not as restrictive descriptions. It is submitted with the understanding that they will not be used to limit the scope or meaning of the claims. In addition, in the detailed description, it can be seen that the description provides illustrative examples and the various features are grouped together in various implementations for the purpose of streamlining the disclosure. The method of disclosure is not to be interpreted as reflecting an intention that the claimed subject matter requires more features than are expressly recited in each claim. Rather, as the claims reflect, inventive subject matter lies in less than all features of a single disclosed configuration or operation. The claims are hereby incorporated into the detailed description, with each claim standing on its own as a separately claimed subject matter. 
     The claims are not intended to be limited to the aspects described herein but are to be accorded the full scope consistent with the language claims and to encompass all legal equivalents. Notwithstanding, none of the claims are intended to embrace subject matter that fails to satisfy the requirements of the applicable patent law, nor should they be interpreted in such a way.