Last Updated: 05/27/2025

1 Course Title

PSY:5330 – Principles of Psychological Assessment (Spring 2026)

2 Course Meeting Time and Place

Tuesday & Thursday 9:30 a.m.–10:45 a.m., 109 Stuit Hall (STH)

3 Course Website

https://icon.uiowa.edu

To access the course site, log into Iowa Courses Online (ICON) using your Hawk ID and password.

4 Course Home

The University of Iowa
The College of Liberal Arts and Sciences
Department of Psychological and Brain Sciences

The College of Liberal Arts and Sciences (CLAS) is the home of this course, and CLAS governs the policies and procedures for its courses. Graduate students, however, must adhere to the academic deadlines set by the Graduate College.

5 Instructor Contact Information

Isaac T. Petersen, Ph.D.
Office: 175 Psychological and Brain Sciences Building (PBSB)
E-mail: isaac-t-petersen@uiowa.edu
Office Phone: 467-1014
Office Hours: by appointment

6 Departmental Resources

Department of Psychological and Brain Sciences: https://psychology.uiowa.edu
Department of Psychological and Brain Sciences Main Office: G60 Psychological and Brain Sciences Building (335-2406)
Director of Graduate Studies: Ryan LaLumiere (ryan-lalumiere@uiowa.edu; 335-3681)
Departmental Executive Officer (DEO)/Department Chair: Professor Blumberg (mark-blumberg@uiowa.edu; 335-2424)

7 Prerequisites

To succeed in the class, it is helpful to have foundational understanding of correlation and multiple regression.

8 Description of Course

Much of the current discussion in psychology surrounding the replication crisis deals with questionable research practices. However, the field has paid insufficient attention to how lousy/noisy measures might contribute to the replication crisis (Loken & Gelman, 2017). In this class, we cover content that is relevant to all of Psychology and science more broadly, including how to develop, administer, score, integrate, and interpret measures. Topics will include, for example, psychometrics (reliability and validity), prediction, structural equation modeling, factor analysis, signal detection theory, item response theory, adaptive testing, longitudinal/repeated measurement, and issues in cognitive, social/behavioral, and psychophysiological assessment.

In this course, we examine basic psychometrics and the background, development, evaluation, administration, scoring, integration, and interpretation of selected techniques in psychological assessment. The course applies a scientific perspective to psychological assessment. You are urged to reconsider your decision to take this class if you are reluctant to examine these topics in a scientific manner.

9 Learning Outcomes

The focus of this class is NOT on application (e.g., how to assess each psychological disorder, how to use particular measures, etc). This course is focused on important principles of psychological assessment. The goal of the class is to give you lots of “thinking tools” relevant to psychological assessment—i.e., “how to think” about and critically evaluate assessments in psychology—to help you advance your research program. Learning the important principles will put you in a better position to learn any assessment, and to develop better ones.

10 Supplemental Resources

Even though the course is focused on principles of psychological assessment and not on application, I want you to be able to apply the principles we discuss. So, I provide lots of additional readings and resources on the assessment of particular disorders, using particular measures, etc. These supplemental resources are in the “For More Info” folder in ICON. The folder also includes an EndNote file with the course readings. In addition, I provide a companion book (see below).

11 Companion Book

I want those who are interested to be in the best position to apply the principles we discuss. Thus, I created a companion book for the course that includes practical data and analysis examples to help you better understand the principles and how to apply them in your own research. The companion book includes exercises to help you test your comprehension. The companion book is NOT intended to replace the importance of reading the required primary source articles (which are covered on the exams). You are NOT required or expected to read the companion book for this class. The companion book is merely meant to be a helpful supplementary resource for those who are interested. You can access the companion book here: https://isaactpetersen.github.io/Principles-Psychological-Assessment

12 Academic Honesty and Misconduct

All students in CLAS courses are expected to abide by the college’s standards of academic honesty. Academic misconduct must be reported to the Graduate College according to Section F of the Graduate College Manual. Please note that collaboration with other classmates during exams is not permitted. However, I do encourage you to collaborate with classmates on readings and to prepare for exams (e.g., informal study groups). In addition, you are expected to follow the course’s policy on the use of artificial intelligence (AI), which is outlined below.

13 Artificial Intelligence (AI) Policy

Because writing, analytical, and critical thinking skills are part of the learning outcomes of this course, all work submitted by students should be prepared by the student. You are training these cognitive muscles; if you go to the gym, you would not have AI lift the weights for you. For these reasons, AI-generated submissions are not permitted and will be treated as plagiarism. Learning these core foundational skills will make you a better user of AI in the future, because you will be better-positioned in the future to critically evaluate AI responses and to identify when (and the ways in which) its responses are inaccurate. Moreover, in many industries, use of AI is not permitted because you cannot share the company’s proprietary information. Thus, developing strong competencies in these domains (without the use of AI) will prepare you for a competitive workplace.

14 Course Requirements and Policies

14.1 Lecture

The course is primarily lecture. We will meet twice weekly for lectures, at the time and location described above. There is considerable material to cover, and we will move quickly. You should feel free to ask questions during lecture, although some questions may need to be deferred given the need to complete coverage of specific material. Questions and further discussion of class material are always welcome during office hours and via e-mail. Please bear in mind that extensive or complex questions may not be addressable over e-mail.

14.1.1 Lecture Recordings

My intention is to record lectures so the lectures are available to you virtually and in person so you have the choice of viewing them how you see fit and so you may review them. Recorded lectures will be posted on the “UICapture” tab in ICON. Unfortunately, the recordings do not capture when I draw on the classroom whiteboard. Recordings will be available up to 48 hours after class (for Thursday lectures) or until the Thursday class period (for Tuesday lectures). However, please do not count on recordings being available, in case I accidentally forget to initiate the recording or there is a technical malfunction. The availability of lecture recordings will not be extended beyond 48 hours after lecture—the recordings are meant to help people keep up with lectures and for students to retrieve the relevant content if they missed anything during the live lecture or if they miss the lecture; they are not meant to be a study method that allows people to fall behind in class from week to week. If you miss something and are unable to watch the lecture recording, you can get/review notes with a peer, and then come to office hours if you have specific questions.

14.2 Attendance and Participation

Attendance and participation are strongly encouraged to maximize your and others’ learning.

14.3 Readings

We have lots of content to cover, and the lectures will move quickly. Thus, doing the relevant readings before each class will help you best come prepared to learn the material presented in class. Readings and other materials will be posted on ICON. The articles to read are specified in the Articles section of the syllabus.

14.4 Examinations

There will be 2 exams. Exam 1 will be administered during class time. The date, time, and location of the final exam will be announced by the 5th week of class by the College of Liberal Arts and Sciences; the duration of the final exam will be 120 minutes. The exams will be short answer/essay questions. The final exam is non-cumulative; each exam will emphasize information presented for the half of the class that precedes it. However, some integration of information will be required for questions on the second exam. Exam questions can come from lectures or required readings.

14.4.1 Missing Exams

University regulations require that students be allowed to make up examinations that have been missed due to illness, religious holy days, military service obligations (including service-related medical appointments), or other unavoidable circumstances or University-sponsored activities. Note: the format of the make-up exam may differ from the original exam. If you know that you must be away at the time of an exam for one of these reasons, please contact me in advance whenever possible to schedule a make-up exam.

14.5 Paper

You will write a final/term paper on a topic pertaining to assessment. The paper can be a literature review pertaining to assessment (with recommendations), or it can be a paper on the development of an assessment technique. The goal is for the paper to be as relevant to your research interests as possible, so it directly advances your research program. Please do not stress about the paper. Your paper should be less than 20 pages (excluding references). It is okay (and encouraged!) for you to use, as your paper, something that you are already working on or to write a paper that you are submitting for another assignment—consider writing a paper that could be a publication. I want to keep the topic requirements of the paper flexible and open-ended so the paper can be as relevant for your research program as possible—the only requirement is that the paper topic is relevant to assessment, and that your paper incorporates ideas we discuss in class.

Your final paper is due before the last class (Deadline: 9:30 am on Thursday, May 2). Please submit your paper via ICON.

15 Articles

The section covered for each class is described in the Course Outline. The articles to read for each section are specified below. Articles are posted in the “Files” tab on ICON.

*Designates a paper that you should read, get the basic idea, and remember where to find it if you need further information. These are typically historical papers, illustrations of specific techniques, or useful references.

References highlighted in yellow are the readings that you should pay closest attention to. Blue highlights provide additional useful information.

15.1 Psychometrics, Prediction, and General Issues

15.1.1 Science and the Replication Crisis

Section 1

Loken, E., & Gelman, A. (2017). Measurement error and the replication crisis. Science, 355(6325), 584–585. https://doi.org/10.1126/science.aal3618

McFall, R. M. (1991). Manifesto for a science of clinical psychology. The Clinical Psychologist, 44(6), 75–91.

McFall, R. M. (2000). Elaborate reflections on a simple manifesto. Applied & Preventive Psychology, 9(1), 5–21. https://doi.org/10.1016/s0962-1849(05)80035-6

15.1.2 Reliability

Section 2

McNeish, D. (2018). Thanks coefficient alpha, we’ll take it from here. Psychological Methods, 23(3), 412–433. https://doi.org/10.1037/met0000144

*Galton, F. (1948). Classification of men according to their natural gifts, 1869. In W. Dennis (Ed.), Readings in the history of psychology (pp. 231–247). Appleton-Century-Crofts. https://psycnet.apa.org/record/2006-10213-000

*Garland, L. H. (1960). The problem of observer error. Bulletin of the New York Academy of Medicine, 36(9), 570–584.

Section 3

Schmidt, F. L., & Hunter, J. E. (1996). Measurement error in psychological research: Lessons from 26 research scenarios. Psychological Methods, 1(2), 199–223. https://doi.org/10.1037/1082-989X.1.2.199

Wiggins, J. S. (1973). Observational techniques: I. Generalizability and facets of observation. In J. S. Wiggins (Ed.), Personality and prediction: Principles of personality assessment (pp. 277–295). Addison-Wesley.

15.1.3 Validity

Section 4

Campbell, D. T., & Fiske, D. W. (1959). Convergent and discriminant validation by the multitrait-multimethod matrix. Psychological Bulletin, 56(2), 81–105. https://doi.org/10.1037/h0046016

Hayes, S. C., Nelson, R. O., & Jarrett, R. B. (1987). The treatment utility of assessment: A functional approach to evaluating assessment quality. American Psychologist, 42, 963–974. https://doi.org/10.1037/0003-066X.42.11.963

