Please read the whole document of lab expectations1 carefully. If you have questions or concerns, please talk with me about them; the document, like my research style, is a work in progress. I hope this document conveys the care and thoughtfulness I bring to the work we do together. I review this document periodically to make sure that my expectations and obligations are clear and that nothing important is forgotten.

1 The broad goals of my research program

As part of my job as a professor, I am expected to write grants and initiate research that will make tangible contributions to science, the academic community, and to society. You will be helping me carry out—and improve—this research. Along the way, the goal is that you will develop an independent research program. It is imperative that we implement strong scientific methods, and conduct ourselves in an ethical way. Dissemination of the knowledge we gain is critical to the advancement of our field. Thus, a primary goal of our work is publishing our findings in scientific journals.

2 The broad goals of mentoring

The goals of mentoring in this lab are for each trainee to receive theoretical and technical training, to work productively on interesting research projects, and to best prepare themselves for their future career. Thus, a major emphasis of your work will be data analysis, writing, and publishing papers in strong journals. Here I list some expectations to help you understand how the lab operates and how we can achieve these goals together.

3 What trainees can expect of me

Here are what trainees can expect of me:

  1. I will work tirelessly for the good of the lab group; the success of every member of our group is my top priority, no matter their personal strengths and weaknesses, or career goals.
  2. I will set high standards for the lab group, including you, others, and myself.
  3. I will provide you guidance and resources to conduct research projects we are both interested in.
  4. I will help you navigate your graduate program of study.
  5. I will lead by example and facilitate your training in complementary skills needed to be a successful scientist, such as oral and written communication skills, grant writing, lab management, mentoring, and scientific professionalism.
  6. I will provide you guidance and resources for your career development.
  7. I will reply promptly to the materials you send me (e.g., emails, drafts, and slides).
  8. I will respect your time and work, and give you credit appropriately.
  9. I will provide advice on other issues, if you choose to engage me.
  10. I will be your advocate.

4 What I expect of trainees

Here is what I expect of trainees:

  1. Maintain good progress on research and training-related activities
  2. Work in lab during the workday (when you are not in class, teaching, or doing clinical work)
  3. Conduct all research and training-related activities responsibly
  4. Respect other lab members

I am ambitious and have high standards, and I expect the same from you. Below are more detailed descriptions of the expectations:

4.1 Research projects and training

Take advantage of your opportunity to work at a world-class university by developing and refining stellar scientific skills. I expect that you will learn how to plan, design, and conduct high-quality scientific research.

