Great. I’ll generate a labeled visual diagram showing both the full quantum circuit pipeline and the interaction loop between MTQC (algorithm compilation) and MQPA (pulse-level execution).

I’ll let you know as soon as it’s ready for your review.

MQPA and MTQC Integration in a Quantum Computing Workflow

The diagram below illustrates a full quantum circuit pipeline from classical input to output, highlighting how Multi-Target Quantum Compilation (MTQC) and Multi-Qubit Pulse Amplification (MQPA) relate to each other in an iterative feedback loop:

(image) Figure: A high-level quantum computing pipeline illustrating the interplay between Multi-Target Quantum Compilation (MTQC) and Multi-Qubit Pulse Amplification (MQPA). The classical input is compiled into a quantum circuit via MTQC (utilizing a genetic algorithm-based approach, GAVQA), then optimized at the pulse level by MQPA for execution on quantum hardware. A feedback loop (dashed blue arrow) connects MTQC and MQPA, allowing circuit design and pulse shaping to iteratively inform each other to maximize fidelity.

Pipeline Stages

  • Classical Input: The process begins with classical data (e.g. molecular structures, GIS spatial data, text for NLP). This is the problem input that needs to be processed or analyzed using a quantum algorithm.
  • Circuit Encoding: The classical input is encoded into a quantum-readable form. This could involve embedding the data into an initial quantum state or setting parameters in a quantum circuit that represent the input features. Essentially, it translates classical information into quantum superposition or entangled states that a quantum computer can work with.
  • Quantum Compiler (MTQC/GAVQA): The encoded problem is then handled by the quantum compiler, which in this case is a Multi-Target Quantum Compilation (MTQC) algorithm. MTQC (using the GAVQA approach) designs an optimized quantum circuit suited for the task. Rather than targeting a single objective, MTQC can optimize for multiple goals or sub-tasks simultaneously (hence multi-target) (Quantum computing’s next step: New algorithm boosts multitasking). The compiler builds the circuit from a library of quantum gates and evolves it through an iterative process (analogous to a genetic algorithm with selection, crossover, and mutation) until an optimal or near-optimal circuit is found (Quantum computing’s next step: New algorithm boosts multitasking). This produces a sequence of quantum gate operations that accomplish the desired computation while balancing the multiple targets.
  • MQPA Pulse Optimization: Before execution on hardware, the abstract quantum gates are converted into actual physical control pulses for the quantum device. This is where Multi-Qubit Pulse Amplification (MQPA) comes into play. MQPA involves fine-tuning the microwave or laser pulses that enact the quantum gates, with a focus on pulse shaping, error mitigation, and cross-talk control. At this stage, the goal is to adjust control parameters (pulse amplitudes, durations, frequencies, timing) to ensure the gates are performed with high fidelity on real hardware. For example, advanced pulse shaping techniques can counteract multiple error sources at once (Experimental error suppression in Cross-Resonance gates via multi …). Recent research shows that carefully optimized pulses (e.g. using multi-derivative, multi-constraint shaping) can achieve a 2–4× improvement in multi-qubit gate fidelity (Improving frequency selection of driven pulses using derivative …). Likewise, calibrating pulses to minimize interference (cross-talk) between qubits – for instance by detuning qubits or inserting calibration sequences – helps constrain and correct crosstalk errors ([2207.08416] Control and mitigation of microwave crosstalk effect with superconducting qubits). MQPA thus ensures the compiled circuit is tailored to the hardware’s physical quirks, maximizing the chance of successful execution.
  • Quantum Execution Environment: The optimized pulses are then delivered to the quantum execution environment, i.e. the quantum hardware (such as a superconducting quantum processor, ion trap system, etc.). Here, the qubits undergo the sequence of operations dictated by the pulses. This is the actual running of the quantum circuit on the machine. Thanks to the prior steps, the operations are scheduled and calibrated in a way that seeks to minimize errors during this execution phase.
  • Fidelity Measurement: After the quantum circuit is executed, the qubits are measured to obtain a result. Measurement collapses the quantum states to classical outcomes (bits or numerical results). In addition to producing the raw outcome, this step evaluates the fidelity of the operation – essentially checking how close the actual outcome is to the ideal or expected outcome if there were no errors. Fidelity can be assessed by running the circuit multiple times to gather statistics or by comparing to known benchmark states. High fidelity indicates the circuit performed as intended, while lower fidelity signals the presence of errors or noise. This measurement stage thus provides crucial feedback on the performance of both the compiled circuit and the pulse optimizations.
  • Classical Output: Finally, the results of the measurement are output as classical data. This could be the answer to the problem initially posed (for example, an optimal configuration of a molecule, a classification label, or some numerical prediction). The classical output is what the user or a classical post-processing algorithm will use or interpret. At this point, the quantum part of the computation is complete, and we’re back in the classical realm with an answer.

MTQC ↔︎ MQPA Feedback Loop