Meehl, P. E. (1973). Chapter 1. Psychodiagnosis: Selected papers. University of Minnesota Press. [This is Cronbach, L. J., & Meehl, P. E. (1955). Construct validity in psychological tests. Psychological Bulletin, 52(4), 281–302. https://doi.org/10.1037/h0040957]

Section 5

Sechrest, L. (1963). Incremental validity: A recommendation. Educational and Psychological Measurement, 23, 153–158. https://doi.org/10.1177/001316446302300113

Shavelson, R. J., Webb, N. M., & Rawley, R. L. (1989). Generalizability theory. American Psychologist, 44, 922–932. https://doi.org/10.1037/0003-066X.44.6.922

Bornstein, R. F. (2011). Toward a process-focused model of test score validity: Improving psychological assessment in science and practice. Psychological Assessment, 23(2), 532–544. https://doi.org/10.1037/a0022402

*American Educational Research Association, American Psychological Association, & National Council on Measurement in Education. (2014). Standards for educational and psychological testing. American Educational Research Association. [This is available in the clinic library. You don’t need to read this for our class, but you should know it exists as a reference, because it sets the standard for APA journals, licensure exams, and beyond.]

15.1.4 Emerging Perspectives in Measurement

15.1.4.1 Structural Equation Modeling (SEM)

Section 6

Bollen, K. A., & Lennox, R. D. (1991). Conventional wisdom on measurement: A structural equation perspective. Psychological Bulletin, 110(2), 305–314. https://doi.org/10.1037/0033-2909.110.2.305

Podsakoff, P. M., MacKenzie, S. B., & Podsakoff, N. P. (2012). Sources of method bias in social science research and recommendations on how to control it. Annual Review of Psychology, 63(1), 539–569. https://doi.org/10.1146/annurev-psych-120710-100452

Edwards, J. R., & Bagozzi, R. P. (2000). On the nature and direction of relationships between constructs and measures. Psychological Methods, 5(2), 155–174. https://doi.org/10.1037/1082-989X.5.2.155 [read pp. 155–162 carefully, but don’t worry about the complex path models that follow unless they are relevant to your own research.]

15.1.4.2 Item Response Theory (IRT)

Section 7

Embretson, S. E. (1996). The new rules of measurement. Psychological Assessment, 8, 341–349. https://doi.org/10.1037/1040-3590.8.4.341

Krueger, R. F., Nichol, P. E., Hicks, B. M., Markon, K. E., Patrick, C. J., lacono, W. G., & McGue, M. (2004). Using latent trait modeling to conceptualize an alcohol problems continuum. Psychological Assessment, 16(2), 107–119. https://doi.org/10.1037/1040-3590.16.2.107

Cooper, L. D., & Balsis, S. (2009). When less is more: How fewer diagnostic criteria can indicate greater severity. Psychological Assessment, 21(3), 285–293. https://doi.org/10.1037/a0016698

Reise, S. P., & Waller, N. G. (2009). Item response theory and clinical measurement. Annual Review of Clinical Psychology, 5(1), 27–48. https://doi.org/10.1146/annurev.clinpsy.032408.153553

15.2 Prediction

15.2.1 Basics

Section 8

Meehl, P. E. (1973). Chapter 2. Psychodiagnosis: Selected papers. University of Minnesota Press. [This is Meehl, P. E., & Rosen, A. (1955). Antecedent probability and the efficiency of psychometric signs, patterns, or cutting scores. Psychological Bulletin, 52(3), 194–216. https://doi.org/10.1037/h0048070]

15.2.2 Signal Detection Theory

Section 9

Treat, T. A., & Viken, R. J. (2023). Measuring test performance with signal detection theory techniques. In H. Cooper, M. N. Coutanche, L. M. McMullen, A. T. Panter, D. Rindskopf, & K. J. Sher (Eds.), APA handbook of research methods in psychology: Foundations, planning, measures, and psychometrics (2nd ed., Vol. 1, pp. 837–858). American Psychological Association. https://doi.org/10.1037/0000318-038

Swets, J. A., Dawes, R. M., & Monahan, J. (2000). Psychological science can improve diagnostic decisions. Psychological Science in the Public Interest, 1(1), 1–26. https://doi.org/10.1111/1529-1006.001

Lindhiem, O., Petersen, I. T., Mentch, L. K., & Youngstrom, E. A. (2020). The importance of calibration in clinical psychology. Assessment, 27(4), 840–854. https://doi.org/10.1177/1073191117752055

15.2.3 Clinical Judgment vs. Algorithmic Prediction

Section 10

Garb, H. N. (2005). Clinical judgment and decision making. Annual Review of Clinical Psychology, 1, 67–89. https://doi.org/10.1146/annurev.clinpsy.1.102803.143810

Dawes, R. M., Faust, D., & Meehl, P. E. (1989). Clinical versus actuarial judgment. Science, 243(4899), 1668–1674. https://doi.org/10.1126/science.2648573

Dawes, R. M. (1986). Representative thinking in clinical judgment. Clinical Psychology Review, 6, 425–441. https://doi.org/10.1016/0272-7358(86)90030-9

Youngstrom, E. A., Halverson, T. F., Youngstrom, J. K., Lindhiem, O., & Findling, R. L. (2018). Evidence-based assessment from simple clinical judgments to statistical learning: Evaluating a range of options using pediatric bipolar disorder as a diagnostic challenge. Clinical Psychological Science, 6(2), 243–265. https://doi.org/10.1177/2167702617741845

15.3 General Issues in Clinical Assessment

Section 11

*Benjamin, L. T. (2005). A history of clinical psychology as a profession in America (and a glimpse of its future). Annual Review of Clinical Psychology, 1, 1–30. https://doi.org/10.1146/annurev.clinpsy.1.102803.143758

Kazdin, A. E. (1995). Preparing and evaluating research reports. Psychological Assessment, 7(3), 228–237. https://doi.org/10.1037/1040-3590.7.3.228

Sechrest, L., Stickle, T. R., & Stewart, M. (1998). The role of assessment in clinical psychology. In A. Bellack, M. Hersen, & C. R. Reynolds (Eds.), Comprehensive clinical psychology (Vol. 4: Assessment). Pergamon.

15.4 Evidence-Based Assessment

Section 12

Hunsley, J., & Mash, E. J. (2007). Evidence-based assessment. Annual Review of Clinical Psychology, 3, 29–51. https://doi.org/10.1146/annurev.clinpsy.3.022806.091419

Antony, M. M., & Rowa, K. (2005). Evidence-based assessment of anxiety disorders in adults. Psychological Assessment, 17(3), 256–266. https://doi.org/10.1037/1040-3590.17.3.256 [This is a case study in evidence-based assessment—it’s the general approach that matters, not what is specific about anxiety.]

Youngstrom, E. A., & Van Meter, A. (2016). Empirically supported assessment of children and adolescents. Clinical Psychology: Science and Practice, 23(4), 327–347. https://doi.org/10.1111/cpsp.12172

Youngstrom, E. A., Van Meter, A., Frazier, T. W., Hunsley, J., Prinstein, M. J., Ong, M.-L., & Youngstrom, J. K. (2017). Evidence-based assessment as an integrative model for applying psychological science to guide the voyage of treatment. Clinical Psychology: Science and Practice, 24(4), 331–363. https://doi.org/10.1111/cpsp.12207

15.5 Ethical Issues in Assessment

Section 13

American Psychological Association. (2017). Ethical principles of psychologists and code of conduct. https://www.apa.org/ethics/code (Sections 1, 2, 9).

Nagy, T. F. (2011). Ethics in psychological assessment. In T. F. Nagy (Ed.), Essential ethics for psychologists: a primer for understanding and mastering core issues (pp. 171–183). American Psychological Association. https://doi.org/10.1037/12345-009

Campbell, L., Vasquez, M., Behnke, S., & Kinscherff, R. (2010). Assessment. In L. Campbell, M. Vasquez, S. Behnke, & R. Kinscherff (Eds.), APA Ethics Code commentary and case illustrations. American Psychological Association.

Bersoff, D. N., DeMatteo, D., & Foster, E. E. (2012). Assessment and testing. In S. J. Knapp (Ed.), APA handbook of ethics in psychology (Vol. 2: Practice, Teaching, and Research, pp. 45–74). American Psychological Association.

*Tackett, J. L., Brandes, C. M., & Reardon, K. W. (2019). Leveraging the Open Science Framework in clinical psychological assessment research. Psychological Assessment, 31(12), 1386–1394. https://doi.org/10.1037/pas0000583

15.6 Intellectual Assessment

Section 15

Ackerman, P. L. (2013). Assessment of intellectual functioning in adults. In K. F. Geisinger, J. F. Carlson, J.-I. C. Hansen, N. R. Kuncel, S. P. Reise, & M. C. Rodriguez (Eds.), APA handbook of testing and assessment in psychology (Vol. 2: Testing and Assessment in Clinical and Counseling Psychology, pp. 119–132). American Psychological Association. https://doi.org/10.1037/14048-008

*Binet, A., & Simon, T. (1948). Upon the necessity of establishing a scientific diagnosis of inferior states of intelligence. In W. Dennis (Ed.), Readings in the history of psychology (pp. 407–411). Appleton-Century-Crofts.

*Binet, A., & Simon, T. (1948). The development of the Binet-Simon Scale, 1905–1908. In W. Dennis (Ed.), Readings in the history of psychology (pp. 412–424). Appleton-Century-Crofts.

*Cattell, J. M. (1948). Mental tests and measurements, 1890. In W. Dennis (Ed.), Readings in the history of psychology (pp. 347–354). Appleton-Century-Crofts.

Section 16

McClelland, D. C. (1973). Testing for competence rather than for “intelligence.”. American Psychologist, 28, 1–14. https://doi.org/10.1037/h0034092 [See also paper by Barrett and Depinet (1991), A reconsideration of Testing for Competence rather than for intelligence, American Psychologist, 46, 1012–1024; and McClelland and various others in reply (1994), American Psychologist, 49, 64–71.]

15.6.1 Bias

Section 17

Cole, N. S. (1981). Bias in testing. American Psychologist, 36(10), 1067–1077. https://doi.org/10.1037/0003-066X.36.10.1067

Sackett, P. R., & Wilk, S. L. (1994). Within-group norming and other forms of score adjustment in preemployment testing. American Psychologist, 49(11), 929–954. https://doi.org/10.1037/0003-066X.49.11.929

Section 18

Sackett, P. R., Schmitt, N., Ellingson, J. E., & Kabin, M. B. (2001). High-stakes testing in employment, credentialing, and higher education. American Psychologist, 56, 301–318. https://doi.org/10.1037/0003-066X.56.4.302

Sackett, P. R., Borneman, M. J., & Connelly, B. S. (2008). High stakes testing in higher education and employment: Appraising the evidence for validity and fairness. American Psychologist, 63, 215–227. https://doi.org/10.1037/0003-066X.63.4.215

15.7 The Interview and the DSM

Section 19

Faraone, S. V., & Tsuang, M. T. (1994). Measuring diagnostic accuracy in the absence of a “gold standard”. American Journal of Psychiatry, 151, 650–657. https://doi.org/10.1176/ajp.151.5.650

*Sullivan, H. S. (1970). The psychiatric interview. Norton. Chapters 1–4, 7 [This is available in the UI library. You don’t need to read it for this class. But you should read it at some point, as an example of a master clinician assessing patients by way of interview.]

Summerfeldt, L. J., Kloosterman, P. H., & Antony, M. M. (2010). Structured and semistructured diagnostic interviews. In M. M. Antony & D. H. Barlow (Eds.), Handbook of assessment and treatment planning for psychological disorders (2nd ed., pp. 95–137). Guilford Press.

Mullins-Sweatt, S. N., & Widiger, T. A. (2009). Clinical utility and DSM-V. Psychological Assessment, 21(3), 302–312. https://doi.org/10.1037/a0016607

Sharp, K. L., Williams, A. J., Rhyner, K. T., & Ilardi, S. S. (2013). The clinical interview. In K. F. Geisinger, J. F. Carlson, J.-I. C. Hansen, N. R. Kuncel, S. P. Reise, & M. C. Rodriguez (Eds.), APA handbook of testing and assessment in psychology (Vol. 2: Testing and assessment in clinical and counseling psychology, pp. 103–117). American Psychological Association. https://doi.org/10.1037/14048-007

15.8 Assessment of personality and other symptomatology

15.8.1 Objective tests

Section 20

Burisch, M. (1984). Approaches to personality inventory construction: A comparison of merits. American Psychologist, 39, 214–227. https://doi.org/10.1037/0003-066X.39.3.214

Clark, L. A., & Watson, D. (2019). Constructing validity: New developments in creating objective measuring instruments. Psychological Assessment, 31(12), 1412–1427. https://doi.org/10.1037/pas0000626

Floyd, F. J., & Widaman, K. F. (1995). Factor analysis in the development and refinement of clinical assessment instruments. Psychological Assessment, 7, 286–299. https://doi.org/10.1037/1040-3590.7.3.286

Section 21

*Graham, J. R. (2022). MMPI instruments: Assessing personality and psychopathology (6th ed.). Oxford University Press. (Chapters 1–5, 13). [This is available in the clinic library. Get a feel for this measure and the way it was developed; you don’t need to remember details about the scales.]

Sellbom, M. (2019). The MMPI-2-Restructured Form (MMPI-2-RF): Assessment of personality and psychopathology in the twenty-first century. Annual Review of Clinical Psychology, 15(1), 149–177. https://doi.org/10.1146/annurev-clinpsy-050718-095701

Wiggins, J. S. (1973). Structured techniques. In J. S. Wiggins (Ed.), Personality and prediction: Principles of personality assessment (pp. 380–440). Addison-Wesley.

Section 22

Dunning, D., Heath, C., & Suls, J. M. (2004). Flawed self-assessment: Implications for health, education, and the workplace. Psychological Science in the Public Interest, 5, 69–106. https://doi.org/10.1111/j.1529-1006.2004.00018.x

Krosnick, J. A. (1999). Survey research. Annual Review of Psychology, 50, 537–567. https://doi.org/10.1146/annurev.psych.50.1.537

15.8.2 Projective tests

Section 23

*Frank, L. K. (1939). Projective methods for the study of personality. Journal of Psychology, 8, 389–413. https://doi.org/10.1080/00223980.1939.9917671

*Lindzey, G. (1952). Thematic Apperception Test: Interpretive assumptions and related empirical evidence. Psychological Bulletin, 49, 1–25. https://doi.org/10.1037/h0062363

Lilienfeld, S. O., Wood, J. M., & Garb, H. N. (2000). The scientific status of projective techniques. Psychological Science in the Public Interest, 1, 27–66. https://doi.org/10.1111/1529-1006.002

*Wood, J. M., Nezworski, M. T., & Stejskal, W. J. (1996). The comprehensive system for the Rorschach: A critical examination. Psychological Science, 7(1), 3–10. https://doi.org/10.1111/j.1467-9280.1996.tb00658.x. [See also the response from Exner and reply by Wood et al. on pp. 11–17.]

15.8.3 Psychophysiological Measures and RDoC

Section 24

Dubois, J., & Adolphs, R. (2016). Building a science of individual differences from fMRI. Trends in Cognitive Sciences, 20(6), 425–443. https://doi.org/10.1016/j.tics.2016.03.014 [Students not working in imaging can skip over most of the technical details in this article. Read it as a model for taking measurement seriously in an emerging area of clinical research.]

Haynes, S. N., & Yoshioka, D. T. (2007). Clinical assessment applications of ambulatory biosensors. Psychological Assessment, 19(1), 44–57. https://doi.org/10.1037/1040-3590.19.1.44

Kozak, M. J., & Cuthbert, B. N. (2016). The NIMH research domain criteria initiative: Background, issues, and pragmatics. Psychophysiology, 53(3), 286–297. https://doi.org/10.1111/psyp.12518 [Students already familiar with RDoC can skim this introduction. Our interest is in examining RDoC from a measurement perspective.]

MacNamara, A., & Phan, K. L. (2016). Psychobiological operationalization of RDoC constructs: Methodological and conceptual opportunities and challenges. Psychophysiology, 53(3), 406–409. https://doi.org/10.1111/psyp.12587

Miller, G. A., Rockstroh, B. S., Hamilton, H. K., & Yee, C. M. (2016). Psychophysiology as a core strategy in RDoC. Psychophysiology, 53(3), 410–414. https://doi.org/10.1111/psyp.12581

Miller, G. A., Elbert, T., Sutton, B. P., & Heller, W. (2007). Innovative clinical assessment technologies: Challenges and opportunities in neuroimaging. Psychological Assessment, 19(1), 58–73. https://doi.org/10.1037/1040-3590.19.1.58

*Stone, A. A., Schneider, S., & Smyth, J. M. (2023). Evaluation of pressing issues in ecological momentary assessment. Annual Review of Clinical Psychology, 19(1), 107–131. https://doi.org/10.1146/annurev-clinpsy-080921-083128

15.8.4 Computers and Adaptive Testing

Section 25

Buchanan, T. (2002). Online assessment: Desirable or dangerous? Professional Psychology: Research and Practice, 33(2), 148–154. https://doi.org/10.1037/0735-7028.33.2.148

*Galatzer-Levy, I. R., & Onnela, J.-P. (2023). Machine learning and the digital measurement of psychological health. Annual Review of Clinical Psychology, 19, 133–154. https://doi.org/10.1146/annurev-clinpsy-080921-073212

Garb, H. N. (2007). Computer-administered interviews and rating scales. Psychological Assessment, 19(1), 4–13. https://doi.org/10.1037/1040-3590.19.1.4

Ruiz, M. A., Drake, E. B., Glass, A., Marcotte, D., & van Gorp, W. G. (2002). Trying to beat the system: Misuse of the internet to assist in avoiding the detection of psychological symptom dissimulation. Professional Psychology: Research and Practice, 33(3), 294–299. https://doi.org/10.1037/0735-7028.33.3.294

Forbey, J. D., & Ben-Porath, Y. S. (2007). Computerized adaptive personality testing: A review and illustration with the MMPI-2 computerized adaptive version. Psychological Assessment, 19(1), 14–24. https://doi.org/10.1037/1040-3590.19.1.14

Gibbons, R. D., Weiss, D. J., Frank, E., & Kupfer, D. (2016). Computerized adaptive diagnosis and testing of mental health disorders. Annual Review of Clinical Psychology, 12(1), 83–104. https://doi.org/10.1146/annurev-clinpsy-021815-093634

15.9 Behavioral Assessment

Section 26

Girard, J. M., & Cohn, J. F. (2016). A primer on observational measurement. Assessment, 23(4), 404–413. https://doi.org/10.1177/1073191116635807

Haynes, S. N. (2001). Clinical applications of analogue behavioral observation: Dimensions of psychometric evaluation. Psychological Assessment, 13(1), 73–85. https://doi.org/10.1037/1040-3590.13.1.73

Korotitsch, W. J., & Nelson-Gray, R. O. (1999). An overview of self-monitoring research in assessment and treatment. Psychological Assessment, 11(4), 415–425. https://doi.org/10.1037/1040-3590.11.4.415

Piasecki, T. M., Hufford, M. R., Solhan, M., & Trull, T. J. (2007). Assessing clients in their natural environments with electronic diaries: Rationale, benefits, limitations, and barriers. Psychological Assessment, 19(1), 25–43. https://doi.org/10.1037/1040-3590.19.1.25

15.10 Repeated Assessments across Time

Section 27

Sobell, L. C., & Sobell, M. B. (2008). Timeline followback (TLFB). In A. J. Rush Jr., M. B. First, & D. Blacker (Eds.), Handbook of psychiatric measures (2nd ed., pp. 466–468). American Psychiatric Publishing.

Carpenter, R. W., Wycoff, A. M., & Trull, T. J. (2016). Ambulatory assessment: New adventures in characterizing dynamic processes. Assessment, 23(4), 414–424. https://doi.org/10.1177/1073191116632341

Matthews, M., Abdullah, S., Murnane, E., Voida, S., Choudhury, T., Gay, G., & Frank, E. (2016). Development and evaluation of a smartphone-based measure of social rhythms for bipolar disorder. Assessment, 23(4), 472–483. https://doi.org/10.1177/1073191116656794 [a case study in self-report across time. Specifics of their study are less important.]

Section 28

Hertzog, C., & Nesselroade, J. R. (2003). Assessing psychological change in adulthood: An overview of methodological issues. Psychology and Aging, 18(4), 639–657. https://doi.org/10.1037/0882-7974.18.4.639

Petersen, I. T., Choe, D. E., & LeBeau, B. (2020). Studying a moving target in development: The challenge and opportunity of heterotypic continuity. Developmental Review, 58, 100935. https://doi.org/10.1016/j.dr.2020.100935

Beltz, A. M., Wright, A. G. C., Sprague, B. N., & Molenaar, P. C. M. (2016). Bridging the nomothetic and idiographic approaches to the analysis of clinical data. Assessment, 23(4), 447–458. https://doi.org/10.1177/1073191116648209 [focus on the general issues of combining idiographic and nomothetic data. You don’t need to know the technical details of their GIMME model.]

15.11 Assessment of Cognition

Section 29

*Busemeyer, J. R., & Stout, J. C. (2002). A contribution of cognitive decision models to clinical assessment: Decomposing performance on the Bechara gambling task. Psychological Assessment, 14(3), 253–262. https://doi.org/10.1037/1040-3590.14.3.253

Dunkley, D. M., Segal, Z. V., & Blankstein, K. R. (2019). Cognitive assessment: Issues and methods. In K. S. Dobson & D. J. A. Dozois (Eds.), Handbook of cognitive-behavioral therapies (4th ed., pp. 85–119). Guilford Press.

Davison, G. C., Vogel, R. S., & Coffman, S. G. (1997). Think-aloud approaches to cognitive assessment and the articulated thoughts in simulated situations paradigm. Journal of Consulting and Clinical Psychology, 65(6), 950–958. https://doi.org/10.1037/0022-006X.65.6.950

Hurlburt, R. T. (1997). Randomly sampling thinking in the natural environment. Journal of Consulting and Clinical Psychology, 65(6), 941–949. https://doi.org/10.1037/0022-006X.65.6.941

Rodebaugh, T. L., Scullin, R. B., Langer, J. K., Dixon, D. J., Huppert, J. D., Bernstein, A., Zvielli, A., & Lenze, E. J. (2016). Unreliability as a threat to understanding psychopathology: The cautionary tale of attentional bias. Journal of Abnormal Psychology, 125(6), 840–851. https://doi.org/10.1037/abn0000184

Treat, T. A., McFall, R. M., Viken, R. J., Kruschke, J. K., Nosofsky, R. M., & Wang, S. S. (2007). Clinical cognitive science: Applying quantitative models of cognitive processing to examine cognitive aspects of psychopathology. In R. W. J. Neufeld (Ed.), Advances in clinical cognitive science: Formal modeling of processes and symptoms (pp. 179–205). American Psychological Association. https://doi.org/10.1037/11556-006

15.12 Cultural and Individual Diversity

Section 30

It may be helpful to review the three Sackett papers and the Cole paper from the Intellectual Assessment section. Also review relevant sections of the APA Standards for Educational and Psychological Testing from the Validity section.

Byrd, D. A., Rivera Mindt, M. M., Clark, U. S., Clarke, Y., Thames, A. D., Gammada, E. Z., & Manly, J. J. (2021). Creating an antiracist psychology by addressing professional complicity in psychological assessment. Psychological Assessment, 33(3), 279-285. https://doi.org/10.1037/pas0000993

Okazaki, S., & Sue, S. (1995). Methodological issues in assessment research with ethnic minorities. Psychological Assessment, 7(3), 367–375. https://doi.org/10.1037/1040-3590.7.3.367

Garb, H. N. (1997). Race bias, social class bias, and gender bias in clinical judgment. Clinical Psychology: Science and Practice, 4(2), 99–120. https://doi.org/10.1111/j.1468-2850.1997.tb00104.x

Leong, F. T. L., & Kalibatseva, Z. (2016). Threats to cultural validity in clinical diagnosis and assessment: Illustrated with the case of Asian Americans. In N. Zane, G. Bernal, & F. T. L. Leong (Eds.), Evidence-based psychological practice with ethnic minorities: Culturally informed research and clinical strategies (pp. 57–74). American Psychological Association.

Suzuki, L. A., Onoue, M. A., & Hill, J. S. (2013). Clinical assessment: A multicultural perspective. In K. F. Geisinger, J. F. Carlson, J.-I. C. Hansen, N. R. Kuncel, S. P. Reise, & M. C. Rodriguez (Eds.), APA handbook of testing and assessment in psychology (Vol. 2: Testing and assessment in clinical and counseling psychology, pp. 193–212). American Psychological Association. https://doi.org/10.1037/14048-012

16 Grading System and the Use of +/-

Final grades will be assigned at the end of the semester on the basis of your total percentage of points earned on examinations and your final paper. Grades will be assigned on an absolute scale (criterion-referenced grading; see below); course grades will not be curved. No extra-credit opportunities are available for this course. Please note: As a matter of fairness to all students, I assign grades based on performance and do not negotiate grades. Additionally, a penalty of 20% per day will be applied to all assignments turned in late. Final grades will be assigned based on the following ranges:

Grade Percent
A+ 97–100%
A 93–96
A− 90–92
B+ 87–89
B 83–86
B− 80–82
C+ 77–79
C 73–76
C− 70–72
D+ 67–69
D 63–66
D− 60–62
F 0–59

17 Course Grades

Final course grades will be assessed based on your performance in the activities below. The relative contribution of each component to your final grade is as follows:

  • 30% Exam 1 (Mid-Term)
  • 40% Exam 2 (Final)
  • 30% Final Paper

18 Tentative Course Outline (exam dates fixed)

This is a tentative course outline. Changes will be discussed in class. There are 15 weeks in the semester, and class meets twice per week (30 sections). We will have one exam during the semester and one final exam during finals week.

Section Day Date Content
1 T 01/16 Overview of Class; Clinical Science and the Replication Crisis
2 Th 01/18 Reliability
3 T 01/23 Reliability
4 Th 01/25 Validity
5 T 01/30 Validity
6 Th 02/01 Structural Equation Modeling (SEM)
7 T 02/06 Item Response Theory (IRT)
8 Th 02/08 Prediction Basics
9 T 02/13 Signal Detection Theory
10 Th 02/15 Clinical Judgment vs. Algorithmic Prediction
11 T 02/20 General Issues in Clinical Assessment
12 Th 02/22 Evidence-Based Assessment
13 T 02/27 Ethical Issues in Assessment
14 Th 02/29 Midterm Exam
15 T 03/05 Intellectual Assessment
16 Th 03/07 Intellectual Assessment
T 03/12 Spring Break!
Th 03/14 Spring Break!
17 T 03/19 Bias
18 Th 03/21 Bias
19 T 03/26 The Interview and the DSM
20 Th 03/28 Objective Personality Testing
21 T 04/02 Objective Personality Testing
22 Th 04/04 Objective Personality Testing
23 T 04/09 Projective Personality Testing
24 Th 04/11 Psychophysiological Measures and RDoC
25 T 04/16 Computers and Adaptive Testing
26 Th 04/18 Behavioral Assessment
27 T 04/23 Repeated Assessments across Time
28 Th 04/25 Repeated Assessments across Time
29 T 04/30 Assessment of Cognition
30 Th 05/02 Cultural and Individual Diversity; Final paper due!
Finals Week TBD (week of 5/6) Final Exam

19 Date and Time of the Final Exam

The final examination date and time will be announced by the Registrar generally by the fifth week of classes, and it will be announced on the course ICON site once it is known. Do not plan your end of the semester travel plans until the final exam schedule is made public. It is your responsibility to know the date, time, and place of the final exam. According to the Registrar’s final exam policy, students have a maximum of two weeks after the announced final exam schedule to request a change if an exam conflict exists or if a student has more than two exams scheduled for the same day (see the policy here).

20 Course Resources

There are many course resources available to help you succeed in the class, including:

21 How to Study for this Class

To study for this class, my suggestions are:

  1. Read the assigned readings before each class. We have lots of content to cover, and the lectures will move quickly. Thus, doing the relevant readings before each class will help you best come prepared to learn the material presented in class.
  2. Take good notes while doing the assigned readings. After reading each article, leave a few bullet points at the top of the article regarding the key points and take-away messages from the article. That way, when you go back and review it, the key ideas will refresh your memory and will help you make the relevant connections to the rest of your notes on the article and to the points discussed in lecture.
  3. After doing the assigned readings and before class period, review your notes and try to determine what are the key messages intended to conveyed by the collection of readings. The will set you up to be in the best position to acquire the material covered in lecture.
  4. Take good notes in class.
  5. If something is unclear about the reading or about a point discussed in lecture, feel free to consult the companion book, to review the lecture recording, or to ask questions during or after class, or in office hours. Don’t struggle in silence!
  6. As you prepare for the exam, review the material covered by each article and lecture. If there is an exam review or example study questions, make sure to review those closely. The exam review presents some of the key take-away messages from each lecture and thus represents prime material for exam questions. The example study questions are NOT comprehensive and are NOT necessarily the same questions that will be asked on the exam, but they should give you a sense of the style in which questions may be asked. If there is a question you do not know the full answer to, that is a clue that you need to study that topic more closely.
  7. I strongly encourage you to study with your peers. Studying with your peers helps give you a sense about the topics where you feel stronger and the topics where you feel weaker (and need to study more). It helps both peers in the exchange when one peer explains a topic to another. In addition to helping the listening student learn, peer instruction also helps the explaining student via consolidation of the student’s knowledge. There is a difference between “knowing something” and “knowing it well.” Explaining a topic to someone else helps you figure out where your knowledge gaps are and can help you make sure you understand the topic well. Additionally, studying by explaining topics to others aligns more closely with the exam format (short answer/essay), which demands recall rather than mere recognition—recognition alone being typically adequate for multiple-choice exams.
  8. Come to office hours if you still have questions!

22 Drop Deadline for this Course

You may drop an individual course before the drop deadline; after this deadline you will need collegiate approval. You can look up the drop deadline for this course here. When you drop a course, a “W” will appear on your transcript. The mark of “W” is a neutral mark that does not affect your GPA. To discuss how dropping (or staying in) a course might affect your academic goals, please contact your Academic Advisor. Directions for adding or dropping a course and other registration changes can be found on the Registrar’s website. Students should adhere to the academic deadlines and policies set by the Graduate College.

23 Feedback about the Course

I welcome feedback at any point during the class. If you have comments on the class or my teaching, please feel free to meet with me during office hours.

23.1 Student Complaints

Students with a complaint about a grade or a related matter should first discuss the situation with the instructor, and finally with the DEO (Chair) of the department, school, or program offering the course. Sometimes students will be referred to the department or program’s Director of Undergraduate Studies (DUS) or Director of Graduate Studies (DGS). Students should contact the CLAS Graduate Affairs Manager when additional support is needed.

24 Communication: UI Email

Students are responsible for all official correspondences sent to their UI email address (uiowa.edu) and must use this address for any communication with instructors or staff in the UI community. For the privacy and the protection of student records, UI faculty and staff can only correspond with UI email addresses.

24.1 Other Expectations of Student Performance

Students have the right to a distraction-free learning environment. You have the responsibility to help create such a classroom environment. Please treat other students in the class and the instructor with respect. Students are expected to help each other learn and to contribute overall to the learning environment of the course. Arriving prepared for class is part of this expectation.

25 University Policies

University Policies

Accommodations for Students with Disabilities
The University is committed to providing an educational experience that is accessible to all students. If a student has a diagnosed disability or other disabling condition that may impact the student’s ability to complete the course requirements as stated in the syllabus, the student may seek accommodations through Student Disability Services (SDS). SDS is responsible for making Letters of Accommodation (LOA) available to the student. The student must provide a LOA to the instructor as early in the semester as possible, but requests not made at least two weeks prior to the scheduled activity for which an accommodation is sought may not be accommodated. The LOA will specify what reasonable course accommodations the student is eligible for and those the instructor should provide. Additional information can be found on the SDS website.

Class Recordings
Students may be enrolled in a class where some sessions will be recorded or live-streamed. Such recordings/streaming will only be available to students registered for the class. These recordings are the intellectual property of the instructor and they may not be shared or reproduced without the explicit, written consent of the instructor. Further, students may not share these sessions with those not in the class or upload them to any other online environment. Doing so would be a breach of the Code of Student Conduct, and, in some cases, a violation of state and federal law, including the Federal Education Rights and Privacy Act (FERPA).

The unauthorized video or audio recording of academic activities (e.g., lectures, course discussions, office hours, etc.) by a student is prohibited. Students with a reasonable accommodation for recording approved by Student Disability Services should notify each instructor and provide the Letter of Accommodation prior to using the accommodation. A student may record classroom activities with prior written permission from the instructor and notice to other students in the class that audio or video recording may occur. Any and all classroom recording must be for personal academic use only. The distribution, sharing, sale, or posting of recordings on the internet (including social media), in whole or in part, is prohibited and doing so may be a violation of the Code of Student Life and/or state or federal privacy, copyright, or other laws.

26 Where to Get Academic Support for This Course

27 Mental Health Resources and Student Support

Students are encouraged to be mindful of their mental health and seek help as a preventive measure or if feeling overwhelmed and/or struggling to meet course expectations. Students are encouraged to talk to their instructor for assistance with specific class-related concerns. For additional support and counseling, students are encouraged to contact University Counseling Service (UCS). Information about UCS, including resources and how to schedule an appointment, can be found at counseling.uiowa.edu. Find out more about UI mental health services at: mentalhealth.uiowa.edu, including the 24-7 UI Support and Crisis Line.

Additionally, the Office of the Dean of Students can help students navigate personal crisis situations. They can provide one-on-one support, help with identifying options, and access to basic needs resources (such as food, rent, childcare, etc.). Student Care and Assistance: 132 IMU, dos-assistance@uiowa.edu, or 319-335-1162 and more info: dos.uiowa.edu/assistance

If you feel that you or someone you know may be struggling with an academic, emotional, or psychological problem, the following organizations are available for assistance:

Service Contact Info
University of Iowa Academic Advising Center 353-5700, https://advisingcenter.uiowa.edu
University Counseling Services 335-7294, https://www.uiowa.edu/ucs
Student Health Service - Mental Health 335-8394, https://studenthealth.uiowa.edu/services/psychiatry
University of Iowa Hospitals and Clinics Adult Psychiatry Services Clinic 353-6314, https://www.uihealthcare.org/Psychiatry
Seashore Clinic (in the UI Department of Psychological and Brain Sciences) 335-2467, https://psychology.uiowa.edu/resources/seashore-clinic
Women’s Resource and Action Center 335-1486, https://wrac.uiowa.edu
Rape Victim Advocacy Program 319-335-6000 or 800-228-1625, https://www.uiowa.edu/~rvap
Office of Sexual Misconduct 319-335-6200, https://osmrc.uiowa.edu
CommUnity 855-325-4296, https://builtbycommunity.org/crisis
Community & Family Resources 351-4357, https://www.cfrhelps.org/

If you or someone you know is contemplating suicide, either call or text the Suicide and Crisis Lifeline at 988, or call 911.

28 Disclaimer

This syllabus is subject to change. Any changes will be discussed in class, via email, and/or on ICON.

LS0tCnRpdGxlOiAiQ291cnNlIFN5bGxhYnVzIgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBlcnJvciA9IFRSVUUsCiAgY29tbWVudCA9ICIiKQpgYGAKCkxhc3QgVXBkYXRlZDogYHIgZm9ybWF0KFN5cy5EYXRlKCksICIlbS8lZC8lWSIpYAoKIyBDb3Vyc2UgVGl0bGUgeyN0aXRsZX0KClBTWTo1MzMwIOKAkyBQcmluY2lwbGVzIG9mIFBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCAoU3ByaW5nIDIwMjYpCgojIENvdXJzZSBNZWV0aW5nIFRpbWUgYW5kIFBsYWNlIHsjbGVjdHVyZVRpbWV9CgpUdWVzZGF5ICYgVGh1cnNkYXkgOTozMCBhLm0u4oCTMTA6NDUgYS5tLiwgMTA5IFN0dWl0IEhhbGwgKFNUSCkKCiMgQ291cnNlIFdlYnNpdGUgeyN3ZWJzaXRlfQoKaHR0cHM6Ly9pY29uLnVpb3dhLmVkdQoKVG8gYWNjZXNzIHRoZSBjb3Vyc2Ugc2l0ZSwgbG9nIGludG8gW0lvd2EgQ291cnNlcyBPbmxpbmUgKElDT04pXShodHRwczovL2ljb24udWlvd2EuZWR1KSB1c2luZyB5b3VyIEhhd2sgSUQgYW5kIHBhc3N3b3JkLgoKIyBDb3Vyc2UgSG9tZSB7I2hvbWV9CgpUaGUgVW5pdmVyc2l0eSBvZiBJb3dhXApUaGUgQ29sbGVnZSBvZiBMaWJlcmFsIEFydHMgYW5kIFNjaWVuY2VzXApEZXBhcnRtZW50IG9mIFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzCgpUaGUgQ29sbGVnZSBvZiBMaWJlcmFsIEFydHMgYW5kIFNjaWVuY2VzIChDTEFTKSBpcyB0aGUgaG9tZSBvZiB0aGlzIGNvdXJzZSwgYW5kIENMQVMgZ292ZXJucyB0aGUgcG9saWNpZXMgYW5kIHByb2NlZHVyZXMgZm9yIGl0cyBjb3Vyc2VzLgpHcmFkdWF0ZSBzdHVkZW50cywgaG93ZXZlciwgbXVzdCBhZGhlcmUgdG8gdGhlIFthY2FkZW1pYyBkZWFkbGluZXMgc2V0IGJ5IHRoZSBHcmFkdWF0ZSBDb2xsZWdlXShodHRwczovL2dyYWQudWlvd2EuZWR1L2FjYWRlbWljcy9kZWFkbGluZXMpLgoKIyBJbnN0cnVjdG9yIENvbnRhY3QgSW5mb3JtYXRpb24geyNpbnN0cnVjdG9yfQoKW0lzYWFjIFQuIFBldGVyc2VuLCBQaC5ELl0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9wZW9wbGUvaXNhYWMtcGV0ZXJzZW4pXApPZmZpY2U6IDE3NSBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBCdWlsZGluZyAoUEJTQilcCkUtbWFpbDogW2lzYWFjLXQtcGV0ZXJzZW5AdWlvd2EuZWR1XShtYWlsdG86aXNhYWMtdC1wZXRlcnNlbkB1aW93YS5lZHUpXApPZmZpY2UgUGhvbmU6IDQ2Ny0xMDE0XApPZmZpY2UgSG91cnM6IGJ5IGFwcG9pbnRtZW50XAoKIyBEZXBhcnRtZW50YWwgUmVzb3VyY2VzIHsjZGVwdFJlc291cmNlc30KCkRlcGFydG1lbnQgb2YgUHN5Y2hvbG9naWNhbCBhbmQgQnJhaW4gU2NpZW5jZXM6IFtodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1XShodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1KVwKRGVwYXJ0bWVudCBvZiBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBNYWluIE9mZmljZTogRzYwIFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzIEJ1aWxkaW5nICgzMzUtMjQwNilcCkRpcmVjdG9yIG9mIEdyYWR1YXRlIFN0dWRpZXM6IFJ5YW4gTGFMdW1pZXJlIChbcnlhbi1sYWx1bWllcmVAdWlvd2EuZWR1XShtYWlsdG86cnlhbi1sYWx1bWllcmVAdWlvd2EuZWR1KTsgMzM1LTM2ODEpXApEZXBhcnRtZW50YWwgRXhlY3V0aXZlIE9mZmljZXIgKERFTykvRGVwYXJ0bWVudCBDaGFpcjogUHJvZmVzc29yIEJsdW1iZXJnIChbbWFyay1ibHVtYmVyZ0B1aW93YS5lZHVdKG1haWx0bzptYXJrLWJsdW1iZXJnQHVpb3dhLmVkdSk7IDMzNS0yNDI0KQoKIyBQcmVyZXF1aXNpdGVzIHsjcHJlcmVxc30KClRvIHN1Y2NlZWQgaW4gdGhlIGNsYXNzLCBpdCBpcyBoZWxwZnVsIHRvIGhhdmUgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgY29ycmVsYXRpb24gYW5kIG11bHRpcGxlIHJlZ3Jlc3Npb24uCgojIERlc2NyaXB0aW9uIG9mIENvdXJzZSB7I2Rlc2NyaXB0aW9ufQoKTXVjaCBvZiB0aGUgY3VycmVudCBkaXNjdXNzaW9uIGluIHBzeWNob2xvZ3kgc3Vycm91bmRpbmcgdGhlIHJlcGxpY2F0aW9uIGNyaXNpcyBkZWFscyB3aXRoIHF1ZXN0aW9uYWJsZSByZXNlYXJjaCBwcmFjdGljZXMuCkhvd2V2ZXIsIHRoZSBmaWVsZCBoYXMgcGFpZCBpbnN1ZmZpY2llbnQgYXR0ZW50aW9uIHRvIGhvdyBsb3VzeS9ub2lzeSBtZWFzdXJlcyBtaWdodCBjb250cmlidXRlIHRvIHRoZSByZXBsaWNhdGlvbiBjcmlzaXMgKExva2VuICYgR2VsbWFuLCAyMDE3KS4KSW4gdGhpcyBjbGFzcywgd2UgY292ZXIgY29udGVudCB0aGF0IGlzIHJlbGV2YW50IHRvIGFsbCBvZiBQc3ljaG9sb2d5IGFuZCBzY2llbmNlIG1vcmUgYnJvYWRseSwgaW5jbHVkaW5nIGhvdyB0byBkZXZlbG9wLCBhZG1pbmlzdGVyLCBzY29yZSwgaW50ZWdyYXRlLCBhbmQgaW50ZXJwcmV0IG1lYXN1cmVzLgpUb3BpY3Mgd2lsbCBpbmNsdWRlLCBmb3IgZXhhbXBsZSwgcHN5Y2hvbWV0cmljcyAoW3JlbGlhYmlsaXR5XSgjc2VjdGlvbjIpIGFuZCBbdmFsaWRpdHldKCNzZWN0aW9uNCkpLCBbcHJlZGljdGlvbl0oI3NlY3Rpb244KSwgW3N0cnVjdHVyYWwgZXF1YXRpb24gbW9kZWxpbmddKCNzZWN0aW9uNiksIFtmYWN0b3IgYW5hbHlzaXNdKCNzZWN0aW9uMjApLCBbc2lnbmFsIGRldGVjdGlvbiB0aGVvcnldKCNzZWN0aW9uOSksIFtpdGVtIHJlc3BvbnNlIHRoZW9yeV0oI3NlY3Rpb243KSwgW2FkYXB0aXZlIHRlc3RpbmddKCNzZWN0aW9uMjUpLCBbbG9uZ2l0dWRpbmFsL3JlcGVhdGVkIG1lYXN1cmVtZW50XSgjc2VjdGlvbjI3KSwgYW5kIGlzc3VlcyBpbiBbY29nbml0aXZlXSgjc2VjdGlvbjI5KSwgW3NvY2lhbC9iZWhhdmlvcmFsXSgjc2VjdGlvbjI2KSwgYW5kIFtwc3ljaG9waHlzaW9sb2dpY2FsXSgjc2VjdGlvbjI0KSBhc3Nlc3NtZW50LiAKCkluIHRoaXMgY291cnNlLCB3ZSBleGFtaW5lIGJhc2ljIHBzeWNob21ldHJpY3MgYW5kIHRoZSBiYWNrZ3JvdW5kLCBkZXZlbG9wbWVudCwgZXZhbHVhdGlvbiwgYWRtaW5pc3RyYXRpb24sIHNjb3JpbmcsIGludGVncmF0aW9uLCBhbmQgaW50ZXJwcmV0YXRpb24gb2Ygc2VsZWN0ZWQgdGVjaG5pcXVlcyBpbiBwc3ljaG9sb2dpY2FsIGFzc2Vzc21lbnQuClRoZSBjb3Vyc2UgYXBwbGllcyBhIHNjaWVudGlmaWMgcGVyc3BlY3RpdmUgdG8gcHN5Y2hvbG9naWNhbCBhc3Nlc3NtZW50LgoqWW91IGFyZSB1cmdlZCB0byByZWNvbnNpZGVyIHlvdXIgZGVjaXNpb24gdG8gdGFrZSB0aGlzIGNsYXNzIGlmIHlvdSBhcmUgcmVsdWN0YW50IHRvIGV4YW1pbmUgdGhlc2UgdG9waWNzIGluIGEgc2NpZW50aWZpYyBtYW5uZXIuKgoKIyBMZWFybmluZyBPdXRjb21lcyB7I2xlYXJuaW5nT3V0Y29tZXN9CgpUaGUgZm9jdXMgb2YgdGhpcyBjbGFzcyBpcyBOT1Qgb24gYXBwbGljYXRpb24gKGUuZy4sIGhvdyB0byBhc3Nlc3MgZWFjaCBwc3ljaG9sb2dpY2FsIGRpc29yZGVyLCBob3cgdG8gdXNlIHBhcnRpY3VsYXIgbWVhc3VyZXMsIGV0YykuClRoaXMgY291cnNlIGlzIGZvY3VzZWQgb24gaW1wb3J0YW50ICpwcmluY2lwbGVzKiBvZiBwc3ljaG9sb2dpY2FsIGFzc2Vzc21lbnQuClRoZSBnb2FsIG9mIHRoZSBjbGFzcyBpcyB0byBnaXZlIHlvdSBsb3RzIG9mICJ0aGlua2luZyB0b29scyIgcmVsZXZhbnQgdG8gcHN5Y2hvbG9naWNhbCBhc3Nlc3NtZW504oCUaS5lLiwgImhvdyB0byB0aGluayIgYWJvdXQgYW5kIGNyaXRpY2FsbHkgZXZhbHVhdGUgYXNzZXNzbWVudHMgaW4gcHN5Y2hvbG9neeKAlHRvIGhlbHAgeW91IGFkdmFuY2UgeW91ciByZXNlYXJjaCBwcm9ncmFtLgpMZWFybmluZyB0aGUgaW1wb3J0YW50IHByaW5jaXBsZXMgd2lsbCBwdXQgeW91IGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGxlYXJuIGFueSBhc3Nlc3NtZW50LCBhbmQgdG8gZGV2ZWxvcCBiZXR0ZXIgb25lcy4KCiMgU3VwcGxlbWVudGFsIFJlc291cmNlcyB7I3N1cHBsZW1lbnRhbH0KCkV2ZW4gdGhvdWdoIHRoZSBjb3Vyc2UgaXMgZm9jdXNlZCBvbiBwcmluY2lwbGVzIG9mIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudCBhbmQgbm90IG9uIGFwcGxpY2F0aW9uLCBJIHdhbnQgeW91IHRvIGJlIGFibGUgdG8gYXBwbHkgdGhlIHByaW5jaXBsZXMgd2UgZGlzY3Vzcy4KU28sIEkgcHJvdmlkZSBsb3RzIG9mIGFkZGl0aW9uYWwgcmVhZGluZ3MgYW5kIHJlc291cmNlcyBvbiB0aGUgYXNzZXNzbWVudCBvZiBwYXJ0aWN1bGFyIGRpc29yZGVycywgdXNpbmcgcGFydGljdWxhciBtZWFzdXJlcywgZXRjLgpUaGVzZSBzdXBwbGVtZW50YWwgcmVzb3VyY2VzIGFyZSBpbiB0aGUgIkZvciBNb3JlIEluZm8iIGZvbGRlciBpbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkuClRoZSBmb2xkZXIgYWxzbyBpbmNsdWRlcyBhbiBFbmROb3RlIGZpbGUgd2l0aCB0aGUgY291cnNlIHJlYWRpbmdzLgpJbiBhZGRpdGlvbiwgSSBwcm92aWRlIGEgY29tcGFuaW9uIGJvb2sgKHNlZSBbYmVsb3ddKCN0ZXh0Ym9vaykpLgoKIyBDb21wYW5pb24gQm9vayB7I3RleHRib29rfQoKSSB3YW50IHRob3NlIHdobyBhcmUgaW50ZXJlc3RlZCB0byBiZSBpbiB0aGUgYmVzdCBwb3NpdGlvbiB0byBhcHBseSB0aGUgcHJpbmNpcGxlcyB3ZSBkaXNjdXNzLgpUaHVzLCBJIGNyZWF0ZWQgYSBjb21wYW5pb24gYm9vayBmb3IgdGhlIGNvdXJzZSB0aGF0IGluY2x1ZGVzIHByYWN0aWNhbCBkYXRhIGFuZCBhbmFseXNpcyBleGFtcGxlcyB0byBoZWxwIHlvdSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcHJpbmNpcGxlcyBhbmQgaG93IHRvIGFwcGx5IHRoZW0gaW4geW91ciBvd24gcmVzZWFyY2guClRoZSBjb21wYW5pb24gYm9vayBpbmNsdWRlcyBleGVyY2lzZXMgdG8gaGVscCB5b3UgdGVzdCB5b3VyIGNvbXByZWhlbnNpb24uCjx1PlRoZSBjb21wYW5pb24gYm9vayBpcyBOT1QgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgaW1wb3J0YW5jZSBvZiByZWFkaW5nIHRoZSBbcmVxdWlyZWQgcHJpbWFyeSBzb3VyY2UgYXJ0aWNsZXNdKCNyZWFkaW5ncyk8L3U+ICh3aGljaCBhcmUgY292ZXJlZCBvbiB0aGUgZXhhbXMpLgo8dT5Zb3UgYXJlIE5PVCByZXF1aXJlZCBvciBleHBlY3RlZCB0byByZWFkIHRoZSBjb21wYW5pb24gYm9vayBmb3IgdGhpcyBjbGFzcy48L3U+ClRoZSBjb21wYW5pb24gYm9vayBpcyBtZXJlbHkgbWVhbnQgdG8gYmUgYSBoZWxwZnVsIHN1cHBsZW1lbnRhcnkgcmVzb3VyY2UgZm9yIHRob3NlIHdobyBhcmUgaW50ZXJlc3RlZC4KWW91IGNhbiBhY2Nlc3MgdGhlIGNvbXBhbmlvbiBib29rIGhlcmU6IGh0dHBzOi8vaXNhYWN0cGV0ZXJzZW4uZ2l0aHViLmlvL1ByaW5jaXBsZXMtUHN5Y2hvbG9naWNhbC1Bc3Nlc3NtZW50CgojIEFjYWRlbWljIEhvbmVzdHkgYW5kIE1pc2NvbmR1Y3QgeyNhY2FkZW1pY0hvbmVzdHl9CgpBbGwgc3R1ZGVudHMgaW4gQ0xBUyBjb3Vyc2VzIGFyZSBleHBlY3RlZCB0byBhYmlkZSBieSB0aGUgW2NvbGxlZ2UncyBzdGFuZGFyZHMgb2YgYWNhZGVtaWMgaG9uZXN0eV0oaHR0cHM6Ly9jbGFzLnVpb3dhLmVkdS9zdHVkZW50cy9oYW5kYm9vay9hY2FkZW1pYy1mcmF1ZC1ob25vci1jb2RlKS4KQWNhZGVtaWMgbWlzY29uZHVjdCBtdXN0IGJlIHJlcG9ydGVkIHRvIHRoZSBHcmFkdWF0ZSBDb2xsZWdlIGFjY29yZGluZyB0byBTZWN0aW9uIEYgb2YgdGhlIFtHcmFkdWF0ZSBDb2xsZWdlIE1hbnVhbF0oaHR0cHM6Ly9ncmFkLnVpb3dhLmVkdS9hY2FkZW1pY3MvbWFudWFsL2FjYWRlbWljLXByb2dyYW0vc2VjdGlvbi1pdi1hY2FkZW1pYy1zdGFuZGluZy1wcm9iYXRpb24tYW5kLWRpc21pc3NhbCkuClBsZWFzZSBub3RlIHRoYXQgY29sbGFib3JhdGlvbiB3aXRoIG90aGVyIGNsYXNzbWF0ZXMgZHVyaW5nIGV4YW1zIGlzIG5vdCBwZXJtaXR0ZWQuCkhvd2V2ZXIsIEkgZG8gZW5jb3VyYWdlIHlvdSB0byBjb2xsYWJvcmF0ZSB3aXRoIGNsYXNzbWF0ZXMgb24gcmVhZGluZ3MgYW5kIHRvICpwcmVwYXJlKiBmb3IgZXhhbXMgKGUuZy4sIGluZm9ybWFsIHN0dWR5IGdyb3VwcykuCkluIGFkZGl0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdyB0aGUgY291cnNlJ3MgcG9saWN5IG9uIHRoZSB1c2Ugb2YgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UgKEFJKSwgd2hpY2ggaXMgb3V0bGluZWQgYmVsb3cuCgojIEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlIChBSSkgUG9saWN5IHsjYWl9CgpCZWNhdXNlIHdyaXRpbmcsIGFuYWx5dGljYWwsIGFuZCBjcml0aWNhbCB0aGlua2luZyBza2lsbHMgYXJlIHBhcnQgb2YgdGhlIGxlYXJuaW5nIG91dGNvbWVzIG9mIHRoaXMgY291cnNlLCBhbGwgd29yayBzdWJtaXR0ZWQgYnkgc3R1ZGVudHMgc2hvdWxkIGJlIHByZXBhcmVkIGJ5IHRoZSBzdHVkZW50LgpZb3UgYXJlIHRyYWluaW5nIHRoZXNlIGNvZ25pdGl2ZSBtdXNjbGVzOyBpZiB5b3UgZ28gdG8gdGhlIGd5bSwgeW91IHdvdWxkIG5vdCBoYXZlIEFJIGxpZnQgdGhlIHdlaWdodHMgZm9yIHlvdS4KRm9yIHRoZXNlIHJlYXNvbnMsIEFJLWdlbmVyYXRlZCBzdWJtaXNzaW9ucyBhcmUgbm90IHBlcm1pdHRlZCBhbmQgd2lsbCBiZSB0cmVhdGVkIGFzIHBsYWdpYXJpc20uCkxlYXJuaW5nIHRoZXNlIGNvcmUgZm91bmRhdGlvbmFsIHNraWxscyB3aWxsIG1ha2UgeW91IGEgYmV0dGVyIHVzZXIgb2YgQUkgaW4gdGhlIGZ1dHVyZSwgYmVjYXVzZSB5b3Ugd2lsbCBiZSBiZXR0ZXItcG9zaXRpb25lZCBpbiB0aGUgZnV0dXJlIHRvIGNyaXRpY2FsbHkgZXZhbHVhdGUgQUkgcmVzcG9uc2VzIGFuZCB0byBpZGVudGlmeSB3aGVuIChhbmQgdGhlIHdheXMgaW4gd2hpY2gpIGl0cyByZXNwb25zZXMgYXJlIGluYWNjdXJhdGUuCk1vcmVvdmVyLCBpbiBtYW55IGluZHVzdHJpZXMsIHVzZSBvZiBBSSBpcyBub3QgcGVybWl0dGVkIGJlY2F1c2UgeW91IGNhbm5vdCBzaGFyZSB0aGUgY29tcGFueSdzIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgpUaHVzLCBkZXZlbG9waW5nIHN0cm9uZyBjb21wZXRlbmNpZXMgaW4gdGhlc2UgZG9tYWlucyAod2l0aG91dCB0aGUgdXNlIG9mIEFJKSB3aWxsIHByZXBhcmUgeW91IGZvciBhIGNvbXBldGl0aXZlIHdvcmtwbGFjZS4KCiMgQ291cnNlIFJlcXVpcmVtZW50cyBhbmQgUG9saWNpZXMgeyNyZXF1aXJlbWVudHN9CgotIFtBc3NpZ25lZCByZWFkaW5nc10oI3JlYWRpbmdzKQotIFtDbGFzcyBwYXJ0aWNpcGF0aW9uXSgjYXR0ZW5kYW5jZVBhcnRpY2lwYXRpb24pCi0gW01pZHRlcm0gRXhhbV0oI2V4YW1zKQotIFtGaW5hbCBFeGFtXSgjZXhhbXMpCi0gW1BhcGVyXSgjcGFwZXIpCgojIyBMZWN0dXJlIHsjbGVjdHVyZX0KClRoZSBjb3Vyc2UgaXMgcHJpbWFyaWx5IGxlY3R1cmUuCldlIHdpbGwgbWVldCB0d2ljZSB3ZWVrbHkgZm9yIGxlY3R1cmVzLCBhdCB0aGUgdGltZSBhbmQgbG9jYXRpb24gZGVzY3JpYmVkIFthYm92ZV0oI2xlY3R1cmVUaW1lKS4KVGhlcmUgaXMgY29uc2lkZXJhYmxlIG1hdGVyaWFsIHRvIGNvdmVyLCBhbmQgd2Ugd2lsbCBtb3ZlIHF1aWNrbHkuCllvdSBzaG91bGQgZmVlbCBmcmVlIHRvIGFzayBxdWVzdGlvbnMgZHVyaW5nIGxlY3R1cmUsIGFsdGhvdWdoIHNvbWUgcXVlc3Rpb25zIG1heSBuZWVkIHRvIGJlIGRlZmVycmVkIGdpdmVuIHRoZSBuZWVkIHRvIGNvbXBsZXRlIGNvdmVyYWdlIG9mIHNwZWNpZmljIG1hdGVyaWFsLgo8dT5RdWVzdGlvbnMgYW5kIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiBjbGFzcyBtYXRlcmlhbCBhcmUgYWx3YXlzIHdlbGNvbWU8L3U+IGR1cmluZyBvZmZpY2UgaG91cnMgYW5kIHZpYSBlLW1haWwuClBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCBleHRlbnNpdmUgb3IgY29tcGxleCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhZGRyZXNzYWJsZSBvdmVyIGUtbWFpbC4KCiMjIyBMZWN0dXJlIFJlY29yZGluZ3MgeyNyZWNvcmRpbmdzfQoKTXkgaW50ZW50aW9uIGlzIHRvIHJlY29yZCBsZWN0dXJlcyBzbyB0aGUgbGVjdHVyZXMgYXJlIGF2YWlsYWJsZSB0byB5b3UgdmlydHVhbGx5IGFuZCBpbiBwZXJzb24gc28geW91IGhhdmUgdGhlIGNob2ljZSBvZiB2aWV3aW5nIHRoZW0gaG93IHlvdSBzZWUgZml0IGFuZCBzbyB5b3UgbWF5IHJldmlldyB0aGVtLgpSZWNvcmRlZCBsZWN0dXJlcyB3aWxsIGJlIHBvc3RlZCBvbiB0aGUgIlVJQ2FwdHVyZSIgdGFiIGluIFtJQ09OXShodHRwczovL2ljb24udWlvd2EuZWR1KS4KVW5mb3J0dW5hdGVseSwgdGhlIHJlY29yZGluZ3MgZG8gbm90IGNhcHR1cmUgd2hlbiBJIGRyYXcgb24gdGhlIGNsYXNzcm9vbSB3aGl0ZWJvYXJkLgpSZWNvcmRpbmdzIHdpbGwgYmUgYXZhaWxhYmxlIHVwIHRvIDQ4IGhvdXJzIGFmdGVyIGNsYXNzIChmb3IgVGh1cnNkYXkgbGVjdHVyZXMpIG9yIHVudGlsIHRoZSBUaHVyc2RheSBjbGFzcyBwZXJpb2QgKGZvciBUdWVzZGF5IGxlY3R1cmVzKS4KSG93ZXZlciwgPHU+cGxlYXNlIGRvIG5vdCBjb3VudCBvbiByZWNvcmRpbmdzIGJlaW5nIGF2YWlsYWJsZTwvdT4sIGluIGNhc2UgSSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGluaXRpYXRlIHRoZSByZWNvcmRpbmcgb3IgdGhlcmUgaXMgYSB0ZWNobmljYWwgbWFsZnVuY3Rpb24uClRoZSBhdmFpbGFiaWxpdHkgb2YgbGVjdHVyZSByZWNvcmRpbmdzIHdpbGwgbm90IGJlIGV4dGVuZGVkIGJleW9uZCA0OCBob3VycyBhZnRlciBsZWN0dXJl4oCUdGhlIHJlY29yZGluZ3MgYXJlIG1lYW50IHRvIGhlbHAgcGVvcGxlIGtlZXAgdXAgd2l0aCBsZWN0dXJlcyBhbmQgZm9yIHN0dWRlbnRzIHRvIHJldHJpZXZlIHRoZSByZWxldmFudCBjb250ZW50IGlmIHRoZXkgbWlzc2VkIGFueXRoaW5nIGR1cmluZyB0aGUgbGl2ZSBsZWN0dXJlIG9yIGlmIHRoZXkgbWlzcyB0aGUgbGVjdHVyZTsgdGhleSBhcmUgbm90IG1lYW50IHRvIGJlIGEgc3R1ZHkgbWV0aG9kIHRoYXQgYWxsb3dzIHBlb3BsZSB0byBmYWxsIGJlaGluZCBpbiBjbGFzcyBmcm9tIHdlZWsgdG8gd2Vlay4KSWYgeW91IG1pc3Mgc29tZXRoaW5nIGFuZCBhcmUgdW5hYmxlIHRvIHdhdGNoIHRoZSBsZWN0dXJlIHJlY29yZGluZywgeW91IGNhbiBnZXQvcmV2aWV3IG5vdGVzIHdpdGggYSBwZWVyLCBhbmQgdGhlbiBjb21lIHRvIG9mZmljZSBob3VycyBpZiB5b3UgaGF2ZSBzcGVjaWZpYyBxdWVzdGlvbnMuCgojIyBBdHRlbmRhbmNlIGFuZCBQYXJ0aWNpcGF0aW9uIHsjYXR0ZW5kYW5jZVBhcnRpY2lwYXRpb259CgpBdHRlbmRhbmNlIGFuZCBwYXJ0aWNpcGF0aW9uIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIG1heGltaXplIHlvdXIgYW5kIG90aGVycycgbGVhcm5pbmcuCgojIyBSZWFkaW5ncyB7I3JlYWRpbmdzfQoKV2UgaGF2ZSBsb3RzIG9mIGNvbnRlbnQgdG8gY292ZXIsIGFuZCB0aGUgbGVjdHVyZXMgd2lsbCBtb3ZlIHF1aWNrbHkuClRodXMsIGRvaW5nIHRoZSByZWxldmFudCByZWFkaW5ncyAqYmVmb3JlKiBlYWNoIGNsYXNzIHdpbGwgaGVscCB5b3UgYmVzdCBjb21lIHByZXBhcmVkIHRvIGxlYXJuIHRoZSBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gY2xhc3MuClJlYWRpbmdzIGFuZCBvdGhlciBtYXRlcmlhbHMgd2lsbCBiZSBwb3N0ZWQgb24gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpLgpUaGUgYXJ0aWNsZXMgdG8gcmVhZCBhcmUgc3BlY2lmaWVkIGluIHRoZSBbQXJ0aWNsZXNdKCNhcnRpY2xlcykgc2VjdGlvbiBvZiB0aGUgc3lsbGFidXMuCgojIyBFeGFtaW5hdGlvbnMgeyNleGFtc30KClRoZXJlIHdpbGwgYmUgMiBleGFtcy4KRXhhbSAxIHdpbGwgYmUgYWRtaW5pc3RlcmVkIGR1cmluZyBjbGFzcyB0aW1lLgpUaGUgZGF0ZSwgdGltZSwgYW5kIGxvY2F0aW9uIG9mIHRoZSBmaW5hbCBleGFtIHdpbGwgYmUgYW5ub3VuY2VkIGJ5IHRoZSA1dGggd2VlayBvZiBjbGFzcyBieSB0aGUgQ29sbGVnZSBvZiBMaWJlcmFsIEFydHMgYW5kIFNjaWVuY2VzOyB0aGUgZHVyYXRpb24gb2YgdGhlIGZpbmFsIGV4YW0gd2lsbCBiZSAxMjAgbWludXRlcy4KVGhlIGV4YW1zIHdpbGwgYmUgc2hvcnQgYW5zd2VyL2Vzc2F5IHF1ZXN0aW9ucy4KVGhlIGZpbmFsIGV4YW0gaXMgbm9uLWN1bXVsYXRpdmU7IGVhY2ggZXhhbSB3aWxsIGVtcGhhc2l6ZSBpbmZvcm1hdGlvbiBwcmVzZW50ZWQgZm9yIHRoZSBoYWxmIG9mIHRoZSBjbGFzcyB0aGF0IHByZWNlZGVzIGl0LgpIb3dldmVyLCBzb21lIGludGVncmF0aW9uIG9mIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHF1ZXN0aW9ucyBvbiB0aGUgc2Vjb25kIGV4YW0uCkV4YW0gcXVlc3Rpb25zIGNhbiBjb21lIGZyb20gbGVjdHVyZXMgb3IgcmVxdWlyZWQgcmVhZGluZ3MuCgojIyMgTWlzc2luZyBFeGFtcyB7I21pc3NpbmdFeGFtc30KCltVbml2ZXJzaXR5IHJlZ3VsYXRpb25zIHJlcXVpcmUgdGhhdCBzdHVkZW50cyBiZSBhbGxvd2VkIHRvIG1ha2UgdXAgZXhhbWluYXRpb25zXShodHRwczovL29wc21hbnVhbC51aW93YS5lZHUvc3R1ZGVudHMvYWJzZW5jZXMtY2xhc3MpIHRoYXQgaGF2ZSBiZWVuIG1pc3NlZCBkdWUgdG8gaWxsbmVzcywgcmVsaWdpb3VzIGhvbHkgZGF5cywgbWlsaXRhcnkgc2VydmljZSBvYmxpZ2F0aW9ucyAoaW5jbHVkaW5nIHNlcnZpY2UtcmVsYXRlZCBtZWRpY2FsIGFwcG9pbnRtZW50cyksIG9yIG90aGVyIHVuYXZvaWRhYmxlIGNpcmN1bXN0YW5jZXMgb3IgVW5pdmVyc2l0eS1zcG9uc29yZWQgYWN0aXZpdGllcy4KTm90ZTogdGhlIGZvcm1hdCBvZiB0aGUgbWFrZS11cCBleGFtIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgZXhhbS4KSWYgeW91IGtub3cgdGhhdCB5b3UgbXVzdCBiZSBhd2F5IGF0IHRoZSB0aW1lIG9mIGFuIGV4YW0gZm9yIG9uZSBvZiB0aGVzZSByZWFzb25zLCBwbGVhc2UgY29udGFjdCBtZSBpbiBhZHZhbmNlIHdoZW5ldmVyIHBvc3NpYmxlIHRvIHNjaGVkdWxlIGEgbWFrZS11cCBleGFtLgoKIyMgUGFwZXIgeyNwYXBlcn0KCllvdSB3aWxsIHdyaXRlIGEgZmluYWwvdGVybSBwYXBlciBvbiBhIHRvcGljIHBlcnRhaW5pbmcgdG8gYXNzZXNzbWVudC4KVGhlIHBhcGVyIGNhbiBiZSBhIGxpdGVyYXR1cmUgcmV2aWV3IHBlcnRhaW5pbmcgdG8gYXNzZXNzbWVudCAod2l0aCByZWNvbW1lbmRhdGlvbnMpLCBvciBpdCBjYW4gYmUgYSBwYXBlciBvbiB0aGUgZGV2ZWxvcG1lbnQgb2YgYW4gYXNzZXNzbWVudCB0ZWNobmlxdWUuClRoZSBnb2FsIGlzIGZvciB0aGUgcGFwZXIgdG8gYmUgYXMgcmVsZXZhbnQgdG8geW91ciByZXNlYXJjaCBpbnRlcmVzdHMgYXMgcG9zc2libGUsIHNvIGl0IGRpcmVjdGx5IGFkdmFuY2VzIHlvdXIgcmVzZWFyY2ggcHJvZ3JhbS4KUGxlYXNlIGRvIG5vdCBzdHJlc3MgYWJvdXQgdGhlIHBhcGVyLgpZb3VyIHBhcGVyIHNob3VsZCBiZSBsZXNzIHRoYW4gMjAgcGFnZXMgKGV4Y2x1ZGluZyByZWZlcmVuY2VzKS4KSXQgaXMgb2theSAoYW5kIGVuY291cmFnZWQhKSBmb3IgeW91IHRvIHVzZSwgYXMgeW91ciBwYXBlciwgc29tZXRoaW5nIHRoYXQgeW91IGFyZSBhbHJlYWR5IHdvcmtpbmcgb24gb3IgdG8gd3JpdGUgYSBwYXBlciB0aGF0IHlvdSBhcmUgc3VibWl0dGluZyBmb3IgYW5vdGhlciBhc3NpZ25tZW504oCUY29uc2lkZXIgd3JpdGluZyBhIHBhcGVyIHRoYXQgY291bGQgYmUgYSBwdWJsaWNhdGlvbi4KSSB3YW50IHRvIGtlZXAgdGhlIHRvcGljIHJlcXVpcmVtZW50cyBvZiB0aGUgcGFwZXIgZmxleGlibGUgYW5kIG9wZW4tZW5kZWQgc28gdGhlIHBhcGVyIGNhbiBiZSBhcyByZWxldmFudCBmb3IgeW91ciByZXNlYXJjaCBwcm9ncmFtIGFzIHBvc3NpYmxl4oCUdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgcGFwZXIgdG9waWMgaXMgcmVsZXZhbnQgdG8gYXNzZXNzbWVudCwgYW5kIHRoYXQgeW91ciBwYXBlciBpbmNvcnBvcmF0ZXMgaWRlYXMgd2UgZGlzY3VzcyBpbiBjbGFzcy4KCllvdXIgZmluYWwgcGFwZXIgaXMgZHVlIGJlZm9yZSB0aGUgbGFzdCBjbGFzcyAoPHU+KipEZWFkbGluZTogOTozMCBhbSBvbiBUaHVyc2RheSwgTWF5IDIqKjwvdT4pLgpQbGVhc2Ugc3VibWl0IHlvdXIgcGFwZXIgdmlhIFtJQ09OXShodHRwczovL2ljb24udWlvd2EuZWR1KS4KCiMgQXJ0aWNsZXMgeyNhcnRpY2xlc30KClRoZSBzZWN0aW9uIGNvdmVyZWQgZm9yIGVhY2ggY2xhc3MgaXMgZGVzY3JpYmVkIGluIHRoZSBbQ291cnNlIE91dGxpbmVdKCNvdXRsaW5lKS4KVGhlIGFydGljbGVzIHRvIHJlYWQgZm9yIGVhY2ggc2VjdGlvbiBhcmUgc3BlY2lmaWVkIGJlbG93LgpBcnRpY2xlcyBhcmUgcG9zdGVkIGluIHRoZSAiRmlsZXMiIHRhYiBvbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkuCgpcKkRlc2lnbmF0ZXMgYSBwYXBlciB0aGF0IHlvdSBzaG91bGQgcmVhZCwgZ2V0IHRoZSBiYXNpYyBpZGVhLCBhbmQgcmVtZW1iZXIgd2hlcmUgdG8gZmluZCBpdCBpZiB5b3UgbmVlZCBmdXJ0aGVyIGluZm9ybWF0aW9uLgpUaGVzZSBhcmUgdHlwaWNhbGx5IGhpc3RvcmljYWwgcGFwZXJzLCBpbGx1c3RyYXRpb25zIG9mIHNwZWNpZmljIHRlY2huaXF1ZXMsIG9yIHVzZWZ1bCByZWZlcmVuY2VzLgoKUmVmZXJlbmNlcyBoaWdobGlnaHRlZCBpbiB5ZWxsb3cgYXJlIHRoZSByZWFkaW5ncyB0aGF0IHlvdSBzaG91bGQgcGF5IGNsb3Nlc3QgYXR0ZW50aW9uIHRvLgpCbHVlIGhpZ2hsaWdodHMgcHJvdmlkZSBhZGRpdGlvbmFsIHVzZWZ1bCBpbmZvcm1hdGlvbi4KCiMjIFBzeWNob21ldHJpY3MsIFByZWRpY3Rpb24sIGFuZCBHZW5lcmFsIElzc3VlcwoKIyMjIFNjaWVuY2UgYW5kIHRoZSBSZXBsaWNhdGlvbiBDcmlzaXMgeyNzZWN0aW9uMX0KCjxkaXYgc3R5bGU9InRleHQtaW5kZW50OiAtNDBweDsgcGFkZGluZy1sZWZ0OiA0MHB4OyI+CgojIyMjIDx1PlNlY3Rpb24gMTwvdT4gey51bm51bWJlcmVkfQoKTG9rZW4sIEUuLCAmIEdlbG1hbiwgQS4gKDIwMTcpLiBNZWFzdXJlbWVudCBlcnJvciBhbmQgdGhlIHJlcGxpY2F0aW9uIGNyaXNpcy4gKlNjaWVuY2UsIDM1NSooNjMyNSksIDU4NOKAkzU4NS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMjYvc2NpZW5jZS5hYWwzNjE4Cgo8bWFyaz5NY0ZhbGwsIFIuIE0uICgxOTkxKS4gTWFuaWZlc3RvIGZvciBhIHNjaWVuY2Ugb2YgY2xpbmljYWwgcHN5Y2hvbG9neS4gKlRoZSBDbGluaWNhbCBQc3ljaG9sb2dpc3QsIDQ0Kig2KSwgNzXigJM5MS48L21hcms+Cgo8bWFyaz5NY0ZhbGwsIFIuIE0uICgyMDAwKS4gRWxhYm9yYXRlIHJlZmxlY3Rpb25zIG9uIGEgc2ltcGxlIG1hbmlmZXN0by4gKkFwcGxpZWQgJiBQcmV2ZW50aXZlIFBzeWNob2xvZ3ksIDkqKDEpLCA14oCTMjEuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L3MwOTYyLTE4NDkoMDUpODAwMzUtNjwvbWFyaz4KCiMjIyBSZWxpYWJpbGl0eSB7I3NlY3Rpb24yfQoKIyMjIyA8dT5TZWN0aW9uIDI8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPk1jTmVpc2gsIEQuICgyMDE4KS4gVGhhbmtzIGNvZWZmaWNpZW50IGFscGhhLCB3ZSdsbCB0YWtlIGl0IGZyb20gaGVyZS4gKlBzeWNob2xvZ2ljYWwgTWV0aG9kcywgMjMqKDMpLCA0MTLigJM0MzMuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L21ldDAwMDAxNDQ8L21hcms+CgpcKkdhbHRvbiwgRi4gKDE5NDgpLiBDbGFzc2lmaWNhdGlvbiBvZiBtZW4gYWNjb3JkaW5nIHRvIHRoZWlyIG5hdHVyYWwgZ2lmdHMsIDE4NjkuIEluIFcuIERlbm5pcyAoRWQuKSwgKlJlYWRpbmdzIGluIHRoZSBoaXN0b3J5IG9mIHBzeWNob2xvZ3kqIChwcC4gMjMx4oCTMjQ3KS4gQXBwbGV0b24tQ2VudHVyeS1Dcm9mdHMuIGh0dHBzOi8vcHN5Y25ldC5hcGEub3JnL3JlY29yZC8yMDA2LTEwMjEzLTAwMAoKXCpHYXJsYW5kLCBMLiBILiAoMTk2MCkuIFRoZSBwcm9ibGVtIG9mIG9ic2VydmVyIGVycm9yLiAqQnVsbGV0aW4gb2YgdGhlIE5ldyBZb3JrIEFjYWRlbXkgb2YgTWVkaWNpbmUsIDM2Kig5KSwgNTcw4oCTNTg0LgoKIyMjIyA8dT5TZWN0aW9uIDM8L3U+IHsudW5udW1iZXJlZCAjc2VjdGlvbjN9Cgo8bWFyaz5TY2htaWR0LCBGLiBMLiwgJiBIdW50ZXIsIEouIEUuICgxOTk2KS4gTWVhc3VyZW1lbnQgZXJyb3IgaW4gcHN5Y2hvbG9naWNhbCByZXNlYXJjaDogTGVzc29ucyBmcm9tIDI2IHJlc2VhcmNoIHNjZW5hcmlvcy4gKlBzeWNob2xvZ2ljYWwgTWV0aG9kcywgMSooMiksIDE5OeKAkzIyMy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTA4Mi05ODlYLjEuMi4xOTk8L21hcms+CgpXaWdnaW5zLCBKLiBTLiAoMTk3MykuIE9ic2VydmF0aW9uYWwgdGVjaG5pcXVlczogSS4gR2VuZXJhbGl6YWJpbGl0eSBhbmQgZmFjZXRzIG9mIG9ic2VydmF0aW9uLiBJbiBKLiBTLiBXaWdnaW5zIChFZC4pLCAqUGVyc29uYWxpdHkgYW5kIHByZWRpY3Rpb246IFByaW5jaXBsZXMgb2YgcGVyc29uYWxpdHkgYXNzZXNzbWVudCogKHBwLiAyNzfigJMyOTUpLiBBZGRpc29uLVdlc2xleS4KCiMjIyBWYWxpZGl0eSB7I3NlY3Rpb240fQoKIyMjIyA8dT5TZWN0aW9uIDQ8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkNhbXBiZWxsLCBELiBULiwgJiBGaXNrZSwgRC4gVy4gKDE5NTkpLiBDb252ZXJnZW50IGFuZCBkaXNjcmltaW5hbnQgdmFsaWRhdGlvbiBieSB0aGUgbXVsdGl0cmFpdC1tdWx0aW1ldGhvZCBtYXRyaXguICpQc3ljaG9sb2dpY2FsIEJ1bGxldGluLCA1NiooMiksIDgx4oCTMTA1LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy9oMDA0NjAxNjwvbWFyaz4KCkhheWVzLCBTLiBDLiwgTmVsc29uLCBSLiBPLiwgJiBKYXJyZXR0LCBSLiBCLiAoMTk4NykuIFRoZSB0cmVhdG1lbnQgdXRpbGl0eSBvZiBhc3Nlc3NtZW50OiBBIGZ1bmN0aW9uYWwgYXBwcm9hY2ggdG8gZXZhbHVhdGluZyBhc3Nlc3NtZW50IHF1YWxpdHkuICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDQyKiwgOTYz4oCTOTc0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDAzLTA2NlguNDIuMTEuOTYzCgo8bWFyaz5NZWVobCwgUC4gRS4gKDE5NzMpLiBDaGFwdGVyIDEuICpQc3ljaG9kaWFnbm9zaXM6IFNlbGVjdGVkIHBhcGVycyouIFVuaXZlcnNpdHkgb2YgTWlubmVzb3RhIFByZXNzLjwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgQ3JvbmJhY2gsIEwuIEouLCAmIE1lZWhsLCBQLiBFLiAoMTk1NSkuIENvbnN0cnVjdCB2YWxpZGl0eSBpbiBwc3ljaG9sb2dpY2FsIHRlc3RzLiAqUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgNTIqKDQpLCAyODHigJMzMDIuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2gwMDQwOTU3XTwvbWFyaz4KCiMjIyMgPHU+U2VjdGlvbiA1PC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb241fQoKPG1hcms+U2VjaHJlc3QsIEwuICgxOTYzKS4gSW5jcmVtZW50YWwgdmFsaWRpdHk6IEEgcmVjb21tZW5kYXRpb24uICpFZHVjYXRpb25hbCBhbmQgUHN5Y2hvbG9naWNhbCBNZWFzdXJlbWVudCwgMjMqLCAxNTPigJMxNTguIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTc3LzAwMTMxNjQ0NjMwMjMwMDExMzwvbWFyaz4KCjxtYXJrPlNoYXZlbHNvbiwgUi4gSi4sIFdlYmIsIE4uIE0uLCAmIFJhd2xleSwgUi4gTC4gKDE5ODkpLiBHZW5lcmFsaXphYmlsaXR5IHRoZW9yeS4gKkFtZXJpY2FuIFBzeWNob2xvZ2lzdCwgNDQqLCA5MjLigJM5MzIuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMDMtMDY2WC40NC42LjkyMjwvbWFyaz4KCkJvcm5zdGVpbiwgUi4gRi4gKDIwMTEpLiBUb3dhcmQgYSBwcm9jZXNzLWZvY3VzZWQgbW9kZWwgb2YgdGVzdCBzY29yZSB2YWxpZGl0eTogSW1wcm92aW5nIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudCBpbiBzY2llbmNlIGFuZCBwcmFjdGljZS4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMjMqKDIpLCA1MzLigJM1NDQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2EwMDIyNDAyCgpcKkFtZXJpY2FuIEVkdWNhdGlvbmFsIFJlc2VhcmNoIEFzc29jaWF0aW9uLCBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLCAmIE5hdGlvbmFsIENvdW5jaWwgb24gTWVhc3VyZW1lbnQgaW4gRWR1Y2F0aW9uLiAoMjAxNCkuICpTdGFuZGFyZHMgZm9yIGVkdWNhdGlvbmFsIGFuZCBwc3ljaG9sb2dpY2FsIHRlc3RpbmcqLiBBbWVyaWNhbiBFZHVjYXRpb25hbCBSZXNlYXJjaCBBc3NvY2lhdGlvbi4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgYXZhaWxhYmxlIGluIHRoZSBjbGluaWMgbGlicmFyeS4KWW91IGRvbid0IG5lZWQgdG8gcmVhZCB0aGlzIGZvciBvdXIgY2xhc3MsIGJ1dCB5b3Ugc2hvdWxkIGtub3cgaXQgZXhpc3RzIGFzIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGl0IHNldHMgdGhlIHN0YW5kYXJkIGZvciBBUEEgam91cm5hbHMsIGxpY2Vuc3VyZSBleGFtcywgYW5kIGJleW9uZC5dPC9tYXJrPgoKIyMjIEVtZXJnaW5nIFBlcnNwZWN0aXZlcyBpbiBNZWFzdXJlbWVudAoKIyMjIyBTdHJ1Y3R1cmFsIEVxdWF0aW9uIE1vZGVsaW5nIChTRU0pIHsjc2VjdGlvbjZ9CgojIyMjIDx1PlNlY3Rpb24gNjwvdT4gey51bm51bWJlcmVkfQoKPG1hcms+Qm9sbGVuLCBLLiBBLiwgJiBMZW5ub3gsIFIuIEQuICgxOTkxKS4gQ29udmVudGlvbmFsIHdpc2RvbSBvbiBtZWFzdXJlbWVudDogQSBzdHJ1Y3R1cmFsIGVxdWF0aW9uIHBlcnNwZWN0aXZlLiAqUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgMTEwKigyKSwgMzA14oCTMzE0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDMzLTI5MDkuMTEwLjIuMzA1PC9tYXJrPgoKPG1hcms+UG9kc2Frb2ZmLCBQLiBNLiwgTWFjS2VuemllLCBTLiBCLiwgJiBQb2RzYWtvZmYsIE4uIFAuICgyMDEyKS4gU291cmNlcyBvZiBtZXRob2QgYmlhcyBpbiBzb2NpYWwgc2NpZW5jZSByZXNlYXJjaCBhbmQgcmVjb21tZW5kYXRpb25zIG9uIGhvdyB0byBjb250cm9sIGl0LiAqQW5udWFsIFJldmlldyBvZiBQc3ljaG9sb2d5LCA2MyooMSksIDUzOeKAkzU2OS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi1wc3ljaC0xMjA3MTAtMTAwNDUyPC9tYXJrPgoKRWR3YXJkcywgSi4gUi4sICYgQmFnb3p6aSwgUi4gUC4gKDIwMDApLiBPbiB0aGUgbmF0dXJlIGFuZCBkaXJlY3Rpb24gb2YgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGNvbnN0cnVjdHMgYW5kIG1lYXN1cmVzLiAqUHN5Y2hvbG9naWNhbCBNZXRob2RzLCA1KigyKSwgMTU14oCTMTc0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDgyLTk4OVguNS4yLjE1NQo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bcmVhZCBwcC4gMTU14oCTMTYyIGNhcmVmdWxseSwgYnV0IGRvbid0IHdvcnJ5IGFib3V0IHRoZSBjb21wbGV4IHBhdGggbW9kZWxzIHRoYXQgZm9sbG93IHVubGVzcyB0aGV5IGFyZSByZWxldmFudCB0byB5b3VyIG93biByZXNlYXJjaC5dPC9tYXJrPgoKIyMjIyBJdGVtIFJlc3BvbnNlIFRoZW9yeSAoSVJUKSB7I3NlY3Rpb243fQoKIyMjIyA8dT5TZWN0aW9uIDc8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkVtYnJldHNvbiwgUy4gRS4gKDE5OTYpLiBUaGUgbmV3IHJ1bGVzIG9mIG1lYXN1cmVtZW50LiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCA4KiwgMzQx4oCTMzQ5LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuOC40LjM0MTwvbWFyaz4KCjxtYXJrPktydWVnZXIsIFIuIEYuLCBOaWNob2wsIFAuIEUuLCBIaWNrcywgQi4gTS4sIE1hcmtvbiwgSy4gRS4sIFBhdHJpY2ssIEMuIEouLCBsYWNvbm8sIFcuIEcuLCAmIE1jR3VlLCBNLiAoMjAwNCkuIFVzaW5nIGxhdGVudCB0cmFpdCBtb2RlbGluZyB0byBjb25jZXB0dWFsaXplIGFuIGFsY29ob2wgcHJvYmxlbXMgY29udGludXVtLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAxNiooMiksIDEwN+KAkzExOS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTA0MC0zNTkwLjE2LjIuMTA3PC9tYXJrPgoKQ29vcGVyLCBMLiBELiwgJiBCYWxzaXMsIFMuICgyMDA5KS4gV2hlbiBsZXNzIGlzIG1vcmU6IEhvdyBmZXdlciBkaWFnbm9zdGljIGNyaXRlcmlhIGNhbiBpbmRpY2F0ZSBncmVhdGVyIHNldmVyaXR5LiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAyMSooMyksIDI4NeKAkzI5My4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvYTAwMTY2OTgKClJlaXNlLCBTLiBQLiwgJiBXYWxsZXIsIE4uIEcuICgyMDA5KS4gSXRlbSByZXNwb25zZSB0aGVvcnkgYW5kIGNsaW5pY2FsIG1lYXN1cmVtZW50LiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCA1KigxKSwgMjfigJM0OC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi5jbGlucHN5LjAzMjQwOC4xNTM1NTMKCiMjIFByZWRpY3Rpb24geyNzZWN0aW9uOH0KCiMjIyBCYXNpY3MKCiMjIyMgPHU+U2VjdGlvbiA4PC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5NZWVobCwgUC4gRS4gKDE5NzMpLiBDaGFwdGVyIDIuICpQc3ljaG9kaWFnbm9zaXM6IFNlbGVjdGVkIHBhcGVycyouIFVuaXZlcnNpdHkgb2YgTWlubmVzb3RhIFByZXNzLjwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgTWVlaGwsIFAuIEUuLCAmIFJvc2VuLCBBLiAoMTk1NSkuIEFudGVjZWRlbnQgcHJvYmFiaWxpdHkgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHBzeWNob21ldHJpYyBzaWducywgcGF0dGVybnMsIG9yIGN1dHRpbmcgc2NvcmVzLiAqUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgNTIqKDMpLCAxOTTigJMyMTYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2gwMDQ4MDcwXTwvbWFyaz4KCiMjIyBTaWduYWwgRGV0ZWN0aW9uIFRoZW9yeSB7I3NlY3Rpb245fQoKIyMjIyA8dT5TZWN0aW9uIDk8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPlRyZWF0LCBULiBBLiwgJiBWaWtlbiwgUi4gSi4gKDIwMjMpLiBNZWFzdXJpbmcgdGVzdCBwZXJmb3JtYW5jZSB3aXRoIHNpZ25hbCBkZXRlY3Rpb24gdGhlb3J5IHRlY2huaXF1ZXMuIEluIEguIENvb3BlciwgTS4gTi4gQ291dGFuY2hlLCBMLiBNLiBNY011bGxlbiwgQS4gVC4gUGFudGVyLCBELiBSaW5kc2tvcGYsICYgSy4gSi4gU2hlciAoRWRzLiksICpBUEEgaGFuZGJvb2sgb2YgcmVzZWFyY2ggbWV0aG9kcyBpbiBwc3ljaG9sb2d5OiBGb3VuZGF0aW9ucywgcGxhbm5pbmcsIG1lYXN1cmVzLCBhbmQgcHN5Y2hvbWV0cmljcyogKDJuZCBlZC4sIFZvbC4gMSwgcHAuIDgzN+KAkzg1OCkuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMDAzMTgtMDM4PC9tYXJrPgoKU3dldHMsIEouIEEuLCBEYXdlcywgUi4gTS4sICYgTW9uYWhhbiwgSi4gKDIwMDApLiBQc3ljaG9sb2dpY2FsIHNjaWVuY2UgY2FuIGltcHJvdmUgZGlhZ25vc3RpYyBkZWNpc2lvbnMuICpQc3ljaG9sb2dpY2FsIFNjaWVuY2UgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdCwgMSooMSksIDHigJMyNi4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvMTUyOS0xMDA2LjAwMQoKTGluZGhpZW0sIE8uLCBQZXRlcnNlbiwgSS4gVC4sIE1lbnRjaCwgTC4gSy4sICYgWW91bmdzdHJvbSwgRS4gQS4gKDIwMjApLiBUaGUgaW1wb3J0YW5jZSBvZiBjYWxpYnJhdGlvbiBpbiBjbGluaWNhbCBwc3ljaG9sb2d5LiAqQXNzZXNzbWVudCwgMjcqKDQpLCA4NDDigJM4NTQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTc3LzEwNzMxOTExMTc3NTIwNTUgCgojIyMgQ2xpbmljYWwgSnVkZ21lbnQgdnMuIEFsZ29yaXRobWljIFByZWRpY3Rpb24geyNzZWN0aW9uMTB9CgojIyMjIDx1PlNlY3Rpb24gMTA8L3U+IHsudW5udW1iZXJlZH0KCkdhcmIsIEguIE4uICgyMDA1KS4gQ2xpbmljYWwganVkZ21lbnQgYW5kIGRlY2lzaW9uIG1ha2luZy4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMSosIDY34oCTODkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYuY2xpbnBzeS4xLjEwMjgwMy4xNDM4MTAKCjxtYXJrPkRhd2VzLCBSLiBNLiwgRmF1c3QsIEQuLCAmIE1lZWhsLCBQLiBFLiAoMTk4OSkuIENsaW5pY2FsIHZlcnN1cyBhY3R1YXJpYWwganVkZ21lbnQuICpTY2llbmNlLCAyNDMqKDQ4OTkpLCAxNjY44oCTMTY3NC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMjYvc2NpZW5jZS4yNjQ4NTczPC9tYXJrPgoKPG1hcms+RGF3ZXMsIFIuIE0uICgxOTg2KS4gUmVwcmVzZW50YXRpdmUgdGhpbmtpbmcgaW4gY2xpbmljYWwganVkZ21lbnQuICpDbGluaWNhbCBQc3ljaG9sb2d5IFJldmlldywgNiosIDQyNeKAkzQ0MS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvMDI3Mi03MzU4KDg2KTkwMDMwLTk8L21hcms+CgpZb3VuZ3N0cm9tLCBFLiBBLiwgSGFsdmVyc29uLCBULiBGLiwgWW91bmdzdHJvbSwgSi4gSy4sIExpbmRoaWVtLCBPLiwgJiBGaW5kbGluZywgUi4gTC4gKDIwMTgpLiBFdmlkZW5jZS1iYXNlZCBhc3Nlc3NtZW50IGZyb20gc2ltcGxlIGNsaW5pY2FsIGp1ZGdtZW50cyB0byBzdGF0aXN0aWNhbCBsZWFybmluZzogRXZhbHVhdGluZyBhIHJhbmdlIG9mIG9wdGlvbnMgdXNpbmcgcGVkaWF0cmljIGJpcG9sYXIgZGlzb3JkZXIgYXMgYSBkaWFnbm9zdGljIGNoYWxsZW5nZS4gKkNsaW5pY2FsIFBzeWNob2xvZ2ljYWwgU2NpZW5jZSwgNiooMiksIDI0M+KAkzI2NS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzcvMjE2NzcwMjYxNzc0MTg0NQoKIyMgR2VuZXJhbCBJc3N1ZXMgaW4gQ2xpbmljYWwgQXNzZXNzbWVudCB7I3NlY3Rpb24xMX0KCiMjIyMgPHU+U2VjdGlvbiAxMTwvdT4gey51bm51bWJlcmVkfQoKXCpCZW5qYW1pbiwgTC4gVC4gKDIwMDUpLiBBIGhpc3Rvcnkgb2YgY2xpbmljYWwgcHN5Y2hvbG9neSBhcyBhIHByb2Zlc3Npb24gaW4gQW1lcmljYSAoYW5kIGEgZ2xpbXBzZSBvZiBpdHMgZnV0dXJlKS4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMSosIDHigJMzMC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi5jbGlucHN5LjEuMTAyODAzLjE0Mzc1OAoKPG1hcms+S2F6ZGluLCBBLiBFLiAoMTk5NSkuIFByZXBhcmluZyBhbmQgZXZhbHVhdGluZyByZXNlYXJjaCByZXBvcnRzLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCA3KigzKSwgMjI44oCTMjM3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuNy4zLjIyODwvbWFyaz4KClNlY2hyZXN0LCBMLiwgU3RpY2tsZSwgVC4gUi4sICYgU3Rld2FydCwgTS4gKDE5OTgpLiBUaGUgcm9sZSBvZiBhc3Nlc3NtZW50IGluIGNsaW5pY2FsIHBzeWNob2xvZ3kuIEluIEEuIEJlbGxhY2ssIE0uIEhlcnNlbiwgJiBDLiBSLiBSZXlub2xkcyAoRWRzLiksICpDb21wcmVoZW5zaXZlIGNsaW5pY2FsIHBzeWNob2xvZ3kqIChWb2wuIDQ6IEFzc2Vzc21lbnQpLiBQZXJnYW1vbi4KCiMjIEV2aWRlbmNlLUJhc2VkIEFzc2Vzc21lbnQgeyNzZWN0aW9uMTJ9CgojIyMjIDx1PlNlY3Rpb24gMTI8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkh1bnNsZXksIEouLCAmIE1hc2gsIEUuIEouICgyMDA3KS4gRXZpZGVuY2UtYmFzZWQgYXNzZXNzbWVudC4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMyosIDI54oCTNTEuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYuY2xpbnBzeS4zLjAyMjgwNi4wOTE0MTk8L21hcms+CgpBbnRvbnksIE0uIE0uLCAmIFJvd2EsIEsuICgyMDA1KS4gRXZpZGVuY2UtYmFzZWQgYXNzZXNzbWVudCBvZiBhbnhpZXR5IGRpc29yZGVycyBpbiBhZHVsdHMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE3KigzKSwgMjU24oCTMjY2LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTcuMy4yNTYKPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgYSBjYXNlIHN0dWR5IGluIGV2aWRlbmNlLWJhc2VkIGFzc2Vzc21lbnTigJRpdCdzIHRoZSBnZW5lcmFsIGFwcHJvYWNoIHRoYXQgbWF0dGVycywgbm90IHdoYXQgaXMgc3BlY2lmaWMgYWJvdXQgYW54aWV0eS5dPC9tYXJrPgoKWW91bmdzdHJvbSwgRS4gQS4sICYgVmFuIE1ldGVyLCBBLiAoMjAxNikuIEVtcGlyaWNhbGx5IHN1cHBvcnRlZCBhc3Nlc3NtZW50IG9mIGNoaWxkcmVuIGFuZCBhZG9sZXNjZW50cy4gKkNsaW5pY2FsIFBzeWNob2xvZ3k6IFNjaWVuY2UgYW5kIFByYWN0aWNlLCAyMyooNCksIDMyN+KAkzM0Ny4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvY3BzcC4xMjE3MgoKPG1hcms+WW91bmdzdHJvbSwgRS4gQS4sIFZhbiBNZXRlciwgQS4sIEZyYXppZXIsIFQuIFcuLCBIdW5zbGV5LCBKLiwgUHJpbnN0ZWluLCBNLiBKLiwgT25nLCBNLi1MLiwgJiBZb3VuZ3N0cm9tLCBKLiBLLiAoMjAxNykuIEV2aWRlbmNlLWJhc2VkIGFzc2Vzc21lbnQgYXMgYW4gaW50ZWdyYXRpdmUgbW9kZWwgZm9yIGFwcGx5aW5nIHBzeWNob2xvZ2ljYWwgc2NpZW5jZSB0byBndWlkZSB0aGUgdm95YWdlIG9mIHRyZWF0bWVudC4gKkNsaW5pY2FsIFBzeWNob2xvZ3k6IFNjaWVuY2UgYW5kIFByYWN0aWNlLCAyNCooNCksIDMzMeKAkzM2My4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvY3BzcC4xMjIwNzwvbWFyaz4KCiMjIEV0aGljYWwgSXNzdWVzIGluIEFzc2Vzc21lbnQgeyNzZWN0aW9uMTN9CgojIyMjIDx1PlNlY3Rpb24gMTM8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uICgyMDE3KS4gRXRoaWNhbCBwcmluY2lwbGVzIG9mIHBzeWNob2xvZ2lzdHMgYW5kIGNvZGUgb2YgY29uZHVjdC4gaHR0cHM6Ly93d3cuYXBhLm9yZy9ldGhpY3MvY29kZTwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+KFNlY3Rpb25zIDEsIDIsIDkpLjwvbWFyaz4KCk5hZ3ksIFQuIEYuICgyMDExKS4gRXRoaWNzIGluIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudC4gSW4gVC4gRi4gTmFneSAoRWQuKSwgKkVzc2VudGlhbCBldGhpY3MgZm9yIHBzeWNob2xvZ2lzdHM6IGEgcHJpbWVyIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtYXN0ZXJpbmcgY29yZSBpc3N1ZXMqIChwcC4gMTcx4oCTMTgzKS4gQW1lcmljYW4gUHN5Y2hvbG9naWNhbCBBc3NvY2lhdGlvbi4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTIzNDUtMDA5CgpDYW1wYmVsbCwgTC4sIFZhc3F1ZXosIE0uLCBCZWhua2UsIFMuLCAmIEtpbnNjaGVyZmYsIFIuICgyMDEwKS4gQXNzZXNzbWVudC4gSW4gTC4gQ2FtcGJlbGwsIE0uIFZhc3F1ZXosIFMuIEJlaG5rZSwgJiBSLiBLaW5zY2hlcmZmIChFZHMuKSwgKkFQQSBFdGhpY3MgQ29kZSBjb21tZW50YXJ5IGFuZCBjYXNlIGlsbHVzdHJhdGlvbnMqLiBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLgoKPG1hcms+QmVyc29mZiwgRC4gTi4sIERlTWF0dGVvLCBELiwgJiBGb3N0ZXIsIEUuIEUuICgyMDEyKS4gQXNzZXNzbWVudCBhbmQgdGVzdGluZy4gSW4gUy4gSi4gS25hcHAgKEVkLiksICpBUEEgaGFuZGJvb2sgb2YgZXRoaWNzIGluIHBzeWNob2xvZ3kqIChWb2wuIDI6IFByYWN0aWNlLCBUZWFjaGluZywgYW5kIFJlc2VhcmNoLCBwcC4gNDXigJM3NCkuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uPC9tYXJrPgoKXCpUYWNrZXR0LCBKLiBMLiwgQnJhbmRlcywgQy4gTS4sICYgUmVhcmRvbiwgSy4gVy4gKDIwMTkpLiBMZXZlcmFnaW5nIHRoZSBPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIGluIGNsaW5pY2FsIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudCByZXNlYXJjaC4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMzEqKDEyKSwgMTM4NuKAkzEzOTQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L3BhczAwMDA1ODMKCiMjIEludGVsbGVjdHVhbCBBc3Nlc3NtZW50IHsjc2VjdGlvbjE1fQoKIyMjIyA8dT5TZWN0aW9uIDE1PC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5BY2tlcm1hbiwgUC4gTC4gKDIwMTMpLiBBc3Nlc3NtZW50IG9mIGludGVsbGVjdHVhbCBmdW5jdGlvbmluZyBpbiBhZHVsdHMuIEluIEsuIEYuIEdlaXNpbmdlciwgSi4gRi4gQ2FybHNvbiwgSi4tSS4gQy4gSGFuc2VuLCBOLiBSLiBLdW5jZWwsIFMuIFAuIFJlaXNlLCAmIE0uIEMuIFJvZHJpZ3VleiAoRWRzLiksICpBUEEgaGFuZGJvb2sgb2YgdGVzdGluZyBhbmQgYXNzZXNzbWVudCBpbiBwc3ljaG9sb2d5KiAoVm9sLiAyOiBUZXN0aW5nIGFuZCBBc3Nlc3NtZW50IGluIENsaW5pY2FsIGFuZCBDb3Vuc2VsaW5nIFBzeWNob2xvZ3ksIHBwLiAxMTnigJMxMzIpLiBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xNDA0OC0wMDg8L21hcms+CgpcKkJpbmV0LCBBLiwgJiBTaW1vbiwgVC4gKDE5NDgpLiBVcG9uIHRoZSBuZWNlc3NpdHkgb2YgZXN0YWJsaXNoaW5nIGEgc2NpZW50aWZpYyBkaWFnbm9zaXMgb2YgaW5mZXJpb3Igc3RhdGVzIG9mIGludGVsbGlnZW5jZS4gSW4gVy4gRGVubmlzIChFZC4pLCAqUmVhZGluZ3MgaW4gdGhlIGhpc3Rvcnkgb2YgcHN5Y2hvbG9neSogKHBwLiA0MDfigJM0MTEpLiBBcHBsZXRvbi1DZW50dXJ5LUNyb2Z0cy4KClwqQmluZXQsIEEuLCAmIFNpbW9uLCBULiAoMTk0OCkuIFRoZSBkZXZlbG9wbWVudCBvZiB0aGUgQmluZXQtU2ltb24gU2NhbGUsIDE5MDXigJMxOTA4LiBJbiBXLiBEZW5uaXMgKEVkLiksICpSZWFkaW5ncyBpbiB0aGUgaGlzdG9yeSBvZiBwc3ljaG9sb2d5KiAocHAuIDQxMuKAkzQyNCkuIEFwcGxldG9uLUNlbnR1cnktQ3JvZnRzLiAKClwqQ2F0dGVsbCwgSi4gTS4gKDE5NDgpLiBNZW50YWwgdGVzdHMgYW5kIG1lYXN1cmVtZW50cywgMTg5MC4gSW4gVy4gRGVubmlzIChFZC4pLCAqUmVhZGluZ3MgaW4gdGhlIGhpc3Rvcnkgb2YgcHN5Y2hvbG9neSogKHBwLiAzNDfigJMzNTQpLiBBcHBsZXRvbi1DZW50dXJ5LUNyb2Z0cy4KCiMjIyMgPHU+U2VjdGlvbiAxNjwvdT4gey51bm51bWJlcmVkICNzZWN0aW9uMTZ9Cgo8bWFyaz5NY0NsZWxsYW5kLCBELiBDLiAoMTk3MykuIFRlc3RpbmcgZm9yIGNvbXBldGVuY2UgcmF0aGVyIHRoYW4gZm9yICJpbnRlbGxpZ2VuY2UuIi4gQW1lcmljYW4gUHN5Y2hvbG9naXN0LCAyOCwgMeKAkzE0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy9oMDAzNDA5MjwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1NlZSBhbHNvIHBhcGVyIGJ5IEJhcnJldHQgYW5kIERlcGluZXQgKDE5OTEpLCBBIHJlY29uc2lkZXJhdGlvbiBvZiBUZXN0aW5nIGZvciBDb21wZXRlbmNlIHJhdGhlciB0aGFuIGZvciBpbnRlbGxpZ2VuY2UsICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDQ2KiwgMTAxMuKAkzEwMjQ7IGFuZCBNY0NsZWxsYW5kIGFuZCB2YXJpb3VzIG90aGVycyBpbiByZXBseSAoMTk5NCksICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDQ5KiwgNjTigJM3MS5dPC9tYXJrPgoKIyMjIEJpYXMgeyNzZWN0aW9uMTd9CgojIyMjIDx1PlNlY3Rpb24gMTc8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkNvbGUsIE4uIFMuICgxOTgxKS4gQmlhcyBpbiB0ZXN0aW5nLiAqQW1lcmljYW4gUHN5Y2hvbG9naXN0LCAzNiooMTApLCAxMDY34oCTMTA3Ny4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMDAwMy0wNjZYLjM2LjEwLjEwNjc8L21hcms+Cgo8bWFyaz5TYWNrZXR0LCBQLiBSLiwgJiBXaWxrLCBTLiBMLiAoMTk5NCkuIFdpdGhpbi1ncm91cCBub3JtaW5nIGFuZCBvdGhlciBmb3JtcyBvZiBzY29yZSBhZGp1c3RtZW50IGluIHByZWVtcGxveW1lbnQgdGVzdGluZy4gKkFtZXJpY2FuIFBzeWNob2xvZ2lzdCwgNDkqKDExKSwgOTI54oCTOTU0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDAzLTA2NlguNDkuMTEuOTI5PC9tYXJrPgoKIyMjIyA8dT5TZWN0aW9uIDE4PC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb24xOH0KCjxtYXJrPlNhY2tldHQsIFAuIFIuLCBTY2htaXR0LCBOLiwgRWxsaW5nc29uLCBKLiBFLiwgJiBLYWJpbiwgTS4gQi4gKDIwMDEpLiBIaWdoLXN0YWtlcyB0ZXN0aW5nIGluIGVtcGxveW1lbnQsIGNyZWRlbnRpYWxpbmcsIGFuZCBoaWdoZXIgZWR1Y2F0aW9uLiAqQW1lcmljYW4gUHN5Y2hvbG9naXN0LCA1NiosIDMwMeKAkzMxOC4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMDAwMy0wNjZYLjU2LjQuMzAyPC9tYXJrPgoKPG1hcms+U2Fja2V0dCwgUC4gUi4sIEJvcm5lbWFuLCBNLiBKLiwgJiBDb25uZWxseSwgQi4gUy4gKDIwMDgpLiBIaWdoIHN0YWtlcyB0ZXN0aW5nIGluIGhpZ2hlciBlZHVjYXRpb24gYW5kIGVtcGxveW1lbnQ6IEFwcHJhaXNpbmcgdGhlIGV2aWRlbmNlIGZvciB2YWxpZGl0eSBhbmQgZmFpcm5lc3MuICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDYzKiwgMjE14oCTMjI3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDAzLTA2NlguNjMuNC4yMTU8L21hcms+CgojIyBUaGUgSW50ZXJ2aWV3IGFuZCB0aGUgRFNNIHsjc2VjdGlvbjE5fQoKIyMjIyA8dT5TZWN0aW9uIDE5PC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5GYXJhb25lLCBTLiBWLiwgJiBUc3VhbmcsIE0uIFQuICgxOTk0KS4gTWVhc3VyaW5nIGRpYWdub3N0aWMgYWNjdXJhY3kgaW4gdGhlIGFic2VuY2Ugb2YgYSAiZ29sZCBzdGFuZGFyZCIuICpBbWVyaWNhbiBKb3VybmFsIG9mIFBzeWNoaWF0cnksIDE1MSosIDY1MOKAkzY1Ny4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzYvYWpwLjE1MS41LjY1MDwvbWFyaz4KClwqU3VsbGl2YW4sIEguIFMuICgxOTcwKS4gKlRoZSBwc3ljaGlhdHJpYyBpbnRlcnZpZXcqLiBOb3J0b24uIENoYXB0ZXJzIDHigJM0LCA3CjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltUaGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgVUkgbGlicmFyeS4KWW91IGRvbid0IG5lZWQgdG8gcmVhZCBpdCBmb3IgdGhpcyBjbGFzcy4KQnV0IHlvdSBzaG91bGQgcmVhZCBpdCBhdCBzb21lIHBvaW50LCBhcyBhbiBleGFtcGxlIG9mIGEgbWFzdGVyIGNsaW5pY2lhbiBhc3Nlc3NpbmcgcGF0aWVudHMgYnkgd2F5IG9mIGludGVydmlldy5dPC9tYXJrPgoKU3VtbWVyZmVsZHQsIEwuIEouLCBLbG9vc3Rlcm1hbiwgUC4gSC4sICYgQW50b255LCBNLiBNLiAoMjAxMCkuIFN0cnVjdHVyZWQgYW5kIHNlbWlzdHJ1Y3R1cmVkIGRpYWdub3N0aWMgaW50ZXJ2aWV3cy4gSW4gTS4gTS4gQW50b255ICYgRC4gSC4gQmFybG93IChFZHMuKSwgKkhhbmRib29rIG9mIGFzc2Vzc21lbnQgYW5kIHRyZWF0bWVudCBwbGFubmluZyBmb3IgcHN5Y2hvbG9naWNhbCBkaXNvcmRlcnMqICgybmQgZWQuLCBwcC4gOTXigJMxMzcpLiBHdWlsZm9yZCBQcmVzcy4gCgpNdWxsaW5zLVN3ZWF0dCwgUy4gTi4sICYgV2lkaWdlciwgVC4gQS4gKDIwMDkpLiBDbGluaWNhbCB1dGlsaXR5IGFuZCBEU00tVi4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMjEqKDMpLCAzMDLigJMzMTIuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2EwMDE2NjA3Cgo8bWFyaz5TaGFycCwgSy4gTC4sIFdpbGxpYW1zLCBBLiBKLiwgUmh5bmVyLCBLLiBULiwgJiBJbGFyZGksIFMuIFMuICgyMDEzKS4gVGhlIGNsaW5pY2FsIGludGVydmlldy4gSW4gSy4gRi4gR2Vpc2luZ2VyLCBKLiBGLiBDYXJsc29uLCBKLi1JLiBDLiBIYW5zZW4sIE4uIFIuIEt1bmNlbCwgUy4gUC4gUmVpc2UsICYgTS4gQy4gUm9kcmlndWV6IChFZHMuKSwgKkFQQSBoYW5kYm9vayBvZiB0ZXN0aW5nIGFuZCBhc3Nlc3NtZW50IGluIHBzeWNob2xvZ3kqIChWb2wuIDI6IFRlc3RpbmcgYW5kIGFzc2Vzc21lbnQgaW4gY2xpbmljYWwgYW5kIGNvdW5zZWxpbmcgcHN5Y2hvbG9neSwgcHAuIDEwM+KAkzExNykuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzE0MDQ4LTAwNzwvbWFyaz4KCiMjIEFzc2Vzc21lbnQgb2YgcGVyc29uYWxpdHkgYW5kIG90aGVyIHN5bXB0b21hdG9sb2d5IHsjc2VjdGlvbjIwfQoKIyMjIE9iamVjdGl2ZSB0ZXN0cwoKIyMjIyA8dT5TZWN0aW9uIDIwPC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5CdXJpc2NoLCBNLiAoMTk4NCkuIEFwcHJvYWNoZXMgdG8gcGVyc29uYWxpdHkgaW52ZW50b3J5IGNvbnN0cnVjdGlvbjogQSBjb21wYXJpc29uIG9mIG1lcml0cy4gKkFtZXJpY2FuIFBzeWNob2xvZ2lzdCwgMzkqLCAyMTTigJMyMjcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMDMtMDY2WC4zOS4zLjIxNDwvbWFyaz4KCkNsYXJrLCBMLiBBLiwgJiBXYXRzb24sIEQuICgyMDE5KS4gQ29uc3RydWN0aW5nIHZhbGlkaXR5OiBOZXcgZGV2ZWxvcG1lbnRzIGluIGNyZWF0aW5nIG9iamVjdGl2ZSBtZWFzdXJpbmcgaW5zdHJ1bWVudHMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDMxKigxMiksIDE0MTLigJMxNDI3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy9wYXMwMDAwNjI2Cgo8bWFyaz5GbG95ZCwgRi4gSi4sICYgV2lkYW1hbiwgSy4gRi4gKDE5OTUpLiBGYWN0b3IgYW5hbHlzaXMgaW4gdGhlIGRldmVsb3BtZW50IGFuZCByZWZpbmVtZW50IG9mIGNsaW5pY2FsIGFzc2Vzc21lbnQgaW5zdHJ1bWVudHMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDcqLCAyODbigJMyOTkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC43LjMuMjg2PC9tYXJrPgoKIyMjIyA8dT5TZWN0aW9uIDIxPC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb24yMX0KClwqR3JhaGFtLCBKLiBSLiAoMjAyMikuICpNTVBJIGluc3RydW1lbnRzOiBBc3Nlc3NpbmcgcGVyc29uYWxpdHkgYW5kIHBzeWNob3BhdGhvbG9neSogKDZ0aCBlZC4pLiBPeGZvcmQgVW5pdmVyc2l0eSBQcmVzcy4gKENoYXB0ZXJzIDHigJM1LCAxMykuCjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltUaGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgY2xpbmljIGxpYnJhcnkuCkdldCBhIGZlZWwgZm9yIHRoaXMgbWVhc3VyZSBhbmQgdGhlIHdheSBpdCB3YXMgZGV2ZWxvcGVkOyB5b3UgZG9uJ3QgbmVlZCB0byByZW1lbWJlciBkZXRhaWxzIGFib3V0IHRoZSBzY2FsZXMuXTwvbWFyaz4KClNlbGxib20sIE0uICgyMDE5KS4gVGhlIE1NUEktMi1SZXN0cnVjdHVyZWQgRm9ybSAoTU1QSS0yLVJGKTogQXNzZXNzbWVudCBvZiBwZXJzb25hbGl0eSBhbmQgcHN5Y2hvcGF0aG9sb2d5IGluIHRoZSB0d2VudHktZmlyc3QgY2VudHVyeS4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMTUqKDEpLCAxNDnigJMxNzcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYtY2xpbnBzeS0wNTA3MTgtMDk1NzAxCgo8bWFyaz5XaWdnaW5zLCBKLiBTLiAoMTk3MykuIFN0cnVjdHVyZWQgdGVjaG5pcXVlcy4gSW4gSi4gUy4gV2lnZ2lucyAoRWQuKSwgKlBlcnNvbmFsaXR5IGFuZCBwcmVkaWN0aW9uOiBQcmluY2lwbGVzIG9mIHBlcnNvbmFsaXR5IGFzc2Vzc21lbnQqIChwcC4gMzgw4oCTNDQwKS4gQWRkaXNvbi1XZXNsZXkuPC9tYXJrPgoKIyMjIyA8dT5TZWN0aW9uIDIyPC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb24yMn0KCjxtYXJrPkR1bm5pbmcsIEQuLCBIZWF0aCwgQy4sICYgU3VscywgSi4gTS4gKDIwMDQpLiBGbGF3ZWQgc2VsZi1hc3Nlc3NtZW50OiBJbXBsaWNhdGlvbnMgZm9yIGhlYWx0aCwgZWR1Y2F0aW9uLCBhbmQgdGhlIHdvcmtwbGFjZS4gKlBzeWNob2xvZ2ljYWwgU2NpZW5jZSBpbiB0aGUgUHVibGljIEludGVyZXN0LCA1KiwgNjnigJMxMDYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExL2ouMTUyOS0xMDA2LjIwMDQuMDAwMTgueDwvbWFyaz4KCjxtYXJrPktyb3NuaWNrLCBKLiBBLiAoMTk5OSkuIFN1cnZleSByZXNlYXJjaC4gKkFubnVhbCBSZXZpZXcgb2YgUHN5Y2hvbG9neSwgNTAqLCA1MzfigJM1NjcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYucHN5Y2guNTAuMS41Mzc8L21hcms+CgojIyMgUHJvamVjdGl2ZSB0ZXN0cyB7I3NlY3Rpb24yM30KCiMjIyMgPHU+U2VjdGlvbiAyMzwvdT4gey51bm51bWJlcmVkfQoKXCpGcmFuaywgTC4gSy4gKDE5MzkpLiBQcm9qZWN0aXZlIG1ldGhvZHMgZm9yIHRoZSBzdHVkeSBvZiBwZXJzb25hbGl0eS4gKkpvdXJuYWwgb2YgUHN5Y2hvbG9neSwgOCosIDM4OeKAkzQxMy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwODAvMDAyMjM5ODAuMTkzOS45OTE3NjcxCgpcKkxpbmR6ZXksIEcuICgxOTUyKS4gVGhlbWF0aWMgQXBwZXJjZXB0aW9uIFRlc3Q6IEludGVycHJldGl2ZSBhc3N1bXB0aW9ucyBhbmQgcmVsYXRlZCBlbXBpcmljYWwgZXZpZGVuY2UuICpQc3ljaG9sb2dpY2FsIEJ1bGxldGluLCA0OSosIDHigJMyNS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvaDAwNjIzNjMKCjxtYXJrPkxpbGllbmZlbGQsIFMuIE8uLCBXb29kLCBKLiBNLiwgJiBHYXJiLCBILiBOLiAoMjAwMCkuIFRoZSBzY2llbnRpZmljIHN0YXR1cyBvZiBwcm9qZWN0aXZlIHRlY2huaXF1ZXMuICpQc3ljaG9sb2dpY2FsIFNjaWVuY2UgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdCwgMSosIDI34oCTNjYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExLzE1MjktMTAwNi4wMDI8L21hcms+CgpcKldvb2QsIEouIE0uLCBOZXp3b3Jza2ksIE0uIFQuLCAmIFN0ZWpza2FsLCBXLiBKLiAoMTk5NikuIFRoZSBjb21wcmVoZW5zaXZlIHN5c3RlbSBmb3IgdGhlIFJvcnNjaGFjaDogQSBjcml0aWNhbCBleGFtaW5hdGlvbi4gKlBzeWNob2xvZ2ljYWwgU2NpZW5jZSwgNyooMSksIDPigJMxMC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvai4xNDY3LTkyODAuMTk5Ni50YjAwNjU4LnguCjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltTZWUgYWxzbyB0aGUgcmVzcG9uc2UgZnJvbSBFeG5lciBhbmQgcmVwbHkgYnkgV29vZCBldCBhbC4gb24gcHAuIDEx4oCTMTcuXTwvbWFyaz4KCiMjIyBQc3ljaG9waHlzaW9sb2dpY2FsIE1lYXN1cmVzIGFuZCBSRG9DIHsjc2VjdGlvbjI0fQoKIyMjIyA8dT5TZWN0aW9uIDI0PC91PiB7LnVubnVtYmVyZWR9CgpEdWJvaXMsIEouLCAmIEFkb2xwaHMsIFIuICgyMDE2KS4gQnVpbGRpbmcgYSBzY2llbmNlIG9mIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgZnJvbSBmTVJJLiAqVHJlbmRzIGluIENvZ25pdGl2ZSBTY2llbmNlcywgMjAqKDYpLCA0MjXigJM0NDMuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oudGljcy4yMDE2LjAzLjAxNAo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bU3R1ZGVudHMgbm90IHdvcmtpbmcgaW4gaW1hZ2luZyBjYW4gc2tpcCBvdmVyIG1vc3Qgb2YgdGhlIHRlY2huaWNhbCBkZXRhaWxzIGluIHRoaXMgYXJ0aWNsZS4KUmVhZCBpdCBhcyBhIG1vZGVsIGZvciB0YWtpbmcgbWVhc3VyZW1lbnQgc2VyaW91c2x5IGluIGFuIGVtZXJnaW5nIGFyZWEgb2YgY2xpbmljYWwgcmVzZWFyY2guXTwvbWFyaz4KCjxtYXJrPkhheW5lcywgUy4gTi4sICYgWW9zaGlva2EsIEQuIFQuICgyMDA3KS4gQ2xpbmljYWwgYXNzZXNzbWVudCBhcHBsaWNhdGlvbnMgb2YgYW1idWxhdG9yeSBiaW9zZW5zb3JzLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAxOSooMSksIDQ04oCTNTcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC4xOS4xLjQ0PC9tYXJrPgoKPG1hcms+S296YWssIE0uIEouLCAmIEN1dGhiZXJ0LCBCLiBOLiAoMjAxNikuIFRoZSBOSU1IIHJlc2VhcmNoIGRvbWFpbiBjcml0ZXJpYSBpbml0aWF0aXZlOiBCYWNrZ3JvdW5kLCBpc3N1ZXMsIGFuZCBwcmFnbWF0aWNzLiAqUHN5Y2hvcGh5c2lvbG9neSwgNTMqKDMpLCAyODbigJMyOTcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExL3BzeXAuMTI1MTg8L21hcms+CjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltTdHVkZW50cyBhbHJlYWR5IGZhbWlsaWFyIHdpdGggUkRvQyBjYW4gc2tpbSB0aGlzIGludHJvZHVjdGlvbi4KT3VyIGludGVyZXN0IGlzIGluIGV4YW1pbmluZyBSRG9DIGZyb20gYSBtZWFzdXJlbWVudCBwZXJzcGVjdGl2ZS5dPC9tYXJrPgoKTWFjTmFtYXJhLCBBLiwgJiBQaGFuLCBLLiBMLiAoMjAxNikuIFBzeWNob2Jpb2xvZ2ljYWwgb3BlcmF0aW9uYWxpemF0aW9uIG9mIFJEb0MgY29uc3RydWN0czogTWV0aG9kb2xvZ2ljYWwgYW5kIGNvbmNlcHR1YWwgb3Bwb3J0dW5pdGllcyBhbmQgY2hhbGxlbmdlcy4gKlBzeWNob3BoeXNpb2xvZ3ksIDUzKigzKSwgNDA24oCTNDA5LiBodHRwczovL2RvaS5vcmcvMTAuMTExMS9wc3lwLjEyNTg3CgpNaWxsZXIsIEcuIEEuLCBSb2Nrc3Ryb2gsIEIuIFMuLCBIYW1pbHRvbiwgSC4gSy4sICYgWWVlLCBDLiBNLiAoMjAxNikuIFBzeWNob3BoeXNpb2xvZ3kgYXMgYSBjb3JlIHN0cmF0ZWd5IGluIFJEb0MuICpQc3ljaG9waHlzaW9sb2d5LCA1MyooMyksIDQxMOKAkzQxNC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvcHN5cC4xMjU4MQoKPG1hcms+TWlsbGVyLCBHLiBBLiwgRWxiZXJ0LCBULiwgU3V0dG9uLCBCLiBQLiwgJiBIZWxsZXIsIFcuICgyMDA3KS4gSW5ub3ZhdGl2ZSBjbGluaWNhbCBhc3Nlc3NtZW50IHRlY2hub2xvZ2llczogQ2hhbGxlbmdlcyBhbmQgb3Bwb3J0dW5pdGllcyBpbiBuZXVyb2ltYWdpbmcuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE5KigxKSwgNTjigJM3My4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTA0MC0zNTkwLjE5LjEuNTg8L21hcms+CgpcKlN0b25lLCBBLiBBLiwgU2NobmVpZGVyLCBTLiwgJiBTbXl0aCwgSi4gTS4gKDIwMjMpLiBFdmFsdWF0aW9uIG9mIHByZXNzaW5nIGlzc3VlcyBpbiBlY29sb2dpY2FsIG1vbWVudGFyeSBhc3Nlc3NtZW50LiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCAxOSooMSksIDEwN+KAkzEzMS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi1jbGlucHN5LTA4MDkyMS0wODMxMjgKCiMjIyBDb21wdXRlcnMgYW5kIEFkYXB0aXZlIFRlc3RpbmcgeyNzZWN0aW9uMjV9CgojIyMjIDx1PlNlY3Rpb24gMjU8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkJ1Y2hhbmFuLCBULiAoMjAwMikuIE9ubGluZSBhc3Nlc3NtZW50OiBEZXNpcmFibGUgb3IgZGFuZ2Vyb3VzPyAqUHJvZmVzc2lvbmFsIFBzeWNob2xvZ3k6IFJlc2VhcmNoIGFuZCBQcmFjdGljZSwgMzMqKDIpLCAxNDjigJMxNTQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzA3MzUtNzAyOC4zMy4yLjE0ODwvbWFyaz4KClwqR2FsYXR6ZXItTGV2eSwgSS4gUi4sICYgT25uZWxhLCBKLi1QLiAoMjAyMykuIE1hY2hpbmUgbGVhcm5pbmcgYW5kIHRoZSBkaWdpdGFsIG1lYXN1cmVtZW50IG9mIHBzeWNob2xvZ2ljYWwgaGVhbHRoLiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCAxOSosIDEzM+KAkzE1NC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi1jbGlucHN5LTA4MDkyMS0wNzMyMTIKCkdhcmIsIEguIE4uICgyMDA3KS4gQ29tcHV0ZXItYWRtaW5pc3RlcmVkIGludGVydmlld3MgYW5kIHJhdGluZyBzY2FsZXMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE5KigxKSwgNOKAkzEzLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTkuMS40CgpSdWl6LCBNLiBBLiwgRHJha2UsIEUuIEIuLCBHbGFzcywgQS4sIE1hcmNvdHRlLCBELiwgJiB2YW4gR29ycCwgVy4gRy4gKDIwMDIpLiBUcnlpbmcgdG8gYmVhdCB0aGUgc3lzdGVtOiBNaXN1c2Ugb2YgdGhlIGludGVybmV0IHRvIGFzc2lzdCBpbiBhdm9pZGluZyB0aGUgZGV0ZWN0aW9uIG9mIHBzeWNob2xvZ2ljYWwgc3ltcHRvbSBkaXNzaW11bGF0aW9uLiAqUHJvZmVzc2lvbmFsIFBzeWNob2xvZ3k6IFJlc2VhcmNoIGFuZCBQcmFjdGljZSwgMzMqKDMpLCAyOTTigJMyOTkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzA3MzUtNzAyOC4zMy4zLjI5NAoKRm9yYmV5LCBKLiBELiwgJiBCZW4tUG9yYXRoLCBZLiBTLiAoMjAwNykuIENvbXB1dGVyaXplZCBhZGFwdGl2ZSBwZXJzb25hbGl0eSB0ZXN0aW5nOiBBIHJldmlldyBhbmQgaWxsdXN0cmF0aW9uIHdpdGggdGhlIE1NUEktMiBjb21wdXRlcml6ZWQgYWRhcHRpdmUgdmVyc2lvbi4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMTkqKDEpLCAxNOKAkzI0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTkuMS4xNAoKPG1hcms+R2liYm9ucywgUi4gRC4sIFdlaXNzLCBELiBKLiwgRnJhbmssIEUuLCAmIEt1cGZlciwgRC4gKDIwMTYpLiBDb21wdXRlcml6ZWQgYWRhcHRpdmUgZGlhZ25vc2lzIGFuZCB0ZXN0aW5nIG9mIG1lbnRhbCBoZWFsdGggZGlzb3JkZXJzLiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCAxMiooMSksIDgz4oCTMTA0LiBodHRwczovL2RvaS5vcmcvMTAuMTE0Ni9hbm51cmV2LWNsaW5wc3ktMDIxODE1LTA5MzYzNDwvbWFyaz4KCiMjIEJlaGF2aW9yYWwgQXNzZXNzbWVudCB7I3NlY3Rpb24yNn0KCiMjIyMgPHU+U2VjdGlvbiAyNjwvdT4gey51bm51bWJlcmVkfQoKPG1hcms+R2lyYXJkLCBKLiBNLiwgJiBDb2huLCBKLiBGLiAoMjAxNikuIEEgcHJpbWVyIG9uIG9ic2VydmF0aW9uYWwgbWVhc3VyZW1lbnQuICpBc3Nlc3NtZW50LCAyMyooNCksIDQwNOKAkzQxMy4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzcvMTA3MzE5MTExNjYzNTgwNzwvbWFyaz4KCjxtYXJrPkhheW5lcywgUy4gTi4gKDIwMDEpLiBDbGluaWNhbCBhcHBsaWNhdGlvbnMgb2YgYW5hbG9ndWUgYmVoYXZpb3JhbCBvYnNlcnZhdGlvbjogRGltZW5zaW9ucyBvZiBwc3ljaG9tZXRyaWMgZXZhbHVhdGlvbi4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMTMqKDEpLCA3M+KAkzg1LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTMuMS43MzwvbWFyaz4KCktvcm90aXRzY2gsIFcuIEouLCAmIE5lbHNvbi1HcmF5LCBSLiBPLiAoMTk5OSkuIEFuIG92ZXJ2aWV3IG9mIHNlbGYtbW9uaXRvcmluZyByZXNlYXJjaCBpbiBhc3Nlc3NtZW50IGFuZCB0cmVhdG1lbnQuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDExKig0KSwgNDE14oCTNDI1LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTEuNC40MTUgCgpQaWFzZWNraSwgVC4gTS4sIEh1ZmZvcmQsIE0uIFIuLCBTb2xoYW4sIE0uLCAmIFRydWxsLCBULiBKLiAoMjAwNykuIEFzc2Vzc2luZyBjbGllbnRzIGluIHRoZWlyIG5hdHVyYWwgZW52aXJvbm1lbnRzIHdpdGggZWxlY3Ryb25pYyBkaWFyaWVzOiBSYXRpb25hbGUsIGJlbmVmaXRzLCBsaW1pdGF0aW9ucywgYW5kIGJhcnJpZXJzLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAxOSooMSksIDI14oCTNDMuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC4xOS4xLjI1CgojIyBSZXBlYXRlZCBBc3Nlc3NtZW50cyBhY3Jvc3MgVGltZSB7I3NlY3Rpb24yN30KCiMjIyMgPHU+U2VjdGlvbiAyNzwvdT4gey51bm51bWJlcmVkfQoKU29iZWxsLCBMLiBDLiwgJiBTb2JlbGwsIE0uIEIuICgyMDA4KS4gVGltZWxpbmUgZm9sbG93YmFjayAoVExGQikuIEluIEEuIEouIFJ1c2ggSnIuLCBNLiBCLiBGaXJzdCwgJiBELiBCbGFja2VyIChFZHMuKSwgKkhhbmRib29rIG9mIHBzeWNoaWF0cmljIG1lYXN1cmVzKiAoMm5kIGVkLiwgcHAuIDQ2NuKAkzQ2OCkuIEFtZXJpY2FuIFBzeWNoaWF0cmljIFB1Ymxpc2hpbmcuIAoKPG1hcms+Q2FycGVudGVyLCBSLiBXLiwgV3ljb2ZmLCBBLiBNLiwgJiBUcnVsbCwgVC4gSi4gKDIwMTYpLiBBbWJ1bGF0b3J5IGFzc2Vzc21lbnQ6IE5ldyBhZHZlbnR1cmVzIGluIGNoYXJhY3Rlcml6aW5nIGR5bmFtaWMgcHJvY2Vzc2VzLiAqQXNzZXNzbWVudCwgMjMqKDQpLCA0MTTigJM0MjQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTc3LzEwNzMxOTExMTY2MzIzNDE8L21hcms+Cgo8bWFyaz5NYXR0aGV3cywgTS4sIEFiZHVsbGFoLCBTLiwgTXVybmFuZSwgRS4sIFZvaWRhLCBTLiwgQ2hvdWRodXJ5LCBULiwgR2F5LCBHLiwgJiBGcmFuaywgRS4gKDIwMTYpLiBEZXZlbG9wbWVudCBhbmQgZXZhbHVhdGlvbiBvZiBhIHNtYXJ0cGhvbmUtYmFzZWQgbWVhc3VyZSBvZiBzb2NpYWwgcmh5dGhtcyBmb3IgYmlwb2xhciBkaXNvcmRlci4gKkFzc2Vzc21lbnQsIDIzKig0KSwgNDcy4oCTNDgzLiBodHRwczovL2RvaS5vcmcvMTAuMTE3Ny8xMDczMTkxMTE2NjU2Nzk0PC9tYXJrPgo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bYSBjYXNlIHN0dWR5IGluIHNlbGYtcmVwb3J0IGFjcm9zcyB0aW1lLgpTcGVjaWZpY3Mgb2YgdGhlaXIgc3R1ZHkgYXJlIGxlc3MgaW1wb3J0YW50Ll08L21hcms+CgojIyMjIDx1PlNlY3Rpb24gMjg8L3U+IHsudW5udW1iZXJlZCAjc2VjdGlvbjI4fQoKPG1hcms+SGVydHpvZywgQy4sICYgTmVzc2Vscm9hZGUsIEouIFIuICgyMDAzKS4gQXNzZXNzaW5nIHBzeWNob2xvZ2ljYWwgY2hhbmdlIGluIGFkdWx0aG9vZDogQW4gb3ZlcnZpZXcgb2YgbWV0aG9kb2xvZ2ljYWwgaXNzdWVzLiAqUHN5Y2hvbG9neSBhbmQgQWdpbmcsIDE4Kig0KSwgNjM54oCTNjU3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wODgyLTc5NzQuMTguNC42Mzk8L21hcms+CgpQZXRlcnNlbiwgSS4gVC4sIENob2UsIEQuIEUuLCAmIExlQmVhdSwgQi4gKDIwMjApLiBTdHVkeWluZyBhIG1vdmluZyB0YXJnZXQgaW4gZGV2ZWxvcG1lbnQ6IFRoZSBjaGFsbGVuZ2UgYW5kIG9wcG9ydHVuaXR5IG9mIGhldGVyb3R5cGljIGNvbnRpbnVpdHkuICpEZXZlbG9wbWVudGFsIFJldmlldywgNTgqLCAxMDA5MzUuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2ouZHIuMjAyMC4xMDA5MzUKCkJlbHR6LCBBLiBNLiwgV3JpZ2h0LCBBLiBHLiBDLiwgU3ByYWd1ZSwgQi4gTi4sICYgTW9sZW5hYXIsIFAuIEMuIE0uICgyMDE2KS4gQnJpZGdpbmcgdGhlIG5vbW90aGV0aWMgYW5kIGlkaW9ncmFwaGljIGFwcHJvYWNoZXMgdG8gdGhlIGFuYWx5c2lzIG9mIGNsaW5pY2FsIGRhdGEuICpBc3Nlc3NtZW50LCAyMyooNCksIDQ0N+KAkzQ1OC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzcvMTA3MzE5MTExNjY0ODIwOQo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bZm9jdXMgb24gdGhlIGdlbmVyYWwgaXNzdWVzIG9mIGNvbWJpbmluZyBpZGlvZ3JhcGhpYyBhbmQgbm9tb3RoZXRpYyBkYXRhLgpZb3UgZG9uJ3QgbmVlZCB0byBrbm93IHRoZSB0ZWNobmljYWwgZGV0YWlscyBvZiB0aGVpciBHSU1NRSBtb2RlbC5dPC9tYXJrPgoKIyMgQXNzZXNzbWVudCBvZiBDb2duaXRpb24geyNzZWN0aW9uMjl9CgojIyMjIDx1PlNlY3Rpb24gMjk8L3U+IHsudW5udW1iZXJlZH0KClwqQnVzZW1leWVyLCBKLiBSLiwgJiBTdG91dCwgSi4gQy4gKDIwMDIpLiBBIGNvbnRyaWJ1dGlvbiBvZiBjb2duaXRpdmUgZGVjaXNpb24gbW9kZWxzIHRvIGNsaW5pY2FsIGFzc2Vzc21lbnQ6IERlY29tcG9zaW5nIHBlcmZvcm1hbmNlIG9uIHRoZSBCZWNoYXJhIGdhbWJsaW5nIHRhc2suICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE0KigzKSwgMjUz4oCTMjYyLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTQuMy4yNTMKCjxtYXJrPkR1bmtsZXksIEQuIE0uLCBTZWdhbCwgWi4gVi4sICYgQmxhbmtzdGVpbiwgSy4gUi4gKDIwMTkpLiBDb2duaXRpdmUgYXNzZXNzbWVudDogSXNzdWVzIGFuZCBtZXRob2RzLiBJbiBLLiBTLiBEb2Jzb24gJiBELiBKLiBBLiBEb3pvaXMgKEVkcy4pLCAqSGFuZGJvb2sgb2YgY29nbml0aXZlLWJlaGF2aW9yYWwgdGhlcmFwaWVzKiAoNHRoIGVkLiwgcHAuIDg14oCTMTE5KS4gR3VpbGZvcmQgUHJlc3MuPC9tYXJrPgoKRGF2aXNvbiwgRy4gQy4sIFZvZ2VsLCBSLiBTLiwgJiBDb2ZmbWFuLCBTLiBHLiAoMTk5NykuIFRoaW5rLWFsb3VkIGFwcHJvYWNoZXMgdG8gY29nbml0aXZlIGFzc2Vzc21lbnQgYW5kIHRoZSBhcnRpY3VsYXRlZCB0aG91Z2h0cyBpbiBzaW11bGF0ZWQgc2l0dWF0aW9ucyBwYXJhZGlnbS4gKkpvdXJuYWwgb2YgQ29uc3VsdGluZyBhbmQgQ2xpbmljYWwgUHN5Y2hvbG9neSwgNjUqKDYpLCA5NTDigJM5NTguIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMjItMDA2WC42NS42Ljk1MAoKSHVybGJ1cnQsIFIuIFQuICgxOTk3KS4gUmFuZG9tbHkgc2FtcGxpbmcgdGhpbmtpbmcgaW4gdGhlIG5hdHVyYWwgZW52aXJvbm1lbnQuICpKb3VybmFsIG9mIENvbnN1bHRpbmcgYW5kIENsaW5pY2FsIFBzeWNob2xvZ3ksIDY1Kig2KSwgOTQx4oCTOTQ5LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDIyLTAwNlguNjUuNi45NDEgCgo8bWFyaz5Sb2RlYmF1Z2gsIFQuIEwuLCBTY3VsbGluLCBSLiBCLiwgTGFuZ2VyLCBKLiBLLiwgRGl4b24sIEQuIEouLCBIdXBwZXJ0LCBKLiBELiwgQmVybnN0ZWluLCBBLiwgWnZpZWxsaSwgQS4sICYgTGVuemUsIEUuIEouICgyMDE2KS4gVW5yZWxpYWJpbGl0eSBhcyBhIHRocmVhdCB0byB1bmRlcnN0YW5kaW5nIHBzeWNob3BhdGhvbG9neTogVGhlIGNhdXRpb25hcnkgdGFsZSBvZiBhdHRlbnRpb25hbCBiaWFzLiAqSm91cm5hbCBvZiBBYm5vcm1hbCBQc3ljaG9sb2d5LCAxMjUqKDYpLCA4NDDigJM4NTEuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2FibjAwMDAxODQ8L21hcms+CgpUcmVhdCwgVC4gQS4sIE1jRmFsbCwgUi4gTS4sIFZpa2VuLCBSLiBKLiwgS3J1c2Noa2UsIEouIEsuLCBOb3NvZnNreSwgUi4gTS4sICYgV2FuZywgUy4gUy4gKDIwMDcpLiBDbGluaWNhbCBjb2duaXRpdmUgc2NpZW5jZTogQXBwbHlpbmcgcXVhbnRpdGF0aXZlIG1vZGVscyBvZiBjb2duaXRpdmUgcHJvY2Vzc2luZyB0byBleGFtaW5lIGNvZ25pdGl2ZSBhc3BlY3RzIG9mIHBzeWNob3BhdGhvbG9neS4gSW4gUi4gVy4gSi4gTmV1ZmVsZCAoRWQuKSwgKkFkdmFuY2VzIGluIGNsaW5pY2FsIGNvZ25pdGl2ZSBzY2llbmNlOiBGb3JtYWwgbW9kZWxpbmcgb2YgcHJvY2Vzc2VzIGFuZCBzeW1wdG9tcyogKHBwLiAxNznigJMyMDUpLiBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMTU1Ni0wMDYKCjwvZGl2PgoKIyMgQ3VsdHVyYWwgYW5kIEluZGl2aWR1YWwgRGl2ZXJzaXR5IHsjc2VjdGlvbjMwfQoKIyMjIyA8dT5TZWN0aW9uIDMwPC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5JdCBtYXkgYmUgaGVscGZ1bCB0byByZXZpZXcgdGhlIHRocmVlIFNhY2tldHQgcGFwZXJzIGFuZCB0aGUgQ29sZSBwYXBlciBmcm9tIHRoZSBJbnRlbGxlY3R1YWwgQXNzZXNzbWVudCBzZWN0aW9uLgpBbHNvIHJldmlldyByZWxldmFudCBzZWN0aW9ucyBvZiB0aGUgQVBBIFN0YW5kYXJkcyBmb3IgRWR1Y2F0aW9uYWwgYW5kIFBzeWNob2xvZ2ljYWwgVGVzdGluZyBmcm9tIHRoZSBWYWxpZGl0eSBzZWN0aW9uLjwvbWFyaz4KCjxkaXYgc3R5bGU9InRleHQtaW5kZW50OiAtNDBweDsgcGFkZGluZy1sZWZ0OiA0MHB4OyI+CgpCeXJkLCBELiBBLiwgUml2ZXJhIE1pbmR0LCBNLiBNLiwgQ2xhcmssIFUuIFMuLCBDbGFya2UsIFkuLCBUaGFtZXMsIEEuIEQuLCBHYW1tYWRhLCBFLiBaLiwgJiBNYW5seSwgSi4gSi4gKDIwMjEpLiBDcmVhdGluZyBhbiBhbnRpcmFjaXN0IHBzeWNob2xvZ3kgYnkgYWRkcmVzc2luZyBwcm9mZXNzaW9uYWwgY29tcGxpY2l0eSBpbiBwc3ljaG9sb2dpY2FsIGFzc2Vzc21lbnQuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDMzKigzKSwgMjc5LTI4NS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvcGFzMDAwMDk5MwoKPG1hcms+T2themFraSwgUy4sICYgU3VlLCBTLiAoMTk5NSkuIE1ldGhvZG9sb2dpY2FsIGlzc3VlcyBpbiBhc3Nlc3NtZW50IHJlc2VhcmNoIHdpdGggZXRobmljIG1pbm9yaXRpZXMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDcqKDMpLCAzNjfigJMzNzUuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC43LjMuMzY3PC9tYXJrPgoKR2FyYiwgSC4gTi4gKDE5OTcpLiBSYWNlIGJpYXMsIHNvY2lhbCBjbGFzcyBiaWFzLCBhbmQgZ2VuZGVyIGJpYXMgaW4gY2xpbmljYWwganVkZ21lbnQuICpDbGluaWNhbCBQc3ljaG9sb2d5OiBTY2llbmNlIGFuZCBQcmFjdGljZSwgNCooMiksIDk54oCTMTIwLiBodHRwczovL2RvaS5vcmcvMTAuMTExMS9qLjE0NjgtMjg1MC4xOTk3LnRiMDAxMDQueAoKTGVvbmcsIEYuIFQuIEwuLCAmIEthbGliYXRzZXZhLCBaLiAoMjAxNikuIFRocmVhdHMgdG8gY3VsdHVyYWwgdmFsaWRpdHkgaW4gY2xpbmljYWwgZGlhZ25vc2lzIGFuZCBhc3Nlc3NtZW50OiBJbGx1c3RyYXRlZCB3aXRoIHRoZSBjYXNlIG9mIEFzaWFuIEFtZXJpY2Fucy4gSW4gTi4gWmFuZSwgRy4gQmVybmFsLCAmIEYuIFQuIEwuIExlb25nIChFZHMuKSwgKkV2aWRlbmNlLWJhc2VkIHBzeWNob2xvZ2ljYWwgcHJhY3RpY2Ugd2l0aCBldGhuaWMgbWlub3JpdGllczogQ3VsdHVyYWxseSBpbmZvcm1lZCByZXNlYXJjaCBhbmQgY2xpbmljYWwgc3RyYXRlZ2llcyogKHBwLiA1N+KAkzc0KS4gQW1lcmljYW4gUHN5Y2hvbG9naWNhbCBBc3NvY2lhdGlvbi4KCjxtYXJrPlN1enVraSwgTC4gQS4sIE9ub3VlLCBNLiBBLiwgJiBIaWxsLCBKLiBTLiAoMjAxMykuIENsaW5pY2FsIGFzc2Vzc21lbnQ6IEEgbXVsdGljdWx0dXJhbCBwZXJzcGVjdGl2ZS4gSW4gSy4gRi4gR2Vpc2luZ2VyLCBKLiBGLiBDYXJsc29uLCBKLi1JLiBDLiBIYW5zZW4sIE4uIFIuIEt1bmNlbCwgUy4gUC4gUmVpc2UsICYgTS4gQy4gUm9kcmlndWV6IChFZHMuKSwgKkFQQSBoYW5kYm9vayBvZiB0ZXN0aW5nIGFuZCBhc3Nlc3NtZW50IGluIHBzeWNob2xvZ3kqIChWb2wuIDI6IFRlc3RpbmcgYW5kIGFzc2Vzc21lbnQgaW4gY2xpbmljYWwgYW5kIGNvdW5zZWxpbmcgcHN5Y2hvbG9neSwgcHAuIDE5M+KAkzIxMikuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzE0MDQ4LTAxMjwvbWFyaz4KCjwvZGl2PgoKIyBHcmFkaW5nIFN5c3RlbSBhbmQgdGhlIFVzZSBvZiArLy0geyNncmFkaW5nU3lzdGVtfQoKRmluYWwgZ3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2VtZXN0ZXIgb24gdGhlIGJhc2lzIG9mIHlvdXIgdG90YWwgcGVyY2VudGFnZSBvZiBwb2ludHMgZWFybmVkIG9uIGV4YW1pbmF0aW9ucyBhbmQgeW91ciBmaW5hbCBwYXBlci4KR3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgb24gYW4gYWJzb2x1dGUgc2NhbGUgKGNyaXRlcmlvbi1yZWZlcmVuY2VkIGdyYWRpbmc7IHNlZSBiZWxvdyk7IGNvdXJzZSBncmFkZXMgd2lsbCBub3QgYmUgY3VydmVkLgpObyBleHRyYS1jcmVkaXQgb3Bwb3J0dW5pdGllcyBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIGNvdXJzZS4KUGxlYXNlIG5vdGU6IEFzIGEgbWF0dGVyIG9mIGZhaXJuZXNzIHRvIGFsbCBzdHVkZW50cywgSSBhc3NpZ24gZ3JhZGVzIGJhc2VkIG9uIHBlcmZvcm1hbmNlIGFuZCBkbyBub3QgbmVnb3RpYXRlIGdyYWRlcy4KQWRkaXRpb25hbGx5LCBhIHBlbmFsdHkgb2YgMjAlIHBlciBkYXkgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBhc3NpZ25tZW50cyB0dXJuZWQgaW4gbGF0ZS4KRmluYWwgZ3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgYmFzZWQgb24gdGhlIGZvbGxvd2luZyByYW5nZXM6Cgp8IEdyYWRlIHwgUGVyY2VudCB8Cnw6LS0tLS0tfDotLS0tLS0tLXwKfCBBKyAgICB8IDk34oCTMTAwJSB8CnwgQSAgICAgfCA5M+KAkzk2ICAgfAp8IEHiiJIgICAgfCA5MOKAkzkyICAgfAp8IEIrICAgIHwgODfigJM4OSAgIHwKfCBCICAgICB8IDgz4oCTODYgICB8CnwgQuKIkiAgICB8IDgw4oCTODIgICB8CnwgQysgICAgfCA3N+KAkzc5ICAgfAp8IEMgICAgIHwgNzPigJM3NiAgIHwKfCBD4oiSICAgIHwgNzDigJM3MiAgIHwKfCBEKyAgICB8IDY34oCTNjkgICB8CnwgRCAgICAgfCA2M+KAkzY2ICAgfAp8IETiiJIgICAgfCA2MOKAkzYyICAgfAp8IEYgICAgIHwgMOKAkzU5ICAgIHwKCiMgQ291cnNlIEdyYWRlcyB7I2NvdXJzZUdyYWRlc30KCkZpbmFsIGNvdXJzZSBncmFkZXMgd2lsbCBiZSBhc3Nlc3NlZCBiYXNlZCBvbiB5b3VyIHBlcmZvcm1hbmNlIGluIHRoZSBhY3Rpdml0aWVzIGJlbG93LgpUaGUgcmVsYXRpdmUgY29udHJpYnV0aW9uIG9mIGVhY2ggY29tcG9uZW50IHRvIHlvdXIgZmluYWwgZ3JhZGUgaXMgYXMgZm9sbG93czoKCi0gMzAlICAgRXhhbSAxIChNaWQtVGVybSkKLSA0MCUgICBFeGFtIDIgKEZpbmFsKQotIDMwJSAgIEZpbmFsIFBhcGVyCgojIFRlbnRhdGl2ZSBDb3Vyc2UgT3V0bGluZSAoZXhhbSBkYXRlcyBmaXhlZCkgeyNvdXRsaW5lfQoKVGhpcyBpcyBhICp0ZW50YXRpdmUqIGNvdXJzZSBvdXRsaW5lLgpDaGFuZ2VzIHdpbGwgYmUgZGlzY3Vzc2VkIGluIGNsYXNzLgpUaGVyZSBhcmUgMTUgd2Vla3MgaW4gdGhlIHNlbWVzdGVyLCBhbmQgY2xhc3MgbWVldHMgdHdpY2UgcGVyIHdlZWsgKDMwIHNlY3Rpb25zKS4KV2Ugd2lsbCBoYXZlIG9uZSBleGFtIGR1cmluZyB0aGUgc2VtZXN0ZXIgYW5kIG9uZSBmaW5hbCBleGFtIGR1cmluZyBmaW5hbHMgd2Vlay4KCnwgKipTZWN0aW9uKiogICAgICB8ICoqRGF5KiogfCAqKkRhdGUqKiB8ICoqQ29udGVudCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfDotLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS18Oi0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFsxXSgjc2VjdGlvbjEpICAgfCBUICAgICAgIHwgMDEvMTYgICAgfCBPdmVydmlldyBvZiBDbGFzczsgQ2xpbmljYWwgU2NpZW5jZSBhbmQgdGhlIFJlcGxpY2F0aW9uIENyaXNpcyB8CnwgWzJdKCNzZWN0aW9uMikgICB8IFRoICAgICAgfCAwMS8xOCAgICB8IFJlbGlhYmlsaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbM10oI3NlY3Rpb24zKSAgIHwgVCAgICAgICB8IDAxLzIzICAgIHwgUmVsaWFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFs0XSgjc2VjdGlvbjQpICAgfCBUaCAgICAgIHwgMDEvMjUgICAgfCBWYWxpZGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzVdKCNzZWN0aW9uNSkgICB8IFQgICAgICAgfCAwMS8zMCAgICB8IFZhbGlkaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbNl0oI3NlY3Rpb242KSAgIHwgVGggICAgICB8IDAyLzAxICAgIHwgU3RydWN0dXJhbCBFcXVhdGlvbiBNb2RlbGluZyAoU0VNKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFs3XSgjc2VjdGlvbjcpICAgfCBUICAgICAgIHwgMDIvMDYgICAgfCBJdGVtIFJlc3BvbnNlIFRoZW9yeSAoSVJUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzhdKCNzZWN0aW9uOCkgICB8IFRoICAgICAgfCAwMi8wOCAgICB8IFByZWRpY3Rpb24gQmFzaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbOV0oI3NlY3Rpb245KSAgIHwgVCAgICAgICB8IDAyLzEzICAgIHwgU2lnbmFsIERldGVjdGlvbiBUaGVvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxMF0oI3NlY3Rpb24xMCkgfCBUaCAgICAgIHwgMDIvMTUgICAgfCBDbGluaWNhbCBKdWRnbWVudCB2cy4gQWxnb3JpdGhtaWMgUHJlZGljdGlvbiAgICAgICAgICAgICAgICAgICB8CnwgWzExXSgjc2VjdGlvbjExKSB8IFQgICAgICAgfCAwMi8yMCAgICB8IEdlbmVyYWwgSXNzdWVzIGluIENsaW5pY2FsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMTJdKCNzZWN0aW9uMTIpIHwgVGggICAgICB8IDAyLzIyICAgIHwgRXZpZGVuY2UtQmFzZWQgQXNzZXNzbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxM10oI3NlY3Rpb24xMykgfCBUICAgICAgIHwgMDIvMjcgICAgfCBFdGhpY2FsIElzc3VlcyBpbiBBc3Nlc3NtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzE0XSgjc2VjdGlvbjE0KSB8IFRoICAgICAgfCAwMi8yOSAgICB8ICoqTWlkdGVybSBFeGFtKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMTVdKCNzZWN0aW9uMTUpIHwgVCAgICAgICB8IDAzLzA1ICAgIHwgSW50ZWxsZWN0dWFsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxNl0oI3NlY3Rpb24xNikgfCBUaCAgICAgIHwgMDMvMDcgICAgfCBJbnRlbGxlY3R1YWwgQXNzZXNzbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgICB8IFQgICAgICAgfCAwMy8xMiAgICB8IFNwcmluZyBCcmVhayEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgIHwgVGggICAgICB8IDAzLzE0ICAgIHwgU3ByaW5nIEJyZWFrISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxN10oI3NlY3Rpb24xNykgfCBUICAgICAgIHwgMDMvMTkgICAgfCBCaWFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzE4XSgjc2VjdGlvbjE4KSB8IFRoICAgICAgfCAwMy8yMSAgICB8IEJpYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMTldKCNzZWN0aW9uMTkpIHwgVCAgICAgICB8IDAzLzI2ICAgIHwgVGhlIEludGVydmlldyBhbmQgdGhlIERTTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyMF0oI3NlY3Rpb24yMCkgfCBUaCAgICAgIHwgMDMvMjggICAgfCBPYmplY3RpdmUgUGVyc29uYWxpdHkgVGVzdGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzIxXSgjc2VjdGlvbjIxKSB8IFQgICAgICAgfCAwNC8wMiAgICB8IE9iamVjdGl2ZSBQZXJzb25hbGl0eSBUZXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMjJdKCNzZWN0aW9uMjIpIHwgVGggICAgICB8IDA0LzA0ICAgIHwgT2JqZWN0aXZlIFBlcnNvbmFsaXR5IFRlc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyM10oI3NlY3Rpb24yMykgfCBUICAgICAgIHwgMDQvMDkgICAgfCBQcm9qZWN0aXZlIFBlcnNvbmFsaXR5IFRlc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzI0XSgjc2VjdGlvbjI0KSB8IFRoICAgICAgfCAwNC8xMSAgICB8IFBzeWNob3BoeXNpb2xvZ2ljYWwgTWVhc3VyZXMgYW5kIFJEb0MgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMjVdKCNzZWN0aW9uMjUpIHwgVCAgICAgICB8IDA0LzE2ICAgIHwgQ29tcHV0ZXJzIGFuZCBBZGFwdGl2ZSBUZXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyNl0oI3NlY3Rpb24yNikgfCBUaCAgICAgIHwgMDQvMTggICAgfCBCZWhhdmlvcmFsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzI3XSgjc2VjdGlvbjI3KSB8IFQgICAgICAgfCAwNC8yMyAgICB8IFJlcGVhdGVkIEFzc2Vzc21lbnRzIGFjcm9zcyBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMjhdKCNzZWN0aW9uMjgpIHwgVGggICAgICB8IDA0LzI1ICAgIHwgUmVwZWF0ZWQgQXNzZXNzbWVudHMgYWNyb3NzIFRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyOV0oI3NlY3Rpb24yOSkgfCBUICAgICAgIHwgMDQvMzAgICAgfCBBc3Nlc3NtZW50IG9mIENvZ25pdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzMwXSgjc2VjdGlvbjMwKSB8IFRoICAgICAgfCAwNS8wMiAgICB8IEN1bHR1cmFsIGFuZCBJbmRpdmlkdWFsIERpdmVyc2l0eTsgKipGaW5hbCBwYXBlciBkdWUhKiogICAgICAgIHwKfCBGaW5hbHMgV2VlayAgICAgIHwgICAgICAgICB8IFRCRCAod2VlayBvZiA1LzYpIHwgKipGaW5hbCBFeGFtKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgCiMgRGF0ZSBhbmQgVGltZSBvZiB0aGUgRmluYWwgRXhhbSB7I2ZpbmFsRXhhbX0KClRoZSBbZmluYWwgZXhhbWluYXRpb24gZGF0ZSBhbmQgdGltZV0oaHR0cHM6Ly9yZWdpc3RyYXIudWlvd2EuZWR1L2ZpbmFsLWV4YW0tc2NoZWR1bGVzKSB3aWxsIGJlIGFubm91bmNlZCBieSB0aGUgUmVnaXN0cmFyIGdlbmVyYWxseSBieSB0aGUgZmlmdGggd2VlayBvZiBjbGFzc2VzLCBhbmQgaXQgd2lsbCBiZSBhbm5vdW5jZWQgb24gdGhlIGNvdXJzZSBJQ09OIHNpdGUgb25jZSBpdCBpcyBrbm93bi4KPHU+RG8gbm90IHBsYW4geW91ciBlbmQgb2YgdGhlIHNlbWVzdGVyIHRyYXZlbCBwbGFucyB1bnRpbCB0aGUgZmluYWwgZXhhbSBzY2hlZHVsZSBpcyBtYWRlIHB1YmxpYy4KSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBrbm93IHRoZSBkYXRlLCB0aW1lLCBhbmQgcGxhY2Ugb2YgdGhlIGZpbmFsIGV4YW0uPC91PgpBY2NvcmRpbmcgdG8gdGhlIFJlZ2lzdHJhcidzIGZpbmFsIGV4YW0gcG9saWN5LCBzdHVkZW50cyA8dT5oYXZlIGEgbWF4aW11bSBvZiB0d28gd2Vla3MgYWZ0ZXIgdGhlIGFubm91bmNlZCBmaW5hbCBleGFtIHNjaGVkdWxlPC91PiB0byByZXF1ZXN0IGEgY2hhbmdlIGlmIGFuIGV4YW0gY29uZmxpY3QgZXhpc3RzIG9yIGlmIGEgc3R1ZGVudCBoYXMgbW9yZSB0aGFuIHR3byBleGFtcyBzY2hlZHVsZWQgZm9yIHRoZSBzYW1lIGRheSAoc2VlIHRoZSBbcG9saWN5XShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvbWFrZXVwLWZpbmFsLWV4YW1pbmF0aW9uLXBvbGljaWVzKSBoZXJlKS4KCiMgQ291cnNlIFJlc291cmNlcyB7I2NvdXJzZVJlc291cmNlc30KClRoZXJlIGFyZSBtYW55IGNvdXJzZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHN1Y2NlZWQgaW4gdGhlIGNsYXNzLCBpbmNsdWRpbmc6CgotIExlY3R1cmVzCi0gTGVjdHVyZSBzbGlkZXMKLSBbTGVjdHVyZSByZWNvcmRpbmdzXSgjcmVjb3JkaW5ncykKLSBbUmVhZGluZ3NdKCNhcnRpY2xlcykKLSBbQ29tcGFuaW9uIGJvb2tdKCN0ZXh0Ym9vaykKLSBbU3VwcGxlbWVudGFsIHJlc291cmNlc10oI3N1cHBsZW1lbnRhbCkKLSBEaXNjdXNzaW9ucyBvbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkKLSBPZmZpY2UgaG91cnMKLSBQZWVyIHN0dWR5IGdyb3VwcwotIHRoZSBVSSBbV3JpdGluZyBDZW50ZXJdKGh0dHBzOi8vd3JpdGluZ2NlbnRlci51aW93YS5lZHUpCi0gVHV0b3IgSW93YTogaHR0cHM6Ly90dXRvci51aW93YS5lZHUKCiMgSG93IHRvIFN0dWR5IGZvciB0aGlzIENsYXNzIHsjaG93VG9TdHVkeX0KClRvIHN0dWR5IGZvciB0aGlzIGNsYXNzLCBteSBzdWdnZXN0aW9ucyBhcmU6CgoxLiBSZWFkIHRoZSBbYXNzaWduZWQgcmVhZGluZ3NdKCNhcnRpY2xlcykgKmJlZm9yZSogZWFjaCBjbGFzcy4KV2UgaGF2ZSBsb3RzIG9mIGNvbnRlbnQgdG8gY292ZXIsIGFuZCB0aGUgbGVjdHVyZXMgd2lsbCBtb3ZlIHF1aWNrbHkuClRodXMsIGRvaW5nIHRoZSByZWxldmFudCByZWFkaW5ncyAqYmVmb3JlKiBlYWNoIGNsYXNzIHdpbGwgaGVscCB5b3UgYmVzdCBjb21lIHByZXBhcmVkIHRvIGxlYXJuIHRoZSBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gY2xhc3MuCjIuIFRha2UgZ29vZCBub3RlcyB3aGlsZSBkb2luZyB0aGUgW2Fzc2lnbmVkIHJlYWRpbmdzXSgjYXJ0aWNsZXMpLgpBZnRlciByZWFkaW5nIGVhY2ggYXJ0aWNsZSwgbGVhdmUgYSBmZXcgYnVsbGV0IHBvaW50cyBhdCB0aGUgdG9wIG9mIHRoZSBhcnRpY2xlIHJlZ2FyZGluZyB0aGUga2V5IHBvaW50cyBhbmQgdGFrZS1hd2F5IG1lc3NhZ2VzIGZyb20gdGhlIGFydGljbGUuClRoYXQgd2F5LCB3aGVuIHlvdSBnbyBiYWNrIGFuZCByZXZpZXcgaXQsIHRoZSBrZXkgaWRlYXMgd2lsbCByZWZyZXNoIHlvdXIgbWVtb3J5IGFuZCB3aWxsIGhlbHAgeW91IG1ha2UgdGhlIHJlbGV2YW50IGNvbm5lY3Rpb25zIHRvIHRoZSByZXN0IG9mIHlvdXIgbm90ZXMgb24gdGhlIGFydGljbGUgYW5kIHRvIHRoZSBwb2ludHMgZGlzY3Vzc2VkIGluIGxlY3R1cmUuCjEuIEFmdGVyIGRvaW5nIHRoZSBbYXNzaWduZWQgcmVhZGluZ3NdKCNhcnRpY2xlcykgYW5kIGJlZm9yZSBjbGFzcyBwZXJpb2QsIHJldmlldyB5b3VyIG5vdGVzIGFuZCB0cnkgdG8gZGV0ZXJtaW5lIHdoYXQgYXJlIHRoZSBrZXkgbWVzc2FnZXMgaW50ZW5kZWQgdG8gY29udmV5ZWQgYnkgdGhlIGNvbGxlY3Rpb24gb2YgcmVhZGluZ3MuClRoZSB3aWxsIHNldCB5b3UgdXAgdG8gYmUgaW4gdGhlIGJlc3QgcG9zaXRpb24gdG8gYWNxdWlyZSB0aGUgbWF0ZXJpYWwgY292ZXJlZCBpbiBsZWN0dXJlLgoxLiBUYWtlIGdvb2Qgbm90ZXMgaW4gY2xhc3MuCjEuIElmIHNvbWV0aGluZyBpcyB1bmNsZWFyIGFib3V0IHRoZSByZWFkaW5nIG9yIGFib3V0IGEgcG9pbnQgZGlzY3Vzc2VkIGluIGxlY3R1cmUsIGZlZWwgZnJlZSB0byBjb25zdWx0IHRoZSBbY29tcGFuaW9uIGJvb2tdKCN0ZXh0Ym9vayksIHRvIHJldmlldyB0aGUgW2xlY3R1cmUgcmVjb3JkaW5nXSgjcmVjb3JkaW5ncyksIG9yIHRvIGFzayBxdWVzdGlvbnMgZHVyaW5nIG9yIGFmdGVyIGNsYXNzLCBvciBpbiBvZmZpY2UgaG91cnMuCkRvbid0IHN0cnVnZ2xlIGluIHNpbGVuY2UhCjEuIEFzIHlvdSBwcmVwYXJlIGZvciB0aGUgZXhhbSwgcmV2aWV3IHRoZSBtYXRlcmlhbCBjb3ZlcmVkIGJ5IGVhY2ggYXJ0aWNsZSBhbmQgbGVjdHVyZS4KSWYgdGhlcmUgaXMgYW4gZXhhbSByZXZpZXcgb3IgZXhhbXBsZSBzdHVkeSBxdWVzdGlvbnMsIG1ha2Ugc3VyZSB0byByZXZpZXcgdGhvc2UgY2xvc2VseS4KVGhlIGV4YW0gcmV2aWV3IHByZXNlbnRzIHNvbWUgb2YgdGhlIGtleSB0YWtlLWF3YXkgbWVzc2FnZXMgZnJvbSBlYWNoIGxlY3R1cmUgYW5kIHRodXMgcmVwcmVzZW50cyBwcmltZSBtYXRlcmlhbCBmb3IgZXhhbSBxdWVzdGlvbnMuClRoZSBleGFtcGxlIHN0dWR5IHF1ZXN0aW9ucyBhcmUgTk9UIGNvbXByZWhlbnNpdmUgYW5kIGFyZSBOT1QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgcXVlc3Rpb25zIHRoYXQgd2lsbCBiZSBhc2tlZCBvbiB0aGUgZXhhbSwgYnV0IHRoZXkgc2hvdWxkIGdpdmUgeW91IGEgc2Vuc2Ugb2YgdGhlIHN0eWxlIGluIHdoaWNoIHF1ZXN0aW9ucyBtYXkgYmUgYXNrZWQuCklmIHRoZXJlIGlzIGEgcXVlc3Rpb24geW91IGRvIG5vdCBrbm93IHRoZSBmdWxsIGFuc3dlciB0bywgdGhhdCBpcyBhIGNsdWUgdGhhdCB5b3UgbmVlZCB0byBzdHVkeSB0aGF0IHRvcGljIG1vcmUgY2xvc2VseS4KMS4gSSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIHN0dWR5IHdpdGggeW91ciBwZWVycy4KU3R1ZHlpbmcgd2l0aCB5b3VyIHBlZXJzIGhlbHBzIGdpdmUgeW91IGEgc2Vuc2UgYWJvdXQgdGhlIHRvcGljcyB3aGVyZSB5b3UgZmVlbCBzdHJvbmdlciBhbmQgdGhlIHRvcGljcyB3aGVyZSB5b3UgZmVlbCB3ZWFrZXIgKGFuZCBuZWVkIHRvIHN0dWR5IG1vcmUpLgpJdCBoZWxwcyBib3RoIHBlZXJzIGluIHRoZSBleGNoYW5nZSB3aGVuIG9uZSBwZWVyIGV4cGxhaW5zIGEgdG9waWMgdG8gYW5vdGhlci4KSW4gYWRkaXRpb24gdG8gaGVscGluZyB0aGUgbGlzdGVuaW5nIHN0dWRlbnQgbGVhcm4sIHBlZXIgaW5zdHJ1Y3Rpb24gYWxzbyBoZWxwcyB0aGUgZXhwbGFpbmluZyBzdHVkZW50IHZpYSBjb25zb2xpZGF0aW9uIG9mIHRoZSBzdHVkZW50J3Mga25vd2xlZGdlLgpUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiAia25vd2luZyBzb21ldGhpbmciIGFuZCAia25vd2luZyBpdCAqd2VsbCouIgpFeHBsYWluaW5nIGEgdG9waWMgdG8gc29tZW9uZSBlbHNlIGhlbHBzIHlvdSBmaWd1cmUgb3V0IHdoZXJlIHlvdXIga25vd2xlZGdlIGdhcHMgYXJlIGFuZCBjYW4gaGVscCB5b3UgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZSB0b3BpYyAqd2VsbCouCkFkZGl0aW9uYWxseSwgc3R1ZHlpbmcgYnkgZXhwbGFpbmluZyB0b3BpY3MgdG8gb3RoZXJzIGFsaWducyBtb3JlIGNsb3NlbHkgd2l0aCB0aGUgZXhhbSBmb3JtYXQgKHNob3J0IGFuc3dlci9lc3NheSksIHdoaWNoIGRlbWFuZHMgcmVjYWxsIHJhdGhlciB0aGFuIG1lcmUgcmVjb2duaXRpb27igJRyZWNvZ25pdGlvbiBhbG9uZSBiZWluZyB0eXBpY2FsbHkgYWRlcXVhdGUgZm9yIG11bHRpcGxlLWNob2ljZSBleGFtcy4KMS4gQ29tZSB0byBvZmZpY2UgaG91cnMgaWYgeW91IHN0aWxsIGhhdmUgcXVlc3Rpb25zIQoKIyBEcm9wIERlYWRsaW5lIGZvciB0aGlzIENvdXJzZSB7I2Ryb3BEZWFkbGluZX0KCllvdSBtYXkgZHJvcCBhbiBpbmRpdmlkdWFsIGNvdXJzZSBiZWZvcmUgdGhlIGRyb3AgZGVhZGxpbmU7IGFmdGVyIHRoaXMgZGVhZGxpbmUgeW91IHdpbGwgbmVlZCBjb2xsZWdpYXRlIGFwcHJvdmFsLgpZb3UgY2FuIGxvb2sgdXAgdGhlIGRyb3AgZGVhZGxpbmUgZm9yIHRoaXMgY291cnNlIFtoZXJlXShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvY291cnNlLWRlYWRsaW5lcykuCldoZW4geW91IGRyb3AgYSBjb3Vyc2UsIGEgIlciIHdpbGwgYXBwZWFyIG9uIHlvdXIgdHJhbnNjcmlwdC4KVGhlIG1hcmsgb2YgIlciIGlzIGEgbmV1dHJhbCBtYXJrIHRoYXQgZG9lcyBub3QgYWZmZWN0IHlvdXIgR1BBLgpUbyBkaXNjdXNzIGhvdyBkcm9wcGluZyAob3Igc3RheWluZyBpbikgYSBjb3Vyc2UgbWlnaHQgYWZmZWN0IHlvdXIgYWNhZGVtaWMgZ29hbHMsIHBsZWFzZSBjb250YWN0IHlvdXIgQWNhZGVtaWMgQWR2aXNvci4KRGlyZWN0aW9ucyBmb3IgYWRkaW5nIG9yIGRyb3BwaW5nIGEgY291cnNlIGFuZCBvdGhlciByZWdpc3RyYXRpb24gY2hhbmdlcyBjYW4gYmUgZm91bmQgb24gdGhlIFtSZWdpc3RyYXIncyB3ZWJzaXRlXShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvY2hhbmdlLXJlZ2lzdHJhdGlvbi1teXVpKS4KU3R1ZGVudHMgc2hvdWxkIGFkaGVyZSB0byB0aGUgW2FjYWRlbWljIGRlYWRsaW5lc10oaHR0cHM6Ly9ncmFkLnVpb3dhLmVkdS9hY2FkZW1pY3MvZGVhZGxpbmVzKSBhbmQgcG9saWNpZXMgc2V0IGJ5IHRoZSBHcmFkdWF0ZSBDb2xsZWdlLgoKIyBGZWVkYmFjayBhYm91dCB0aGUgQ291cnNlIHsjZmVlZGJhY2t9CgpJIHdlbGNvbWUgZmVlZGJhY2sgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgY2xhc3MuCklmIHlvdSBoYXZlIGNvbW1lbnRzIG9uIHRoZSBjbGFzcyBvciBteSB0ZWFjaGluZywgcGxlYXNlIGZlZWwgZnJlZSB0byBtZWV0IHdpdGggbWUgZHVyaW5nIG9mZmljZSBob3Vycy4KCiMjIFN0dWRlbnQgQ29tcGxhaW50cyB7I2NvbXBsYWludHN9CgpTdHVkZW50cyB3aXRoIGEgY29tcGxhaW50IGFib3V0IGEgZ3JhZGUgb3IgYSByZWxhdGVkIG1hdHRlciBzaG91bGQgZmlyc3QgZGlzY3VzcyB0aGUgc2l0dWF0aW9uIHdpdGggdGhlIGluc3RydWN0b3IsIGFuZCBmaW5hbGx5IHdpdGggdGhlIERFTyAoQ2hhaXIpIG9mIHRoZSBkZXBhcnRtZW50LCBzY2hvb2wsIG9yIHByb2dyYW0gb2ZmZXJpbmcgdGhlIGNvdXJzZS4KU29tZXRpbWVzIHN0dWRlbnRzIHdpbGwgYmUgcmVmZXJyZWQgdG8gdGhlIGRlcGFydG1lbnQgb3IgcHJvZ3JhbSdzIERpcmVjdG9yIG9mIFVuZGVyZ3JhZHVhdGUgU3R1ZGllcyAoRFVTKSBvciBEaXJlY3RvciBvZiBHcmFkdWF0ZSBTdHVkaWVzIChER1MpLgpTdHVkZW50cyBzaG91bGQgY29udGFjdCB0aGUgW0NMQVMgR3JhZHVhdGUgQWZmYWlycyBNYW5hZ2VyXShtYWlsdG86RXJpa2EtY2hyaXN0aWFuc2VuQHVpb3dhLmVkdSkgd2hlbiBhZGRpdGlvbmFsIHN1cHBvcnQgaXMgbmVlZGVkLgoKIyBDb21tdW5pY2F0aW9uOiBVSSBFbWFpbCB7I2VtYWlsfQoKU3R1ZGVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBhbGwgb2ZmaWNpYWwgY29ycmVzcG9uZGVuY2VzIHNlbnQgdG8gdGhlaXIgVUkgZW1haWwgYWRkcmVzcyAodWlvd2EuZWR1KSBhbmQgbXVzdCB1c2UgdGhpcyBhZGRyZXNzIGZvciBhbnkgY29tbXVuaWNhdGlvbiB3aXRoIGluc3RydWN0b3JzIG9yIHN0YWZmIGluIHRoZSBVSSBjb21tdW5pdHkuCkZvciB0aGUgcHJpdmFjeSBhbmQgdGhlIHByb3RlY3Rpb24gb2Ygc3R1ZGVudCByZWNvcmRzLCBVSSBmYWN1bHR5IGFuZCBzdGFmZiBjYW4gb25seSBjb3JyZXNwb25kIHdpdGggVUkgZW1haWwgYWRkcmVzc2VzLgoKIyMgT3RoZXIgRXhwZWN0YXRpb25zIG9mIFN0dWRlbnQgUGVyZm9ybWFuY2UgeyNvdGhlckV4cGVjdGF0aW9uc30KClN0dWRlbnRzIGhhdmUgdGhlIHJpZ2h0IHRvIGEgZGlzdHJhY3Rpb24tZnJlZSBsZWFybmluZyBlbnZpcm9ubWVudC4KWW91IGhhdmUgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIGhlbHAgY3JlYXRlIHN1Y2ggYSBjbGFzc3Jvb20gZW52aXJvbm1lbnQuClBsZWFzZSB0cmVhdCBvdGhlciBzdHVkZW50cyBpbiB0aGUgY2xhc3MgYW5kIHRoZSBpbnN0cnVjdG9yIHdpdGggcmVzcGVjdC4KU3R1ZGVudHMgYXJlIGV4cGVjdGVkIHRvIGhlbHAgZWFjaCBvdGhlciBsZWFybiBhbmQgdG8gY29udHJpYnV0ZSBvdmVyYWxsIHRvIHRoZSBsZWFybmluZyBlbnZpcm9ubWVudCBvZiB0aGUgY291cnNlLgpBcnJpdmluZyBwcmVwYXJlZCBmb3IgY2xhc3MgaXMgcGFydCBvZiB0aGlzIGV4cGVjdGF0aW9uLgoKIyBVbml2ZXJzaXR5IFBvbGljaWVzIHsjVUlvd2FQb2xpY2llc30KCltVbml2ZXJzaXR5IFBvbGljaWVzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKQoKW0FjY29tbW9kYXRpb25zIGZvciBTdHVkZW50cyB3aXRoIERpc2FiaWxpdGllc10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS9zdHVkZW50LWNvdXJzZS1wb2xpY2llcylcClRoZSBVbml2ZXJzaXR5IGlzIGNvbW1pdHRlZCB0byBwcm92aWRpbmcgYW4gZWR1Y2F0aW9uYWwgZXhwZXJpZW5jZSB0aGF0IGlzIGFjY2Vzc2libGUgdG8gYWxsIHN0dWRlbnRzLgpJZiBhIHN0dWRlbnQgaGFzIGEgZGlhZ25vc2VkIGRpc2FiaWxpdHkgb3Igb3RoZXIgZGlzYWJsaW5nIGNvbmRpdGlvbiB0aGF0IG1heSBpbXBhY3QgdGhlIHN0dWRlbnQncyBhYmlsaXR5IHRvIGNvbXBsZXRlIHRoZSBjb3Vyc2UgcmVxdWlyZW1lbnRzIGFzIHN0YXRlZCBpbiB0aGUgc3lsbGFidXMsIHRoZSBzdHVkZW50IG1heSBzZWVrIGFjY29tbW9kYXRpb25zIHRocm91Z2ggW1N0dWRlbnQgRGlzYWJpbGl0eSBTZXJ2aWNlc10oaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1L3N0dWRlbnRzKSAoU0RTKS4KU0RTIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgW0xldHRlcnMgb2YgQWNjb21tb2RhdGlvbiAoTE9BKV0oaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1L3N0dWRlbnRzL2xldHRlci1hY2NvbW1vZGF0aW9ucy1sb2EpIGF2YWlsYWJsZSB0byB0aGUgc3R1ZGVudC4KPHU+VGhlIHN0dWRlbnQgbXVzdCBwcm92aWRlIGEgTE9BIHRvIHRoZSBpbnN0cnVjdG9yIGFzIGVhcmx5IGluIHRoZSBzZW1lc3RlciBhcyBwb3NzaWJsZSwgYnV0IHJlcXVlc3RzIG5vdCBtYWRlIGF0IGxlYXN0IHR3byB3ZWVrcyBwcmlvciB0byB0aGUgc2NoZWR1bGVkIGFjdGl2aXR5IGZvciB3aGljaCBhbiBhY2NvbW1vZGF0aW9uIGlzIHNvdWdodCBtYXkgbm90IGJlIGFjY29tbW9kYXRlZC48L3U+ClRoZSBMT0Egd2lsbCBzcGVjaWZ5IHdoYXQgcmVhc29uYWJsZSBjb3Vyc2UgYWNjb21tb2RhdGlvbnMgdGhlIHN0dWRlbnQgaXMgZWxpZ2libGUgZm9yIGFuZCB0aG9zZSB0aGUgaW5zdHJ1Y3RvciBzaG91bGQgcHJvdmlkZS4KQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgb24gdGhlIFtTRFMgd2Vic2l0ZV0oaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1L3N0dWRlbnRzL2FwcGx5KS4KCltDbGFzcyBSZWNvcmRpbmdzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKVwKU3R1ZGVudHMgbWF5IGJlIGVucm9sbGVkIGluIGEgY2xhc3Mgd2hlcmUgc29tZSBzZXNzaW9ucyB3aWxsIGJlIHJlY29yZGVkIG9yIGxpdmUtc3RyZWFtZWQuClN1Y2ggcmVjb3JkaW5ncy9zdHJlYW1pbmcgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSB0byBzdHVkZW50cyByZWdpc3RlcmVkIGZvciB0aGUgY2xhc3MuClRoZXNlIHJlY29yZGluZ3MgYXJlIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgdGhlIGluc3RydWN0b3IgYW5kIHRoZXkgbWF5IG5vdCBiZSBzaGFyZWQgb3IgcmVwcm9kdWNlZCB3aXRob3V0IHRoZSBleHBsaWNpdCwgd3JpdHRlbiBjb25zZW50IG9mIHRoZSBpbnN0cnVjdG9yLgpGdXJ0aGVyLCBzdHVkZW50cyBtYXkgbm90IHNoYXJlIHRoZXNlIHNlc3Npb25zIHdpdGggdGhvc2Ugbm90IGluIHRoZSBjbGFzcyBvciB1cGxvYWQgdGhlbSB0byBhbnkgb3RoZXIgb25saW5lIGVudmlyb25tZW50LgpEb2luZyBzbyB3b3VsZCBiZSBhIGJyZWFjaCBvZiB0aGUgQ29kZSBvZiBTdHVkZW50IENvbmR1Y3QsIGFuZCwgaW4gc29tZSBjYXNlcywgYSB2aW9sYXRpb24gb2Ygc3RhdGUgYW5kIGZlZGVyYWwgbGF3LCBpbmNsdWRpbmcgdGhlIEZlZGVyYWwgRWR1Y2F0aW9uIFJpZ2h0cyBhbmQgUHJpdmFjeSBBY3QgKEZFUlBBKS4KClRoZSB1bmF1dGhvcml6ZWQgdmlkZW8gb3IgYXVkaW8gcmVjb3JkaW5nIG9mIGFjYWRlbWljIGFjdGl2aXRpZXMgKGUuZy4sIGxlY3R1cmVzLCBjb3Vyc2UgZGlzY3Vzc2lvbnMsIG9mZmljZSBob3VycywgZXRjLikgYnkgYSBzdHVkZW50IGlzIHByb2hpYml0ZWQuClN0dWRlbnRzIHdpdGggYSByZWFzb25hYmxlIGFjY29tbW9kYXRpb24gZm9yIHJlY29yZGluZyBhcHByb3ZlZCBieSBTdHVkZW50IERpc2FiaWxpdHkgU2VydmljZXMgc2hvdWxkIG5vdGlmeSBlYWNoIGluc3RydWN0b3IgYW5kIHByb3ZpZGUgdGhlIExldHRlciBvZiBBY2NvbW1vZGF0aW9uIHByaW9yIHRvIHVzaW5nIHRoZSBhY2NvbW1vZGF0aW9uLgpBIHN0dWRlbnQgbWF5IHJlY29yZCBjbGFzc3Jvb20gYWN0aXZpdGllcyB3aXRoIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHRoZSBpbnN0cnVjdG9yIGFuZCBub3RpY2UgdG8gb3RoZXIgc3R1ZGVudHMgaW4gdGhlIGNsYXNzIHRoYXQgYXVkaW8gb3IgdmlkZW8gcmVjb3JkaW5nIG1heSBvY2N1ci4KQW55IGFuZCBhbGwgY2xhc3Nyb29tIHJlY29yZGluZyBtdXN0IGJlIGZvciBwZXJzb25hbCBhY2FkZW1pYyB1c2Ugb25seS4KVGhlIGRpc3RyaWJ1dGlvbiwgc2hhcmluZywgc2FsZSwgb3IgcG9zdGluZyBvZiByZWNvcmRpbmdzIG9uIHRoZSBpbnRlcm5ldCAoaW5jbHVkaW5nIHNvY2lhbCBtZWRpYSksIGluIHdob2xlIG9yIGluIHBhcnQsIGlzIHByb2hpYml0ZWQgYW5kIGRvaW5nIHNvIG1heSBiZSBhIHZpb2xhdGlvbiBvZiB0aGUgQ29kZSBvZiBTdHVkZW50IExpZmUgYW5kL29yIHN0YXRlIG9yIGZlZGVyYWwgcHJpdmFjeSwgY29weXJpZ2h0LCBvciBvdGhlciBsYXdzLgoKLSBbRnJlZSBTcGVlY2ggYW5kIEV4cHJlc3Npb25dKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW05vbi1EaXNjcmltaW5hdGlvbl0oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS9zdHVkZW50LWNvdXJzZS1wb2xpY2llcykKLSBbQWNjb21tb2RhdGlvbnMgZm9yIFN0dWRlbnRzIHdpdGggRGlzYWJpbGl0aWVzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKQotIFtBYnNlbmNlcyBmcm9tIENsYXNzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKQotIFtBYnNlbmNlcyBmb3IgUmVsaWdpb3VzIEhvbHkgRGF5c10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS9zdHVkZW50LWNvdXJzZS1wb2xpY2llcykKLSBbQWJzZW5jZXMgZm9yIE1pbGl0YXJ5IFNlcnZpY2UgT2JsaWdhdGlvbnNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0NsYXNzcm9vbSBFeHBlY3RhdGlvbnNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW1NleHVhbCBIYXJhc3NtZW50L01pc2NvbmR1Y3QgYW5kIFN1cHBvcnRpdmUgTWVhc3VyZXNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0NvbmZsaWN0IFJlc29sdXRpb25dKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW01lbnRhbCBIZWFsdGhdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0Jhc2ljIE5lZWRzIGFuZCBTdHVkZW50IFN1cHBvcnRdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0NsYXNzIFJlY29yZGluZ3NdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCgojIFdoZXJlIHRvIEdldCBBY2FkZW1pYyBTdXBwb3J0IGZvciBUaGlzIENvdXJzZSB7I2FjYWRlbWljLXN1cHBvcnR9CgotIERyb3AtaW4gc3R1ZHkgZ3JvdXBzIGFuZCBvbmUtb24tb25lIHR1dG9yaW5nOiBvZmZpY2UgaG91cnMgb2YgdGhlIGluc3RydWN0b3IKLSBGb3JtYWwgdHV0b3Jpbmc6IFR1dG9yIElvd2E6IGh0dHBzOi8vdHV0b3IudWlvd2EuZWR1Ci0gQWNhZGVtaWMgYWNjb21tb2RhdGlvbnM6IGh0dHBzOi8vc2RzLnN0dWRlbnRsaWZlLnVpb3dhLmVkdQoKIyBNZW50YWwgSGVhbHRoIFJlc291cmNlcyBhbmQgU3R1ZGVudCBTdXBwb3J0IHsjbWVudGFsLWhlYWx0aH0KClN0dWRlbnRzIGFyZSBlbmNvdXJhZ2VkIHRvIGJlIG1pbmRmdWwgb2YgdGhlaXIgbWVudGFsIGhlYWx0aCBhbmQgc2VlayBoZWxwIGFzIGEgcHJldmVudGl2ZSBtZWFzdXJlIG9yIGlmIGZlZWxpbmcgb3ZlcndoZWxtZWQgYW5kL29yIHN0cnVnZ2xpbmcgdG8gbWVldCBjb3Vyc2UgZXhwZWN0YXRpb25zLgpTdHVkZW50cyBhcmUgZW5jb3VyYWdlZCB0byB0YWxrIHRvIHRoZWlyIGluc3RydWN0b3IgZm9yIGFzc2lzdGFuY2Ugd2l0aCBzcGVjaWZpYyBjbGFzcy1yZWxhdGVkIGNvbmNlcm5zLgpGb3IgYWRkaXRpb25hbCBzdXBwb3J0IGFuZCBjb3Vuc2VsaW5nLCBzdHVkZW50cyBhcmUgZW5jb3VyYWdlZCB0byBjb250YWN0IFVuaXZlcnNpdHkgQ291bnNlbGluZyBTZXJ2aWNlIChVQ1MpLgpJbmZvcm1hdGlvbiBhYm91dCBVQ1MsIGluY2x1ZGluZyByZXNvdXJjZXMgYW5kIGhvdyB0byBzY2hlZHVsZSBhbiBhcHBvaW50bWVudCwgY2FuIGJlIGZvdW5kIGF0IFtjb3Vuc2VsaW5nLnVpb3dhLmVkdV0oaHR0cDovL2NvdW5zZWxpbmcudWlvd2EuZWR1KS4KRmluZCBvdXQgbW9yZSBhYm91dCBVSSBtZW50YWwgaGVhbHRoIHNlcnZpY2VzIGF0OiBbbWVudGFsaGVhbHRoLnVpb3dhLmVkdV0oaHR0cDovL21lbnRhbGhlYWx0aC51aW93YS5lZHUpLCBpbmNsdWRpbmcgdGhlIDI0LTcgW1VJIFN1cHBvcnQgYW5kIENyaXNpcyBMaW5lXShodHRwczovL21lbnRhbGhlYWx0aC51aW93YS5lZHUvdWktc3VwcG9ydC1hbmQtY3Jpc2lzLWxpbmUpLgoKQWRkaXRpb25hbGx5LCB0aGUgT2ZmaWNlIG9mIHRoZSBEZWFuIG9mIFN0dWRlbnRzIGNhbiBoZWxwIHN0dWRlbnRzIG5hdmlnYXRlIHBlcnNvbmFsIGNyaXNpcyBzaXR1YXRpb25zLgpUaGV5IGNhbiBwcm92aWRlIG9uZS1vbi1vbmUgc3VwcG9ydCwgaGVscCB3aXRoIGlkZW50aWZ5aW5nIG9wdGlvbnMsIGFuZCBhY2Nlc3MgdG8gW2Jhc2ljIG5lZWRzIHJlc291cmNlcyAoc3VjaCBhcyBmb29kLCByZW50LCBjaGlsZGNhcmUsIGV0Yy4pXShodHRwOi8vYmFzaWNuZWVkcy51aW93YS5lZHUpLgpTdHVkZW50IENhcmUgYW5kIEFzc2lzdGFuY2U6IDEzMiBJTVUsIFtkb3MtYXNzaXN0YW5jZUB1aW93YS5lZHVdKG1haWx0bzpkb3MtYXNzaXN0YW5jZUB1aW93YS5lZHUpLCBvciAzMTktMzM1LTExNjIgYW5kIG1vcmUgaW5mbzogW2Rvcy51aW93YS5lZHUvYXNzaXN0YW5jZV0oaHR0cHM6Ly9kb3MudWlvd2EuZWR1L2Fzc2lzdGFuY2UpCgpJZiB5b3UgZmVlbCB0aGF0IHlvdSBvciBzb21lb25lIHlvdSBrbm93IG1heSBiZSBzdHJ1Z2dsaW5nIHdpdGggYW4gYWNhZGVtaWMsIGVtb3Rpb25hbCwgb3IgcHN5Y2hvbG9naWNhbCBwcm9ibGVtLCB0aGUgZm9sbG93aW5nIG9yZ2FuaXphdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYXNzaXN0YW5jZToKCnwgU2VydmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb250YWN0IEluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFVuaXZlcnNpdHkgb2YgSW93YSBBY2FkZW1pYyBBZHZpc2luZyBDZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzUzLTU3MDAsIGh0dHBzOi8vYWR2aXNpbmdjZW50ZXIudWlvd2EuZWR1ICAgICAgICAgICAgICAgICAgICAgICB8CnwgVW5pdmVyc2l0eSBDb3Vuc2VsaW5nIFNlcnZpY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMzUtNzI5NCwgaHR0cHM6Ly93d3cudWlvd2EuZWR1L3VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBTdHVkZW50IEhlYWx0aCBTZXJ2aWNlIC0gTWVudGFsIEhlYWx0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzNS04Mzk0LCBodHRwczovL3N0dWRlbnRoZWFsdGgudWlvd2EuZWR1L3NlcnZpY2VzL3BzeWNoaWF0cnkgICAgfAp8IFVuaXZlcnNpdHkgb2YgSW93YSBIb3NwaXRhbHMgYW5kIENsaW5pY3MgQWR1bHQgUHN5Y2hpYXRyeSBTZXJ2aWNlcyBDbGluaWMgIHwgMzUzLTYzMTQsIGh0dHBzOi8vd3d3LnVpaGVhbHRoY2FyZS5vcmcvUHN5Y2hpYXRyeSAgICAgICAgICAgICAgICB8CnwgU2Vhc2hvcmUgQ2xpbmljIChpbiB0aGUgVUkgRGVwYXJ0bWVudCBvZiBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcykgfCAzMzUtMjQ2NywgaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9yZXNvdXJjZXMvc2Vhc2hvcmUtY2xpbmljIHwKfCBXb21lbidzIFJlc291cmNlIGFuZCBBY3Rpb24gQ2VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzNS0xNDg2LCBodHRwczovL3dyYWMudWlvd2EuZWR1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFJhcGUgVmljdGltIEFkdm9jYWN5IFByb2dyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzE5LTMzNS02MDAwIG9yIDgwMC0yMjgtMTYyNSwgaHR0cHM6Ly93d3cudWlvd2EuZWR1L35ydmFwICAgICAgICB8CnwgT2ZmaWNlIG9mIFNleHVhbCBNaXNjb25kdWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMTktMzM1LTYyMDAsIGh0dHBzOi8vb3NtcmMudWlvd2EuZWR1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBDb21tVW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDg1NS0zMjUtNDI5NiwgaHR0cHM6Ly9idWlsdGJ5Y29tbXVuaXR5Lm9yZy9jcmlzaXMgICAgICAgICAgICAgICAgfAp8IENvbW11bml0eSAmIEZhbWlseSBSZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzUxLTQzNTcsIGh0dHBzOi8vd3d3LmNmcmhlbHBzLm9yZy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cgo8dT5JZiB5b3Ugb3Igc29tZW9uZSB5b3Uga25vdyBpcyBjb250ZW1wbGF0aW5nIHN1aWNpZGU8L3U+LCBlaXRoZXIgY2FsbCBvciB0ZXh0IHRoZSBTdWljaWRlIGFuZCBDcmlzaXMgTGlmZWxpbmUgYXQgOTg4LCBvciBjYWxsIDkxMS4KCiMgRGlzY2xhaW1lciB7I2Rpc2NsYWltZXJ9CgpUaGlzIHN5bGxhYnVzIGlzIHN1YmplY3QgdG8gY2hhbmdlLgpBbnkgY2hhbmdlcyB3aWxsIGJlIGRpc2N1c3NlZCBpbiBjbGFzcywgdmlhIGVtYWlsLCBhbmQvb3Igb24gSUNPTi4K