I expect all trainees to maintain good progress on their projects. This includes: keeping updated on the literature and research methods, actively thinking about the best ways to conduct your research projects and applying them, regularly discussing your research progress with me, following the plans based on our discussions, and presenting (conferences, presentations, and/or journal articles) the findings at a satisfactory level. Writing is the single most important ability to develop during graduate school. I expect you to write frequently, and I encourage you to write daily. I encourage students to read Paul Silva’s “How to Write a Lot (archived at https://perma.cc/C6XV-84UR),” and I am happy to lend the book to you. I encourage you to use EndNote, Zotero, or another reference manager to manage your references and write the References section of papers. Reference management software will save you lots of time. Additionally, please follow the lab’s writing guidelines.

My expectation is that you will be engaged in research activities beyond those required by the program. Have multiple research projects to work on. Having multiple ongoing projects provides important diversification—if a given project is not working out as expected, you have other projects you can turn to. But focus and finish. The “currency” in science is published papers—they drive a lot of what we do. Because our lab is supported by taxpayer dollars, we have an obligation to complete and disseminate our findings. I expect you to lead first-authored projects (in addition to any collaborative projects) and to publish your work in high-impact journals. It is my policy that students are first-author on all work for which they lead the data analysis and writing. I will push you to publish your research as you move through your training program, not only at the end. I expect trainees to be lead author on at least two journal paper submissions, preferably three or four (or more!). Productivity in terms of publishing high-quality papers and securing funding is crucial to be competitive for many jobs.

I expect you to apply for external funding—examples include the National Science Foundation Graduate Research Fellowship Program (NSF-GRFP) and the National Institutes of Health National Research Service Award (NIH NRSA). I encourage students to submit a NSF-GRFP in their first semester. I encourage students to submit a NIH NRSA in their second or third year. Getting a first-authored publication in your first or second year is important for these (and other) fellowships and for awards.

For many jobs, presentation skills are also highly important, including skills in presenting research to broad audiences of scientists outside of your area. For academic positions, while papers and grants “get your foot in the door” and help you get an interview, the “job talk” (typically to the whole Department) is the single most important criterion during a job interview—because that is the one thing that all faculty see. Thus, I expect you to present your research frequently and in multiple outlets. Challenge yourself by presenting your work at meetings and seminars as early as you can. I also expect you to go to Departmental colloquia series by speakers who are outside of your area.

We will have meetings to discuss the research project(s) you find interesting that also advance the lab’s interests. I always welcome new ideas and project proposals, so please come to me if you want to discuss new projects. A piece of advice that was given to me as a graduate student that I pass onto you is to find a question or problem that excites you and “date” it. You will know that you have found an idea that truly excites you when you find yourself thinking about it while brushing your teeth, going for walks, etc. Much of the important and exciting work in science happens at the ideas stage.

4.2 Data and research materials

Confidentiality of data is paramount. All hard-copy physical research data must remain in the lab. All electronic data should be accessed from the lab, on university computers, or secure private computers. Electronic data should not be accessed on public computers. Identifiable electronic data should be stored only on the lab’s RDSS share and should not be saved onto your computer. When working from private spaces, the university VPN can be accessed to ensure a secure internet connection.

You are expected to maintain detailed, organized, and accurate laboratory records in a lab notebook. Be aware that all tangible research data and related research materials are my property as the lab director. When you leave the lab, I encourage you to retain access to the lab’s research data via VPN to the lab drive (RDSS share). One full set of all data must stay in the lab, with appropriate and accessible documentation. Regularly back up the files on your computer using Microsoft OneDrive, which is provided by the university. De-identified data and analysis scripts associated with projects should be saved in the project repository of the lab’s GitLab page (https://research-git.uiowa.edu/PetersenLab), which is hosted by the university and approved by our IRB.

4.3 Research ethics

You should respect all ethical standards—including compliance with all university, state, and federal regulations in addition to the APA Ethics Code—as they relate to responsible conduct in research, possible conflicts of interest, privacy and human subjects research, laboratory safety, authorship, peer-review guidelines, and data ownership, reporting, and sharing. When ethical dilemmas or uncertainties arise, ask me and others for guidance. Consult, consult, consult!

In this lab, we work hard to do the best science we can. During the process, obstacles and frustrations are inevitable, and sometimes more common than you would imagine. It is my hope that we will work together to tackle these challenges and to build up your resilience. To this end, please keep me updated on your progress—both the good and bad.

Mistakes are inevitable and are part of your training, so do not feel bad about making mistakes—I make mistakes on a daily basis. I strive for the lab to provide a supportive environment to ask questions and admit mistakes. As your mentor, I am also responsible for your research and training. So please do let me know if such things happen and we will work together to recover from them. Usually the earlier you inform me, the less damage there will be. Being frank about your mistakes will be greatly appreciated. However, things like intentionally faking data and intentionally covering mistakes are unacceptable and will lead to severe consequences.

4.4 Time in lab

I expect you to be at work and on campus during the workday: 9ish–5ish or 8ish–4ish. In addition, I expect your availability to span 9–5 for scheduling meetings with me or members of the team—the same hours, generally, that the program attempts to schedule meetings. During the workday, you are expected to work in the lab when you are not in class, teaching, or doing clinical work. This is not about accountability—rather, it is to the benefit of you and the team. Our approach is optimal for the type of projects we carry out: longitudinal projects such as ours are one big enterprise with many moving parts, all of which have to work together smoothly. Each student’s individual project is embedded in that larger umbrella (retaining each student’s uniqueness, ideas, etc.). Thus, the physical interactions for the whole team, in one space, with shared work ethic, are so important. Part of your job is to be in the lab (with your door open) and to talk with other people about your research. We all benefit from having a group of people we can talk with about research questions and problems. We have a collaborative lab environment. Our lab works as a team, and other lab members count on you being there. Likewise, you benefit from having other team members, myself, and Departmental staff available. Working in the lab space helps improve quality control of lab procedures and can lead to exciting collaborative projects. This short blurb on how “Isolation is one of the biggest enemies of graduate students” (archived at https://perma.cc/GK56-7LLW) may give you some insight why facetime in the lab is so important:

“I wonder how an English professor would feel spending a week in a physics lab. Not about the scientific work, but about the frequent, ongoing interaction between students and peers, post-docs and faculty. Scientists see each other in the lab, if not daily, then at least weekly. They have frequent lab meetings, colloquia and interaction with scholars at other universities around joint research. During my graduate training in psychology at McGill University, especially in the research lab at the Montreal Neurological Institute, I spent hours hanging around the post-docs. I learned at least as much from them as I did from my interactions with my professors. The expectation was that I would be at the lab 9 to 5 or more, every day. I saw my adviser every day.” – Gina Hiatt

Of course, there are exceptions; if you are sick, stay home. You do not need my permission to attend medical appointments during lab hours. If you are unable to come into lab due to bad weather, just let me know and you should be available to be reach-able quickly, just as you would be if you were in lab.

Nevertheless, graduate school is not a 40 hour per week job. Graduate students can expect to work an average of 50 hours per week. Outside of the workday, you are welcome to work from the lab, or—as long as you ensure confidentiality of data—from home or from other spaces. That said, the most important thing is for you to get the job done—you are in your career now and are investing in yourself. Graduate research requires full-time dedication and year-round effort.

Discuss policies on work hours, sick leave, and vacation with me directly. It is important to take time off to decompress from time to time. Work-life balance and vacation time are essential for creative thinking and good health, and I encourage you to take regular vacations. You can take three weeks of vacation time each year, and you are not expected to work during university holidays. In addition, I do not expect students to work between 12/15 and the first week of January. Please discuss your vacation plans with me before booking your trip. Submit requests for time off in person, by phone, or via email, not by Slack. Consult with me and notify fellow lab members in advance of any planned absences, with as much advance notice as possible—at least two weeks’ notice or more if feasible. Please plan that if you are away, others will need to take over your responsibilities, so planning for adequate lead time and training may be necessary. Please discuss with me if you plan to take a summer internship or bootcamp.

4.5 Meetings

There are three types of meetings: lab meetings, group meetings, and one-on-one meetings. Lab meetings occur weekly. All lab members are expected to attend. Typical forms of lab meetings are article discussions (led by one lab member), project presentations, talks given by guest speakers, and professional development workshops. You should read these materials in advance. You are expected to contribute with questions and/or comments during lab meetings. The university and our lab use Outlook for scheduling; you are expected to keep your university Outlook account up to date.

One-on-one meetings are 45-min, weekly meetings between each trainee and me. You can also schedule one-off one-on-one meetings with me. When scheduling your one-on-one and other meetings, send all of your available times (between 9am and 5pm), not just your preferred times! You may indicate which of your available times are preferred or less preferred. One-on-one meetings are designed for us to discuss any training and research-related issues in detail and to form plans for the near future, in addition to any challenges. Make sure that you also use this time to communicate new ideas that you have about your work and challenges that you are facing. Remember: I cannot address or advise about issues that you do not bring to my attention. I expect trainees to attend all their one-on-one meetings. I understand that sometimes there is nothing to report, so occasional cancellation is fine. That said, note that even if you have nothing to report, sometimes having the meeting can still be advantageous and it may be worth our time to still check in. Do not cancel meetings with me if you feel that you have not made adequate progress on your research; these might be the most critical times to meet with a mentor.

You are expected to ask questions and take notes during meetings. Be respectful of my time and make any necessary changes (to papers, analysis code, etc.) after the meeting, based on your notes and on your own time—unless I am working on the document directly.

Besides meetings, trainees are welcome to drop by my office anytime to discuss research, training, and administration-related issues. I have an open-door policy: my door is always open (figuratively speaking). I will be happy to meet with you as long as I do not have another obligation. My office and phone number is: [see my University page]. My cell is: [blinded for the internet…just ask].

4.6 Open science

We, as a lab, value and strive to advance the mission of open science to improve the accessibility, reproducibility, and replicability of science. As such, all lab members are expected to conduct research transparently and to promote reproducibility. This includes, but is not limited to, pre- or co-registering studies, sharing analysis scripts and data, using version control (GitLab), submitting preprints when submitting a manuscript to a journal, and providing support for other labs’ attempts to replicate and reproduce our findings. We use GitLab for version control. Our lab’s template for GitLab repositories can be found here: https://research-git.uiowa.edu/PetersenLab/Template. Our lab’s template for projects on the Open Science Framework (OSF) can be found here2: https://osf.io/4w9sv. Follow our lab’s guide for open science.

4.7 Collaborations

All lab members are encouraged to explore collaboration opportunities both within and outside of the lab. I ask trainees to (1) respect your collaborators’ time and resources, and (2) inform me if you are seeking collaborations with or are collaborating with researchers (e.g., finishing your projects in your previous lab) outside of the lab. Trainees are expected to have a firm footing in their research progress in this lab before collaborating with outside researchers. I expect you to discuss order of authorship with me early on when there are potential collaborators.

4.8 Readings and resources

Trainees are expected to read foundational articles relating to the lab and to their research interests. Examples of foundational articles are on the lab’s Google Drive folder of primer articles3. I also expect you to read one of the primer articles by Schwartz (2008) titled, “The Importance of Stupidity in Scientific Research.” It is important to feel comfortable feeling stupid in science; if you (and any of us) do not feel stupid, we are not doing science right! It is also important to read background information and protocols about our projects.

We have a list of lab resources for graduate students on our Lab’s Trello board called “Grad Students”4: https://trello.com/b/WjqbgpW9/grad-students. The Trello board includes items for onboarding, important foundational skills for scientific training, useful software, and relevant journals, organizations, conferences, and listservs. It also includes training materials for various software (e.g., REDCap, GitLab, R). And it includes a list of the times to block off during the semester.

Data analysis guides for the lab are available here: https://devpsylab.github.io/DataAnalysis

4.9 Training

I expect you to take ownership over your educational experiences. Your education is your responsibility—you have the primary responsibility for the successful completion of your degree. I encourage you to follow the recommended timelines for research, coursework, and clinical work (see the Appendix). You should maintain a high level of professionalism, self-motivation, engagement, scientific curiosity, and ethical standards. You should also be knowledgeable of and comply with all policies, deadlines, and requirements of the graduate program, the graduate college, and the university. Further, I expect you to actively cultivate your professional development. UI has outstanding resources in place to support professional development for students, including professional development seminars and workshops on topics such as oral communication, scientific writing, collaborative research, statistical methods, teaching, and mentoring. I expect you to take advantage of these resources. You are also encouraged to talk with other members of the lab, other students, and faculty to learn ways of effectively navigating graduate school.

Avoid clinical clique-ishness and insularity. The most innovative science transcends traditional boundaries. I expect you to spend time and talk science with graduate students and faculty in areas outside of clinical (e.g., BCN, cognition)—both to broaden your perspectives and to incorporate basic science perspectives into your work, while also being a good Departmental citizen. Clinical students at some programs wrongly think they are special and think of their work as superior to basic science. Clinical science is not a research area—clinical science uses basic science (e.g., cognitive, social, developmental, biological science) in rigorous ways to answer clinically relevant questions.

I expect all trainees to comply with their respective training plans (e.g., training plans of your degree program), such as taking required courses, maintaining passing grades, fulfilling teaching assistant duties, clinical training, and organizing committee meetings. You are expected to attend and actively participate in all group meetings and in seminars that are part of your educational program. I expect you to attend conferences, Clinical Rounds, Developmental Discussion, Data Team and lab meetings, DeLTA Center, Friday colloquia series, and other relevant brownbags such as Cognition, Behavioral & Cognitive Neuroscience (BCN), and the Iowa Neuroscience Institute (INI). When we go to conferences, I will introduce you to my professional network and encourage you to build skills in networking.

We will discuss your training and career development plans. All program requirements are in the Department’s Graduate Handbook and/or the Graduate College’s Manual of Rules and Regulations. I include a suggested timeline for your research, clinical training, and coursework below. Please consult with me before selecting your courses, clinical practica, and other time-intensive training experiences.

For some students, there may be relevant training fellowships. For instance, the Behavioral-Biomedical Interface Training Program (BBIP) provides training in bio-medical research.

This is a research-oriented program; you are expected to prioritize research relative to your other obligations. If you are getting all As in classes, you are spending too much time on coursework! Grades in grad school don’t matter (as long as you pass your classes; archived at https://perma.cc/KDU2-79JZ), and the sooner you figure that out, the better off and more productive you will be. Instead of focusing your learning on coursework, learn by doing. Take what you need from classes to advance your research program.

Please refer to the Clinic Manual for guidelines regarding face-to-face hours (on the clinic drive5: \\iowa.uiowa.edu\shared\CLAS\Departmental\PBS\Clinic\Clinic Manual\). For clinical students, it is important to regularly track your clinical experiences and hours to ensure that you are meeting appropriate milestones in your training. The program has an institutional account for Time2Track. You are expected to use it to track hours and are expected to stay caught up in your tracking. We will discuss your plans for clinical training and practicum opportunities during our regular individual meetings. I will also provide clinical supervision of some of your cases as part of the Seashore Clinic. I am a licensed clinical psychologist, so assessment hours in my research lab count as clinical hours.

4.10 Software

My lab primarily uses R for data management and analysis because it is free, open source, open platform, code-based (which increases share-ability and reproducibility of analyses), and supports advanced statistics and state-of-the-art graphics from packages designed by statistical experts all over the world, and to which anyone (including you) can contribute. We also use MATLAB for processing of event-related potential data and Mplus for structural equation modeling. You are encouraged to learn R and any other specialized software that will allow you to answer the research questions you are pursuing. If there’s another tool or software package that can do something easier, better, more efficiently, or with greater reproducibility than what we are using, feel free to use it—though I may not be able to provide formal guidance. For instance, Python is a free programming language that is emerging as a nice complement to R for statistical programming. No matter which software you use, you should be able to understand and explain what the analysis is doing and be able to interpret and explain the output.

4.11 Best practices

I expect you to follow open science practices (described above). I expect you to comment your code so that others can understand it (and so you can understand it when you go back to it 5+ years later). I expect you to use version control (git with GitLab) with all projects and to save your lab projects in a repo on the lab’s GitLab page. Commit and push your work to the GitLab repo often. Using version control provides many benefits: (a) it provides backups of all files in the cloud, (b) it allows you to access the files in the cloud from any computer with access to the internet, even if you are away from your local computer, (c) it provides history of all (committed) changes made to all files. If you make a mistake in your code, you can easily revert to a prior version because you took snapshots (commits) of your files! (d) It allows you to write cleaner code because you do not need to keep all the old, “commented out” lines of code, (e) it helps with project organization; you no longer have to keep files or folders named “project_old” (or “project_2”, “project_final” (archived at https://perma.cc/3Q5D-XKTJ), or whatever), (f) it keeps all files for the project self-contained, which helps increase reproducibility, and (g) it allows easier collaboration with others on the project.

4.12 Other responsibilities

I expect you to be a team player, to contribute to the team, and to take a leadership role in the lab. Strive to be the very best lab citizen and citizen of the Department and University. Regardless of your source of funding (e.g., teaching assistantship, research assistantship, fellowship/grant), you can expect lab-related assignments that are for the betterment of the team. For instance, I expect you to supervise a coding task. I expect you to learn the lab procedures and protocols. You should be able to train research assistants or lab staff on various procedures. I expect you to work to ensure quality control of lab procedures so that we are collecting and processing high-quality data in an efficient way. I expect you to help other team members, including undergraduate research assistants with independent research projects, Honors projects and theses, job or graduate applications/interviews, etc. Doing so will help you build important skills in mentoring.

Regardless of your source of funding, you are expected to spend most of your time doing lab-related research. If you are funded on a research assistantship from the lab, I expect you will spend at least 20 hours (for a full-time assistantship; at least 10 hours for a half-time assistantship) doing lab-related research from the relevant grant(s) and lab-assigned work that is separate from coursework, clinical work, work toward program requirements (e.g., Comps exams), other research-related work, and other endeavors. This is an ethical obligation given our federal sources of funding. If you are unable to commit to a full research load (and therefore would not be able to meet the expectations of a research assistantship), you should tell me before assistantships are assigned, so you can be given a teaching assistantship or another source of funding. Nevertheless, even with a teaching assistantship, you are expected to spend most of your time doing lab-related research. You should not spend more than 10 hours per week doing teaching-related work for a half-time teaching assistantship, and not more than 20 hours for a full-time teaching assistantship (and generally much less than that).

You should talk with me and get my approval before doing or adding any external practica. Per lab and program expectations, you should not spend more than 1.5 full days (i.e., 12 hours) doing clinic-related work per week. Do not focus too much on clinical hours; Ph.D. students from non-clinical science programs and Psy.D. students will have way more clinical hours than you—you are not competing with them for the same types of sites. You will be most competitive at clinical science internship sites (archived at https://perma.cc/2VRK-JRMQ), which care much more about the quality of training than the quantity of training. And UI has top-notch clinical training. Internship sites also care heavily about scientific productivity including publications (Lund et al., 2016), and this is even more true for clinical science internship sites. I had four first-authored publications (nine total) and an NRSA when I applied for internship and received 13 interview invitations out of 15 sites. I am happy to share my preparation, application, and interview materials etc. for internships, jobs, etc. and to work with you to make them as strong as possible.

Please do not hide in your office; get out and meet people at group and departmental events. If a colloquium is given in an area in which you have a research interest, sign up to meet with the speaker. Go up to speakers after talks, introduce yourself, and express interest in their work by asking questions. Networking skills are important and can often lead to job opportunities.

4.13 Career development

I strongly believe that the lab grows better with each trainee achieving their career goals. I respect and support each trainee’s career choice and understand that things can change over time. At the same time, keep in mind that this is a research-oriented training program and is best aligned with careers in which research will be a key component. For prospective graduate students, if you have goals of being a clinician, I would dissuade you from joining our program and this lab; you would not be happy here.

We will discuss your career development plans and how I can best support them. During each Fall semester, I expect you to complete an Individual Development Plan (https://myidp.sciencecareers.org; archived at https://perma.cc/MT27-CPP2), and to review and discuss the results with me. I expect you to inform me if there is any change in your career plans so that your lab activities can be better aligned to your new goals. In addition to academic careers (e.g., research/teaching/clinical work at R1 university, academic medical center, or liberal arts college), I support plans for industry and non-academic careers (e.g., data science, consulting, government, NGO; these are just examples—there are many others). You are welcome to get the training you need, provided that you maintain good progress on your degree-related training and research. Seek the experience of faculty, professionals, post-docs, and other students to help you out.

If you want an academic job, I know what it takes to get one (in terms of publications, grants, etc.), so just ask. I am also happy to talk with you about what an R1 academic job is like (e.g., setting up and running a lab, teaching)—I love my job and have a passion for the work we do. I get to be part of an invigorating intellectual environment in which I get to learn every day, get to be around exciting ideas and world-renowned experts conducting cutting-edge research, and have the intellectual freedom to get paid to study whatever I want to study. I cannot imagine anything better. That said, there are not enough faculty positions for all Ph.D. graduates and it is not the best fit for everyone. I will work with you to find the career that is the right fit for you.

4.14 My approach to mentorship

As a clinical-developmental psychologist, I take a developmental perspective to mentorship. Early on in your training, I aim to provide sufficient structure and scaffolding. As you develop proficiency in a skill, I strive to withdraw the scaffolds so that you develop independence and autonomy. The second approach to my mentorship style is an emphasis on learning by doing. I encourage students to learn by applying the skills to projects they are working on in the lab, rather than relying on coursework and other methods. I view my role as fostering your professional confidence and encouraging your critical thinking, skepticism, and creativity.

Do not hesitate to ask questions if I am around; it is often better to ask questions than to make a mistake that could have been easily avoided. I am periodically away, and I expect you to get things done well without me. You are encouraged to be independent; do not be afraid to try to do detective work on your own if I am not around. There is also a benefit to learning by trial and error. We have a helpful, experienced lab, so know that people other than me may be excellent resources.

In order for supervision to be effective, I hope that our relationship will include open communication and two-way feedback. If there are ways I can be a better mentor for you, please let me know. I value openness to learning as a continuous, developmental, life-long process and I will model and promote openness and receptivity to feedback. I expect that trainees will express disagreements and differences in opinion with me. I do not view professional disagreements as personal; the best science arises out of the free and constructive exchange of multiple perspectives and ideas. I expect that trainees will attempt to address conflicts in the mentor–mentee relationship.

I strive to build and to support a diverse team, to treat people equitably, and to be inclusive of people from all backgrounds. If there are things that the lab or I can do to help you or others feel more included, please let me know.

I am committed to mentoring you, even after you leave my lab. I am committed to your education and training while you are in my lab, and to advising and guiding your career development—to the extent you wish—long after you leave. I will provide honest letters of evaluation for you when you request them.

4.15 Communication

Feel free to use Slack for brief communication with me. However, we do not use direct messages in Slack (see the lab manual). All Slack communication should be in team-facing channels so others can benefit from the information and so we can go back and reference it later. For longer communication, please call or stop by my office. I find this much more efficient and pleasant than writing and reading lengthy communication. For sending manuscripts, personal information, and messages that do not need an urgent response, you may email me. Please limit your use of email as much as possible. I hate email (archived at https://perma.cc/T855-U9MQ); we get way too much of it, it is impersonal, it does not communicate tone well (often leading to misinterpretation and sometimes hurt feelings), and it is difficult for me to stay on top of my inbox. I encourage you to stop by my office or to call my office phone instead of relying on email, whenever possible.

When you contact me or send me materials, you can expect me to respond promptly. Likewise, I expect you to respond promptly when I or another lab member contacts you (in most cases, within 48 hours). If you need time to gather information in response to a Slack message or email, please acknowledge receipt of the message and indicate when you will be able to provide the requested information. At times, I may contact you by email or Slack after hours (if that is when it is most convenient, so that I do not forget to). However, you are *not* expected to respond after hours. I will call you if something is urgent.

Be mindful of the constraints on my time. Allow a minimum of one week prior to submission deadlines for me to read and respond to short materials such as conference abstracts and three weeks for me to work on manuscripts, grant proposals, and letters of recommendation. Please do not assume I can read materials within a day or two, especially when I am traveling. Please only send drafts of manuscripts, grant proposals, dissertations, etc. when they are your best possible work (the Henry Kissinger criterion). That means going through multiple revisions, reading it out loud to yourself, etc. Here is an excerpt about Dr. Kissinger (Krausman, 2021):

“Henry Kissinger, a former Secretary of State under President Nixon, understood the importance of continually improving writing skills. Winston Lord was Kissinger’s speech writer and during the late 1960s and early 1970s, Lord had been tasked with writing a speech about three important foreign policy projects: the opening of China to the West, bringing the Vietnam War to a close, and an attempt to improve relations with the Russians. Writing a speech for Kissinger was not an easy job because Kissinger was a speech writer himself and harsh critic.

The story goes that Lord prepared and submitted a first draft of a speech to Kissinger one evening. Kissinger then called Lord the next morning for feedback on the speech and asks “Is this the best you can do?”

Lord replies “Henry, I thought so, but I’ll try again.”

Lord then went back to the drawing board, tweaked, revised, and resubmitted another draft a few days later.

The next day, Kissinger called Lord into his office and again asked “Are you sure this is the best you can do?”

Lord began to question his work and said “Well, I really thought so. I’ll try again.”

Believe it or not, this uncomfortable and rejecting process went on for 8 drafts, each time Kissinger standing firm to his original feedback of “Is this the best you can do?”

Lord returned to Kissinger’s office with the now ninth draft and awaited his response.

Surely enough, Kissinger called Lord in the next day and asks him the same question, “Is this the best you can do?”

Lord, now completely fed up, furiously replied “Henry! I’ve beaten my brains out—this is the ninth draft! I know it’s the best I can do; I can’t possibly improve one more word!!!”

Kissinger then looked at Lord and nonchalantly said “Well, in that case, now I’ll read it.”

4.16 Lab culture

Within a lab environment, occasionally competitive thoughts or emotions may arise. This lab is not a place for competition, but collaboration. We are a group of researchers working toward a common goal, and all members are encouraged to work together collaboratively. A rising tide lifts all boats. Competitive behavior is not conducive to a productive laboratory, and this sort of behavior will strictly not be tolerated. Do not compare yourself to others. You are on your own path. Each mentee needs different things, and I will do my best to get to know you as an individual, and your individual skills, preferences, and goals. Cultivating a common value of humility is important in research, because we are always asking questions to which we inherently do not know the answer. Elitist behavior is not conducive to growth and development, and as such, is not appropriate for the lab environment. The lab culture is of utmost importance to a healthy, functional group, and professional behavior is at the center of building this culture. If you have joined the lab, you have been selected among many qualified applicants for this position. I encourage you to share your thoughts and ideas with the lab. Keeping them to yourself would be a disservice to the team.

4.17 Professionalism

Show up on time, fully prepared for meetings. If you will need to miss a meeting, let the relevant team members know in advance, with as much advance notice as possible. Unexcused absences are not acceptable in a professional environment.

If you have critical thoughts to share with someone, do not send them in Slack or in email; instead, call or talk to the person directly. Be responsive to advice and constructive criticism. The feedback you get from me, your colleagues, your committee members, your course instructors, your clinical supervisors, and your teaching supervisors is intended to improve your work and help you succeed. Do your best not to take it personally. We all have room to grow.

4.18 Interactions with others

I expect all lab members to respect each other. For more information on how you are expected to interact with others, see the relevant section on “Interactions with Others” in the page on Expectations for Everyone in the Lab.

If another member of the lab is not complying with these policies, please first attempt to speak to the person directly. The APA Code of Ethics advises that this is a first step toward resolution. If that is not possible, appropriate, or proves ineffective (i.e., does not change behavior), please speak to me about the problem immediately. Please also speak to me if you think you have an interpersonal issue with me. If, after having talked with me, you feel the issue will not be resolved and you want to speak to someone else to address the issue, follow the chain of command and talk to the Area Coordinator, the Director of Graduate Studies, and/or the Departmental Executive Officer. The chain of command is depicted in the lab organizational chart.

4.19 Performance improvement plan

In the case that your progress is unsatisfactory for an extended period, we need to discuss and implement a plan to improve your performance, which eventually will be helpful for your career plan, too. The performance improvement plan will likely involve closer monitoring of your progress and research activities until a predefined goal is reached (e.g., publishing a paper).

4.20 Accommodations

Sometimes, life events or medical/health-related issues may impact your ability to meet some of the lab expectations. You are encouraged to seek medical/professional help if such issues arise, even if the appointments occur during your regular lab hours. If there are lab-related accommodations that would be helpful to you, please let me know and/or contact the UI Student Disability Services (https://sds.studentlife.uiowa.edu). Any deviations from the lab expectations should be approved by me or should coincide with documentation from UI Human Resources or Student Disability Services outlining alterations. If you have concerns about meeting your responsibilities or expectations, please talk to me.

4.21 Well-being

Last but not least, your well-being is very important. I went through the process of graduate school and understand how stressful things can be from my own experiences. If you feel down for any reason, please talk to me or anyone you feel comfortable talking to. You are also encouraged to seek professional help—it is not a sign of weakness; it is a sign of you taking care of yourself.

Remember that all of us are “new” at various points in our careers. Imposter syndrome is normal; I encourage you to adopt a growth mindset. You are meant to be here! Failure is common in academia. Take a look at the CV of Failures (archived at https://perma.cc/6UFR-ZBV4). Persistence pays off. I have found it helpful to have a “feelgood” email folder (archived at https://perma.cc/C3CB-25LU) that I can refer back to when things are difficult.

Do not forget to laugh and have fun! Graduate school is a challenging job with very high expectations, but it should also be fun. You get to study something that is exciting to you and get paid to do it! To quote Norman Ramsey’s guide for graduate students (archived at https://perma.cc/3WFY-SH3L), “To sustain yourself through difficult times, find research that means a lot to you. Successful researchers find interesting problems and fall in love with them. In operational terms, some Friday nights should be spent having fun out in the world, but if you aren’t also spending some Friday nights having fun with your research, you’re not doing the right research.”

4.22 Expectations for Everyone in Lab

In addition to the expectations described above for graduate students, please also read the expectations for everyone in the lab.

5 Signature

Please download, sign, and email the below document to Dr. Petersen prior to your first day in lab.

6 Appendix

6.1 Approximate Expected Timelines

6.1.1 Research Timeline

Semester Research Task Goal(s)
Year 1: Fall Form Research Advisory Committee (RAC)
Select topic for 1st-year project
Background readings on topic and quantitative methods
Begin writing literature review for 1st-year project
RAC Meeting
Year 1: Spring Complete literature review for 1st year project
Begin methods and data analysis for 1st-year project
RAC Meeting
Year 2: Summer Complete analysis for 1st-year project
Write-up results and discussion section for 1st-year project
Year 2: Fall 1st year project written document due (Monday after Thanksgiving)
RAC Meeting
Year 2: Spring 1st-year project presentation to department
Submit 1st-year project for publication
Begin formulating comprehensive paper topic
RAC Meeting
Form comprehensive exam committee
Year 3: Summer Flesh out comprehensive paper topic
Write comprehensive paper proposal
Year 3: Fall Comprehensive paper proposal meeting
Write comprehensive paper
Year 3: Spring Turn in comprehensive paper draft 1 (second Monday in February)
Receive feedback from committee (3 week turn-around)
Revise and resubmit comprehensive paper (Monday before last week of classes)
Final comprehensive exam committee meeting with oral defense
Year 4: Summer Begin work on dissertation prospectus
Year 4: Fall Form dissertation committee
Continue writing dissertation prospectus
Year 4: Spring Complete dissertation prospectus
Defend dissertation prospectus (by spring break)
Begin dissertation research
Year 5: Summer Dissertation research
Year 5: Fall Dissertation research
Apply for internship
Year 5: Spring Dissertation research
Interview for internship
Defend dissertation
Year 6: Summer [Clinical students: Begin Internship]
Year 6: Fall [Clinical students: Internship]
Year 6: Spring [Clinical students: Internship]
Year 7: Summer Graduate with Ph.D.!

These are guideposts toward completing program requirements within a 5-year timeframe. The year of clinical internship is only for students in the Clinical Science area. As we have discussed, my expectation is that you will be engaged in research activities beyond those required by the program.

6.1.2 Coursework Timeline

Semester Coursework Goal(s)
Year 1: Fall Orientation to Clinical Research (with DCT)
Quantitative Methods Course
Descriptive Psychopathology OR Psychological Therapies
Introductory Practicum
Research
Year 1: Spring Quantitative Course
Principles of Psychological Assessment
Breadth Course (History, Cognitive, Social, Biological, Developmental)
Assessment Practicum
Research
Year 2: Summer Assessment Practicum
Year 2: Fall Descriptive Psychopathology OR Psychological Therapies
Breadth Course
Assessment Practicum
Research
Year 2: Spring Breadth/BBIP Course
Breadth Course
Therapy practicum
Research
Year 3: Summer Therapy Practicum
Year 3: Fall Breadth Course
Research
Therapy practicum
Year 3: Spring Breadth Course
Research
Therapy practicum
Year 4: Summer Therapy Practicum
Year 4: Fall Breadth Course (if needed)
Research
Therapy practicum
Year 4: Spring Breadth Course (if needed)
Research
Therapy practicum
Year 5: Summer Therapy Practicum
Year 5: Fall Dissertation Research
Therapy/External Practicum
Year 5: Spring Dissertation Research
Therapy/External Practicum
Year 6 Internship

Clinical Science Area Course Requirements

  • 3 Clinical Core Courses (Psychopathology, Therapies, Assessment)
  • 2 Quantitative Courses
  • 4 Breadth Courses (Biological, Cognitive, Developmental, and Social Bases of Behavior)
  • History and Systems
  • *Behavioral-Biomedical Interface Training Program (BBIP) required course (if you are part of BBIP)

Note: Breadth courses can be completed with directed readings.

6.1.3 Clinical Work Timeline

Semester Clinical Task Goal(s)
Year 1: Fall Attend Clinical Rounds (Mondays from 12:30–1:20)
Work with advanced graduate students on assessment skills
Interviewing practicum with Clinic Director
Year 1: Spring Attend Clinical Rounds (Mondays from 12:30–1:20)
Work with advanced graduate students on assessment
Begin completing intellectual disability assessments in clinic
Interviewing practicum with Clinic Director
Year 2: Summer Continue intellectual disability assessments, begin SDS assessments
Year 2: Fall Complete SDS and DHS assessments in Seashore Clinic
Attend Clinical Rounds (Mondays from 12:30–1:20)
Weekly 2nd-year seminar with Clinic Director (Motivational Interviewing, Behavioral Activation)
Year 2: Spring Complete assessments in Seashore Clinic
Begin taking therapy cases in Seashore Clinic
Attend Clinical Rounds (Mondays from 12:30–1:20)
Weekly 2nd-year seminar with Clinic Director (Motivational Interviewing, Behavioral Activation)
Year 3: Summer Complete assessments in Seashore Clinic
Work with therapy cases in Seashore Clinic
Year 3: Fall Complete assessments in Seashore Clinic
Work with therapy cases in Seashore Clinic
Attend Clinical Rounds (Mondays from 12:30–1:20)
Weekly 3rd-year seminar (Exposure Therapy and other approaches)
Year 3: Spring Complete assessments in Seashore Clinic
Work with therapy cases in Seashore Clinic
Attend Clinical Rounds (Mondays from 12:30–1:20)
Weekly 3rd-year seminar (Exposure Therapy and other approaches)
Year 4: Summer Complete assessments in Seashore Clinic
Work with therapy cases in Seashore Clinic
Year 4: Fall Seashore Clinic work and/or External Practicum
Attend Clinical Rounds (Mondays from 12:30–1:20)
Year 4: Spring Seashore Clinic work and/or External Practicum
Attend Clinical Rounds (Mondays from 12:30–1:20)
Year 5: Summer Seashore Clinic work and/or External Practicum
Year 5: Fall Seashore Clinic work and/or External Practicum
Attend Clinical Rounds (Mondays from 12:30–1:20)
Apply for internship
Year 5: Spring Interview for Internship
Year 6 APA-Accredited Internship

  1. Many of the lab expectations were cobbled together from a variety of other labs and are not unique to this lab. Likewise, some of the language used in this document was borrowed from other sources.↩︎

  2. Ask me to give you access. It is easiest to share the Google Drive folder of primer articles with your Google account.↩︎

  3. Ask me to give you access. It is easiest to share the Google Drive folder of primer articles with your Google account.↩︎

  4. Ask me to give you access. It is easiest to share the Google Drive folder of primer articles with your Google account.↩︎

  5. You need to be on the VPN to access. You may need to contact the clinic director to get access to the Clinic Drive.↩︎

LS0tCnRpdGxlOiAiTGFiIEV4cGVjdGF0aW9ucyBmb3IgR3JhZHVhdGUgU3R1ZGVudHMiCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIGVycm9yID0gVFJVRSwKICBjb21tZW50ID0gIiIpCmBgYAoKUGxlYXNlIHJlYWQgdGhlIHdob2xlIGRvY3VtZW50IG9mIGxhYiBleHBlY3RhdGlvbnNbXjFdIGNhcmVmdWxseS4KSWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLCBwbGVhc2UgdGFsayB3aXRoIG1lIGFib3V0IHRoZW07IHRoZSBkb2N1bWVudCwgbGlrZSBteSByZXNlYXJjaCBzdHlsZSwgaXMgYSB3b3JrIGluIHByb2dyZXNzLgpJIGhvcGUgdGhpcyBkb2N1bWVudCBjb252ZXlzIHRoZSBjYXJlIGFuZCB0aG91Z2h0ZnVsbmVzcyBJIGJyaW5nIHRvIHRoZSB3b3JrIHdlIGRvIHRvZ2V0aGVyLgpJIHJldmlldyB0aGlzIGRvY3VtZW50IHBlcmlvZGljYWxseSB0byBtYWtlIHN1cmUgdGhhdCBteSBleHBlY3RhdGlvbnMgYW5kIG9ibGlnYXRpb25zIGFyZSBjbGVhciBhbmQgdGhhdCBub3RoaW5nIGltcG9ydGFudCBpcyBmb3Jnb3R0ZW4uCgojIFRoZSBicm9hZCBnb2FscyBvZiBteSByZXNlYXJjaCBwcm9ncmFtIHsjZ29hbHMtbXlSZXNlYXJjaH0KCkFzIHBhcnQgb2YgbXkgam9iIGFzIGEgcHJvZmVzc29yLCBJIGFtIGV4cGVjdGVkIHRvIHdyaXRlIGdyYW50cyBhbmQgaW5pdGlhdGUgcmVzZWFyY2ggdGhhdCB3aWxsIG1ha2UgdGFuZ2libGUgY29udHJpYnV0aW9ucyB0byBzY2llbmNlLCB0aGUgYWNhZGVtaWMgY29tbXVuaXR5LCBhbmQgdG8gc29jaWV0eS4KWW91IHdpbGwgYmUgaGVscGluZyBtZSBjYXJyeSBvdXTigJRhbmQgaW1wcm92ZeKAlHRoaXMgcmVzZWFyY2guCkFsb25nIHRoZSB3YXksIHRoZSBnb2FsIGlzIHRoYXQgeW91IHdpbGwgZGV2ZWxvcCBhbiBpbmRlcGVuZGVudCByZXNlYXJjaCBwcm9ncmFtLgpJdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgaW1wbGVtZW50IHN0cm9uZyBzY2llbnRpZmljIG1ldGhvZHMsIGFuZCBjb25kdWN0IG91cnNlbHZlcyBpbiBhbiBldGhpY2FsIHdheS4KRGlzc2VtaW5hdGlvbiBvZiB0aGUga25vd2xlZGdlIHdlIGdhaW4gaXMgY3JpdGljYWwgdG8gdGhlIGFkdmFuY2VtZW50IG9mIG91ciBmaWVsZC4KVGh1cywgYSBwcmltYXJ5IGdvYWwgb2Ygb3VyIHdvcmsgaXMgcHVibGlzaGluZyBvdXIgZmluZGluZ3MgaW4gc2NpZW50aWZpYyBqb3VybmFscy4KCiMgVGhlIGJyb2FkIGdvYWxzIG9mIG1lbnRvcmluZyB7I2dvYWxzLW1lbnRvcmluZ30KClRoZSBnb2FscyBvZiBtZW50b3JpbmcgaW4gdGhpcyBsYWIgYXJlIGZvciBlYWNoIHRyYWluZWUgKnRvIHJlY2VpdmUgdGhlb3JldGljYWwgYW5kIHRlY2huaWNhbCB0cmFpbmluZywgdG8gd29yayBwcm9kdWN0aXZlbHkgb24gaW50ZXJlc3RpbmcgcmVzZWFyY2ggcHJvamVjdHMsIGFuZCB0byBiZXN0IHByZXBhcmUgdGhlbXNlbHZlcyBmb3IgdGhlaXIgZnV0dXJlIGNhcmVlciouClRodXMsIGEgbWFqb3IgZW1waGFzaXMgb2YgeW91ciB3b3JrIHdpbGwgYmUgZGF0YSBhbmFseXNpcywgd3JpdGluZywgYW5kIHB1Ymxpc2hpbmcgcGFwZXJzIGluIHN0cm9uZyBqb3VybmFscy4KSGVyZSBJIGxpc3Qgc29tZSBleHBlY3RhdGlvbnMgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgdGhlIGxhYiBvcGVyYXRlcyBhbmQgaG93IHdlIGNhbiBhY2hpZXZlIHRoZXNlIGdvYWxzIHRvZ2V0aGVyLgoKIyBXaGF0IHRyYWluZWVzIGNhbiBleHBlY3Qgb2YgbWUgeyNleHBlY3RPZk1lfQoKSGVyZSBhcmUgd2hhdCB0cmFpbmVlcyBjYW4gZXhwZWN0IG9mIG1lOgoKMS4gSSB3aWxsIHdvcmsgdGlyZWxlc3NseSBmb3IgdGhlIGdvb2Qgb2YgdGhlIGxhYiBncm91cDsgdGhlIHN1Y2Nlc3Mgb2YgZXZlcnkgbWVtYmVyIG9mIG91ciBncm91cCBpcyBteSB0b3AgcHJpb3JpdHksIG5vIG1hdHRlciB0aGVpciBwZXJzb25hbCBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMsIG9yIGNhcmVlciBnb2Fscy4KMS4gSSB3aWxsIHNldCBoaWdoIHN0YW5kYXJkcyBmb3IgdGhlIGxhYiBncm91cCwgaW5jbHVkaW5nIHlvdSwgb3RoZXJzLCBhbmQgbXlzZWxmLgoxLiBJIHdpbGwgcHJvdmlkZSB5b3UgZ3VpZGFuY2UgYW5kIHJlc291cmNlcyB0byBjb25kdWN0IHJlc2VhcmNoIHByb2plY3RzIHdlIGFyZSBib3RoIGludGVyZXN0ZWQgaW4uCjEuIEkgd2lsbCBoZWxwIHlvdSBuYXZpZ2F0ZSB5b3VyIGdyYWR1YXRlIHByb2dyYW0gb2Ygc3R1ZHkuCjEuIEkgd2lsbCBsZWFkIGJ5IGV4YW1wbGUgYW5kIGZhY2lsaXRhdGUgeW91ciB0cmFpbmluZyBpbiBjb21wbGVtZW50YXJ5IHNraWxscyBuZWVkZWQgdG8gYmUgYSBzdWNjZXNzZnVsIHNjaWVudGlzdCwgc3VjaCBhcyBvcmFsIGFuZCB3cml0dGVuIGNvbW11bmljYXRpb24gc2tpbGxzLCBncmFudCB3cml0aW5nLCBsYWIgbWFuYWdlbWVudCwgbWVudG9yaW5nLCBhbmQgc2NpZW50aWZpYyBwcm9mZXNzaW9uYWxpc20uCjEuIEkgd2lsbCBwcm92aWRlIHlvdSBndWlkYW5jZSBhbmQgcmVzb3VyY2VzIGZvciB5b3VyIGNhcmVlciBkZXZlbG9wbWVudC4KMS4gSSB3aWxsIHJlcGx5IHByb21wdGx5IHRvIHRoZSBtYXRlcmlhbHMgeW91IHNlbmQgbWUgKGUuZy4sIGVtYWlscywgZHJhZnRzLCBhbmQgc2xpZGVzKS4KMS4gSSB3aWxsIHJlc3BlY3QgeW91ciB0aW1lIGFuZCB3b3JrLCBhbmQgZ2l2ZSB5b3UgY3JlZGl0IGFwcHJvcHJpYXRlbHkuCjEuIEkgd2lsbCBwcm92aWRlIGFkdmljZSBvbiBvdGhlciBpc3N1ZXMsIGlmIHlvdSBjaG9vc2UgdG8gZW5nYWdlIG1lLgoxLiBJIHdpbGwgYmUgeW91ciBhZHZvY2F0ZS4KCiMgV2hhdCBJIGV4cGVjdCBvZiB0cmFpbmVlcyB7I215RXhwZWN0YXRpb25zfQoKSGVyZSBpcyB3aGF0IEkgZXhwZWN0IG9mIHRyYWluZWVzOgoKMS4gTWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiByZXNlYXJjaCBhbmQgdHJhaW5pbmctcmVsYXRlZCBhY3Rpdml0aWVzCjEuIFdvcmsgaW4gbGFiIGR1cmluZyB0aGUgd29ya2RheSAod2hlbiB5b3UgYXJlIG5vdCBpbiBjbGFzcywgdGVhY2hpbmcsIG9yIGRvaW5nIGNsaW5pY2FsIHdvcmspCjEuIENvbmR1Y3QgYWxsIHJlc2VhcmNoIGFuZCB0cmFpbmluZy1yZWxhdGVkIGFjdGl2aXRpZXMgcmVzcG9uc2libHkKMS4gUmVzcGVjdCBvdGhlciBsYWIgbWVtYmVycwoKSSBhbSBhbWJpdGlvdXMgYW5kIGhhdmUgaGlnaCBzdGFuZGFyZHMsIGFuZCBJIGV4cGVjdCB0aGUgc2FtZSBmcm9tIHlvdS4KQmVsb3cgYXJlIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBleHBlY3RhdGlvbnM6CgojIyBSZXNlYXJjaCBwcm9qZWN0cyBhbmQgdHJhaW5pbmcgeyNyZXNlYXJjaFRyYWluaW5nfQoKVGFrZSBhZHZhbnRhZ2Ugb2YgeW91ciBvcHBvcnR1bml0eSB0byB3b3JrIGF0IGEgd29ybGQtY2xhc3MgdW5pdmVyc2l0eSBieSBkZXZlbG9waW5nIGFuZCByZWZpbmluZyBzdGVsbGFyIHNjaWVudGlmaWMgc2tpbGxzLgpJIGV4cGVjdCB0aGF0IHlvdSB3aWxsIGxlYXJuIGhvdyB0byBwbGFuLCBkZXNpZ24sIGFuZCBjb25kdWN0IGhpZ2gtcXVhbGl0eSBzY2llbnRpZmljIHJlc2VhcmNoLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIG1haW50YWluIGdvb2QgcHJvZ3Jlc3Mgb24gdGhlaXIgcHJvamVjdHMuClRoaXMgaW5jbHVkZXM6IGtlZXBpbmcgdXBkYXRlZCBvbiB0aGUgbGl0ZXJhdHVyZSBhbmQgcmVzZWFyY2ggbWV0aG9kcywgYWN0aXZlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5cyB0byBjb25kdWN0IHlvdXIgcmVzZWFyY2ggcHJvamVjdHMgYW5kIGFwcGx5aW5nIHRoZW0sIHJlZ3VsYXJseSBkaXNjdXNzaW5nIHlvdXIgcmVzZWFyY2ggcHJvZ3Jlc3Mgd2l0aCBtZSwgZm9sbG93aW5nIHRoZSBwbGFucyBiYXNlZCBvbiBvdXIgZGlzY3Vzc2lvbnMsIGFuZCBwcmVzZW50aW5nIChjb25mZXJlbmNlcywgcHJlc2VudGF0aW9ucywgYW5kL29yIGpvdXJuYWwgYXJ0aWNsZXMpIHRoZSBmaW5kaW5ncyBhdCBhIHNhdGlzZmFjdG9yeSBsZXZlbC4KV3JpdGluZyBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGFiaWxpdHkgdG8gZGV2ZWxvcCBkdXJpbmcgZ3JhZHVhdGUgc2Nob29sLgpJIGV4cGVjdCB5b3UgdG8gd3JpdGUgZnJlcXVlbnRseSwgYW5kIEkgZW5jb3VyYWdlIHlvdSB0byB3cml0ZSBkYWlseS4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gcmVhZCBQYXVsIFNpbHZhJ3MgIltIb3cgdG8gV3JpdGUgYSBMb3RdKGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vSG93LVdyaXRlLUxvdC1QcmFjdGljYWwtUHJvZHVjdGl2ZS9kcC8xNDMzODI5NzM4KSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9DNlhWLTg0VVIpLCIgYW5kIEkgYW0gaGFwcHkgdG8gbGVuZCB0aGUgYm9vayB0byB5b3UuCkkgZW5jb3VyYWdlIHlvdSB0byB1c2UgRW5kTm90ZSwgWm90ZXJvLCBvciBhbm90aGVyIHJlZmVyZW5jZSBtYW5hZ2VyIHRvIG1hbmFnZSB5b3VyIHJlZmVyZW5jZXMgYW5kIHdyaXRlIHRoZSBSZWZlcmVuY2VzIHNlY3Rpb24gb2YgcGFwZXJzLgpSZWZlcmVuY2UgbWFuYWdlbWVudCBzb2Z0d2FyZSB3aWxsIHNhdmUgeW91IGxvdHMgb2YgdGltZS4KQWRkaXRpb25hbGx5LCBwbGVhc2UgZm9sbG93IHRoZSBsYWIncyBbd3JpdGluZyBndWlkZWxpbmVzXSh3cml0aW5nLmh0bWwpLgoKTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB5b3Ugd2lsbCBiZSBlbmdhZ2VkIGluIHJlc2VhcmNoIGFjdGl2aXRpZXMgYmV5b25kIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgpIYXZlIG11bHRpcGxlIHJlc2VhcmNoIHByb2plY3RzIHRvIHdvcmsgb24uCkhhdmluZyBtdWx0aXBsZSBvbmdvaW5nIHByb2plY3RzIHByb3ZpZGVzIGltcG9ydGFudCBkaXZlcnNpZmljYXRpb27igJRpZiBhIGdpdmVuIHByb2plY3QgaXMgbm90IHdvcmtpbmcgb3V0IGFzIGV4cGVjdGVkLCB5b3UgaGF2ZSBvdGhlciBwcm9qZWN0cyB5b3UgY2FuIHR1cm4gdG8uCkJ1dCBmb2N1cyBhbmQgZmluaXNoLgpUaGUgImN1cnJlbmN5IiBpbiBzY2llbmNlIGlzIHB1Ymxpc2hlZCBwYXBlcnPigJR0aGV5IGRyaXZlIGEgbG90IG9mIHdoYXQgd2UgZG8uCkJlY2F1c2Ugb3VyIGxhYiBpcyBzdXBwb3J0ZWQgYnkgdGF4cGF5ZXIgZG9sbGFycywgd2UgaGF2ZSBhbiBvYmxpZ2F0aW9uIHRvIGNvbXBsZXRlIGFuZCBkaXNzZW1pbmF0ZSBvdXIgZmluZGluZ3MuCkkgZXhwZWN0IHlvdSB0byBsZWFkIGZpcnN0LWF1dGhvcmVkIHByb2plY3RzIChpbiBhZGRpdGlvbiB0byBhbnkgY29sbGFib3JhdGl2ZSBwcm9qZWN0cykgYW5kIHRvIHB1Ymxpc2ggeW91ciB3b3JrIGluIGhpZ2gtaW1wYWN0IGpvdXJuYWxzLgpJdCBpcyBteSBwb2xpY3kgdGhhdCBzdHVkZW50cyBhcmUgZmlyc3QtYXV0aG9yIG9uIGFsbCB3b3JrIGZvciB3aGljaCB0aGV5IGxlYWQgdGhlIGRhdGEgYW5hbHlzaXMgYW5kIHdyaXRpbmcuCkkgd2lsbCBwdXNoIHlvdSB0byBwdWJsaXNoIHlvdXIgcmVzZWFyY2ggYXMgeW91IG1vdmUgdGhyb3VnaCB5b3VyIHRyYWluaW5nIHByb2dyYW0sIDx1Pm5vdDwvdT4gb25seSBhdCB0aGUgZW5kLgpJIGV4cGVjdCB0cmFpbmVlcyB0byBiZSBsZWFkIGF1dGhvciBvbiBhdCBsZWFzdCB0d28gam91cm5hbCBwYXBlciBzdWJtaXNzaW9ucywgcHJlZmVyYWJseSB0aHJlZSBvciBmb3VyIChvciBtb3JlISkuClByb2R1Y3Rpdml0eSBpbiB0ZXJtcyBvZiBwdWJsaXNoaW5nIGhpZ2gtcXVhbGl0eSBwYXBlcnMgYW5kIHNlY3VyaW5nIGZ1bmRpbmcgaXMgY3J1Y2lhbCB0byBiZSBjb21wZXRpdGl2ZSBmb3IgbWFueSBqb2JzLgoKSSBleHBlY3QgeW91IHRvIGFwcGx5IGZvciBleHRlcm5hbCBmdW5kaW5n4oCUZXhhbXBsZXMgaW5jbHVkZSB0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uIEdyYWR1YXRlIFJlc2VhcmNoIEZlbGxvd3NoaXAgUHJvZ3JhbSAoTlNGLUdSRlApIGFuZCB0aGUgTmF0aW9uYWwgSW5zdGl0dXRlcyBvZiBIZWFsdGggTmF0aW9uYWwgUmVzZWFyY2ggU2VydmljZSBBd2FyZCAoTklIIE5SU0EpLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBzdWJtaXQgYSBOU0YtR1JGUCBpbiB0aGVpciBmaXJzdCBzZW1lc3Rlci4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gc3VibWl0IGEgTklIIE5SU0EgaW4gdGhlaXIgc2Vjb25kIG9yIHRoaXJkIHllYXIuCkdldHRpbmcgYSBmaXJzdC1hdXRob3JlZCBwdWJsaWNhdGlvbiBpbiB5b3VyIGZpcnN0IG9yIHNlY29uZCB5ZWFyIGlzIGltcG9ydGFudCBmb3IgdGhlc2UgKGFuZCBvdGhlcikgZmVsbG93c2hpcHMgYW5kIGZvciBhd2FyZHMuCgpGb3IgbWFueSBqb2JzLCBwcmVzZW50YXRpb24gc2tpbGxzIGFyZSBhbHNvIGhpZ2hseSBpbXBvcnRhbnQsIGluY2x1ZGluZyBza2lsbHMgaW4gcHJlc2VudGluZyByZXNlYXJjaCB0byBicm9hZCBhdWRpZW5jZXMgb2Ygc2NpZW50aXN0cyBvdXRzaWRlIG9mIHlvdXIgYXJlYS4KRm9yIGFjYWRlbWljIHBvc2l0aW9ucywgd2hpbGUgcGFwZXJzIGFuZCBncmFudHMgImdldCB5b3VyIGZvb3QgaW4gdGhlIGRvb3IiIGFuZCBoZWxwIHlvdSBnZXQgYW4gaW50ZXJ2aWV3LCB0aGUgImpvYiB0YWxrIiAodHlwaWNhbGx5IHRvIHRoZSB3aG9sZSBEZXBhcnRtZW50KSBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGNyaXRlcmlvbiBkdXJpbmcgYSBqb2IgaW50ZXJ2aWV34oCUYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBhbGwgZmFjdWx0eSBzZWUuClRodXMsIEkgZXhwZWN0IHlvdSB0byBwcmVzZW50IHlvdXIgcmVzZWFyY2ggZnJlcXVlbnRseSBhbmQgaW4gbXVsdGlwbGUgb3V0bGV0cy4KQ2hhbGxlbmdlIHlvdXJzZWxmIGJ5IHByZXNlbnRpbmcgeW91ciB3b3JrIGF0IG1lZXRpbmdzIGFuZCBzZW1pbmFycyBhcyBlYXJseSBhcyB5b3UgY2FuLgpJIGFsc28gZXhwZWN0IHlvdSB0byBnbyB0byBEZXBhcnRtZW50YWwgY29sbG9xdWlhIHNlcmllcyBieSBzcGVha2VycyB3aG8gYXJlIG91dHNpZGUgb2YgeW91ciBhcmVhLgoKV2Ugd2lsbCBoYXZlIG1lZXRpbmdzIHRvIGRpc2N1c3MgdGhlIHJlc2VhcmNoIHByb2plY3QocykgeW91IGZpbmQgaW50ZXJlc3RpbmcgdGhhdCBhbHNvIGFkdmFuY2UgdGhlIGxhYidzIGludGVyZXN0cy4KSSBhbHdheXMgd2VsY29tZSBuZXcgaWRlYXMgYW5kIHByb2plY3QgcHJvcG9zYWxzLCBzbyBwbGVhc2UgY29tZSB0byBtZSBpZiB5b3Ugd2FudCB0byBkaXNjdXNzIG5ldyBwcm9qZWN0cy4KQSBwaWVjZSBvZiBhZHZpY2UgdGhhdCB3YXMgZ2l2ZW4gdG8gbWUgYXMgYSBncmFkdWF0ZSBzdHVkZW50IHRoYXQgSSBwYXNzIG9udG8geW91IGlzIHRvIGZpbmQgYSBxdWVzdGlvbiBvciBwcm9ibGVtIHRoYXQgZXhjaXRlcyB5b3UgYW5kICJkYXRlIiBpdC4KWW91IHdpbGwga25vdyB0aGF0IHlvdSBoYXZlIGZvdW5kIGFuIGlkZWEgdGhhdCB0cnVseSBleGNpdGVzIHlvdSB3aGVuIHlvdSBmaW5kIHlvdXJzZWxmIHRoaW5raW5nIGFib3V0IGl0IHdoaWxlIGJydXNoaW5nIHlvdXIgdGVldGgsIGdvaW5nIGZvciB3YWxrcywgZXRjLgpNdWNoIG9mIHRoZSBpbXBvcnRhbnQgYW5kIGV4Y2l0aW5nIHdvcmsgaW4gc2NpZW5jZSBoYXBwZW5zIGF0IHRoZSBpZGVhcyBzdGFnZS4KCiMjIERhdGEgYW5kIHJlc2VhcmNoIG1hdGVyaWFscyB7I2RhdGFBbmRSZXNlYXJjaE1hdGVyaWFsc30KCkNvbmZpZGVudGlhbGl0eSBvZiBkYXRhIGlzIHBhcmFtb3VudC4KQWxsIGhhcmQtY29weSBwaHlzaWNhbCByZXNlYXJjaCBkYXRhIG11c3QgcmVtYWluIGluIHRoZSBsYWIuCkFsbCBlbGVjdHJvbmljIGRhdGEgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGxhYiwgb24gdW5pdmVyc2l0eSBjb21wdXRlcnMsIG9yIHNlY3VyZSBwcml2YXRlIGNvbXB1dGVycy4KRWxlY3Ryb25pYyBkYXRhIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgb24gcHVibGljIGNvbXB1dGVycy4KSWRlbnRpZmlhYmxlIGVsZWN0cm9uaWMgZGF0YSBzaG91bGQgYmUgc3RvcmVkIG9ubHkgb24gdGhlIGxhYidzIFJEU1Mgc2hhcmUgYW5kIHNob3VsZCBub3QgYmUgc2F2ZWQgb250byB5b3VyIGNvbXB1dGVyLgpXaGVuIHdvcmtpbmcgZnJvbSBwcml2YXRlIHNwYWNlcywgdGhlIHVuaXZlcnNpdHkgVlBOIGNhbiBiZSBhY2Nlc3NlZCB0byBlbnN1cmUgYSBzZWN1cmUgaW50ZXJuZXQgY29ubmVjdGlvbi4KCllvdSBhcmUgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gZGV0YWlsZWQsIG9yZ2FuaXplZCwgYW5kIGFjY3VyYXRlIGxhYm9yYXRvcnkgcmVjb3JkcyBpbiBhIGxhYiBub3RlYm9vay4KQmUgYXdhcmUgdGhhdCBhbGwgdGFuZ2libGUgcmVzZWFyY2ggZGF0YSBhbmQgcmVsYXRlZCByZXNlYXJjaCBtYXRlcmlhbHMgYXJlIG15IHByb3BlcnR5IGFzIHRoZSBsYWIgZGlyZWN0b3IuCldoZW4geW91IGxlYXZlIHRoZSBsYWIsIEkgZW5jb3VyYWdlIHlvdSB0byByZXRhaW4gYWNjZXNzIHRvIHRoZSBsYWIncyByZXNlYXJjaCBkYXRhIHZpYSBWUE4gdG8gdGhlIGxhYiBkcml2ZSAoUkRTUyBzaGFyZSkuCk9uZSBmdWxsIHNldCBvZiBhbGwgZGF0YSBtdXN0IHN0YXkgaW4gdGhlIGxhYiwgd2l0aCBhcHByb3ByaWF0ZSBhbmQgYWNjZXNzaWJsZSBkb2N1bWVudGF0aW9uLgpSZWd1bGFybHkgYmFjayB1cCB0aGUgZmlsZXMgb24geW91ciBjb21wdXRlciB1c2luZyBNaWNyb3NvZnQgT25lRHJpdmUsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZSB1bml2ZXJzaXR5LgpEZS1pZGVudGlmaWVkIGRhdGEgYW5kIGFuYWx5c2lzIHNjcmlwdHMgYXNzb2NpYXRlZCB3aXRoIHByb2plY3RzIHNob3VsZCBiZSBzYXZlZCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IG9mIHRoZSBsYWIncyBHaXRMYWIgcGFnZSAoaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKSwgd2hpY2ggaXMgaG9zdGVkIGJ5IHRoZSB1bml2ZXJzaXR5IGFuZCBhcHByb3ZlZCBieSBvdXIgSVJCLgoKIyMgUmVzZWFyY2ggZXRoaWNzIHsjcmVzZWFyY2hFdGhpY3N9CgpZb3Ugc2hvdWxkIHJlc3BlY3QgYWxsIGV0aGljYWwgc3RhbmRhcmRz4oCUaW5jbHVkaW5nIGNvbXBsaWFuY2Ugd2l0aCBhbGwgdW5pdmVyc2l0eSwgc3RhdGUsIGFuZCBmZWRlcmFsIHJlZ3VsYXRpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBBUEEgRXRoaWNzIENvZGXigJRhcyB0aGV5IHJlbGF0ZSB0byByZXNwb25zaWJsZSBjb25kdWN0IGluIHJlc2VhcmNoLCBwb3NzaWJsZSBjb25mbGljdHMgb2YgaW50ZXJlc3QsIHByaXZhY3kgYW5kIGh1bWFuIHN1YmplY3RzIHJlc2VhcmNoLCBsYWJvcmF0b3J5IHNhZmV0eSwgYXV0aG9yc2hpcCwgcGVlci1yZXZpZXcgZ3VpZGVsaW5lcywgYW5kIGRhdGEgb3duZXJzaGlwLCByZXBvcnRpbmcsIGFuZCBzaGFyaW5nLgpXaGVuIGV0aGljYWwgZGlsZW1tYXMgb3IgdW5jZXJ0YWludGllcyBhcmlzZSwgYXNrIG1lIGFuZCBvdGhlcnMgZm9yIGd1aWRhbmNlLgpDb25zdWx0LCBjb25zdWx0LCBjb25zdWx0IQoKSW4gdGhpcyBsYWIsIHdlIHdvcmsgaGFyZCB0byBkbyB0aGUgYmVzdCBzY2llbmNlIHdlIGNhbi4KRHVyaW5nIHRoZSBwcm9jZXNzLCBvYnN0YWNsZXMgYW5kIGZydXN0cmF0aW9ucyBhcmUgaW5ldml0YWJsZSwgYW5kIHNvbWV0aW1lcyBtb3JlIGNvbW1vbiB0aGFuIHlvdSB3b3VsZCBpbWFnaW5lLgpJdCBpcyBteSBob3BlIHRoYXQgd2Ugd2lsbCB3b3JrIHRvZ2V0aGVyIHRvIHRhY2tsZSB0aGVzZSBjaGFsbGVuZ2VzIGFuZCB0byBidWlsZCB1cCB5b3VyIHJlc2lsaWVuY2UuClRvIHRoaXMgZW5kLCBwbGVhc2Uga2VlcCBtZSB1cGRhdGVkIG9uIHlvdXIgcHJvZ3Jlc3PigJRib3RoIHRoZSBnb29kIGFuZCBiYWQuCgpNaXN0YWtlcyBhcmUgaW5ldml0YWJsZSBhbmQgYXJlIHBhcnQgb2YgeW91ciB0cmFpbmluZywgc28gZG8gbm90IGZlZWwgYmFkIGFib3V0IG1ha2luZyBtaXN0YWtlc+KAlEkgbWFrZSBtaXN0YWtlcyBvbiBhIGRhaWx5IGJhc2lzLgpJIHN0cml2ZSBmb3IgdGhlIGxhYiB0byBwcm92aWRlIGEgc3VwcG9ydGl2ZSBlbnZpcm9ubWVudCB0byBhc2sgcXVlc3Rpb25zIGFuZCBhZG1pdCBtaXN0YWtlcy4KQXMgeW91ciBtZW50b3IsIEkgYW0gYWxzbyByZXNwb25zaWJsZSBmb3IgeW91ciByZXNlYXJjaCBhbmQgdHJhaW5pbmcuClNvIHBsZWFzZSBkbyBsZXQgbWUga25vdyBpZiBzdWNoIHRoaW5ncyBoYXBwZW4gYW5kIHdlIHdpbGwgd29yayB0b2dldGhlciB0byByZWNvdmVyIGZyb20gdGhlbS4KVXN1YWxseSB0aGUgZWFybGllciB5b3UgaW5mb3JtIG1lLCB0aGUgbGVzcyBkYW1hZ2UgdGhlcmUgd2lsbCBiZS4KQmVpbmcgZnJhbmsgYWJvdXQgeW91ciBtaXN0YWtlcyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCkhvd2V2ZXIsIHRoaW5ncyBsaWtlIGludGVudGlvbmFsbHkgZmFraW5nIGRhdGEgYW5kIGludGVudGlvbmFsbHkgY292ZXJpbmcgbWlzdGFrZXMgYXJlIHVuYWNjZXB0YWJsZSBhbmQgd2lsbCBsZWFkIHRvIHNldmVyZSBjb25zZXF1ZW5jZXMuCgojIyBUaW1lIGluIGxhYiB7I3RpbWVJbkxhYn0KCkkgZXhwZWN0IHlvdSB0byBiZSBhdCB3b3JrIGFuZCBvbiBjYW1wdXMgZHVyaW5nIHRoZSB3b3JrZGF5OiA5aXNo4oCTNWlzaCBvciA4aXNo4oCTNGlzaC4KSW4gYWRkaXRpb24sIEkgZXhwZWN0IHlvdXIgYXZhaWxhYmlsaXR5IHRvIHNwYW4gOeKAkzUgZm9yIHNjaGVkdWxpbmcgbWVldGluZ3Mgd2l0aCBtZSBvciBtZW1iZXJzIG9mIHRoZSB0ZWFt4oCUdGhlIHNhbWUgaG91cnMsIGdlbmVyYWxseSwgdGhhdCB0aGUgcHJvZ3JhbSBhdHRlbXB0cyB0byBzY2hlZHVsZSBtZWV0aW5ncy4KRHVyaW5nIHRoZSB3b3JrZGF5LCB5b3UgYXJlIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGxhYiB3aGVuIHlvdSBhcmUgbm90IGluIGNsYXNzLCB0ZWFjaGluZywgb3IgZG9pbmcgY2xpbmljYWwgd29yay4KVGhpcyBpcyBub3QgYWJvdXQgYWNjb3VudGFiaWxpdHnigJRyYXRoZXIsIGl0IGlzIHRvIHRoZSBiZW5lZml0IG9mIHlvdSBhbmQgdGhlIHRlYW0uCk91ciBhcHByb2FjaCBpcyBvcHRpbWFsIGZvciB0aGUgdHlwZSBvZiBwcm9qZWN0cyB3ZSBjYXJyeSBvdXQ6IGxvbmdpdHVkaW5hbCBwcm9qZWN0cyBzdWNoIGFzIG91cnMgYXJlIG9uZSBiaWcgZW50ZXJwcmlzZSB3aXRoIG1hbnkgbW92aW5nIHBhcnRzLCBhbGwgb2Ygd2hpY2ggaGF2ZSB0byB3b3JrIHRvZ2V0aGVyIHNtb290aGx5LgpFYWNoIHN0dWRlbnQncyBpbmRpdmlkdWFsIHByb2plY3QgaXMgZW1iZWRkZWQgaW4gdGhhdCBsYXJnZXIgdW1icmVsbGEgKHJldGFpbmluZyBlYWNoIHN0dWRlbnQncyB1bmlxdWVuZXNzLCBpZGVhcywgZXRjLikuClRodXMsIHRoZSBwaHlzaWNhbCBpbnRlcmFjdGlvbnMgZm9yIHRoZSB3aG9sZSB0ZWFtLCBpbiBvbmUgc3BhY2UsIHdpdGggc2hhcmVkIHdvcmsgZXRoaWMsIGFyZSBzbyBpbXBvcnRhbnQuClBhcnQgb2YgeW91ciBqb2IgaXMgdG8gYmUgaW4gdGhlIGxhYiAod2l0aCB5b3VyIGRvb3Igb3BlbikgYW5kIHRvIHRhbGsgd2l0aCBvdGhlciBwZW9wbGUgYWJvdXQgeW91ciByZXNlYXJjaC4KV2UgYWxsIGJlbmVmaXQgZnJvbSBoYXZpbmcgYSBncm91cCBvZiBwZW9wbGUgd2UgY2FuIHRhbGsgd2l0aCBhYm91dCByZXNlYXJjaCBxdWVzdGlvbnMgYW5kIHByb2JsZW1zLgpXZSBoYXZlIGEgY29sbGFib3JhdGl2ZSBsYWIgZW52aXJvbm1lbnQuCk91ciBsYWIgd29ya3MgYXMgYSB0ZWFtLCBhbmQgb3RoZXIgbGFiIG1lbWJlcnMgY291bnQgb24geW91IGJlaW5nIHRoZXJlLgpMaWtld2lzZSwgeW91IGJlbmVmaXQgZnJvbSBoYXZpbmcgb3RoZXIgdGVhbSBtZW1iZXJzLCBteXNlbGYsIGFuZCBEZXBhcnRtZW50YWwgc3RhZmYgYXZhaWxhYmxlLgpXb3JraW5nIGluIHRoZSBsYWIgc3BhY2UgaGVscHMgaW1wcm92ZSBxdWFsaXR5IGNvbnRyb2wgb2YgbGFiIHByb2NlZHVyZXMgYW5kIGNhbiBsZWFkIHRvIGV4Y2l0aW5nIGNvbGxhYm9yYXRpdmUgcHJvamVjdHMuClRoaXMgc2hvcnQgYmx1cmIgb24gaG93ICJbSXNvbGF0aW9uIGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBlbmVtaWVzIG9mIGdyYWR1YXRlIHN0dWRlbnRzXShodHRwczovL3d3dy5pbnNpZGVoaWdoZXJlZC5jb20vdmlld3MvMjAwNS8xMC8yNi93ZS1uZWVkLWh1bWFuaXRpZXMtbGFicykiIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0dLNTYtN0xMVykgbWF5IGdpdmUgeW91IHNvbWUgaW5zaWdodCB3aHkgZmFjZXRpbWUgaW4gdGhlIGxhYiBpcyBzbyBpbXBvcnRhbnQ6Cgo+ICJJIHdvbmRlciBob3cgYW4gRW5nbGlzaCBwcm9mZXNzb3Igd291bGQgZmVlbCBzcGVuZGluZyBhIHdlZWsgaW4gYSBwaHlzaWNzIGxhYi4KPiBOb3QgYWJvdXQgdGhlIHNjaWVudGlmaWMgd29yaywgYnV0IGFib3V0IHRoZSBmcmVxdWVudCwgb25nb2luZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN0dWRlbnRzIGFuZCBwZWVycywgcG9zdC1kb2NzIGFuZCBmYWN1bHR5Lgo+IFNjaWVudGlzdHMgc2VlIGVhY2ggb3RoZXIgaW4gdGhlIGxhYiwgaWYgbm90IGRhaWx5LCB0aGVuIGF0IGxlYXN0IHdlZWtseS4KPiBUaGV5IGhhdmUgZnJlcXVlbnQgbGFiIG1lZXRpbmdzLCBjb2xsb3F1aWEgYW5kIGludGVyYWN0aW9uIHdpdGggc2Nob2xhcnMgYXQgb3RoZXIgdW5pdmVyc2l0aWVzIGFyb3VuZCBqb2ludCByZXNlYXJjaC4KPiBEdXJpbmcgbXkgZ3JhZHVhdGUgdHJhaW5pbmcgaW4gcHN5Y2hvbG9neSBhdCBNY0dpbGwgVW5pdmVyc2l0eSwgZXNwZWNpYWxseSBpbiB0aGUgcmVzZWFyY2ggbGFiIGF0IHRoZSBNb250cmVhbCBOZXVyb2xvZ2ljYWwgSW5zdGl0dXRlLCBJIHNwZW50IGhvdXJzIGhhbmdpbmcgYXJvdW5kIHRoZSBwb3N0LWRvY3MuCj4gSSBsZWFybmVkIGF0IGxlYXN0IGFzIG11Y2ggZnJvbSB0aGVtIGFzIEkgZGlkIGZyb20gbXkgaW50ZXJhY3Rpb25zIHdpdGggbXkgcHJvZmVzc29ycy4KPiBUaGUgZXhwZWN0YXRpb24gd2FzIHRoYXQgSSB3b3VsZCBiZSBhdCB0aGUgbGFiIDkgdG8gNSBvciBtb3JlLCBldmVyeSBkYXkuCj4gSSBzYXcgbXkgYWR2aXNlciBldmVyeSBkYXkuIiDigJMgR2luYSBIaWF0dAoKT2YgY291cnNlLCB0aGVyZSBhcmUgZXhjZXB0aW9uczsgaWYgeW91IGFyZSBzaWNrLCBzdGF5IGhvbWUuCllvdSBkbyBub3QgbmVlZCBteSBwZXJtaXNzaW9uIHRvIGF0dGVuZCBtZWRpY2FsIGFwcG9pbnRtZW50cyBkdXJpbmcgbGFiIGhvdXJzLgpJZiB5b3UgYXJlIHVuYWJsZSB0byBjb21lIGludG8gbGFiIGR1ZSB0byBiYWQgd2VhdGhlciwganVzdCBsZXQgbWUga25vdyBhbmQgeW91IHNob3VsZCBiZSBhdmFpbGFibGUgdG8gYmUgcmVhY2gtYWJsZSBxdWlja2x5LCBqdXN0IGFzIHlvdSB3b3VsZCBiZSBpZiB5b3Ugd2VyZSBpbiBsYWIuCgpOZXZlcnRoZWxlc3MsIGdyYWR1YXRlIHNjaG9vbCBpcyBub3QgYSA0MCBob3VyIHBlciB3ZWVrIGpvYi4KR3JhZHVhdGUgc3R1ZGVudHMgY2FuIGV4cGVjdCB0byB3b3JrIGFuIGF2ZXJhZ2Ugb2YgNTAgaG91cnMgcGVyIHdlZWsuCk91dHNpZGUgb2YgdGhlIHdvcmtkYXksIHlvdSBhcmUgd2VsY29tZSB0byB3b3JrIGZyb20gdGhlIGxhYiwgb3LigJRhcyBsb25nIGFzIHlvdSBlbnN1cmUgY29uZmlkZW50aWFsaXR5IG9mIGRhdGHigJRmcm9tIGhvbWUgb3IgZnJvbSBvdGhlciBzcGFjZXMuClRoYXQgc2FpZCwgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGlzIGZvciB5b3UgdG8gZ2V0IHRoZSBqb2IgZG9uZeKAlHlvdSBhcmUgaW4geW91ciBjYXJlZXIgbm93IGFuZCBhcmUgaW52ZXN0aW5nIGluIHlvdXJzZWxmLgpHcmFkdWF0ZSByZXNlYXJjaCByZXF1aXJlcyBmdWxsLXRpbWUgZGVkaWNhdGlvbiBhbmQgeWVhci1yb3VuZCBlZmZvcnQuCgpEaXNjdXNzIHBvbGljaWVzIG9uIHdvcmsgaG91cnMsIHNpY2sgbGVhdmUsIGFuZCB2YWNhdGlvbiB3aXRoIG1lIGRpcmVjdGx5LgpJdCBpcyBpbXBvcnRhbnQgdG8gdGFrZSB0aW1lIG9mZiB0byBkZWNvbXByZXNzIGZyb20gdGltZSB0byB0aW1lLgpXb3JrLWxpZmUgYmFsYW5jZSBhbmQgdmFjYXRpb24gdGltZSBhcmUgZXNzZW50aWFsIGZvciBjcmVhdGl2ZSB0aGlua2luZyBhbmQgZ29vZCBoZWFsdGgsIGFuZCBJIGVuY291cmFnZSB5b3UgdG8gdGFrZSByZWd1bGFyIHZhY2F0aW9ucy4KWW91IGNhbiB0YWtlIHRocmVlIHdlZWtzIG9mIHZhY2F0aW9uIHRpbWUgZWFjaCB5ZWFyLCBhbmQgeW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayBkdXJpbmcgW3VuaXZlcnNpdHkgaG9saWRheXNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvZ3JhZHVhdGUtc3R1ZGVudC1lbXBsb3ltZW50LWFncmVlbWVudC9wYWlkLWxlYXZlcy1hbmQtaG9saWRheSkuCkluIGFkZGl0aW9uLCBJIGRvIG5vdCBleHBlY3Qgc3R1ZGVudHMgdG8gd29yayBiZXR3ZWVuIDEyLzE1IGFuZCB0aGUgZmlyc3Qgd2VlayBvZiBKYW51YXJ5LgpQbGVhc2UgZGlzY3VzcyB5b3VyIHZhY2F0aW9uIHBsYW5zIHdpdGggbWUgYmVmb3JlIGJvb2tpbmcgeW91ciB0cmlwLgpTdWJtaXQgcmVxdWVzdHMgZm9yIHRpbWUgb2ZmIGluIHBlcnNvbiwgYnkgcGhvbmUsIG9yIHZpYSBlbWFpbCwgbm90IGJ5IFNsYWNrLgpDb25zdWx0IHdpdGggbWUgYW5kIG5vdGlmeSBmZWxsb3cgbGFiIG1lbWJlcnMgaW4gYWR2YW5jZSBvZiBhbnkgcGxhbm5lZCBhYnNlbmNlcywgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxl4oCUYXQgbGVhc3QgdHdvIHdlZWtzJyBub3RpY2Ugb3IgbW9yZSBpZiBmZWFzaWJsZS4KUGxlYXNlIHBsYW4gdGhhdCBpZiB5b3UgYXJlIGF3YXksIG90aGVycyB3aWxsIG5lZWQgdG8gdGFrZSBvdmVyIHlvdXIgcmVzcG9uc2liaWxpdGllcywgc28gcGxhbm5pbmcgZm9yIGFkZXF1YXRlIGxlYWQgdGltZSBhbmQgdHJhaW5pbmcgbWF5IGJlIG5lY2Vzc2FyeS4KUGxlYXNlIGRpc2N1c3Mgd2l0aCBtZSBpZiB5b3UgcGxhbiB0byB0YWtlIGEgc3VtbWVyIGludGVybnNoaXAgb3IgYm9vdGNhbXAuCgojIyBNZWV0aW5ncyB7I21lZXRpbmdzfQoKVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG1lZXRpbmdzOiBsYWIgbWVldGluZ3MsIGdyb3VwIG1lZXRpbmdzLCBhbmQgb25lLW9uLW9uZSBtZWV0aW5ncy4KTGFiIG1lZXRpbmdzIG9jY3VyIHdlZWtseS4KQWxsIGxhYiBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBhdHRlbmQuClR5cGljYWwgZm9ybXMgb2YgbGFiIG1lZXRpbmdzIGFyZSBhcnRpY2xlIGRpc2N1c3Npb25zIChsZWQgYnkgb25lIGxhYiBtZW1iZXIpLCBwcm9qZWN0IHByZXNlbnRhdGlvbnMsIHRhbGtzIGdpdmVuIGJ5IGd1ZXN0IHNwZWFrZXJzLCBhbmQgcHJvZmVzc2lvbmFsIGRldmVsb3BtZW50IHdvcmtzaG9wcy4KWW91IHNob3VsZCByZWFkIHRoZXNlIG1hdGVyaWFscyBpbiBhZHZhbmNlLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgd2l0aCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIGR1cmluZyBsYWIgbWVldGluZ3MuClRoZSB1bml2ZXJzaXR5IGFuZCBvdXIgbGFiIHVzZSBPdXRsb29rIGZvciBzY2hlZHVsaW5nOyB5b3UgYXJlIGV4cGVjdGVkIHRvIGtlZXAgeW91ciB1bml2ZXJzaXR5IE91dGxvb2sgYWNjb3VudCB1cCB0byBkYXRlLgoKT25lLW9uLW9uZSBtZWV0aW5ncyBhcmUgNDUtbWluLCB3ZWVrbHkgbWVldGluZ3MgYmV0d2VlbiBlYWNoIHRyYWluZWUgYW5kIG1lLgpZb3UgY2FuIGFsc28gc2NoZWR1bGUgb25lLW9mZiBvbmUtb24tb25lIG1lZXRpbmdzIHdpdGggbWUuCldoZW4gc2NoZWR1bGluZyB5b3VyIG9uZS1vbi1vbmUgYW5kIG90aGVyIG1lZXRpbmdzLCBzZW5kIGFsbCBvZiB5b3VyIGF2YWlsYWJsZSB0aW1lcyAoYmV0d2VlbiA5YW0gYW5kIDVwbSksIG5vdCBqdXN0IHlvdXIgcHJlZmVycmVkIHRpbWVzIQpZb3UgbWF5IGluZGljYXRlIHdoaWNoIG9mIHlvdXIgYXZhaWxhYmxlIHRpbWVzIGFyZSBwcmVmZXJyZWQgb3IgbGVzcyBwcmVmZXJyZWQuCk9uZS1vbi1vbmUgbWVldGluZ3MgYXJlIGRlc2lnbmVkIGZvciB1cyB0byBkaXNjdXNzIGFueSB0cmFpbmluZyBhbmQgcmVzZWFyY2gtcmVsYXRlZCBpc3N1ZXMgaW4gZGV0YWlsIGFuZCB0byBmb3JtIHBsYW5zIGZvciB0aGUgbmVhciBmdXR1cmUsIGluIGFkZGl0aW9uIHRvIGFueSBjaGFsbGVuZ2VzLgpNYWtlIHN1cmUgdGhhdCB5b3UgYWxzbyB1c2UgdGhpcyB0aW1lIHRvIGNvbW11bmljYXRlIG5ldyBpZGVhcyB0aGF0IHlvdSBoYXZlIGFib3V0IHlvdXIgd29yayBhbmQgY2hhbGxlbmdlcyB0aGF0IHlvdSBhcmUgZmFjaW5nLgpSZW1lbWJlcjogSSBjYW5ub3QgYWRkcmVzcyBvciBhZHZpc2UgYWJvdXQgaXNzdWVzIHRoYXQgeW91IGRvIG5vdCBicmluZyB0byBteSBhdHRlbnRpb24uCkkgZXhwZWN0IHRyYWluZWVzIHRvIGF0dGVuZCBhbGwgdGhlaXIgb25lLW9uLW9uZSBtZWV0aW5ncy4KSSB1bmRlcnN0YW5kIHRoYXQgc29tZXRpbWVzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0LCBzbyBvY2Nhc2lvbmFsIGNhbmNlbGxhdGlvbiBpcyBmaW5lLgpUaGF0IHNhaWQsIG5vdGUgdGhhdCBldmVuIGlmIHlvdSBoYXZlIG5vdGhpbmcgdG8gcmVwb3J0LCBzb21ldGltZXMgaGF2aW5nIHRoZSBtZWV0aW5nIGNhbiBzdGlsbCBiZSBhZHZhbnRhZ2VvdXMgYW5kIGl0IG1heSBiZSB3b3J0aCBvdXIgdGltZSB0byBzdGlsbCBjaGVjayBpbi4KRG8gbm90IGNhbmNlbCBtZWV0aW5ncyB3aXRoIG1lIGlmIHlvdSBmZWVsIHRoYXQgeW91IGhhdmUgbm90IG1hZGUgYWRlcXVhdGUgcHJvZ3Jlc3Mgb24geW91ciByZXNlYXJjaDsgdGhlc2UgbWlnaHQgYmUgdGhlIG1vc3QgY3JpdGljYWwgdGltZXMgdG8gbWVldCB3aXRoIGEgbWVudG9yLgoKWW91IGFyZSBleHBlY3RlZCB0byBhc2sgcXVlc3Rpb25zIGFuZCB0YWtlIG5vdGVzIGR1cmluZyBtZWV0aW5ncy4KQmUgcmVzcGVjdGZ1bCBvZiBteSB0aW1lIGFuZCBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyAodG8gcGFwZXJzLCBhbmFseXNpcyBjb2RlLCBldGMuKSBhZnRlciB0aGUgbWVldGluZywgYmFzZWQgb24geW91ciBub3RlcyBhbmQgb24geW91ciBvd24gdGltZeKAlHVubGVzcyBJIGFtIHdvcmtpbmcgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LgoKQmVzaWRlcyBtZWV0aW5ncywgdHJhaW5lZXMgYXJlIHdlbGNvbWUgdG8gZHJvcCBieSBteSBvZmZpY2UgYW55dGltZSB0byBkaXNjdXNzIHJlc2VhcmNoLCB0cmFpbmluZywgYW5kIGFkbWluaXN0cmF0aW9uLXJlbGF0ZWQgaXNzdWVzLgpJIGhhdmUgYW4gb3Blbi1kb29yIHBvbGljeTogbXkgZG9vciBpcyBhbHdheXMgb3BlbiAoZmlndXJhdGl2ZWx5IHNwZWFraW5nKS4KSSB3aWxsIGJlIGhhcHB5IHRvIG1lZXQgd2l0aCB5b3UgYXMgbG9uZyBhcyBJIGRvIG5vdCBoYXZlIGFub3RoZXIgb2JsaWdhdGlvbi4KTXkgb2ZmaWNlIGFuZCBwaG9uZSBudW1iZXIgaXM6IFtzZWUgW215IFVuaXZlcnNpdHkgcGFnZV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9wZW9wbGUvaXNhYWMtcGV0ZXJzZW4pXS4KTXkgY2VsbCBpczogW2JsaW5kZWQgZm9yIHRoZSBpbnRlcm5ldOKApmp1c3QgYXNrXS4KCiMjIE9wZW4gc2NpZW5jZSB7I29wZW5TY2llbmNlfQoKV2UsIGFzIGEgbGFiLCB2YWx1ZSBhbmQgc3RyaXZlIHRvIGFkdmFuY2UgdGhlIG1pc3Npb24gb2YgW29wZW4gc2NpZW5jZV0oaHR0cHM6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvMTAuMTAwMi9pY2QuMjMxNSkgdG8gaW1wcm92ZSB0aGUgYWNjZXNzaWJpbGl0eSwgcmVwcm9kdWNpYmlsaXR5LCBhbmQgcmVwbGljYWJpbGl0eSBvZiBzY2llbmNlLgpBcyBzdWNoLCBhbGwgbGFiIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIGNvbmR1Y3QgcmVzZWFyY2ggdHJhbnNwYXJlbnRseSBhbmQgdG8gcHJvbW90ZSByZXByb2R1Y2liaWxpdHkuClRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcHJlLSBvciBjby1yZWdpc3RlcmluZyBzdHVkaWVzLCBzaGFyaW5nIGFuYWx5c2lzIHNjcmlwdHMgYW5kIGRhdGEsIHVzaW5nIHZlcnNpb24gY29udHJvbCAoR2l0TGFiKSwgc3VibWl0dGluZyBbcHJlcHJpbnRzXShodHRwczovL3BzeWFyeGl2LmNvbSkgd2hlbiBzdWJtaXR0aW5nIGEgbWFudXNjcmlwdCB0byBhIGpvdXJuYWwsIGFuZCBwcm92aWRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgbGFicycgYXR0ZW1wdHMgdG8gcmVwbGljYXRlIGFuZCByZXByb2R1Y2Ugb3VyIGZpbmRpbmdzLgpXZSB1c2UgR2l0TGFiIGZvciB2ZXJzaW9uIGNvbnRyb2wuCk91ciBsYWIncyB0ZW1wbGF0ZSBmb3IgR2l0TGFiIHJlcG9zaXRvcmllcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiL1RlbXBsYXRlLgpPdXIgbGFiJ3MgdGVtcGxhdGUgZm9yIHByb2plY3RzIG9uIHRoZSBPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIChPU0YpIGNhbiBiZSBmb3VuZCBoZXJlW14yXTogaHR0cHM6Ly9vc2YuaW8vNHc5c3YuCkZvbGxvdyBvdXIgW2xhYidzIGd1aWRlIGZvciBvcGVuIHNjaWVuY2VdKG9wZW5TY2llbmNlLmh0bWwpLgoKIyMgQ29sbGFib3JhdGlvbnMgeyNjb2xsYWJvcmF0aW9uc30KCkFsbCBsYWIgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byBleHBsb3JlIGNvbGxhYm9yYXRpb24gb3Bwb3J0dW5pdGllcyBib3RoIHdpdGhpbiBhbmQgb3V0c2lkZSBvZiB0aGUgbGFiLgpJIGFzayB0cmFpbmVlcyB0byAoMSkgcmVzcGVjdCB5b3VyIGNvbGxhYm9yYXRvcnMnIHRpbWUgYW5kIHJlc291cmNlcywgYW5kICgyKSBpbmZvcm0gbWUgaWYgeW91IGFyZSBzZWVraW5nIGNvbGxhYm9yYXRpb25zIHdpdGggb3IgYXJlIGNvbGxhYm9yYXRpbmcgd2l0aCByZXNlYXJjaGVycyAoZS5nLiwgZmluaXNoaW5nIHlvdXIgcHJvamVjdHMgaW4geW91ciBwcmV2aW91cyBsYWIpIG91dHNpZGUgb2YgdGhlIGxhYi4KVHJhaW5lZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYSBmaXJtIGZvb3RpbmcgaW4gdGhlaXIgcmVzZWFyY2ggcHJvZ3Jlc3MgaW4gdGhpcyBsYWIgYmVmb3JlIGNvbGxhYm9yYXRpbmcgd2l0aCBvdXRzaWRlIHJlc2VhcmNoZXJzLgpJIGV4cGVjdCB5b3UgdG8gZGlzY3VzcyBvcmRlciBvZiBhdXRob3JzaGlwIHdpdGggbWUgZWFybHkgb24gd2hlbiB0aGVyZSBhcmUgcG90ZW50aWFsIGNvbGxhYm9yYXRvcnMuCgojIyBSZWFkaW5ncyBhbmQgcmVzb3VyY2VzIHsjcmVhZGluZ3NSZXNvdXJjZXN9CgpUcmFpbmVlcyBhcmUgZXhwZWN0ZWQgdG8gcmVhZCBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgcmVsYXRpbmcgdG8gdGhlIGxhYiBhbmQgdG8gdGhlaXIgcmVzZWFyY2ggaW50ZXJlc3RzLgpFeGFtcGxlcyBvZiBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgYXJlIG9uIHRoZSBsYWIncyBHb29nbGUgRHJpdmUgZm9sZGVyIG9mIFtwcmltZXIgYXJ0aWNsZXNdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS91LzAvZm9sZGVycy8xWGxQVzM3QURmbjZpQ0N2cHQzczZWd1d4T01La2pKTnUpW14yXS4KSSBhbHNvIGV4cGVjdCB5b3UgdG8gcmVhZCBvbmUgb2YgdGhlIHByaW1lciBhcnRpY2xlcyBieSBTY2h3YXJ0eiAoMjAwOCkgdGl0bGVkLCAiW1RoZSBJbXBvcnRhbmNlIG9mIFN0dXBpZGl0eSBpbiBTY2llbnRpZmljIFJlc2VhcmNoXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFLaHlxWDUxWkwzVUVUMEhqRFJtdUFpeC1vN21lOUNxdy92aWV3P3VzcD1zaGFyaW5nKS4iCkl0IGlzIGltcG9ydGFudCB0byBmZWVsIGNvbWZvcnRhYmxlIGZlZWxpbmcgc3R1cGlkIGluIHNjaWVuY2U7IGlmIHlvdSAoYW5kIGFueSBvZiB1cykgZG8gbm90IGZlZWwgc3R1cGlkLCB3ZSBhcmUgbm90IGRvaW5nIHNjaWVuY2UgcmlnaHQhCkl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHJlYWQgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgcHJvdG9jb2xzIGFib3V0IG91ciBwcm9qZWN0cy4KCldlIGhhdmUgYSBsaXN0IG9mIGxhYiByZXNvdXJjZXMgZm9yIGdyYWR1YXRlIHN0dWRlbnRzIG9uIG91ciBMYWIncyBUcmVsbG8gYm9hcmQgY2FsbGVkICJHcmFkIFN0dWRlbnRzIlteMl06IGh0dHBzOi8vdHJlbGxvLmNvbS9iL1dqcWJncFc5L2dyYWQtc3R1ZGVudHMuClRoZSBUcmVsbG8gYm9hcmQgaW5jbHVkZXMgaXRlbXMgZm9yIG9uYm9hcmRpbmcsIGltcG9ydGFudCBmb3VuZGF0aW9uYWwgc2tpbGxzIGZvciBzY2llbnRpZmljIHRyYWluaW5nLCB1c2VmdWwgc29mdHdhcmUsIGFuZCByZWxldmFudCBqb3VybmFscywgb3JnYW5pemF0aW9ucywgY29uZmVyZW5jZXMsIGFuZCBsaXN0c2VydnMuCkl0IGFsc28gaW5jbHVkZXMgdHJhaW5pbmcgbWF0ZXJpYWxzIGZvciB2YXJpb3VzIHNvZnR3YXJlIChlLmcuLCBSRURDYXAsIEdpdExhYiwgUikuCkFuZCBpdCBpbmNsdWRlcyBhIGxpc3Qgb2YgdGhlIHRpbWVzIHRvIGJsb2NrIG9mZiBkdXJpbmcgdGhlIHNlbWVzdGVyLgoKRGF0YSBhbmFseXNpcyBndWlkZXMgZm9yIHRoZSBsYWIgYXJlIGF2YWlsYWJsZSBoZXJlOiBodHRwczovL2RldnBzeWxhYi5naXRodWIuaW8vRGF0YUFuYWx5c2lzCgojIyBUcmFpbmluZyB7I3RyYWluaW5nfQoKSSBleHBlY3QgeW91IHRvIHRha2Ugb3duZXJzaGlwIG92ZXIgeW91ciBlZHVjYXRpb25hbCBleHBlcmllbmNlcy4KWW91ciBlZHVjYXRpb24gaXMgeW91ciByZXNwb25zaWJpbGl0eeKAlHlvdSBoYXZlIHRoZSBwcmltYXJ5IHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHlvdXIgZGVncmVlLgpJIGVuY291cmFnZSB5b3UgdG8gZm9sbG93IHRoZSBbcmVjb21tZW5kZWQgdGltZWxpbmVzXSgjdGltZWxpbmVzKSBmb3IgW3Jlc2VhcmNoXSgjdGltZWxpbmUtcmVzZWFyY2gpLCBbY291cnNld29ya10oI3RpbWVsaW5lLWNvdXJzZXdvcmspLCBhbmQgW2NsaW5pY2FsIHdvcmtdKCN0aW1lbGluZS1jbGluaWNhbCkgKHNlZSB0aGUgQXBwZW5kaXgpLiAKWW91IHNob3VsZCBtYWludGFpbiBhIGhpZ2ggbGV2ZWwgb2YgcHJvZmVzc2lvbmFsaXNtLCBzZWxmLW1vdGl2YXRpb24sIGVuZ2FnZW1lbnQsIHNjaWVudGlmaWMgY3VyaW9zaXR5LCBhbmQgZXRoaWNhbCBzdGFuZGFyZHMuCllvdSBzaG91bGQgYWxzbyBiZSBrbm93bGVkZ2VhYmxlIG9mIGFuZCBjb21wbHkgd2l0aCBhbGwgcG9saWNpZXMsIGRlYWRsaW5lcywgYW5kIHJlcXVpcmVtZW50cyBvZiB0aGUgZ3JhZHVhdGUgcHJvZ3JhbSwgdGhlIGdyYWR1YXRlIGNvbGxlZ2UsIGFuZCB0aGUgdW5pdmVyc2l0eS4KRnVydGhlciwgSSBleHBlY3QgeW91IHRvIGFjdGl2ZWx5IGN1bHRpdmF0ZSB5b3VyIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudC4KVUkgaGFzIG91dHN0YW5kaW5nIHJlc291cmNlcyBpbiBwbGFjZSB0byBzdXBwb3J0IHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCBmb3Igc3R1ZGVudHMsIGluY2x1ZGluZyBwcm9mZXNzaW9uYWwgZGV2ZWxvcG1lbnQgc2VtaW5hcnMgYW5kIHdvcmtzaG9wcyBvbiB0b3BpY3Mgc3VjaCBhcyBvcmFsIGNvbW11bmljYXRpb24sIHNjaWVudGlmaWMgd3JpdGluZywgY29sbGFib3JhdGl2ZSByZXNlYXJjaCwgc3RhdGlzdGljYWwgbWV0aG9kcywgdGVhY2hpbmcsIGFuZCBtZW50b3JpbmcuCkkgZXhwZWN0IHlvdSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSByZXNvdXJjZXMuCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHRhbGsgd2l0aCBvdGhlciBtZW1iZXJzIG9mIHRoZSBsYWIsIG90aGVyIHN0dWRlbnRzLCBhbmQgZmFjdWx0eSB0byBsZWFybiB3YXlzIG9mIGVmZmVjdGl2ZWx5IG5hdmlnYXRpbmcgZ3JhZHVhdGUgc2Nob29sLgoKQXZvaWQgY2xpbmljYWwgY2xpcXVlLWlzaG5lc3MgYW5kIGluc3VsYXJpdHkuClRoZSBtb3N0IGlubm92YXRpdmUgc2NpZW5jZSB0cmFuc2NlbmRzIHRyYWRpdGlvbmFsIGJvdW5kYXJpZXMuCkkgZXhwZWN0IHlvdSB0byBzcGVuZCB0aW1lIGFuZCB0YWxrIHNjaWVuY2Ugd2l0aCBncmFkdWF0ZSBzdHVkZW50cyBhbmQgZmFjdWx0eSBpbiBhcmVhcyBvdXRzaWRlIG9mIGNsaW5pY2FsIChlLmcuLCBCQ04sIGNvZ25pdGlvbinigJRib3RoIHRvIGJyb2FkZW4geW91ciBwZXJzcGVjdGl2ZXMgYW5kIHRvIGluY29ycG9yYXRlIGJhc2ljIHNjaWVuY2UgcGVyc3BlY3RpdmVzIGludG8geW91ciB3b3JrLCB3aGlsZSBhbHNvIGJlaW5nIGEgZ29vZCBEZXBhcnRtZW50YWwgY2l0aXplbi4KQ2xpbmljYWwgc3R1ZGVudHMgYXQgc29tZSBwcm9ncmFtcyB3cm9uZ2x5IHRoaW5rIHRoZXkgYXJlIHNwZWNpYWwgYW5kIHRoaW5rIG9mIHRoZWlyIHdvcmsgYXMgc3VwZXJpb3IgdG8gYmFzaWMgc2NpZW5jZS4KQ2xpbmljYWwgc2NpZW5jZSBpcyBub3QgYSByZXNlYXJjaCBhcmVh4oCUY2xpbmljYWwgc2NpZW5jZSB1c2VzIGJhc2ljIHNjaWVuY2UgKGUuZy4sIGNvZ25pdGl2ZSwgc29jaWFsLCBkZXZlbG9wbWVudGFsLCBiaW9sb2dpY2FsIHNjaWVuY2UpIGluIHJpZ29yb3VzIHdheXMgdG8gYW5zd2VyIGNsaW5pY2FsbHkgcmVsZXZhbnQgcXVlc3Rpb25zLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIGNvbXBseSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdHJhaW5pbmcgcGxhbnMgKGUuZy4sIHRyYWluaW5nIHBsYW5zIG9mIHlvdXIgZGVncmVlIHByb2dyYW0pLCBzdWNoIGFzIHRha2luZyByZXF1aXJlZCBjb3Vyc2VzLCBtYWludGFpbmluZyBwYXNzaW5nIGdyYWRlcywgZnVsZmlsbGluZyB0ZWFjaGluZyBhc3Npc3RhbnQgZHV0aWVzLCBjbGluaWNhbCB0cmFpbmluZywgYW5kIG9yZ2FuaXppbmcgY29tbWl0dGVlIG1lZXRpbmdzLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGF0dGVuZCBhbmQgYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gYWxsIGdyb3VwIG1lZXRpbmdzIGFuZCBpbiBzZW1pbmFycyB0aGF0IGFyZSBwYXJ0IG9mIHlvdXIgZWR1Y2F0aW9uYWwgcHJvZ3JhbS4KSSBleHBlY3QgeW91IHRvIGF0dGVuZCBjb25mZXJlbmNlcywgQ2xpbmljYWwgUm91bmRzLCBEZXZlbG9wbWVudGFsIERpc2N1c3Npb24sIERhdGEgVGVhbSBhbmQgbGFiIG1lZXRpbmdzLCBEZUxUQSBDZW50ZXIsIEZyaWRheSBjb2xsb3F1aWEgc2VyaWVzLCBhbmQgb3RoZXIgcmVsZXZhbnQgYnJvd25iYWdzIHN1Y2ggYXMgQ29nbml0aW9uLCBCZWhhdmlvcmFsICYgQ29nbml0aXZlIE5ldXJvc2NpZW5jZSAoQkNOKSwgYW5kIHRoZSBJb3dhIE5ldXJvc2NpZW5jZSBJbnN0aXR1dGUgKElOSSkuCldoZW4gd2UgZ28gdG8gY29uZmVyZW5jZXMsIEkgd2lsbCBpbnRyb2R1Y2UgeW91IHRvIG15IHByb2Zlc3Npb25hbCBuZXR3b3JrIGFuZCBlbmNvdXJhZ2UgeW91IHRvIGJ1aWxkIHNraWxscyBpbiBuZXR3b3JraW5nLgoKV2Ugd2lsbCBkaXNjdXNzIHlvdXIgdHJhaW5pbmcgYW5kIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucy4KQWxsIHByb2dyYW0gcmVxdWlyZW1lbnRzIGFyZSBpbiB0aGUgRGVwYXJ0bWVudCdzIFtHcmFkdWF0ZSBIYW5kYm9va10oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9zaXRlcy9wc3ljaG9sb2d5LnVpb3dhLmVkdS9maWxlcy8yMDIzLTA4L0dyYWRIYW5kYm9vazIwMjMlMjAtJTIwQXVndXN0LnBkZikgYW5kL29yIHRoZSBHcmFkdWF0ZSBDb2xsZWdlJ3MgW01hbnVhbCBvZiBSdWxlcyBhbmQgUmVndWxhdGlvbnNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvYWNhZGVtaWNzL21hbnVhbCkuCkkgaW5jbHVkZSBhIHN1Z2dlc3RlZCB0aW1lbGluZSBmb3IgeW91ciByZXNlYXJjaCwgY2xpbmljYWwgdHJhaW5pbmcsIGFuZCBjb3Vyc2V3b3JrIFtiZWxvd10oI3RpbWVsaW5lcykuClBsZWFzZSBjb25zdWx0IHdpdGggbWUgYmVmb3JlIHNlbGVjdGluZyB5b3VyIGNvdXJzZXMsIGNsaW5pY2FsIHByYWN0aWNhLCBhbmQgb3RoZXIgdGltZS1pbnRlbnNpdmUgdHJhaW5pbmcgZXhwZXJpZW5jZXMuCgpGb3Igc29tZSBzdHVkZW50cywgdGhlcmUgbWF5IGJlIHJlbGV2YW50IHRyYWluaW5nIGZlbGxvd3NoaXBzLgpGb3IgaW5zdGFuY2UsIHRoZSBCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHByb3ZpZGVzIHRyYWluaW5nIGluIGJpby1tZWRpY2FsIHJlc2VhcmNoLgoKVGhpcyBpcyBhIHJlc2VhcmNoLW9yaWVudGVkIHByb2dyYW07IHlvdSBhcmUgZXhwZWN0ZWQgdG8gcHJpb3JpdGl6ZSByZXNlYXJjaCByZWxhdGl2ZSB0byB5b3VyIG90aGVyIG9ibGlnYXRpb25zLgpJZiB5b3UgYXJlIGdldHRpbmcgYWxsIEFzIGluIGNsYXNzZXMsIHlvdSBhcmUgc3BlbmRpbmcgdG9vIG11Y2ggdGltZSBvbiBjb3Vyc2V3b3JrIQpbR3JhZGVzIGluIGdyYWQgc2Nob29sIGRvbid0IG1hdHRlcl0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTQ2OSkgKGFzIGxvbmcgYXMgeW91IHBhc3MgeW91ciBjbGFzc2VzOyBhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0tEVTItNzlKWiksIGFuZCB0aGUgc29vbmVyIHlvdSBmaWd1cmUgdGhhdCBvdXQsIHRoZSBiZXR0ZXIgb2ZmIGFuZCBtb3JlIHByb2R1Y3RpdmUgeW91IHdpbGwgYmUuCkluc3RlYWQgb2YgZm9jdXNpbmcgeW91ciBsZWFybmluZyBvbiBjb3Vyc2V3b3JrLCBsZWFybiBieSBkb2luZy4KVGFrZSB3aGF0IHlvdSBuZWVkIGZyb20gY2xhc3NlcyB0byBhZHZhbmNlIHlvdXIgcmVzZWFyY2ggcHJvZ3JhbS4KClBsZWFzZSByZWZlciB0byB0aGUgQ2xpbmljIE1hbnVhbCBmb3IgZ3VpZGVsaW5lcyByZWdhcmRpbmcgZmFjZS10by1mYWNlIGhvdXJzIChvbiB0aGUgY2xpbmljIGRyaXZlW14zXTogYFxcaW93YS51aW93YS5lZHVcc2hhcmVkXENMQVNcRGVwYXJ0bWVudGFsXFBCU1xDbGluaWNcQ2xpbmljIE1hbnVhbFxgKS4KRm9yIGNsaW5pY2FsIHN0dWRlbnRzLCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVndWxhcmx5IHRyYWNrIHlvdXIgY2xpbmljYWwgZXhwZXJpZW5jZXMgYW5kIGhvdXJzIHRvIGVuc3VyZSB0aGF0IHlvdSBhcmUgbWVldGluZyBhcHByb3ByaWF0ZSBtaWxlc3RvbmVzIGluIHlvdXIgdHJhaW5pbmcuClRoZSBwcm9ncmFtIGhhcyBhbiBpbnN0aXR1dGlvbmFsIGFjY291bnQgZm9yIFtUaW1lMlRyYWNrXShodHRwczovL3RpbWUydHJhY2suY29tKS4KWW91IGFyZSBleHBlY3RlZCB0byB1c2UgaXQgdG8gdHJhY2sgaG91cnMgYW5kIGFyZSBleHBlY3RlZCB0byBzdGF5IGNhdWdodCB1cCBpbiB5b3VyIHRyYWNraW5nLgpXZSB3aWxsIGRpc2N1c3MgeW91ciBwbGFucyBmb3IgY2xpbmljYWwgdHJhaW5pbmcgYW5kIHByYWN0aWN1bSBvcHBvcnR1bml0aWVzIGR1cmluZyBvdXIgcmVndWxhciBpbmRpdmlkdWFsIG1lZXRpbmdzLgpJIHdpbGwgYWxzbyBwcm92aWRlIGNsaW5pY2FsIHN1cGVydmlzaW9uIG9mIHNvbWUgb2YgeW91ciBjYXNlcyBhcyBwYXJ0IG9mIHRoZSBTZWFzaG9yZSBDbGluaWMuCkkgYW0gYSBsaWNlbnNlZCBjbGluaWNhbCBwc3ljaG9sb2dpc3QsIHNvIGFzc2Vzc21lbnQgaG91cnMgaW4gbXkgcmVzZWFyY2ggbGFiIGNvdW50IGFzIGNsaW5pY2FsIGhvdXJzLgoKIyMgU29mdHdhcmUgeyNzb2Z0d2FyZX0KCk15IGxhYiBwcmltYXJpbHkgdXNlcyBgUmAgZm9yIGRhdGEgbWFuYWdlbWVudCBhbmQgYW5hbHlzaXMgYmVjYXVzZSBpdCBpcyBmcmVlLCBvcGVuIHNvdXJjZSwgb3BlbiBwbGF0Zm9ybSwgY29kZS1iYXNlZCAod2hpY2ggaW5jcmVhc2VzIHNoYXJlLWFiaWxpdHkgYW5kIHJlcHJvZHVjaWJpbGl0eSBvZiBhbmFseXNlcyksIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBzdGF0aXN0aWNzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGdyYXBoaWNzIGZyb20gcGFja2FnZXMgZGVzaWduZWQgYnkgc3RhdGlzdGljYWwgZXhwZXJ0cyBhbGwgb3ZlciB0aGUgd29ybGQsIGFuZCB0byB3aGljaCBhbnlvbmUgKGluY2x1ZGluZyB5b3UpIGNhbiBjb250cmlidXRlLgpXZSBhbHNvIHVzZSBgTUFUTEFCYCBmb3IgcHJvY2Vzc2luZyBvZiBldmVudC1yZWxhdGVkIHBvdGVudGlhbCBkYXRhIGFuZCBgTXBsdXNgIGZvciBzdHJ1Y3R1cmFsIGVxdWF0aW9uIG1vZGVsaW5nLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gbGVhcm4gYFJgIGFuZCBhbnkgb3RoZXIgc3BlY2lhbGl6ZWQgc29mdHdhcmUgdGhhdCB3aWxsIGFsbG93IHlvdSB0byBhbnN3ZXIgdGhlIHJlc2VhcmNoIHF1ZXN0aW9ucyB5b3UgYXJlIHB1cnN1aW5nLgpJZiB0aGVyZSdzIGFub3RoZXIgdG9vbCBvciBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgY2FuIGRvIHNvbWV0aGluZyBlYXNpZXIsIGJldHRlciwgbW9yZSBlZmZpY2llbnRseSwgb3Igd2l0aCBncmVhdGVyIHJlcHJvZHVjaWJpbGl0eSB0aGFuIHdoYXQgd2UgYXJlIHVzaW5nLCBmZWVsIGZyZWUgdG8gdXNlIGl04oCUdGhvdWdoIEkgbWF5IG5vdCBiZSBhYmxlIHRvIHByb3ZpZGUgZm9ybWFsIGd1aWRhbmNlLgpGb3IgaW5zdGFuY2UsIGBQeXRob25gIGlzIGEgZnJlZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGlzIGVtZXJnaW5nIGFzIGEgbmljZSBjb21wbGVtZW50IHRvIGBSYCBmb3Igc3RhdGlzdGljYWwgcHJvZ3JhbW1pbmcuCk5vIG1hdHRlciB3aGljaCBzb2Z0d2FyZSB5b3UgdXNlLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBhbmQgZXhwbGFpbiB3aGF0IHRoZSBhbmFseXNpcyBpcyBkb2luZyBhbmQgYmUgYWJsZSB0byBpbnRlcnByZXQgYW5kIGV4cGxhaW4gdGhlIG91dHB1dC4KCiMjIEJlc3QgcHJhY3RpY2VzIHsjYmVzdFByYWN0aWNlc30KCkkgZXhwZWN0IHlvdSB0byBmb2xsb3cgb3BlbiBzY2llbmNlIHByYWN0aWNlcyAoZGVzY3JpYmVkIGFib3ZlKS4KSSBleHBlY3QgeW91IHRvIGNvbW1lbnQgeW91ciBjb2RlIHNvIHRoYXQgb3RoZXJzIGNhbiB1bmRlcnN0YW5kIGl0IChhbmQgc28geW91IGNhbiB1bmRlcnN0YW5kIGl0IHdoZW4geW91IGdvIGJhY2sgdG8gaXQgNSsgeWVhcnMgbGF0ZXIpLgpJIGV4cGVjdCB5b3UgdG8gdXNlIHZlcnNpb24gY29udHJvbCAoZ2l0IHdpdGggR2l0TGFiKSB3aXRoIGFsbCBwcm9qZWN0cyBhbmQgdG8gc2F2ZSB5b3VyIGxhYiBwcm9qZWN0cyBpbiBhIHJlcG8gb24gdGhlIFtsYWIncyBHaXRMYWIgcGFnZV0oaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKS4KQ29tbWl0IGFuZCBwdXNoIHlvdXIgd29yayB0byB0aGUgR2l0TGFiIHJlcG8gb2Z0ZW4uClVzaW5nIHZlcnNpb24gY29udHJvbCBwcm92aWRlcyBtYW55IGJlbmVmaXRzOiAoYSkgaXQgcHJvdmlkZXMgYmFja3VwcyBvZiBhbGwgZmlsZXMgaW4gdGhlIGNsb3VkLCAoYikgaXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBjbG91ZCBmcm9tIGFueSBjb21wdXRlciB3aXRoIGFjY2VzcyB0byB0aGUgaW50ZXJuZXQsIGV2ZW4gaWYgeW91IGFyZSBhd2F5IGZyb20geW91ciBsb2NhbCBjb21wdXRlciwgKGMpIGl0IHByb3ZpZGVzIGhpc3Rvcnkgb2YgYWxsIChjb21taXR0ZWQpIGNoYW5nZXMgbWFkZSB0byBhbGwgZmlsZXMuCklmIHlvdSBtYWtlIGEgbWlzdGFrZSBpbiB5b3VyIGNvZGUsIHlvdSBjYW4gZWFzaWx5IHJldmVydCB0byBhIHByaW9yIHZlcnNpb24gYmVjYXVzZSB5b3UgdG9vayBzbmFwc2hvdHMgKGNvbW1pdHMpIG9mIHlvdXIgZmlsZXMhCihkKSBJdCBhbGxvd3MgeW91IHRvIHdyaXRlIGNsZWFuZXIgY29kZSBiZWNhdXNlIHlvdSBkbyBub3QgbmVlZCB0byBrZWVwIGFsbCB0aGUgb2xkLCAiY29tbWVudGVkIG91dCIgbGluZXMgb2YgY29kZSwgKGUpIGl0IGhlbHBzIHdpdGggcHJvamVjdCBvcmdhbml6YXRpb247IHlvdSBubyBsb25nZXIgaGF2ZSB0byBrZWVwIGZpbGVzIG9yIGZvbGRlcnMgbmFtZWQgInByb2plY3Rfb2xkIiAob3IgInByb2plY3RfMiIsICJbcHJvamVjdF9maW5hbF0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTE1MzEpIiAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8zUTVELVhLVEopLCBvciB3aGF0ZXZlciksIChmKSBpdCBrZWVwcyBhbGwgZmlsZXMgZm9yIHRoZSBwcm9qZWN0IHNlbGYtY29udGFpbmVkLCB3aGljaCBoZWxwcyBpbmNyZWFzZSByZXByb2R1Y2liaWxpdHksIGFuZCAoZykgaXQgYWxsb3dzIGVhc2llciBjb2xsYWJvcmF0aW9uIHdpdGggb3RoZXJzIG9uIHRoZSBwcm9qZWN0LgoKIyMgT3RoZXIgcmVzcG9uc2liaWxpdGllcyB7I290aGVyUmVzcG9uc2liaWxpdGllc30KCkkgZXhwZWN0IHlvdSB0byBiZSBhIHRlYW0gcGxheWVyLCB0byBjb250cmlidXRlIHRvIHRoZSB0ZWFtLCBhbmQgdG8gdGFrZSBhIGxlYWRlcnNoaXAgcm9sZSBpbiB0aGUgbGFiLgpTdHJpdmUgdG8gYmUgdGhlIHZlcnkgYmVzdCBsYWIgY2l0aXplbiBhbmQgY2l0aXplbiBvZiB0aGUgRGVwYXJ0bWVudCBhbmQgVW5pdmVyc2l0eS4KUmVnYXJkbGVzcyBvZiB5b3VyIHNvdXJjZSBvZiBmdW5kaW5nIChlLmcuLCB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCByZXNlYXJjaCBhc3Npc3RhbnRzaGlwLCBmZWxsb3dzaGlwL2dyYW50KSwgeW91IGNhbiBleHBlY3QgbGFiLXJlbGF0ZWQgYXNzaWdubWVudHMgdGhhdCBhcmUgZm9yIHRoZSBiZXR0ZXJtZW50IG9mIHRoZSB0ZWFtLgpGb3IgaW5zdGFuY2UsIEkgZXhwZWN0IHlvdSB0byBzdXBlcnZpc2UgYSBjb2RpbmcgdGFzay4KSSBleHBlY3QgeW91IHRvIGxlYXJuIHRoZSBsYWIgcHJvY2VkdXJlcyBhbmQgcHJvdG9jb2xzLgpZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdHJhaW4gcmVzZWFyY2ggYXNzaXN0YW50cyBvciBsYWIgc3RhZmYgb24gdmFyaW91cyBwcm9jZWR1cmVzLgpJIGV4cGVjdCB5b3UgdG8gd29yayB0byBlbnN1cmUgcXVhbGl0eSBjb250cm9sIG9mIGxhYiBwcm9jZWR1cmVzIHNvIHRoYXQgd2UgYXJlIGNvbGxlY3RpbmcgYW5kIHByb2Nlc3NpbmcgaGlnaC1xdWFsaXR5IGRhdGEgaW4gYW4gZWZmaWNpZW50IHdheS4KSSBleHBlY3QgeW91IHRvIGhlbHAgb3RoZXIgdGVhbSBtZW1iZXJzLCBpbmNsdWRpbmcgdW5kZXJncmFkdWF0ZSByZXNlYXJjaCBhc3Npc3RhbnRzIHdpdGggaW5kZXBlbmRlbnQgcmVzZWFyY2ggcHJvamVjdHMsIEhvbm9ycyBwcm9qZWN0cyBhbmQgdGhlc2VzLCBqb2Igb3IgZ3JhZHVhdGUgYXBwbGljYXRpb25zL2ludGVydmlld3MsIGV0Yy4KRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBidWlsZCBpbXBvcnRhbnQgc2tpbGxzIGluIG1lbnRvcmluZy4KClJlZ2FyZGxlc3Mgb2YgeW91ciBzb3VyY2Ugb2YgZnVuZGluZywgeW91IGFyZSBleHBlY3RlZCB0byBzcGVuZCBtb3N0IG9mIHlvdXIgdGltZSBkb2luZyBsYWItcmVsYXRlZCByZXNlYXJjaC4KSWYgeW91IGFyZSBmdW5kZWQgb24gYSByZXNlYXJjaCBhc3Npc3RhbnRzaGlwIGZyb20gdGhlIGxhYiwgSSBleHBlY3QgeW91IHdpbGwgc3BlbmQgYXQgbGVhc3QgMjAgaG91cnMgKGZvciBhIGZ1bGwtdGltZSBhc3Npc3RhbnRzaGlwOyBhdCBsZWFzdCAxMCBob3VycyBmb3IgYSBoYWxmLXRpbWUgYXNzaXN0YW50c2hpcCkgZG9pbmcgbGFiLXJlbGF0ZWQgcmVzZWFyY2ggZnJvbSB0aGUgcmVsZXZhbnQgZ3JhbnQocykgYW5kIGxhYi1hc3NpZ25lZCB3b3JrIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSBjb3Vyc2V3b3JrLCBjbGluaWNhbCB3b3JrLCB3b3JrIHRvd2FyZCBwcm9ncmFtIHJlcXVpcmVtZW50cyAoZS5nLiwgQ29tcHMgZXhhbXMpLCBvdGhlciByZXNlYXJjaC1yZWxhdGVkIHdvcmssIGFuZCBvdGhlciBlbmRlYXZvcnMuClRoaXMgaXMgYW4gZXRoaWNhbCBvYmxpZ2F0aW9uIGdpdmVuIG91ciBmZWRlcmFsIHNvdXJjZXMgb2YgZnVuZGluZy4KSWYgeW91IGFyZSB1bmFibGUgdG8gY29tbWl0IHRvIGEgZnVsbCByZXNlYXJjaCBsb2FkIChhbmQgdGhlcmVmb3JlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIG1lZXQgdGhlIGV4cGVjdGF0aW9ucyBvZiBhIHJlc2VhcmNoIGFzc2lzdGFudHNoaXApLCB5b3Ugc2hvdWxkIHRlbGwgbWUgYmVmb3JlIGFzc2lzdGFudHNoaXBzIGFyZSBhc3NpZ25lZCwgc28geW91IGNhbiBiZSBnaXZlbiBhIHRlYWNoaW5nIGFzc2lzdGFudHNoaXAgb3IgYW5vdGhlciBzb3VyY2Ugb2YgZnVuZGluZy4KTmV2ZXJ0aGVsZXNzLCBldmVuIHdpdGggYSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCB5b3UgYXJlIGV4cGVjdGVkIHRvIHNwZW5kIG1vc3Qgb2YgeW91ciB0aW1lIGRvaW5nIGxhYi1yZWxhdGVkIHJlc2VhcmNoLgpZb3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMTAgaG91cnMgcGVyIHdlZWsgZG9pbmcgdGVhY2hpbmctcmVsYXRlZCB3b3JrIGZvciBhIGhhbGYtdGltZSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCBhbmQgbm90IG1vcmUgdGhhbiAyMCBob3VycyBmb3IgYSBmdWxsLXRpbWUgdGVhY2hpbmcgYXNzaXN0YW50c2hpcCAoYW5kIGdlbmVyYWxseSBtdWNoIGxlc3MgdGhhbiB0aGF0KS4KCllvdSBzaG91bGQgdGFsayB3aXRoIG1lIGFuZCBnZXQgbXkgYXBwcm92YWwgYmVmb3JlIGRvaW5nIG9yIGFkZGluZyBhbnkgZXh0ZXJuYWwgcHJhY3RpY2EuClBlciBsYWIgYW5kIHByb2dyYW0gZXhwZWN0YXRpb25zLCB5b3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMS41IGZ1bGwgZGF5cyAoaS5lLiwgMTIgaG91cnMpIGRvaW5nIGNsaW5pYy1yZWxhdGVkIHdvcmsgcGVyIHdlZWsuCkRvIG5vdCBmb2N1cyB0b28gbXVjaCBvbiBjbGluaWNhbCBob3VyczsgUGguRC4gc3R1ZGVudHMgZnJvbSBub24tY2xpbmljYWwgc2NpZW5jZSBwcm9ncmFtcyBhbmQgUHN5LkQuIHN0dWRlbnRzIHdpbGwgaGF2ZSB3YXkgbW9yZSBjbGluaWNhbCBob3VycyB0aGFuIHlvdeKAlHlvdSBhcmUgbm90IGNvbXBldGluZyB3aXRoIHRoZW0gZm9yIHRoZSBzYW1lIHR5cGVzIG9mIHNpdGVzLgpZb3Ugd2lsbCBiZSBtb3N0IGNvbXBldGl0aXZlIGF0IFtjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXNdKGh0dHBzOi8vd3d3LmFjYWRwc3ljaGNsaW5pY2Fsc2NpZW5jZS5vcmcvaW50ZXJuc2hpcC1wcm9ncmFtcy5odG1sKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8yVlJLLUpSTVEpLCB3aGljaCBjYXJlIG11Y2ggbW9yZSBhYm91dCB0aGUgKnF1YWxpdHkqIG9mIHRyYWluaW5nIHRoYW4gdGhlICpxdWFudGl0eSogb2YgdHJhaW5pbmcuCkFuZCBVSSBoYXMgdG9wLW5vdGNoIGNsaW5pY2FsIHRyYWluaW5nLgpJbnRlcm5zaGlwIHNpdGVzIGFsc28gY2FyZSBoZWF2aWx5IGFib3V0IHNjaWVudGlmaWMgcHJvZHVjdGl2aXR5IGluY2x1ZGluZyBwdWJsaWNhdGlvbnMgKFtMdW5kIGV0IGFsLiwgMjAxNl0oaHR0cHM6Ly9wc3ljbmV0LmFwYS5vcmcvcmVjb3JkLzIwMTUtNTcwNzMtMDAxKSksIGFuZCB0aGlzIGlzIGV2ZW4gbW9yZSB0cnVlIGZvciBjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXMuCkkgaGFkIGZvdXIgZmlyc3QtYXV0aG9yZWQgcHVibGljYXRpb25zIChuaW5lIHRvdGFsKSBhbmQgYW4gTlJTQSB3aGVuIEkgYXBwbGllZCBmb3IgaW50ZXJuc2hpcCBhbmQgcmVjZWl2ZWQgMTMgaW50ZXJ2aWV3IGludml0YXRpb25zIG91dCBvZiAxNSBzaXRlcy4KSSBhbSBoYXBweSB0byBzaGFyZSBteSBwcmVwYXJhdGlvbiwgYXBwbGljYXRpb24sIGFuZCBpbnRlcnZpZXcgbWF0ZXJpYWxzIGV0Yy4KZm9yIGludGVybnNoaXBzLCBqb2JzLCBldGMuIGFuZCB0byB3b3JrIHdpdGggeW91IHRvIG1ha2UgdGhlbSBhcyBzdHJvbmcgYXMgcG9zc2libGUuCgpQbGVhc2UgZG8gbm90IGhpZGUgaW4geW91ciBvZmZpY2U7IGdldCBvdXQgYW5kIG1lZXQgcGVvcGxlIGF0IGdyb3VwIGFuZCBkZXBhcnRtZW50YWwgZXZlbnRzLgpJZiBhIGNvbGxvcXVpdW0gaXMgZ2l2ZW4gaW4gYW4gYXJlYSBpbiB3aGljaCB5b3UgaGF2ZSBhIHJlc2VhcmNoIGludGVyZXN0LCBzaWduIHVwIHRvIG1lZXQgd2l0aCB0aGUgc3BlYWtlci4KR28gdXAgdG8gc3BlYWtlcnMgYWZ0ZXIgdGFsa3MsIGludHJvZHVjZSB5b3Vyc2VsZiwgYW5kIGV4cHJlc3MgaW50ZXJlc3QgaW4gdGhlaXIgd29yayBieSBhc2tpbmcgcXVlc3Rpb25zLgpOZXR3b3JraW5nIHNraWxscyBhcmUgaW1wb3J0YW50IGFuZCBjYW4gb2Z0ZW4gbGVhZCB0byBqb2Igb3Bwb3J0dW5pdGllcy4KCiMjIENhcmVlciBkZXZlbG9wbWVudCB7I2NhcmVlckRldmVsb3BtZW50fQoKSSBzdHJvbmdseSBiZWxpZXZlIHRoYXQgdGhlIGxhYiBncm93cyBiZXR0ZXIgd2l0aCBlYWNoIHRyYWluZWUgYWNoaWV2aW5nIHRoZWlyIGNhcmVlciBnb2Fscy4KSSByZXNwZWN0IGFuZCBzdXBwb3J0IGVhY2ggdHJhaW5lZSdzIGNhcmVlciBjaG9pY2UgYW5kIHVuZGVyc3RhbmQgdGhhdCB0aGluZ3MgY2FuIGNoYW5nZSBvdmVyIHRpbWUuCkF0IHRoZSBzYW1lIHRpbWUsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgYSBbcmVzZWFyY2gtb3JpZW50ZWQgdHJhaW5pbmcgcHJvZ3JhbV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9ncmFkdWF0ZSkgYW5kIGlzIGJlc3QgYWxpZ25lZCB3aXRoIGNhcmVlcnMgaW4gd2hpY2ggcmVzZWFyY2ggd2lsbCBiZSBhIGtleSBjb21wb25lbnQuCkZvciBwcm9zcGVjdGl2ZSBncmFkdWF0ZSBzdHVkZW50cywgaWYgeW91IGhhdmUgZ29hbHMgb2YgYmVpbmcgYSBjbGluaWNpYW4sIEkgd291bGQgZGlzc3VhZGUgeW91IGZyb20gam9pbmluZyBvdXIgcHJvZ3JhbSBhbmQgdGhpcyBsYWI7IHlvdSB3b3VsZCBub3QgYmUgaGFwcHkgaGVyZS4KCldlIHdpbGwgZGlzY3VzcyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucyBhbmQgaG93IEkgY2FuIGJlc3Qgc3VwcG9ydCB0aGVtLgpEdXJpbmcgZWFjaCBGYWxsIHNlbWVzdGVyLCBJIGV4cGVjdCB5b3UgdG8gY29tcGxldGUgYW4gSW5kaXZpZHVhbCBEZXZlbG9wbWVudCBQbGFuIChbaHR0cHM6Ly9teWlkcC5zY2llbmNlY2FyZWVycy5vcmddKGh0dHBzOi8vbXlpZHAuc2NpZW5jZWNhcmVlcnMub3JnKTsgYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9NVDI3LUNQUDIpLCBhbmQgdG8gcmV2aWV3IGFuZCBkaXNjdXNzIHRoZSByZXN1bHRzIHdpdGggbWUuCkkgZXhwZWN0IHlvdSB0byBpbmZvcm0gbWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZSBpbiB5b3VyIGNhcmVlciBwbGFucyBzbyB0aGF0IHlvdXIgbGFiIGFjdGl2aXRpZXMgY2FuIGJlIGJldHRlciBhbGlnbmVkIHRvIHlvdXIgbmV3IGdvYWxzLgpJbiBhZGRpdGlvbiB0byBhY2FkZW1pYyBjYXJlZXJzIChlLmcuLCByZXNlYXJjaC90ZWFjaGluZy9jbGluaWNhbCB3b3JrIGF0IFIxIHVuaXZlcnNpdHksIGFjYWRlbWljIG1lZGljYWwgY2VudGVyLCBvciBsaWJlcmFsIGFydHMgY29sbGVnZSksIEkgc3VwcG9ydCBwbGFucyBmb3IgaW5kdXN0cnkgYW5kIG5vbi1hY2FkZW1pYyBjYXJlZXJzIChlLmcuLCBkYXRhIHNjaWVuY2UsIGNvbnN1bHRpbmcsIGdvdmVybm1lbnQsIE5HTzsgdGhlc2UgYXJlIGp1c3QgZXhhbXBsZXPigJR0aGVyZSBhcmUgbWFueSBvdGhlcnMpLgpZb3UgYXJlIHdlbGNvbWUgdG8gZ2V0IHRoZSB0cmFpbmluZyB5b3UgbmVlZCwgcHJvdmlkZWQgdGhhdCB5b3UgbWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiB5b3VyIGRlZ3JlZS1yZWxhdGVkIHRyYWluaW5nIGFuZCByZXNlYXJjaC4KU2VlayB0aGUgZXhwZXJpZW5jZSBvZiBmYWN1bHR5LCBwcm9mZXNzaW9uYWxzLCBwb3N0LWRvY3MsIGFuZCBvdGhlciBzdHVkZW50cyB0byBoZWxwIHlvdSBvdXQuCgpJZiB5b3Ugd2FudCBhbiBhY2FkZW1pYyBqb2IsIEkga25vdyB3aGF0IGl0IHRha2VzIHRvIGdldCBvbmUgKGluIHRlcm1zIG9mIHB1YmxpY2F0aW9ucywgZ3JhbnRzLCBldGMuKSwgc28ganVzdCBhc2suCkkgYW0gYWxzbyBoYXBweSB0byB0YWxrIHdpdGggeW91IGFib3V0IHdoYXQgYW4gUjEgYWNhZGVtaWMgam9iIGlzIGxpa2UgKGUuZy4sIHNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgYSBsYWIsIHRlYWNoaW5nKeKAlEkgbG92ZSBteSBqb2IgYW5kIGhhdmUgYSBwYXNzaW9uIGZvciB0aGUgd29yayB3ZSBkby4KSSBnZXQgdG8gYmUgcGFydCBvZiBhbiBpbnZpZ29yYXRpbmcgaW50ZWxsZWN0dWFsIGVudmlyb25tZW50IGluIHdoaWNoIEkgZ2V0IHRvIGxlYXJuIGV2ZXJ5IGRheSwgZ2V0IHRvIGJlIGFyb3VuZCBleGNpdGluZyBpZGVhcyBhbmQgd29ybGQtcmVub3duZWQgZXhwZXJ0cyBjb25kdWN0aW5nIGN1dHRpbmctZWRnZSByZXNlYXJjaCwgYW5kIGhhdmUgdGhlIGludGVsbGVjdHVhbCBmcmVlZG9tIHRvIGdldCBwYWlkIHRvIHN0dWR5IHdoYXRldmVyIEkgd2FudCB0byBzdHVkeS4KSSBjYW5ub3QgaW1hZ2luZSBhbnl0aGluZyBiZXR0ZXIuClRoYXQgc2FpZCwgdGhlcmUgYXJlIG5vdCBlbm91Z2ggZmFjdWx0eSBwb3NpdGlvbnMgZm9yIGFsbCBQaC5ELiBncmFkdWF0ZXMgYW5kIGl0IGlzIG5vdCB0aGUgYmVzdCBmaXQgZm9yIGV2ZXJ5b25lLgpJIHdpbGwgd29yayB3aXRoIHlvdSB0byBmaW5kIHRoZSBjYXJlZXIgdGhhdCBpcyB0aGUgcmlnaHQgZml0IGZvciB5b3UuCgojIyBNeSBhcHByb2FjaCB0byBtZW50b3JzaGlwIHsjYXBwcm9hY2hUb01lbnRvcnNoaXB9CgpBcyBhIGNsaW5pY2FsLWRldmVsb3BtZW50YWwgcHN5Y2hvbG9naXN0LCBJIHRha2UgYSBkZXZlbG9wbWVudGFsIHBlcnNwZWN0aXZlIHRvIG1lbnRvcnNoaXAuCkVhcmx5IG9uIGluIHlvdXIgdHJhaW5pbmcsIEkgYWltIHRvIHByb3ZpZGUgc3VmZmljaWVudCBzdHJ1Y3R1cmUgYW5kIHNjYWZmb2xkaW5nLgpBcyB5b3UgZGV2ZWxvcCBwcm9maWNpZW5jeSBpbiBhIHNraWxsLCBJIHN0cml2ZSB0byB3aXRoZHJhdyB0aGUgc2NhZmZvbGRzIHNvIHRoYXQgeW91IGRldmVsb3AgaW5kZXBlbmRlbmNlIGFuZCBhdXRvbm9teS4KVGhlIHNlY29uZCBhcHByb2FjaCB0byBteSBtZW50b3JzaGlwIHN0eWxlIGlzIGFuIGVtcGhhc2lzIG9uIGxlYXJuaW5nIGJ5IGRvaW5nLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBsZWFybiBieSBhcHBseWluZyB0aGUgc2tpbGxzIHRvIHByb2plY3RzIHRoZXkgYXJlIHdvcmtpbmcgb24gaW4gdGhlIGxhYiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBjb3Vyc2V3b3JrIGFuZCBvdGhlciBtZXRob2RzLgpJIHZpZXcgbXkgcm9sZSBhcyBmb3N0ZXJpbmcgeW91ciBwcm9mZXNzaW9uYWwgY29uZmlkZW5jZSBhbmQgZW5jb3VyYWdpbmcgeW91ciBjcml0aWNhbCB0aGlua2luZywgc2tlcHRpY2lzbSwgYW5kIGNyZWF0aXZpdHkuCgpEbyBub3QgaGVzaXRhdGUgdG8gYXNrIHF1ZXN0aW9ucyBpZiBJIGFtIGFyb3VuZDsgaXQgaXMgb2Z0ZW4gYmV0dGVyIHRvIGFzayBxdWVzdGlvbnMgdGhhbiB0byBtYWtlIGEgbWlzdGFrZSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBlYXNpbHkgYXZvaWRlZC4KSSBhbSBwZXJpb2RpY2FsbHkgYXdheSwgYW5kIEkgZXhwZWN0IHlvdSB0byBnZXQgdGhpbmdzIGRvbmUgd2VsbCB3aXRob3V0IG1lLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gYmUgaW5kZXBlbmRlbnQ7IGRvIG5vdCBiZSBhZnJhaWQgdG8gdHJ5IHRvIGRvIGRldGVjdGl2ZSB3b3JrIG9uIHlvdXIgb3duIGlmIEkgYW0gbm90IGFyb3VuZC4KVGhlcmUgaXMgYWxzbyBhIGJlbmVmaXQgdG8gbGVhcm5pbmcgYnkgdHJpYWwgYW5kIGVycm9yLgpXZSBoYXZlIGEgaGVscGZ1bCwgZXhwZXJpZW5jZWQgbGFiLCBzbyBrbm93IHRoYXQgcGVvcGxlIG90aGVyIHRoYW4gbWUgbWF5IGJlIGV4Y2VsbGVudCByZXNvdXJjZXMuCgpJbiBvcmRlciBmb3Igc3VwZXJ2aXNpb24gdG8gYmUgZWZmZWN0aXZlLCBJIGhvcGUgdGhhdCBvdXIgcmVsYXRpb25zaGlwIHdpbGwgaW5jbHVkZSBvcGVuIGNvbW11bmljYXRpb24gYW5kIHR3by13YXkgZmVlZGJhY2suCklmIHRoZXJlIGFyZSB3YXlzIEkgY2FuIGJlIGEgYmV0dGVyIG1lbnRvciBmb3IgeW91LCBwbGVhc2UgbGV0IG1lIGtub3cuCkkgdmFsdWUgb3Blbm5lc3MgdG8gbGVhcm5pbmcgYXMgYSBjb250aW51b3VzLCBkZXZlbG9wbWVudGFsLCBsaWZlLWxvbmcgcHJvY2VzcyBhbmQgSSB3aWxsIG1vZGVsIGFuZCBwcm9tb3RlIG9wZW5uZXNzIGFuZCByZWNlcHRpdml0eSB0byBmZWVkYmFjay4KSSBleHBlY3QgdGhhdCB0cmFpbmVlcyB3aWxsIGV4cHJlc3MgZGlzYWdyZWVtZW50cyBhbmQgZGlmZmVyZW5jZXMgaW4gb3BpbmlvbiB3aXRoIG1lLgpJIGRvIG5vdCB2aWV3IHByb2Zlc3Npb25hbCBkaXNhZ3JlZW1lbnRzIGFzIHBlcnNvbmFsOyB0aGUgYmVzdCBzY2llbmNlIGFyaXNlcyBvdXQgb2YgdGhlIGZyZWUgYW5kIGNvbnN0cnVjdGl2ZSBleGNoYW5nZSBvZiBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgYW5kIGlkZWFzLgpJIGV4cGVjdCB0aGF0IHRyYWluZWVzIHdpbGwgYXR0ZW1wdCB0byBhZGRyZXNzIGNvbmZsaWN0cyBpbiB0aGUgbWVudG9y4oCTbWVudGVlIHJlbGF0aW9uc2hpcC4KCkkgc3RyaXZlIHRvIGJ1aWxkIGFuZCB0byBzdXBwb3J0IGEgZGl2ZXJzZSB0ZWFtLCB0byB0cmVhdCBwZW9wbGUgZXF1aXRhYmx5LCBhbmQgdG8gYmUgaW5jbHVzaXZlIG9mIHBlb3BsZSBmcm9tIGFsbCBiYWNrZ3JvdW5kcy4KSWYgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHRoZSBsYWIgb3IgSSBjYW4gZG8gdG8gaGVscCB5b3Ugb3Igb3RoZXJzIGZlZWwgbW9yZSBpbmNsdWRlZCwgcGxlYXNlIGxldCBtZSBrbm93LgoKSSBhbSBjb21taXR0ZWQgdG8gbWVudG9yaW5nIHlvdSwgZXZlbiBhZnRlciB5b3UgbGVhdmUgbXkgbGFiLgpJIGFtIGNvbW1pdHRlZCB0byB5b3VyIGVkdWNhdGlvbiBhbmQgdHJhaW5pbmcgd2hpbGUgeW91IGFyZSBpbiBteSBsYWIsIGFuZCB0byBhZHZpc2luZyBhbmQgZ3VpZGluZyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudOKAlHRvIHRoZSBleHRlbnQgeW91IHdpc2jigJRsb25nIGFmdGVyIHlvdSBsZWF2ZS4KSSB3aWxsIHByb3ZpZGUgaG9uZXN0IGxldHRlcnMgb2YgZXZhbHVhdGlvbiBmb3IgeW91IHdoZW4geW91IHJlcXVlc3QgdGhlbS4KCiMjIENvbW11bmljYXRpb24geyNjb21tdW5pY2F0aW9ufQoKRmVlbCBmcmVlIHRvIHVzZSBTbGFjayBmb3IgYnJpZWYgY29tbXVuaWNhdGlvbiB3aXRoIG1lLgpIb3dldmVyLCB3ZSBkbyBub3QgdXNlIGRpcmVjdCBtZXNzYWdlcyBpbiBTbGFjayAoc2VlIHRoZSBsYWIgbWFudWFsKS4KQWxsIFNsYWNrIGNvbW11bmljYXRpb24gc2hvdWxkIGJlIGluIHRlYW0tZmFjaW5nIGNoYW5uZWxzIHNvIG90aGVycyBjYW4gYmVuZWZpdCBmcm9tIHRoZSBpbmZvcm1hdGlvbiBhbmQgc28gd2UgY2FuIGdvIGJhY2sgYW5kIHJlZmVyZW5jZSBpdCBsYXRlci4KRm9yIGxvbmdlciBjb21tdW5pY2F0aW9uLCBwbGVhc2UgY2FsbCBvciBzdG9wIGJ5IG15IG9mZmljZS4KSSBmaW5kIHRoaXMgbXVjaCBtb3JlIGVmZmljaWVudCBhbmQgcGxlYXNhbnQgdGhhbiB3cml0aW5nIGFuZCByZWFkaW5nIGxlbmd0aHkgY29tbXVuaWNhdGlvbi4KRm9yIHNlbmRpbmcgbWFudXNjcmlwdHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBhbmQgbWVzc2FnZXMgdGhhdCBkbyBub3QgbmVlZCBhbiB1cmdlbnQgcmVzcG9uc2UsIHlvdSBtYXkgZW1haWwgbWUuClBsZWFzZSBsaW1pdCB5b3VyIHVzZSBvZiBlbWFpbCBhcyBtdWNoIGFzIHBvc3NpYmxlLgpbSSBoYXRlIGVtYWlsXShodHRwczovL3d3dy5jaHJvbmljbGUuY29tL2FydGljbGUvaXMtZW1haWwtbWFraW5nLXByb2Zlc3NvcnMtc3R1cGlkKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9UODU1LVU5TVEpOyB3ZSBnZXQgd2F5IHRvbyBtdWNoIG9mIGl0LCBpdCBpcyBpbXBlcnNvbmFsLCBpdCBkb2VzIG5vdCBjb21tdW5pY2F0ZSB0b25lIHdlbGwgKG9mdGVuIGxlYWRpbmcgdG8gbWlzaW50ZXJwcmV0YXRpb24gYW5kIHNvbWV0aW1lcyBodXJ0IGZlZWxpbmdzKSwgYW5kIGl0IGlzIGRpZmZpY3VsdCBmb3IgbWUgdG8gc3RheSBvbiB0b3Agb2YgbXkgaW5ib3guCkkgZW5jb3VyYWdlIHlvdSB0byBzdG9wIGJ5IG15IG9mZmljZSBvciB0byBjYWxsIG15IG9mZmljZSBwaG9uZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZW1haWwsIHdoZW5ldmVyIHBvc3NpYmxlLgoKV2hlbiB5b3UgY29udGFjdCBtZSBvciBzZW5kIG1lIG1hdGVyaWFscywgeW91IGNhbiBleHBlY3QgbWUgdG8gcmVzcG9uZCBwcm9tcHRseS4KTGlrZXdpc2UsIEkgZXhwZWN0IHlvdSB0byByZXNwb25kIHByb21wdGx5IHdoZW4gSSBvciBhbm90aGVyIGxhYiBtZW1iZXIgY29udGFjdHMgeW91IChpbiBtb3N0IGNhc2VzLCB3aXRoaW4gNDggaG91cnMpLgpJZiB5b3UgbmVlZCB0aW1lIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBpbiByZXNwb25zZSB0byBhIFNsYWNrIG1lc3NhZ2Ugb3IgZW1haWwsIHBsZWFzZSBhY2tub3dsZWRnZSByZWNlaXB0IG9mIHRoZSBtZXNzYWdlIGFuZCBpbmRpY2F0ZSB3aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLgpBdCB0aW1lcywgSSBtYXkgY29udGFjdCB5b3UgYnkgZW1haWwgb3IgU2xhY2sgYWZ0ZXIgaG91cnMgKGlmIHRoYXQgaXMgd2hlbiBpdCBpcyBtb3N0IGNvbnZlbmllbnQsIHNvIHRoYXQgSSBkbyBub3QgZm9yZ2V0IHRvKS4KSG93ZXZlciwgeW91IGFyZSBcKm5vdFwqIGV4cGVjdGVkIHRvIHJlc3BvbmQgYWZ0ZXIgaG91cnMuCkkgd2lsbCBjYWxsIHlvdSBpZiBzb21ldGhpbmcgaXMgdXJnZW50LgoKQmUgbWluZGZ1bCBvZiB0aGUgY29uc3RyYWludHMgb24gbXkgdGltZS4KQWxsb3cgYSBtaW5pbXVtIG9mIG9uZSB3ZWVrIHByaW9yIHRvIHN1Ym1pc3Npb24gZGVhZGxpbmVzIGZvciBtZSB0byByZWFkIGFuZCByZXNwb25kIHRvIHNob3J0IG1hdGVyaWFscyBzdWNoIGFzIGNvbmZlcmVuY2UgYWJzdHJhY3RzIGFuZCB0aHJlZSB3ZWVrcyBmb3IgbWUgdG8gd29yayBvbiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBhbmQgbGV0dGVycyBvZiByZWNvbW1lbmRhdGlvbi4KUGxlYXNlIGRvIG5vdCBhc3N1bWUgSSBjYW4gcmVhZCBtYXRlcmlhbHMgd2l0aGluIGEgZGF5IG9yIHR3bywgZXNwZWNpYWxseSB3aGVuIEkgYW0gdHJhdmVsaW5nLgpQbGVhc2Ugb25seSBzZW5kIGRyYWZ0cyBvZiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBkaXNzZXJ0YXRpb25zLCBldGMuIHdoZW4gdGhleSBhcmUgeW91ciA8dT5iZXN0IHBvc3NpYmxlIHdvcms8L3U+ICh0aGUgSGVucnkgS2lzc2luZ2VyIGNyaXRlcmlvbikuClRoYXQgbWVhbnMgZ29pbmcgdGhyb3VnaCBtdWx0aXBsZSByZXZpc2lvbnMsIHJlYWRpbmcgaXQgb3V0IGxvdWQgdG8geW91cnNlbGYsIGV0Yy4KSGVyZSBpcyBhbiBleGNlcnB0IGFib3V0IERyLiBLaXNzaW5nZXIgKFtLcmF1c21hbiwgMjAyMV0oaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvandtZy4yMTk5MikpOgoKPiAiSGVucnkgS2lzc2luZ2VyLCBhIGZvcm1lciBTZWNyZXRhcnkgb2YgU3RhdGUgdW5kZXIgUHJlc2lkZW50IE5peG9uLCB1bmRlcnN0b29kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbnRpbnVhbGx5IGltcHJvdmluZyB3cml0aW5nIHNraWxscy4KPiBXaW5zdG9uIExvcmQgd2FzIEtpc3NpbmdlcidzIHNwZWVjaCB3cml0ZXIgYW5kIGR1cmluZyB0aGUgbGF0ZSAxOTYwcyBhbmQgZWFybHkgMTk3MHMsIExvcmQgaGFkIGJlZW4gdGFza2VkIHdpdGggd3JpdGluZyBhIHNwZWVjaCBhYm91dCB0aHJlZSBpbXBvcnRhbnQgZm9yZWlnbiBwb2xpY3kgcHJvamVjdHM6IHRoZSBvcGVuaW5nIG9mIENoaW5hIHRvIHRoZSBXZXN0LCBicmluZ2luZyB0aGUgVmlldG5hbSBXYXIgdG8gYSBjbG9zZSwgYW5kIGFuIGF0dGVtcHQgdG8gaW1wcm92ZSByZWxhdGlvbnMgd2l0aCB0aGUgUnVzc2lhbnMuCldyaXRpbmcgYSBzcGVlY2ggZm9yIEtpc3NpbmdlciB3YXMgbm90IGFuIGVhc3kgam9iIGJlY2F1c2UgS2lzc2luZ2VyIHdhcyBhIHNwZWVjaCB3cml0ZXIgaGltc2VsZiBhbmQgaGFyc2ggY3JpdGljLgo+IAo+IFRoZSBzdG9yeSBnb2VzIHRoYXQgTG9yZCBwcmVwYXJlZCBhbmQgc3VibWl0dGVkIGEgZmlyc3QgZHJhZnQgb2YgYSBzcGVlY2ggdG8gS2lzc2luZ2VyIG9uZSBldmVuaW5nLgo+IEtpc3NpbmdlciB0aGVuIGNhbGxlZCBMb3JkIHRoZSBuZXh0IG1vcm5pbmcgZm9yIGZlZWRiYWNrIG9uIHRoZSBzcGVlY2ggYW5kIGFza3MgIklzIHRoaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCByZXBsaWVzICJIZW5yeSwgSSB0aG91Z2h0IHNvLCBidXQgSSdsbCB0cnkgYWdhaW4uIgo+IAo+IExvcmQgdGhlbiB3ZW50IGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQsIHR3ZWFrZWQsIHJldmlzZWQsIGFuZCByZXN1Ym1pdHRlZCBhbm90aGVyIGRyYWZ0IGEgZmV3IGRheXMgbGF0ZXIuCj4gCj4gVGhlIG5leHQgZGF5LCBLaXNzaW5nZXIgY2FsbGVkIExvcmQgaW50byBoaXMgb2ZmaWNlIGFuZCBhZ2FpbiBhc2tlZCAiQXJlIHlvdSBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCBiZWdhbiB0byBxdWVzdGlvbiBoaXMgd29yayBhbmQgc2FpZCAiV2VsbCwgSSByZWFsbHkgdGhvdWdodCBzby4gSSdsbCB0cnkgYWdhaW4uIgo+IAo+IEJlbGlldmUgaXQgb3Igbm90LCB0aGlzIHVuY29tZm9ydGFibGUgYW5kIHJlamVjdGluZyBwcm9jZXNzIHdlbnQgb24gZm9yIDggZHJhZnRzLCBlYWNoIHRpbWUgS2lzc2luZ2VyIHN0YW5kaW5nIGZpcm0gdG8gaGlzIG9yaWdpbmFsIGZlZWRiYWNrIG9mICJJcyB0aGlzIHRoZSBiZXN0IHlvdSBjYW4gZG8/Igo+IAo+IExvcmQgcmV0dXJuZWQgdG8gS2lzc2luZ2VyJ3Mgb2ZmaWNlIHdpdGggdGhlIG5vdyBuaW50aCBkcmFmdCBhbmQgYXdhaXRlZCBoaXMgcmVzcG9uc2UuCj4gCj4gU3VyZWx5IGVub3VnaCwgS2lzc2luZ2VyIGNhbGxlZCBMb3JkIGluIHRoZSBuZXh0IGRheSBhbmQgYXNrcyBoaW0gdGhlIHNhbWUgcXVlc3Rpb24sICJJcyB0aGlzIHRoZSBiZXN0IHlvdSBjYW4gZG8/Igo+IAo+IExvcmQsIG5vdyBjb21wbGV0ZWx5IGZlZCB1cCwgZnVyaW91c2x5IHJlcGxpZWQgIkhlbnJ5ISBJJ3ZlIGJlYXRlbiBteSBicmFpbnMgb3V04oCUdGhpcyBpcyB0aGUgbmludGggZHJhZnQhIEkga25vdyBpdCdzIHRoZSBiZXN0IEkgY2FuIGRvOyBJIGNhbid0IHBvc3NpYmx5IGltcHJvdmUgb25lIG1vcmUgd29yZCEhISIKPiAKPiBLaXNzaW5nZXIgdGhlbiBsb29rZWQgYXQgTG9yZCBhbmQgbm9uY2hhbGFudGx5IHNhaWQgIldlbGwsIGluIHRoYXQgY2FzZSwgbm93IEknbGwgcmVhZCBpdC4iCgojIyBMYWIgY3VsdHVyZSB7I2xhYkN1bHR1cmV9CgpXaXRoaW4gYSBsYWIgZW52aXJvbm1lbnQsIG9jY2FzaW9uYWxseSBjb21wZXRpdGl2ZSB0aG91Z2h0cyBvciBlbW90aW9ucyBtYXkgYXJpc2UuClRoaXMgbGFiIGlzIG5vdCBhIHBsYWNlIGZvciBjb21wZXRpdGlvbiwgYnV0IGNvbGxhYm9yYXRpb24uCldlIGFyZSBhIGdyb3VwIG9mIHJlc2VhcmNoZXJzIHdvcmtpbmcgdG93YXJkIGEgY29tbW9uIGdvYWwsIGFuZCBhbGwgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byB3b3JrIHRvZ2V0aGVyIGNvbGxhYm9yYXRpdmVseS4KQSByaXNpbmcgdGlkZSBsaWZ0cyBhbGwgYm9hdHMuCkNvbXBldGl0aXZlIGJlaGF2aW9yIGlzIG5vdCBjb25kdWNpdmUgdG8gYSBwcm9kdWN0aXZlIGxhYm9yYXRvcnksIGFuZCB0aGlzIHNvcnQgb2YgYmVoYXZpb3Igd2lsbCBzdHJpY3RseSBub3QgYmUgdG9sZXJhdGVkLgpEbyBub3QgY29tcGFyZSB5b3Vyc2VsZiB0byBvdGhlcnMuCllvdSBhcmUgb24geW91ciBvd24gcGF0aC4KRWFjaCBtZW50ZWUgbmVlZHMgZGlmZmVyZW50IHRoaW5ncywgYW5kIEkgd2lsbCBkbyBteSBiZXN0IHRvIGdldCB0byBrbm93IHlvdSBhcyBhbiBpbmRpdmlkdWFsLCBhbmQgeW91ciBpbmRpdmlkdWFsIHNraWxscywgcHJlZmVyZW5jZXMsIGFuZCBnb2Fscy4KQ3VsdGl2YXRpbmcgYSBjb21tb24gdmFsdWUgb2YgaHVtaWxpdHkgaXMgaW1wb3J0YW50IGluIHJlc2VhcmNoLCBiZWNhdXNlIHdlIGFyZSBhbHdheXMgYXNraW5nIHF1ZXN0aW9ucyB0byB3aGljaCB3ZSBpbmhlcmVudGx5IGRvIG5vdCBrbm93IHRoZSBhbnN3ZXIuCkVsaXRpc3QgYmVoYXZpb3IgaXMgbm90IGNvbmR1Y2l2ZSB0byBncm93dGggYW5kIGRldmVsb3BtZW50LCBhbmQgYXMgc3VjaCwgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgbGFiIGVudmlyb25tZW50LgpUaGUgbGFiIGN1bHR1cmUgaXMgb2YgdXRtb3N0IGltcG9ydGFuY2UgdG8gYSBoZWFsdGh5LCBmdW5jdGlvbmFsIGdyb3VwLCBhbmQgcHJvZmVzc2lvbmFsIGJlaGF2aW9yIGlzIGF0IHRoZSBjZW50ZXIgb2YgYnVpbGRpbmcgdGhpcyBjdWx0dXJlLgpJZiB5b3UgaGF2ZSBqb2luZWQgdGhlIGxhYiwgeW91IGhhdmUgYmVlbiBzZWxlY3RlZCBhbW9uZyBtYW55IHF1YWxpZmllZCBhcHBsaWNhbnRzIGZvciB0aGlzIHBvc2l0aW9uLgpJIGVuY291cmFnZSB5b3UgdG8gc2hhcmUgeW91ciB0aG91Z2h0cyBhbmQgaWRlYXMgd2l0aCB0aGUgbGFiLgpLZWVwaW5nIHRoZW0gdG8geW91cnNlbGYgd291bGQgYmUgYSBkaXNzZXJ2aWNlIHRvIHRoZSB0ZWFtLgoKIyMgUHJvZmVzc2lvbmFsaXNtIHsjcHJvZmVzc2lvbmFsaXNtfQoKU2hvdyB1cCBvbiB0aW1lLCBmdWxseSBwcmVwYXJlZCBmb3IgbWVldGluZ3MuCklmIHlvdSB3aWxsIG5lZWQgdG8gbWlzcyBhIG1lZXRpbmcsIGxldCB0aGUgcmVsZXZhbnQgdGVhbSBtZW1iZXJzIGtub3cgaW4gYWR2YW5jZSwgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxlLgpVbmV4Y3VzZWQgYWJzZW5jZXMgYXJlIG5vdCBhY2NlcHRhYmxlIGluIGEgcHJvZmVzc2lvbmFsIGVudmlyb25tZW50LgoKSWYgeW91IGhhdmUgY3JpdGljYWwgdGhvdWdodHMgdG8gc2hhcmUgd2l0aCBzb21lb25lLCBkbyBub3Qgc2VuZCB0aGVtIGluIFNsYWNrIG9yIGluIGVtYWlsOyBpbnN0ZWFkLCBjYWxsIG9yIHRhbGsgdG8gdGhlIHBlcnNvbiBkaXJlY3RseS4KQmUgcmVzcG9uc2l2ZSB0byBhZHZpY2UgYW5kIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20uClRoZSBmZWVkYmFjayB5b3UgZ2V0IGZyb20gbWUsIHlvdXIgY29sbGVhZ3VlcywgeW91ciBjb21taXR0ZWUgbWVtYmVycywgeW91ciBjb3Vyc2UgaW5zdHJ1Y3RvcnMsIHlvdXIgY2xpbmljYWwgc3VwZXJ2aXNvcnMsIGFuZCB5b3VyIHRlYWNoaW5nIHN1cGVydmlzb3JzIGlzIGludGVuZGVkIHRvIGltcHJvdmUgeW91ciB3b3JrIGFuZCBoZWxwIHlvdSBzdWNjZWVkLgpEbyB5b3VyIGJlc3Qgbm90IHRvIHRha2UgaXQgcGVyc29uYWxseS4KV2UgYWxsIGhhdmUgcm9vbSB0byBncm93LgoKIyMgSW50ZXJhY3Rpb25zIHdpdGggb3RoZXJzIHsjaW50ZXJhY3Rpb25zfQoKSSBleHBlY3QgYWxsIGxhYiBtZW1iZXJzIHRvIHJlc3BlY3QgZWFjaCBvdGhlci4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHlvdSBhcmUgZXhwZWN0ZWQgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlcnMsIHNlZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvbiAiSW50ZXJhY3Rpb25zIHdpdGggT3RoZXJzIiBpbiB0aGUgcGFnZSBvbiBbRXhwZWN0YXRpb25zIGZvciBFdmVyeW9uZSBpbiB0aGUgTGFiXShleHBlY3RhdGlvbnMtZXZlcnlvbmUuaHRtbCNpbnRlcmFjdGlvbnMpLgoKSWYgYW5vdGhlciBtZW1iZXIgb2YgdGhlIGxhYiBpcyBub3QgY29tcGx5aW5nIHdpdGggdGhlc2UgcG9saWNpZXMsIHBsZWFzZSBmaXJzdCBhdHRlbXB0IHRvIHNwZWFrIHRvIHRoZSBwZXJzb24gZGlyZWN0bHkuClRoZSBBUEEgQ29kZSBvZiBFdGhpY3MgYWR2aXNlcyB0aGF0IHRoaXMgaXMgYSBmaXJzdCBzdGVwIHRvd2FyZCByZXNvbHV0aW9uLgpJZiB0aGF0IGlzIG5vdCBwb3NzaWJsZSwgYXBwcm9wcmlhdGUsIG9yIHByb3ZlcyBpbmVmZmVjdGl2ZSAoaS5lLiwgZG9lcyBub3QgY2hhbmdlIGJlaGF2aW9yKSwgcGxlYXNlIHNwZWFrIHRvIG1lIGFib3V0IHRoZSBwcm9ibGVtIGltbWVkaWF0ZWx5LgpQbGVhc2UgYWxzbyBzcGVhayB0byBtZSBpZiB5b3UgdGhpbmsgeW91IGhhdmUgYW4gaW50ZXJwZXJzb25hbCBpc3N1ZSB3aXRoIG1lLgpJZiwgYWZ0ZXIgaGF2aW5nIHRhbGtlZCB3aXRoIG1lLCB5b3UgZmVlbCB0aGUgaXNzdWUgd2lsbCBub3QgYmUgcmVzb2x2ZWQgYW5kIHlvdSB3YW50IHRvIHNwZWFrIHRvIHNvbWVvbmUgZWxzZSB0byBhZGRyZXNzIHRoZSBpc3N1ZSwgZm9sbG93IHRoZSBjaGFpbiBvZiBjb21tYW5kIGFuZCB0YWxrIHRvIHRoZSBBcmVhIENvb3JkaW5hdG9yLCB0aGUgRGlyZWN0b3Igb2YgR3JhZHVhdGUgU3R1ZGllcywgYW5kL29yIHRoZSBEZXBhcnRtZW50YWwgRXhlY3V0aXZlIE9mZmljZXIuClRoZSBjaGFpbiBvZiBjb21tYW5kIGlzIGRlcGljdGVkIGluIHRoZSBbbGFiIG9yZ2FuaXphdGlvbmFsIGNoYXJ0XShtYW51YWwuaHRtbCNvcmdhbml6YXRpb25hbENoYXJ0KS4KCiMjIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHBsYW4geyNwZXJmb3JtYW5jZUltcHJvdmVtZW50UGxhbn0KCkluIHRoZSBjYXNlIHRoYXQgeW91ciBwcm9ncmVzcyBpcyB1bnNhdGlzZmFjdG9yeSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kLCB3ZSBuZWVkIHRvIGRpc2N1c3MgYW5kIGltcGxlbWVudCBhIHBsYW4gdG8gaW1wcm92ZSB5b3VyIHBlcmZvcm1hbmNlLCB3aGljaCBldmVudHVhbGx5IHdpbGwgYmUgaGVscGZ1bCBmb3IgeW91ciBjYXJlZXIgcGxhbiwgdG9vLgpUaGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgcGxhbiB3aWxsIGxpa2VseSBpbnZvbHZlIGNsb3NlciBtb25pdG9yaW5nIG9mIHlvdXIgcHJvZ3Jlc3MgYW5kIHJlc2VhcmNoIGFjdGl2aXRpZXMgdW50aWwgYSBwcmVkZWZpbmVkIGdvYWwgaXMgcmVhY2hlZCAoZS5nLiwgcHVibGlzaGluZyBhIHBhcGVyKS4KCiMjIEFjY29tbW9kYXRpb25zIHsjYWNjb21tb2RhdGlvbnN9CgpTb21ldGltZXMsIGxpZmUgZXZlbnRzIG9yIG1lZGljYWwvaGVhbHRoLXJlbGF0ZWQgaXNzdWVzIG1heSBpbXBhY3QgeW91ciBhYmlsaXR5IHRvIG1lZXQgc29tZSBvZiB0aGUgbGFiIGV4cGVjdGF0aW9ucy4KWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNlZWsgbWVkaWNhbC9wcm9mZXNzaW9uYWwgaGVscCBpZiBzdWNoIGlzc3VlcyBhcmlzZSwgZXZlbiBpZiB0aGUgYXBwb2ludG1lbnRzIG9jY3VyIGR1cmluZyB5b3VyIHJlZ3VsYXIgbGFiIGhvdXJzLgpJZiB0aGVyZSBhcmUgbGFiLXJlbGF0ZWQgYWNjb21tb2RhdGlvbnMgdGhhdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHlvdSwgcGxlYXNlIGxldCBtZSBrbm93IGFuZC9vciBjb250YWN0IHRoZSBVSSBTdHVkZW50IERpc2FiaWxpdHkgU2VydmljZXMgKGh0dHBzOi8vc2RzLnN0dWRlbnRsaWZlLnVpb3dhLmVkdSkuCkFueSBkZXZpYXRpb25zIGZyb20gdGhlIGxhYiBleHBlY3RhdGlvbnMgc2hvdWxkIGJlIGFwcHJvdmVkIGJ5IG1lIG9yIHNob3VsZCBjb2luY2lkZSB3aXRoIGRvY3VtZW50YXRpb24gZnJvbSBVSSBIdW1hbiBSZXNvdXJjZXMgb3IgU3R1ZGVudCBEaXNhYmlsaXR5IFNlcnZpY2VzIG91dGxpbmluZyBhbHRlcmF0aW9ucy4KSWYgeW91IGhhdmUgY29uY2VybnMgYWJvdXQgbWVldGluZyB5b3VyIHJlc3BvbnNpYmlsaXRpZXMgb3IgZXhwZWN0YXRpb25zLCBwbGVhc2UgdGFsayB0byBtZS4KCiMjIFdlbGwtYmVpbmcgeyN3ZWxsYmVpbmd9CgpMYXN0IGJ1dCBub3QgbGVhc3QsIHlvdXIgd2VsbC1iZWluZyBpcyB2ZXJ5IGltcG9ydGFudC4KSSB3ZW50IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgZ3JhZHVhdGUgc2Nob29sIGFuZCB1bmRlcnN0YW5kIGhvdyBzdHJlc3NmdWwgdGhpbmdzIGNhbiBiZSBmcm9tIG15IG93biBleHBlcmllbmNlcy4KSWYgeW91IGZlZWwgZG93biBmb3IgYW55IHJlYXNvbiwgcGxlYXNlIHRhbGsgdG8gbWUgb3IgYW55b25lIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHRhbGtpbmcgdG8uCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHNlZWsgcHJvZmVzc2lvbmFsIGhlbHDigJRpdCBpcyBub3QgYSBzaWduIG9mIHdlYWtuZXNzOyBpdCBpcyBhIHNpZ24gb2YgeW91IHRha2luZyBjYXJlIG9mIHlvdXJzZWxmLgoKUmVtZW1iZXIgdGhhdCBhbGwgb2YgdXMgYXJlICJuZXciIGF0IHZhcmlvdXMgcG9pbnRzIGluIG91ciBjYXJlZXJzLgpJbXBvc3RlciBzeW5kcm9tZSBpcyBub3JtYWw7IEkgZW5jb3VyYWdlIHlvdSB0byBhZG9wdCBhIGdyb3d0aCBtaW5kc2V0LgpZb3UgYXJlIG1lYW50IHRvIGJlIGhlcmUhCkZhaWx1cmUgaXMgY29tbW9uIGluIGFjYWRlbWlhLgpUYWtlIGEgbG9vayBhdCB0aGUgW0NWIG9mIEZhaWx1cmVzXShodHRwczovL3d3dy51bmktZ29ldHRpbmdlbi5kZS9kZS9kb2N1bWVudC9kb3dubG9hZC9iZWQyNzA2ZmQzNGUyOTgyMjAwNGRiZTI5Y2QwMGJiNS5wZGYvSm9oYW5uZXNfSGF1c2hvZmVyX0NWX29mX0ZhaWx1cmVzJTViMSU1ZC5wZGYpIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjLzZVRlItWkJWNCkuClBlcnNpc3RlbmNlIHBheXMgb2ZmLgpJIGhhdmUgZm91bmQgaXQgaGVscGZ1bCB0byBoYXZlIGEgWyJmZWVsZ29vZCIgZW1haWwgZm9sZGVyXShodHRwczovL2Jsb2dzLnNjaWVudGlmaWNhbWVyaWNhbi5jb20vZ3Vlc3QtYmxvZy90aGUtYXdlc29tZXN0LTcteWVhci1wb3N0ZG9jLW9yLWhvdy1pLWxlYXJuZWQtdG8tc3RvcC13b3JyeWluZy1hbmQtbG92ZS10aGUtdGVudXJlLXRyYWNrLWZhY3VsdHktbGlmZS8pIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0MzQ0ItMjVMVSkgdGhhdCBJIGNhbiByZWZlciBiYWNrIHRvIHdoZW4gdGhpbmdzIGFyZSBkaWZmaWN1bHQuCgpEbyBub3QgZm9yZ2V0IHRvIGxhdWdoIGFuZCBoYXZlIGZ1biEKR3JhZHVhdGUgc2Nob29sIGlzIGEgY2hhbGxlbmdpbmcgam9iIHdpdGggdmVyeSBoaWdoIGV4cGVjdGF0aW9ucywgYnV0IGl0IHNob3VsZCBhbHNvIGJlIGZ1bi4KWW91IGdldCB0byBzdHVkeSBzb21ldGhpbmcgdGhhdCBpcyBleGNpdGluZyB0byB5b3UgYW5kIGdldCBwYWlkIHRvIGRvIGl0IQpUbyBxdW90ZSBbTm9ybWFuIFJhbXNleSdzIGd1aWRlIGZvciBncmFkdWF0ZSBzdHVkZW50c10oaHR0cHM6Ly93d3cuY3MudHVmdHMuZWR1L35uci9zdHVkZW50cy9ndWlkZS5wZGYpIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjLzNXRlktU0gzTCksICJUbyBzdXN0YWluIHlvdXJzZWxmIHRocm91Z2ggZGlmZmljdWx0IHRpbWVzLCBmaW5kIHJlc2VhcmNoIHRoYXQgbWVhbnMgYSBsb3QgdG8geW91LgpTdWNjZXNzZnVsIHJlc2VhcmNoZXJzIGZpbmQgaW50ZXJlc3RpbmcgcHJvYmxlbXMgYW5kIGZhbGwgaW4gbG92ZSB3aXRoIHRoZW0uCkluIG9wZXJhdGlvbmFsIHRlcm1zLCBzb21lIEZyaWRheSBuaWdodHMgc2hvdWxkIGJlIHNwZW50IGhhdmluZyBmdW4gb3V0IGluIHRoZSB3b3JsZCwgYnV0IGlmIHlvdSBhcmVuJ3QgYWxzbyBzcGVuZGluZyBzb21lIEZyaWRheSBuaWdodHMgaGF2aW5nIGZ1biB3aXRoIHlvdXIgcmVzZWFyY2gsIHlvdSdyZSBub3QgZG9pbmcgdGhlIHJpZ2h0IHJlc2VhcmNoLiIKCiMjIEV4cGVjdGF0aW9ucyBmb3IgRXZlcnlvbmUgaW4gTGFiIHsjZXhwZWN0YXRpb25zRm9yRXZlcnlvbmV9CgpJbiBhZGRpdGlvbiB0byB0aGUgZXhwZWN0YXRpb25zIGRlc2NyaWJlZCBhYm92ZSBmb3IgZ3JhZHVhdGUgc3R1ZGVudHMsIHBsZWFzZSBhbHNvIHJlYWQgdGhlIFtleHBlY3RhdGlvbnMgZm9yIGV2ZXJ5b25lIGluIHRoZSBsYWJdKGV4cGVjdGF0aW9ucy1ldmVyeW9uZS5odG1sKS4KCiMgU2lnbmF0dXJlIHsjc2lnbmF0dXJlfQoKUGxlYXNlIGRvd25sb2FkLCBzaWduLCBhbmQgZW1haWwgdGhlIGJlbG93IGRvY3VtZW50IHRvIERyLiBQZXRlcnNlbiBwcmlvciB0byB5b3VyIGZpcnN0IGRheSBpbiBsYWIuCgo8ZW1iZWQgc3JjPSJGaWxlcy9zaWduYXR1cmVfcGFnZS5wZGYiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjYwMCI+CgojIEFwcGVuZGl4IHsjYXBwZW5kaXh9CgojIyBBcHByb3hpbWF0ZSBFeHBlY3RlZCBUaW1lbGluZXMgeyN0aW1lbGluZXN9CgojIyMgUmVzZWFyY2ggVGltZWxpbmUgeyN0aW1lbGluZS1yZXNlYXJjaH0KCnwgKipTZW1lc3RlcioqICAgfCAqKlJlc2VhcmNoIFRhc2sgR29hbChzKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFllYXIgMTogRmFsbCAgIHwgRm9ybSBSZXNlYXJjaCBBZHZpc29yeSBDb21taXR0ZWUgKFJBQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBTZWxlY3QgdG9waWMgZm9yIDFzdC15ZWFyIHByb2plY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJhY2tncm91bmQgcmVhZGluZ3Mgb24gdG9waWMgYW5kIHF1YW50aXRhdGl2ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gd3JpdGluZyBsaXRlcmF0dXJlIHJldmlldyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IENvbXBsZXRlIGxpdGVyYXR1cmUgcmV2aWV3IGZvciAxc3QgeWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gbWV0aG9kcyBhbmQgZGF0YSBhbmFseXNpcyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IFN1bW1lciB8IENvbXBsZXRlIGFuYWx5c2lzIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUtdXAgcmVzdWx0cyBhbmQgZGlzY3Vzc2lvbiBzZWN0aW9uIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCAxc3QgeWVhciBwcm9qZWN0IHdyaXR0ZW4gZG9jdW1lbnQgZHVlIChNb25kYXkgYWZ0ZXIgVGhhbmtzZ2l2aW5nKSAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJBQyBNZWV0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3ByaW5nIHwgMXN0LXllYXIgcHJvamVjdCBwcmVzZW50YXRpb24gdG8gZGVwYXJ0bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBTdWJtaXQgMXN0LXllYXIgcHJvamVjdCBmb3IgcHVibGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJlZ2luIGZvcm11bGF0aW5nIGNvbXByZWhlbnNpdmUgcGFwZXIgdG9waWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUkFDIE1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBGb3JtIGNvbXByZWhlbnNpdmUgZXhhbSBjb21taXR0ZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFN1bW1lciB8IEZsZXNoIG91dCBjb21wcmVoZW5zaXZlIHBhcGVyIHRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUgY29tcHJlaGVuc2l2ZSBwYXBlciBwcm9wb3NhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBGYWxsICAgfCBDb21wcmVoZW5zaXZlIHBhcGVyIHByb3Bvc2FsIG1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdyaXRlIGNvbXByZWhlbnNpdmUgcGFwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3ByaW5nIHwgVHVybiBpbiBjb21wcmVoZW5zaXZlIHBhcGVyIGRyYWZ0IDEgKHNlY29uZCBNb25kYXkgaW4gRmVicnVhcnkpICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZWNlaXZlIGZlZWRiYWNrIGZyb20gY29tbWl0dGVlICgzIHdlZWsgdHVybi1hcm91bmQpICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJldmlzZSBhbmQgcmVzdWJtaXQgY29tcHJlaGVuc2l2ZSBwYXBlciAoTW9uZGF5IGJlZm9yZSBsYXN0IHdlZWsgb2YgY2xhc3NlcykgfAp8ICAgICAgICAgICAgICAgIHwgRmluYWwgY29tcHJlaGVuc2l2ZSBleGFtIGNvbW1pdHRlZSBtZWV0aW5nIHdpdGggb3JhbCBkZWZlbnNlICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBCZWdpbiB3b3JrIG9uIGRpc3NlcnRhdGlvbiBwcm9zcGVjdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IEZhbGwgICB8IEZvcm0gZGlzc2VydGF0aW9uIGNvbW1pdHRlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQ29udGludWUgd3JpdGluZyBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTcHJpbmcgfCBDb21wbGV0ZSBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IERlZmVuZCBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAoYnkgc3ByaW5nIGJyZWFrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gZGlzc2VydGF0aW9uIHJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTdW1tZXIgfCBEaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IEZhbGwgICB8IERpc3NlcnRhdGlvbiByZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXBwbHkgZm9yIGludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBEaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEludGVydmlldyBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgRGVmZW5kIGRpc3NlcnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2OiBTdW1tZXIgfCBbQ2xpbmljYWwgc3R1ZGVudHM6IEJlZ2luIEludGVybnNoaXBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDY6IEZhbGwgICB8IFtDbGluaWNhbCBzdHVkZW50czogSW50ZXJuc2hpcF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNjogU3ByaW5nIHwgW0NsaW5pY2FsIHN0dWRlbnRzOiBJbnRlcm5zaGlwXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA3OiBTdW1tZXIgfCBHcmFkdWF0ZSB3aXRoIFBoLkQuISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKClRoZXNlIGFyZSBndWlkZXBvc3RzIHRvd2FyZCBjb21wbGV0aW5nIHByb2dyYW0gcmVxdWlyZW1lbnRzIHdpdGhpbiBhIDUteWVhciB0aW1lZnJhbWUuClRoZSB5ZWFyIG9mIGNsaW5pY2FsIGludGVybnNoaXAgaXMgb25seSBmb3Igc3R1ZGVudHMgaW4gdGhlIENsaW5pY2FsIFNjaWVuY2UgYXJlYS4KQXMgd2UgaGF2ZSBkaXNjdXNzZWQsIG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgeW91IHdpbGwgYmUgZW5nYWdlZCBpbiByZXNlYXJjaCBhY3Rpdml0aWVzICpiZXlvbmQqIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgoKIyMjIENvdXJzZXdvcmsgVGltZWxpbmUgeyN0aW1lbGluZS1jb3Vyc2V3b3JrfQoKfCAqKlNlbWVzdGVyKiogICB8ICoqQ291cnNld29yayBHb2FsKHMpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFllYXIgMTogRmFsbCAgIHwgT3JpZW50YXRpb24gdG8gQ2xpbmljYWwgUmVzZWFyY2ggKHdpdGggRENUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFF1YW50aXRhdGl2ZSBNZXRob2RzIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGl2ZSBQc3ljaG9wYXRob2xvZ3kgT1IgUHN5Y2hvbG9naWNhbCBUaGVyYXBpZXMgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50cm9kdWN0b3J5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAxOiBTcHJpbmcgfCBRdWFudGl0YXRpdmUgQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUHJpbmNpcGxlcyBvZiBQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJyZWFkdGggQ291cnNlIChIaXN0b3J5LCBDb2duaXRpdmUsIFNvY2lhbCwgQmlvbG9naWNhbCwgRGV2ZWxvcG1lbnRhbCkgICB8CnwgICAgICAgICAgICAgICAgfCBBc3Nlc3NtZW50IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IFN1bW1lciB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCBEZXNjcmlwdGl2ZSBQc3ljaG9wYXRob2xvZ3kgT1IgUHN5Y2hvbG9naWNhbCBUaGVyYXBpZXMgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQnJlYWR0aCBDb3Vyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3ByaW5nIHwgQnJlYWR0aC9CQklQIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJyZWFkdGggQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFN1bW1lciB8IFRoZXJhcHkgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBGYWxsICAgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBTcHJpbmcgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBUaGVyYXB5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogRmFsbCAgIHwgQnJlYWR0aCBDb3Vyc2UgKGlmIG5lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogU3ByaW5nIHwgQnJlYWR0aCBDb3Vyc2UgKGlmIG5lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3VtbWVyIHwgVGhlcmFweSBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IEZhbGwgICB8IERpc3NlcnRhdGlvbiBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5L0V4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3ByaW5nIHwgRGlzc2VydGF0aW9uIFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkvRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2ICAgICAgICAgfCBJbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKKipDbGluaWNhbCBTY2llbmNlIEFyZWEgQ291cnNlIFJlcXVpcmVtZW50cyoqCgotIDMgQ2xpbmljYWwgQ29yZSBDb3Vyc2VzIChQc3ljaG9wYXRob2xvZ3ksIFRoZXJhcGllcywgQXNzZXNzbWVudCkKLSAyIFF1YW50aXRhdGl2ZSBDb3Vyc2VzCi0gNCBCcmVhZHRoIENvdXJzZXMgKEJpb2xvZ2ljYWwsIENvZ25pdGl2ZSwgRGV2ZWxvcG1lbnRhbCwgYW5kIFNvY2lhbCBCYXNlcyBvZiBCZWhhdmlvcikKLSBIaXN0b3J5IGFuZCBTeXN0ZW1zCi0gXCpCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHJlcXVpcmVkIGNvdXJzZSAoaWYgeW91IGFyZSBwYXJ0IG9mIEJCSVApCgpOb3RlOiBCcmVhZHRoIGNvdXJzZXMgY2FuIGJlIGNvbXBsZXRlZCB3aXRoIGRpcmVjdGVkIHJlYWRpbmdzLgoKIyMjIENsaW5pY2FsIFdvcmsgVGltZWxpbmUgeyN0aW1lbGluZS1jbGluaWNhbH0KCnwgKipTZW1lc3RlcioqICAgfCAqKkNsaW5pY2FsIFRhc2sgR29hbChzKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgWWVhciAxOiBGYWxsICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCBhZHZhbmNlZCBncmFkdWF0ZSBzdHVkZW50cyBvbiBhc3Nlc3NtZW50IHNraWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEludGVydmlld2luZyBwcmFjdGljdW0gd2l0aCBDbGluaWMgRGlyZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIGFkdmFuY2VkIGdyYWR1YXRlIHN0dWRlbnRzIG9uIGFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gY29tcGxldGluZyBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eSBhc3Nlc3NtZW50cyBpbiBjbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50ZXJ2aWV3aW5nIHByYWN0aWN1bSB3aXRoIENsaW5pYyBEaXJlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3VtbWVyIHwgQ29udGludWUgaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHkgYXNzZXNzbWVudHMsIGJlZ2luIFNEUyBhc3Nlc3NtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogRmFsbCAgIHwgQ29tcGxldGUgU0RTIGFuZCBESFMgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgMm5kLXllYXIgc2VtaW5hciB3aXRoIENsaW5pYyBEaXJlY3RvciAoTW90aXZhdGlvbmFsIEludGVydmlld2luZywgQmVoYXZpb3JhbCBBY3RpdmF0aW9uKSB8CnwgWWVhciAyOiBTcHJpbmcgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiB0YWtpbmcgdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdlZWtseSAybmQteWVhciBzZW1pbmFyIHdpdGggQ2xpbmljIERpcmVjdG9yIChNb3RpdmF0aW9uYWwgSW50ZXJ2aWV3aW5nLCBCZWhhdmlvcmFsIEFjdGl2YXRpb24pIHwKfCBZZWFyIDM6IFN1bW1lciB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IEZhbGwgICB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV2Vla2x5IDNyZC15ZWFyIHNlbWluYXIgKEV4cG9zdXJlIFRoZXJhcHkgYW5kIG90aGVyIGFwcHJvYWNoZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3ByaW5nIHwgQ29tcGxldGUgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIHRoZXJhcHkgY2FzZXMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgM3JkLXllYXIgc2VtaW5hciAoRXhwb3N1cmUgVGhlcmFweSBhbmQgb3RoZXIgYXBwcm9hY2hlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXb3JrIHdpdGggdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBGYWxsICAgfCBTZWFzaG9yZSBDbGluaWMgd29yayBhbmQvb3IgRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFNwcmluZyB8IFNlYXNob3JlIENsaW5pYyB3b3JrIGFuZC9vciBFeHRlcm5hbCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3VtbWVyIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogRmFsbCAgIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBcHBseSBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBJbnRlcnZpZXcgZm9yIEludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2ICAgICAgICAgfCBBUEEtQWNjcmVkaXRlZCBJbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgpbXjFdOiBNYW55IG9mIHRoZSBsYWIgZXhwZWN0YXRpb25zIHdlcmUgY29iYmxlZCB0b2dldGhlciBmcm9tIGEgdmFyaWV0eSBvZiBvdGhlciBsYWJzIGFuZCBhcmUgbm90IHVuaXF1ZSB0byB0aGlzIGxhYi4KICBMaWtld2lzZSwgc29tZSBvZiB0aGUgbGFuZ3VhZ2UgdXNlZCBpbiB0aGlzIGRvY3VtZW50IHdhcyBib3Jyb3dlZCBmcm9tIG90aGVyIHNvdXJjZXMuCiAgClteMl06IEFzayBtZSB0byBnaXZlIHlvdSBhY2Nlc3MuCiAgSXQgaXMgZWFzaWVzdCB0byBzaGFyZSB0aGUgW0dvb2dsZSBEcml2ZSBmb2xkZXIgb2YgcHJpbWVyIGFydGljbGVzXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvdS8wL2ZvbGRlcnMvMVhsUFczN0FEZm42aUNDdnB0M3M2VndXeE9NS2tqSk51KSB3aXRoIHlvdXIgR29vZ2xlIGFjY291bnQuCgpbXjNdOiBZb3UgbmVlZCB0byBiZSBvbiB0aGUgVlBOIHRvIGFjY2Vzcy4KICBZb3UgbWF5IG5lZWQgdG8gY29udGFjdCB0aGUgY2xpbmljIGRpcmVjdG9yIHRvIGdldCBhY2Nlc3MgdG8gdGhlIENsaW5pYyBEcml2ZS4K



Developmental Psychopathology Lab