One of the key aspects illustrated in the diagram is the feedback loop between the Quantum Compiler (MTQC) and the Pulse Optimization (MQPA) stages. This two-way interaction (shown by the dashed blue arrow labeled “Feedback Loop (MTQC ↔︎ MQPA)”) means that the process of compiling the circuit and the process of calibrating pulses are not one-off sequential steps, but rather can inform each other iteratively:

  • Circuit ⟹ Pulse Influence: The structure of the quantum circuit influences how we optimize pulses. For instance, if the MTQC-designed circuit uses a particular gate frequently or entangles certain qubits, the MQPA stage will focus on making those operations as error-free as possible (by, say, using bespoke pulse shapes or adjusting qubit frequencies to reduce cross-talk during those operations). Knowledge of the circuit’s critical paths lets MQPA prioritize mitigating errors on the most sensitive or frequent operations.
  • Pulses ⟹ Circuit Influence: Conversely, feedback from the pulse level can prompt changes in the circuit design. If the hardware has difficulty executing a certain gate combination with high fidelity (as revealed by the fidelity measurements), the compiler can adjust the circuit in the next iteration. For example, MTQC might choose an alternative gate decomposition that the hardware executes more reliably, or re-route certain operations to qubits that are more isolated from cross-talk. In effect, the compiler “learns” about the hardware’s strengths and weaknesses through the fidelity feedback and adapts the quantum circuit accordingly.
  • Iterative Co-Optimization: MTQC using GAVQA is inherently iterative – it evolves candidate circuits over many generations, selecting those that perform best (Quantum computing’s next step: New algorithm boosts multitasking). By incorporating the real hardware execution results (fidelity data) into this evolution as a fitness criterion, the algorithm can drive the circuit design toward solutions that not only solve the computational problem but also execute with higher fidelity on the given quantum device. Likewise, the MQPA procedure can be iteratively refined: initial pulse tuning is done for the first circuit draft, and after each run, pulse parameters can be further adjusted based on observed error patterns. This co-optimization loop continues until the compiled circuit and its corresponding pulse schedule are jointly optimized for the target hardware.
  • Adapting to Noise: The importance of the MTQC–MQPA loop is underscored by the need to handle quantum noise and errors. Researchers are actively looking at extending compilation algorithms like MTQC to account for noise characteristics of hardware (Quantum computing’s next step: New algorithm boosts multitasking). The feedback loop enables such adaptation: information about noise (e.g. which qubit couplings are noisy, which pulses cause decoherence) flows into the compiler, and conversely the compiler’s choices inform what the pulse controller should focus on. The result is a more resilient overall system – the quantum program and the machine’s control settings are tuned together to achieve the best performance under real-world conditions.

In summary, MTQC (Multi-Target Quantum Compilation) provides the brain of the operation – designing quantum circuits that aim to fulfill complex objectives – while MQPA (Multi-Qubit Pulse Amplification) provides the muscle at the hardware level – executing those circuits with high-fidelity control over the qubits. The feedback loop between them is crucial: it closes the gap between abstract algorithms and physical hardware. By continuously feeding performance data back into the compilation process and adjusting low-level controls based on high-level needs, the system can achieve far better accuracy and efficiency than a one-pass compile-and-run approach. This synergistic co-design of quantum software and hardware control is key to unlocking improved quantum computation capabilities (Quantum computing’s next step: New algorithm boosts multitasking) (Improving frequency selection of driven pulses using derivative …), especially as we push the limits of today’s noisy quantum devices toward more reliable, large-scale quantum computing.

Sources: Quantum compilation and multitasking (Quantum computing’s next step: New algorithm boosts multitasking) (Quantum computing’s next step: New algorithm boosts multitasking); hardware pulse shaping and error mitigation techniques (Improving frequency selection of driven pulses using derivative …) ([2207.08416] Control and mitigation of microwave crosstalk effect with superconducting qubits); integration of noise considerations into compilation (Quantum computing’s next step: New algorithm boosts multitasking).

LS0tDQp0aXRsZTogIlF1YW50dW0gdyBqZXNzaS5jaGF0Ig0KYXV0aG9yOiAiSmVzc2ljYSBNY1BoYXVsIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KR3JlYXQuIEnigJlsbCBnZW5lcmF0ZSBhIGxhYmVsZWQgdmlzdWFsIGRpYWdyYW0gc2hvd2luZyBib3RoIHRoZSBmdWxsIHF1YW50dW0gY2lyY3VpdCBwaXBlbGluZSBhbmQgdGhlIGludGVyYWN0aW9uIGxvb3AgYmV0d2VlbiBNVFFDIChhbGdvcml0aG0gY29tcGlsYXRpb24pIGFuZCBNUVBBIChwdWxzZS1sZXZlbCBleGVjdXRpb24pLg0KDQpJ4oCZbGwgbGV0IHlvdSBrbm93IGFzIHNvb24gYXMgaXTigJlzIHJlYWR5IGZvciB5b3VyIHJldmlldy4NCg0KIyBNUVBBIGFuZCBNVFFDIEludGVncmF0aW9uIGluIGEgUXVhbnR1bSBDb21wdXRpbmcgV29ya2Zsb3cNCg0KVGhlIGRpYWdyYW0gYmVsb3cgaWxsdXN0cmF0ZXMgYSBmdWxsIHF1YW50dW0gY2lyY3VpdCBwaXBlbGluZSBmcm9tIGNsYXNzaWNhbCBpbnB1dCB0byBvdXRwdXQsIGhpZ2hsaWdodGluZyBob3cgKipNdWx0aS1UYXJnZXQgUXVhbnR1bSBDb21waWxhdGlvbiAoTVRRQykqKiBhbmQgKipNdWx0aS1RdWJpdCBQdWxzZSBBbXBsaWZpY2F0aW9uIChNUVBBKSoqIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIGFuIGl0ZXJhdGl2ZSBmZWVkYmFjayBsb29wOg0KDQogKFtpbWFnZV0oKSkgKkZpZ3VyZTogQSBoaWdoLWxldmVsIHF1YW50dW0gY29tcHV0aW5nIHBpcGVsaW5lIGlsbHVzdHJhdGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gTXVsdGktVGFyZ2V0IFF1YW50dW0gQ29tcGlsYXRpb24gKE1UUUMpIGFuZCBNdWx0aS1RdWJpdCBQdWxzZSBBbXBsaWZpY2F0aW9uIChNUVBBKS4gVGhlIGNsYXNzaWNhbCBpbnB1dCBpcyBjb21waWxlZCBpbnRvIGEgcXVhbnR1bSBjaXJjdWl0IHZpYSBNVFFDICh1dGlsaXppbmcgYSBnZW5ldGljIGFsZ29yaXRobS1iYXNlZCBhcHByb2FjaCwgR0FWUUEpLCB0aGVuIG9wdGltaXplZCBhdCB0aGUgcHVsc2UgbGV2ZWwgYnkgTVFQQSBmb3IgZXhlY3V0aW9uIG9uIHF1YW50dW0gaGFyZHdhcmUuIEEgZmVlZGJhY2sgbG9vcCAoZGFzaGVkIGJsdWUgYXJyb3cpIGNvbm5lY3RzIE1UUUMgYW5kIE1RUEEsIGFsbG93aW5nIGNpcmN1aXQgZGVzaWduIGFuZCBwdWxzZSBzaGFwaW5nIHRvIGl0ZXJhdGl2ZWx5IGluZm9ybSBlYWNoIG90aGVyIHRvIG1heGltaXplIGZpZGVsaXR5LiogDQoNCiMjIFBpcGVsaW5lIFN0YWdlcw0KDQotICoqQ2xhc3NpY2FsIElucHV0OioqIFRoZSBwcm9jZXNzIGJlZ2lucyB3aXRoIGNsYXNzaWNhbCBkYXRhIChlLmcuIG1vbGVjdWxhciBzdHJ1Y3R1cmVzLCBHSVMgc3BhdGlhbCBkYXRhLCB0ZXh0IGZvciBOTFApLiBUaGlzIGlzIHRoZSBwcm9ibGVtIGlucHV0IHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIG9yIGFuYWx5emVkIHVzaW5nIGEgcXVhbnR1bSBhbGdvcml0aG0uICANCi0gKipDaXJjdWl0IEVuY29kaW5nOioqIFRoZSBjbGFzc2ljYWwgaW5wdXQgaXMgZW5jb2RlZCBpbnRvIGEgcXVhbnR1bS1yZWFkYWJsZSBmb3JtLiBUaGlzIGNvdWxkIGludm9sdmUgZW1iZWRkaW5nIHRoZSBkYXRhIGludG8gYW4gaW5pdGlhbCBxdWFudHVtIHN0YXRlIG9yIHNldHRpbmcgcGFyYW1ldGVycyBpbiBhIHF1YW50dW0gY2lyY3VpdCB0aGF0IHJlcHJlc2VudCB0aGUgaW5wdXQgZmVhdHVyZXMuIEVzc2VudGlhbGx5LCBpdCB0cmFuc2xhdGVzIGNsYXNzaWNhbCBpbmZvcm1hdGlvbiBpbnRvIHF1YW50dW0gKipzdXBlcnBvc2l0aW9uKiogb3IgKiplbnRhbmdsZWQqKiBzdGF0ZXMgdGhhdCBhIHF1YW50dW0gY29tcHV0ZXIgY2FuIHdvcmsgd2l0aC4gIA0KLSAqKlF1YW50dW0gQ29tcGlsZXIgKE1UUUMvR0FWUUEpOioqIFRoZSBlbmNvZGVkIHByb2JsZW0gaXMgdGhlbiBoYW5kbGVkIGJ5IHRoZSBxdWFudHVtIGNvbXBpbGVyLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgYSAqKk11bHRpLVRhcmdldCBRdWFudHVtIENvbXBpbGF0aW9uIChNVFFDKSoqIGFsZ29yaXRobS4gTVRRQyAodXNpbmcgdGhlIEdBVlFBIGFwcHJvYWNoKSBkZXNpZ25zIGFuIG9wdGltaXplZCBxdWFudHVtIGNpcmN1aXQgc3VpdGVkIGZvciB0aGUgdGFzay4gUmF0aGVyIHRoYW4gdGFyZ2V0aW5nIGEgc2luZ2xlIG9iamVjdGl2ZSwgTVRRQyBjYW4gb3B0aW1pemUgZm9yIG11bHRpcGxlIGdvYWxzIG9yIHN1Yi10YXNrcyBzaW11bHRhbmVvdXNseSAoaGVuY2UgKm11bHRpLXRhcmdldCopIChbUXVhbnR1bSBjb21wdXRpbmcncyBuZXh0IHN0ZXA6IE5ldyBhbGdvcml0aG0gYm9vc3RzIG11bHRpdGFza2luZ10oaHR0cHM6Ly90ZWNoeHBsb3JlLmNvbS9uZXdzLzIwMjQtMTItcXVhbnR1bS1hbGdvcml0aG0tYm9vc3RzLW11bHRpdGFza2luZy5odG1sIzp+OnRleHQ9LGFwcGxpY2F0aW9ucyUyMGFjcm9zcyUyMHZhcmlvdXMlMjBzY2llbnRpZmljJTIwZGlzY2lwbGluZXMpKS4gVGhlIGNvbXBpbGVyIGJ1aWxkcyB0aGUgY2lyY3VpdCBmcm9tIGEgbGlicmFyeSBvZiBxdWFudHVtIGdhdGVzIGFuZCAqKmV2b2x2ZXMqKiBpdCB0aHJvdWdoIGFuIGl0ZXJhdGl2ZSBwcm9jZXNzIChhbmFsb2dvdXMgdG8gYSBnZW5ldGljIGFsZ29yaXRobSB3aXRoIHNlbGVjdGlvbiwgY3Jvc3NvdmVyLCBhbmQgbXV0YXRpb24pIHVudGlsIGFuIG9wdGltYWwgb3IgbmVhci1vcHRpbWFsIGNpcmN1aXQgaXMgZm91bmQgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD1JbWFnZSUzQSUyME5ldyUyMGFsZ29yaXRobSUyMGJvb3N0cyUyMG11bHRpdGFza2luZyxDcmVkaXQlM0ElMjBUb2hva3UlMjBVbml2ZXJzaXR5KSkuIFRoaXMgcHJvZHVjZXMgYSBzZXF1ZW5jZSBvZiBxdWFudHVtIGdhdGUgb3BlcmF0aW9ucyB0aGF0IGFjY29tcGxpc2ggdGhlIGRlc2lyZWQgY29tcHV0YXRpb24gd2hpbGUgYmFsYW5jaW5nIHRoZSBtdWx0aXBsZSB0YXJnZXRzLiAgDQotICoqTVFQQSBQdWxzZSBPcHRpbWl6YXRpb246KiogQmVmb3JlIGV4ZWN1dGlvbiBvbiBoYXJkd2FyZSwgdGhlIGFic3RyYWN0IHF1YW50dW0gZ2F0ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIGFjdHVhbCBwaHlzaWNhbCAqKmNvbnRyb2wgcHVsc2VzKiogZm9yIHRoZSBxdWFudHVtIGRldmljZS4gVGhpcyBpcyB3aGVyZSAqKk11bHRpLVF1Yml0IFB1bHNlIEFtcGxpZmljYXRpb24gKE1RUEEpKiogY29tZXMgaW50byBwbGF5LiBNUVBBIGludm9sdmVzIGZpbmUtdHVuaW5nIHRoZSBtaWNyb3dhdmUgb3IgbGFzZXIgcHVsc2VzIHRoYXQgZW5hY3QgdGhlIHF1YW50dW0gZ2F0ZXMsIHdpdGggYSBmb2N1cyBvbiAqKnB1bHNlIHNoYXBpbmcqKiwgKiplcnJvciBtaXRpZ2F0aW9uKiosIGFuZCAqKmNyb3NzLXRhbGsgY29udHJvbCoqLiBBdCB0aGlzIHN0YWdlLCB0aGUgZ29hbCBpcyB0byBhZGp1c3QgY29udHJvbCBwYXJhbWV0ZXJzIChwdWxzZSBhbXBsaXR1ZGVzLCBkdXJhdGlvbnMsIGZyZXF1ZW5jaWVzLCB0aW1pbmcpIHRvIGVuc3VyZSB0aGUgZ2F0ZXMgYXJlIHBlcmZvcm1lZCB3aXRoIGhpZ2ggZmlkZWxpdHkgb24gcmVhbCBoYXJkd2FyZS4gRm9yIGV4YW1wbGUsIGFkdmFuY2VkIHB1bHNlIHNoYXBpbmcgdGVjaG5pcXVlcyBjYW4gY291bnRlcmFjdCBtdWx0aXBsZSBlcnJvciBzb3VyY2VzIGF0IG9uY2UgKFtFeHBlcmltZW50YWwgZXJyb3Igc3VwcHJlc3Npb24gaW4gQ3Jvc3MtUmVzb25hbmNlIGdhdGVzIHZpYSBtdWx0aSAuLi5dKGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8yMzAzLjAxNDI3Izp+OnRleHQ9LHNpbXVsdGFuZW91c2x5JTIwYWdhaW5zdCUyMG11bHRpcGxlJTIwZXJyb3IlMjBzb3VyY2VzKSkuIFJlY2VudCByZXNlYXJjaCBzaG93cyB0aGF0IGNhcmVmdWxseSBvcHRpbWl6ZWQgcHVsc2VzIChlLmcuIHVzaW5nIG11bHRpLWRlcml2YXRpdmUsIG11bHRpLWNvbnN0cmFpbnQgc2hhcGluZykgY2FuIGFjaGlldmUgYSAy4oCTNMOXIGltcHJvdmVtZW50IGluIG11bHRpLXF1Yml0IGdhdGUgZmlkZWxpdHkgKFtJbXByb3ZpbmcgZnJlcXVlbmN5IHNlbGVjdGlvbiBvZiBkcml2ZW4gcHVsc2VzIHVzaW5nIGRlcml2YXRpdmUgLi4uXShodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3B1YmxpY2F0aW9uLzI1ODIwMTMyOV9JbXByb3ZpbmdfZnJlcXVlbmN5X3NlbGVjdGlvbl9vZl9kcml2ZW5fcHVsc2VzX3VzaW5nX2Rlcml2YXRpdmUtYmFzZWRfdHJhbnNpdGlvbl9zdXBwcmVzc2lvbiM6fjp0ZXh0PUV4cGVyaW1lbnRhbCUyMGVycm9yJTIwc3VwcHJlc3Npb24lMjBpbiUyMENyb3NzLGElMjB0d28lMjB0byUyMGZvdXJmb2xkKSkuIExpa2V3aXNlLCBjYWxpYnJhdGluZyBwdWxzZXMgdG8gbWluaW1pemUgaW50ZXJmZXJlbmNlIChjcm9zcy10YWxrKSBiZXR3ZWVuIHF1Yml0cyDigJMgZm9yIGluc3RhbmNlIGJ5IGRldHVuaW5nIHF1Yml0cyBvciBpbnNlcnRpbmcgY2FsaWJyYXRpb24gc2VxdWVuY2VzIOKAkyBoZWxwcyBjb25zdHJhaW4gYW5kIGNvcnJlY3QgY3Jvc3N0YWxrIGVycm9ycyAoW1syMjA3LjA4NDE2XSBDb250cm9sIGFuZCBtaXRpZ2F0aW9uIG9mIG1pY3Jvd2F2ZSBjcm9zc3RhbGsgZWZmZWN0IHdpdGggc3VwZXJjb25kdWN0aW5nIHF1Yml0c10oaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzIyMDcuMDg0MTYjOn46dGV4dD1jcm9zc3RhbGslMjBiZXR3ZWVuJTIwbWljcm93YXZlJTIwcHVsc2VzJTIwaXMsVXNpbmclMjBvdXIlMjBtZXRob2QlMkMlMjBubyUyMGFkZGl0aW9uYWwpKS4gTVFQQSB0aHVzIGVuc3VyZXMgdGhlIGNvbXBpbGVkIGNpcmN1aXQgaXMgdGFpbG9yZWQgdG8gdGhlIGhhcmR3YXJl4oCZcyBwaHlzaWNhbCBxdWlya3MsIG1heGltaXppbmcgdGhlIGNoYW5jZSBvZiBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4gIA0KLSAqKlF1YW50dW0gRXhlY3V0aW9uIEVudmlyb25tZW50OioqIFRoZSBvcHRpbWl6ZWQgcHVsc2VzIGFyZSB0aGVuIGRlbGl2ZXJlZCB0byB0aGUgKipxdWFudHVtIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCoqLCBpLmUuIHRoZSBxdWFudHVtIGhhcmR3YXJlIChzdWNoIGFzIGEgc3VwZXJjb25kdWN0aW5nIHF1YW50dW0gcHJvY2Vzc29yLCBpb24gdHJhcCBzeXN0ZW0sIGV0Yy4pLiBIZXJlLCB0aGUgcXViaXRzIHVuZGVyZ28gdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgZGljdGF0ZWQgYnkgdGhlIHB1bHNlcy4gVGhpcyBpcyB0aGUgYWN0dWFsIHJ1bm5pbmcgb2YgdGhlIHF1YW50dW0gY2lyY3VpdCBvbiB0aGUgbWFjaGluZS4gVGhhbmtzIHRvIHRoZSBwcmlvciBzdGVwcywgdGhlIG9wZXJhdGlvbnMgYXJlIHNjaGVkdWxlZCBhbmQgY2FsaWJyYXRlZCBpbiBhIHdheSB0aGF0IHNlZWtzIHRvIG1pbmltaXplIGVycm9ycyBkdXJpbmcgdGhpcyBleGVjdXRpb24gcGhhc2UuICANCi0gKipGaWRlbGl0eSBNZWFzdXJlbWVudDoqKiBBZnRlciB0aGUgcXVhbnR1bSBjaXJjdWl0IGlzIGV4ZWN1dGVkLCB0aGUgcXViaXRzIGFyZSBtZWFzdXJlZCB0byBvYnRhaW4gYSByZXN1bHQuIE1lYXN1cmVtZW50IGNvbGxhcHNlcyB0aGUgcXVhbnR1bSBzdGF0ZXMgdG8gY2xhc3NpY2FsIG91dGNvbWVzIChiaXRzIG9yIG51bWVyaWNhbCByZXN1bHRzKS4gSW4gYWRkaXRpb24gdG8gcHJvZHVjaW5nIHRoZSByYXcgb3V0Y29tZSwgdGhpcyBzdGVwIGV2YWx1YXRlcyB0aGUgKipmaWRlbGl0eSoqIG9mIHRoZSBvcGVyYXRpb24g4oCTIGVzc2VudGlhbGx5IGNoZWNraW5nIGhvdyBjbG9zZSB0aGUgYWN0dWFsIG91dGNvbWUgaXMgdG8gdGhlIGlkZWFsIG9yIGV4cGVjdGVkIG91dGNvbWUgaWYgdGhlcmUgd2VyZSBubyBlcnJvcnMuIEZpZGVsaXR5IGNhbiBiZSBhc3Nlc3NlZCBieSBydW5uaW5nIHRoZSBjaXJjdWl0IG11bHRpcGxlIHRpbWVzIHRvIGdhdGhlciBzdGF0aXN0aWNzIG9yIGJ5IGNvbXBhcmluZyB0byBrbm93biBiZW5jaG1hcmsgc3RhdGVzLiBIaWdoIGZpZGVsaXR5IGluZGljYXRlcyB0aGUgY2lyY3VpdCBwZXJmb3JtZWQgYXMgaW50ZW5kZWQsIHdoaWxlIGxvd2VyIGZpZGVsaXR5IHNpZ25hbHMgdGhlIHByZXNlbmNlIG9mIGVycm9ycyBvciBub2lzZS4gVGhpcyBtZWFzdXJlbWVudCBzdGFnZSB0aHVzIHByb3ZpZGVzIGNydWNpYWwgZmVlZGJhY2sgb24gdGhlIHBlcmZvcm1hbmNlIG9mIGJvdGggdGhlIGNvbXBpbGVkIGNpcmN1aXQgYW5kIHRoZSBwdWxzZSBvcHRpbWl6YXRpb25zLiAgDQotICoqQ2xhc3NpY2FsIE91dHB1dDoqKiBGaW5hbGx5LCB0aGUgcmVzdWx0cyBvZiB0aGUgbWVhc3VyZW1lbnQgYXJlIG91dHB1dCBhcyBjbGFzc2ljYWwgZGF0YS4gVGhpcyBjb3VsZCBiZSB0aGUgYW5zd2VyIHRvIHRoZSBwcm9ibGVtIGluaXRpYWxseSBwb3NlZCAoZm9yIGV4YW1wbGUsIGFuIG9wdGltYWwgY29uZmlndXJhdGlvbiBvZiBhIG1vbGVjdWxlLCBhIGNsYXNzaWZpY2F0aW9uIGxhYmVsLCBvciBzb21lIG51bWVyaWNhbCBwcmVkaWN0aW9uKS4gVGhlIGNsYXNzaWNhbCBvdXRwdXQgaXMgd2hhdCB0aGUgdXNlciBvciBhIGNsYXNzaWNhbCBwb3N0LXByb2Nlc3NpbmcgYWxnb3JpdGhtIHdpbGwgdXNlIG9yIGludGVycHJldC4gQXQgdGhpcyBwb2ludCwgdGhlIHF1YW50dW0gcGFydCBvZiB0aGUgY29tcHV0YXRpb24gaXMgY29tcGxldGUsIGFuZCB3ZeKAmXJlIGJhY2sgaW4gdGhlIGNsYXNzaWNhbCByZWFsbSB3aXRoIGFuIGFuc3dlci4NCg0KIyMgTVRRQyDihpQgTVFQQSBGZWVkYmFjayBMb29wDQoNCk9uZSBvZiB0aGUga2V5IGFzcGVjdHMgaWxsdXN0cmF0ZWQgaW4gdGhlIGRpYWdyYW0gaXMgdGhlICoqZmVlZGJhY2sgbG9vcCoqIGJldHdlZW4gdGhlIFF1YW50dW0gQ29tcGlsZXIgKE1UUUMpIGFuZCB0aGUgUHVsc2UgT3B0aW1pemF0aW9uIChNUVBBKSBzdGFnZXMuIFRoaXMgdHdvLXdheSBpbnRlcmFjdGlvbiAoc2hvd24gYnkgdGhlIGRhc2hlZCBibHVlIGFycm93IGxhYmVsZWQg4oCcRmVlZGJhY2sgTG9vcCAoTVRRQyDihpQgTVFQQSnigJ0pIG1lYW5zIHRoYXQgdGhlIHByb2Nlc3Mgb2YgY29tcGlsaW5nIHRoZSBjaXJjdWl0IGFuZCB0aGUgcHJvY2VzcyBvZiBjYWxpYnJhdGluZyBwdWxzZXMgYXJlIG5vdCBvbmUtb2ZmIHNlcXVlbnRpYWwgc3RlcHMsIGJ1dCByYXRoZXIgY2FuIGluZm9ybSBlYWNoIG90aGVyIGl0ZXJhdGl2ZWx5Og0KDQotICoqQ2lyY3VpdCDin7kgUHVsc2UgSW5mbHVlbmNlOioqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHF1YW50dW0gY2lyY3VpdCBpbmZsdWVuY2VzIGhvdyB3ZSBvcHRpbWl6ZSBwdWxzZXMuIEZvciBpbnN0YW5jZSwgaWYgdGhlIE1UUUMtZGVzaWduZWQgY2lyY3VpdCB1c2VzIGEgcGFydGljdWxhciBnYXRlIGZyZXF1ZW50bHkgb3IgZW50YW5nbGVzIGNlcnRhaW4gcXViaXRzLCB0aGUgTVFQQSBzdGFnZSB3aWxsIGZvY3VzIG9uIG1ha2luZyB0aG9zZSBvcGVyYXRpb25zIGFzIGVycm9yLWZyZWUgYXMgcG9zc2libGUgKGJ5LCBzYXksIHVzaW5nIGJlc3Bva2UgcHVsc2Ugc2hhcGVzIG9yIGFkanVzdGluZyBxdWJpdCBmcmVxdWVuY2llcyB0byByZWR1Y2UgY3Jvc3MtdGFsayBkdXJpbmcgdGhvc2Ugb3BlcmF0aW9ucykuIEtub3dsZWRnZSBvZiB0aGUgY2lyY3VpdOKAmXMgY3JpdGljYWwgcGF0aHMgbGV0cyBNUVBBIHByaW9yaXRpemUgbWl0aWdhdGluZyBlcnJvcnMgb24gdGhlIG1vc3Qgc2Vuc2l0aXZlIG9yIGZyZXF1ZW50IG9wZXJhdGlvbnMuICANCi0gKipQdWxzZXMg4p+5IENpcmN1aXQgSW5mbHVlbmNlOioqIENvbnZlcnNlbHksIGZlZWRiYWNrIGZyb20gdGhlIHB1bHNlIGxldmVsIGNhbiBwcm9tcHQgY2hhbmdlcyBpbiB0aGUgY2lyY3VpdCBkZXNpZ24uIElmIHRoZSBoYXJkd2FyZSBoYXMgZGlmZmljdWx0eSBleGVjdXRpbmcgYSBjZXJ0YWluIGdhdGUgY29tYmluYXRpb24gd2l0aCBoaWdoIGZpZGVsaXR5IChhcyByZXZlYWxlZCBieSB0aGUgZmlkZWxpdHkgbWVhc3VyZW1lbnRzKSwgdGhlIGNvbXBpbGVyIGNhbiBhZGp1c3QgdGhlIGNpcmN1aXQgaW4gdGhlIG5leHQgaXRlcmF0aW9uLiBGb3IgZXhhbXBsZSwgTVRRQyBtaWdodCBjaG9vc2UgYW4gYWx0ZXJuYXRpdmUgZ2F0ZSBkZWNvbXBvc2l0aW9uIHRoYXQgdGhlIGhhcmR3YXJlIGV4ZWN1dGVzIG1vcmUgcmVsaWFibHksIG9yIHJlLXJvdXRlIGNlcnRhaW4gb3BlcmF0aW9ucyB0byBxdWJpdHMgdGhhdCBhcmUgbW9yZSBpc29sYXRlZCBmcm9tIGNyb3NzLXRhbGsuIEluIGVmZmVjdCwgdGhlIGNvbXBpbGVyIOKAnGxlYXJuc+KAnSBhYm91dCB0aGUgaGFyZHdhcmXigJlzIHN0cmVuZ3RocyBhbmQgd2Vha25lc3NlcyB0aHJvdWdoIHRoZSBmaWRlbGl0eSBmZWVkYmFjayBhbmQgYWRhcHRzIHRoZSBxdWFudHVtIGNpcmN1aXQgYWNjb3JkaW5nbHkuICANCi0gKipJdGVyYXRpdmUgQ28tT3B0aW1pemF0aW9uOioqIE1UUUMgdXNpbmcgR0FWUUEgaXMgaW5oZXJlbnRseSBpdGVyYXRpdmUg4oCTIGl0IGV2b2x2ZXMgY2FuZGlkYXRlIGNpcmN1aXRzIG92ZXIgbWFueSBnZW5lcmF0aW9ucywgc2VsZWN0aW5nIHRob3NlIHRoYXQgcGVyZm9ybSBiZXN0IChbUXVhbnR1bSBjb21wdXRpbmcncyBuZXh0IHN0ZXA6IE5ldyBhbGdvcml0aG0gYm9vc3RzIG11bHRpdGFza2luZ10oaHR0cHM6Ly90ZWNoeHBsb3JlLmNvbS9uZXdzLzIwMjQtMTItcXVhbnR1bS1hbGdvcml0aG0tYm9vc3RzLW11bHRpdGFza2luZy5odG1sIzp+OnRleHQ9SW1hZ2UlM0ElMjBOZXclMjBhbGdvcml0aG0lMjBib29zdHMlMjBtdWx0aXRhc2tpbmcsQ3JlZGl0JTNBJTIwVG9ob2t1JTIwVW5pdmVyc2l0eSkpLiBCeSBpbmNvcnBvcmF0aW5nIHRoZSByZWFsIGhhcmR3YXJlIGV4ZWN1dGlvbiByZXN1bHRzIChmaWRlbGl0eSBkYXRhKSBpbnRvIHRoaXMgZXZvbHV0aW9uIGFzIGEgZml0bmVzcyBjcml0ZXJpb24sIHRoZSBhbGdvcml0aG0gY2FuIGRyaXZlIHRoZSBjaXJjdWl0IGRlc2lnbiB0b3dhcmQgc29sdXRpb25zIHRoYXQgbm90IG9ubHkgc29sdmUgdGhlIGNvbXB1dGF0aW9uYWwgcHJvYmxlbSBidXQgYWxzbyBleGVjdXRlIHdpdGggaGlnaGVyIGZpZGVsaXR5IG9uIHRoZSBnaXZlbiBxdWFudHVtIGRldmljZS4gTGlrZXdpc2UsIHRoZSBNUVBBIHByb2NlZHVyZSBjYW4gYmUgaXRlcmF0aXZlbHkgcmVmaW5lZDogaW5pdGlhbCBwdWxzZSB0dW5pbmcgaXMgZG9uZSBmb3IgdGhlIGZpcnN0IGNpcmN1aXQgZHJhZnQsIGFuZCBhZnRlciBlYWNoIHJ1biwgcHVsc2UgcGFyYW1ldGVycyBjYW4gYmUgZnVydGhlciBhZGp1c3RlZCBiYXNlZCBvbiBvYnNlcnZlZCBlcnJvciBwYXR0ZXJucy4gVGhpcyBjby1vcHRpbWl6YXRpb24gbG9vcCBjb250aW51ZXMgdW50aWwgdGhlIGNvbXBpbGVkIGNpcmN1aXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHB1bHNlIHNjaGVkdWxlIGFyZSBqb2ludGx5IG9wdGltaXplZCBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZS4gIA0KLSAqKkFkYXB0aW5nIHRvIE5vaXNlOioqIFRoZSBpbXBvcnRhbmNlIG9mIHRoZSBNVFFD4oCTTVFQQSBsb29wIGlzIHVuZGVyc2NvcmVkIGJ5IHRoZSBuZWVkIHRvIGhhbmRsZSBxdWFudHVtIG5vaXNlIGFuZCBlcnJvcnMuIFJlc2VhcmNoZXJzIGFyZSBhY3RpdmVseSBsb29raW5nIGF0IGV4dGVuZGluZyBjb21waWxhdGlvbiBhbGdvcml0aG1zIGxpa2UgTVRRQyB0byBhY2NvdW50IGZvciBub2lzZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgaGFyZHdhcmUgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD1Mb29raW5nJTIwYWhlYWQlMkMlMjBMZSUyMGFpbXMlMjB0byx3YXlzJTIwdG8lMjBlbmhhbmNlJTIwaXRzJTIwcGVyZm9ybWFuY2UpKS4gVGhlIGZlZWRiYWNrIGxvb3AgZW5hYmxlcyBzdWNoIGFkYXB0YXRpb246IGluZm9ybWF0aW9uIGFib3V0IG5vaXNlIChlLmcuIHdoaWNoIHF1Yml0IGNvdXBsaW5ncyBhcmUgbm9pc3ksIHdoaWNoIHB1bHNlcyBjYXVzZSBkZWNvaGVyZW5jZSkgZmxvd3MgaW50byB0aGUgY29tcGlsZXIsIGFuZCBjb252ZXJzZWx5IHRoZSBjb21waWxlcuKAmXMgY2hvaWNlcyBpbmZvcm0gd2hhdCB0aGUgcHVsc2UgY29udHJvbGxlciBzaG91bGQgZm9jdXMgb24uIFRoZSByZXN1bHQgaXMgYSBtb3JlIHJlc2lsaWVudCBvdmVyYWxsIHN5c3RlbSDigJMgdGhlIHF1YW50dW0gcHJvZ3JhbSBhbmQgdGhlIG1hY2hpbmXigJlzIGNvbnRyb2wgc2V0dGluZ3MgYXJlIHR1bmVkIHRvZ2V0aGVyIHRvIGFjaGlldmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UgdW5kZXIgcmVhbC13b3JsZCBjb25kaXRpb25zLg0KDQpJbiBzdW1tYXJ5LCAqKk1UUUMgKE11bHRpLVRhcmdldCBRdWFudHVtIENvbXBpbGF0aW9uKSoqIHByb3ZpZGVzIHRoZSAqYnJhaW4qIG9mIHRoZSBvcGVyYXRpb24g4oCTIGRlc2lnbmluZyBxdWFudHVtIGNpcmN1aXRzIHRoYXQgYWltIHRvIGZ1bGZpbGwgY29tcGxleCBvYmplY3RpdmVzIOKAkyB3aGlsZSAqKk1RUEEgKE11bHRpLVF1Yml0IFB1bHNlIEFtcGxpZmljYXRpb24pKiogcHJvdmlkZXMgdGhlICptdXNjbGUqIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCDigJMgZXhlY3V0aW5nIHRob3NlIGNpcmN1aXRzIHdpdGggaGlnaC1maWRlbGl0eSBjb250cm9sIG92ZXIgdGhlIHF1Yml0cy4gVGhlIGZlZWRiYWNrIGxvb3AgYmV0d2VlbiB0aGVtIGlzIGNydWNpYWw6IGl0IGNsb3NlcyB0aGUgZ2FwIGJldHdlZW4gYWJzdHJhY3QgYWxnb3JpdGhtcyBhbmQgcGh5c2ljYWwgaGFyZHdhcmUuIEJ5IGNvbnRpbnVvdXNseSBmZWVkaW5nIHBlcmZvcm1hbmNlIGRhdGEgYmFjayBpbnRvIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGFuZCBhZGp1c3RpbmcgbG93LWxldmVsIGNvbnRyb2xzIGJhc2VkIG9uIGhpZ2gtbGV2ZWwgbmVlZHMsIHRoZSBzeXN0ZW0gY2FuIGFjaGlldmUgZmFyIGJldHRlciBhY2N1cmFjeSBhbmQgZWZmaWNpZW5jeSB0aGFuIGEgb25lLXBhc3MgY29tcGlsZS1hbmQtcnVuIGFwcHJvYWNoLiBUaGlzIHN5bmVyZ2lzdGljIGNvLWRlc2lnbiBvZiBxdWFudHVtIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBjb250cm9sIGlzIGtleSB0byB1bmxvY2tpbmcgaW1wcm92ZWQgcXVhbnR1bSBjb21wdXRhdGlvbiBjYXBhYmlsaXRpZXMgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD0sYXBwbGljYXRpb25zJTIwYWNyb3NzJTIwdmFyaW91cyUyMHNjaWVudGlmaWMlMjBkaXNjaXBsaW5lcykpIChbSW1wcm92aW5nIGZyZXF1ZW5jeSBzZWxlY3Rpb24gb2YgZHJpdmVuIHB1bHNlcyB1c2luZyBkZXJpdmF0aXZlIC4uLl0oaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wdWJsaWNhdGlvbi8yNTgyMDEzMjlfSW1wcm92aW5nX2ZyZXF1ZW5jeV9zZWxlY3Rpb25fb2ZfZHJpdmVuX3B1bHNlc191c2luZ19kZXJpdmF0aXZlLWJhc2VkX3RyYW5zaXRpb25fc3VwcHJlc3Npb24jOn46dGV4dD1FeHBlcmltZW50YWwlMjBlcnJvciUyMHN1cHByZXNzaW9uJTIwaW4lMjBDcm9zcyxhJTIwdHdvJTIwdG8lMjBmb3VyZm9sZCkpLCBlc3BlY2lhbGx5IGFzIHdlIHB1c2ggdGhlIGxpbWl0cyBvZiB0b2RheeKAmXMgbm9pc3kgcXVhbnR1bSBkZXZpY2VzIHRvd2FyZCBtb3JlIHJlbGlhYmxlLCBsYXJnZS1zY2FsZSBxdWFudHVtIGNvbXB1dGluZy4gDQoNCioqU291cmNlczoqKiBRdWFudHVtIGNvbXBpbGF0aW9uIGFuZCBtdWx0aXRhc2tpbmcgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD0sYXBwbGljYXRpb25zJTIwYWNyb3NzJTIwdmFyaW91cyUyMHNjaWVudGlmaWMlMjBkaXNjaXBsaW5lcykpIChbUXVhbnR1bSBjb21wdXRpbmcncyBuZXh0IHN0ZXA6IE5ldyBhbGdvcml0aG0gYm9vc3RzIG11bHRpdGFza2luZ10oaHR0cHM6Ly90ZWNoeHBsb3JlLmNvbS9uZXdzLzIwMjQtMTItcXVhbnR1bS1hbGdvcml0aG0tYm9vc3RzLW11bHRpdGFza2luZy5odG1sIzp+OnRleHQ9SW1hZ2UlM0ElMjBOZXclMjBhbGdvcml0aG0lMjBib29zdHMlMjBtdWx0aXRhc2tpbmcsQ3JlZGl0JTNBJTIwVG9ob2t1JTIwVW5pdmVyc2l0eSkpOyBoYXJkd2FyZSBwdWxzZSBzaGFwaW5nIGFuZCBlcnJvciBtaXRpZ2F0aW9uIHRlY2huaXF1ZXMgKFtJbXByb3ZpbmcgZnJlcXVlbmN5IHNlbGVjdGlvbiBvZiBkcml2ZW4gcHVsc2VzIHVzaW5nIGRlcml2YXRpdmUgLi4uXShodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3B1YmxpY2F0aW9uLzI1ODIwMTMyOV9JbXByb3ZpbmdfZnJlcXVlbmN5X3NlbGVjdGlvbl9vZl9kcml2ZW5fcHVsc2VzX3VzaW5nX2Rlcml2YXRpdmUtYmFzZWRfdHJhbnNpdGlvbl9zdXBwcmVzc2lvbiM6fjp0ZXh0PUV4cGVyaW1lbnRhbCUyMGVycm9yJTIwc3VwcHJlc3Npb24lMjBpbiUyMENyb3NzLGElMjB0d28lMjB0byUyMGZvdXJmb2xkKSkgKFtbMjIwNy4wODQxNl0gQ29udHJvbCBhbmQgbWl0aWdhdGlvbiBvZiBtaWNyb3dhdmUgY3Jvc3N0YWxrIGVmZmVjdCB3aXRoIHN1cGVyY29uZHVjdGluZyBxdWJpdHNdKGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8yMjA3LjA4NDE2Izp+OnRleHQ9Y3Jvc3N0YWxrJTIwYmV0d2VlbiUyMG1pY3Jvd2F2ZSUyMHB1bHNlcyUyMGlzLFVzaW5nJTIwb3VyJTIwbWV0aG9kJTJDJTIwbm8lMjBhZGRpdGlvbmFsKSk7IGludGVncmF0aW9uIG9mIG5vaXNlIGNvbnNpZGVyYXRpb25zIGludG8gY29tcGlsYXRpb24gKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD1Mb29raW5nJTIwYWhlYWQlMkMlMjBMZSUyMGFpbXMlMjB0byx3YXlzJTIwdG8lMjBlbmhhbmNlJTIwaXRzJTIwcGVyZm9ybWFuY2UpKS4=